Te bê guman ji bihîstiye PCF8574 IC, Çîpek ku dikare ji hev cuda were kirîn an jî mîna gelekên din li modûlekê were siwarkirin Pêkhateyên elektronîkî ji bo ku entegrasyona xwe bi borda Arduino re hêsan bikin. Di vê rewşê de, ew dirêjkerê ketin û derketinan ji bo ye otobusa I2C.
Hûn dikarin bifikirin ku Arduino jixwe ya xwe heye bus I2C entegre, û ew rast e. Lê PCF8574 dikare bibe alîkar ku wê otobusê li derveyî sînorên desteya weya pêşkeftinê dirêj bike, ku dikare ji hin çêkerên ku ji bilî tiştê ku ji hêla Arduino ve tê hewce ye bêtir bibe alîkar.
Otobusa I2C çi ye?
Navê I2C ji tê Çerxa Hev-entegre an pêlên nav-entegre. Guhertoya wê 1.0 di 1992 de ji hêla Philips ve hate afirandin. Wê hingê 2.1-an duyemîn dê di 2000-an de were û îro ew bûye standard (bi 100 kbit / s, her çend ew dihêle heya 3.4 Mbit / s herî zêde) dema ku patent di 2006-an de xilas bû û dikare bi serbestî were bikar anîn.
Vêga ew di pîşesaziyê de pir tête bikar anîn ji bo danûstendinê, û her weha ji hêla çêkeran ve ji bo projeyên wan pir girîng têne pejirandin ku mîkrokontroller û perçeyên cihêreng ên di yek IC-ê de yekbûyî ragihînin.
El I2C otobusek e ji ragihandina rêzê baş tê zanîn. Ew protokola danûstendinê ya hevdemî bi tenê 2 kanalan bikar tîne (sêyemek heye, lê ew bi referansê an GND ve tê girêdan), bi rastî ew jî wekî TWI (Navbera Du Têl) tê zanîn:
- Yek ji bo demjimêrê (SCL).
- Ya din ji bo daneyê (SDA).
Ew tê wê wateyê ku xudan û xulam ew daneyan li ser heman kablo an rêçê dişînin, ku ji hêla yekem ve tê kontrol kirin ku nîşana demjimêrê çêdike. Her yek ji alavên devkî yên bi otobûsa I2C ve girêdayî dê navnîşanek bêhempa hebe, da ku veguhastinan rasterast bike. Lê ne hewce ye ku mamoste her dem yek be (pir-mamoste), her dem ew e ku veguhêz dest pê dike.
Wekî ku min berê di gotara li ser de diyar kir Arduino I2C Min berê behs kir, her panel li van deverên cihêreng van têkiliyên I2C hene. Ew tiştek e ku divê hûn di hişê xwe de bigirin ku hûn bikaribin wê di her guhertoya plakayê de bi rêkûpêk bikar bînin:
- Arduino UNO: SDA di A4 û SCK di A5 de ye
- ArduinoNano: eynî wekî berê.
- Arduino MiniPro: heman.
- Mega Arduino: SDA li pin 20 e û SCK jî li ser 21.
- Di derheqê lewheyan de bêtir agahdarî.
Hûn jixwe dizanin ku hûn dikarin ji bo pêşnumayên xwe I2C bi hêsanî bikar bînin, ji Wire.h pirtûkxane bi fonksiyonên cihêreng ên ji bo vê pêwendiya rêzê:
- destpêkirin (): pirtûkxaneya Wire dest pê bikin û diyar bikin ka ew serwer e an xulam e
- requestFrom (): ji hêla serwer ve tête bikar anîn da ku ji koleyê daneyê bixwaze.
- startTransmission (): bi kole dest bi veguhastinê bikin.
- endTransmission (): dawiya veguhastinê.
- nivîsîn()- Daneyên ji xulamê li bersiva daxwaziya axayê binivîsin, an jî hûn dikarin ji radestkirina axayekî re bibin dorê.
- berdest (): dê jimara baytên ku bixwîne vegerîne.
- xwendin(): bixwîne byteke ku ji kole ji axayê re hatî veguhastin an berevajî.
- onReceive (): Dema ku xulam ji masterê veguhastinek werdigire fonksiyonek bang dike.
- onRequest (): Dema ku xulamek daneyekê ji axayek bixwaze fonksiyonek bang dike.
para bêhtir agahî di derbarê bername û fonksiyonên Arduino de hûn dikarin ya me dakêşînin Tutorial PDF.
PCF8574 çi ye?
PCF8574 yek e I2C otobus ketin û derketinên dîjîtal (I / O) berfereh. Ew dikare ji hêla cûrbecûr cûrbecûr ve were çêkirin, ji bilî ku ew di IC û modûlan de heye. Di her rewşê de, ew pir pratîkî ye ku meriv wê bi tabloya xweya Arduino ve girêbide û xwedî kapasîteya kontrolkirina zêdetir alavên ji dêûbav dayikê rê dide.
El PCF8574 pinout hêsan e, ji ber ku tenê tê de ye 8 pines quasidirectional (P0-P7 ku çîpên ku pêwendiyê pê ve girêdayî ye), û ji aliyek din ve SDA û SCL-ya we heye ku divê hûn bi sermaseya Arduino ve, her weha VCC û GND ve girêdayî bibin ku hûn jî modulê jî hêz bikin. The sê pisîkên navnîşanê A0, A1, A2 ji bîr nekin ku hilbijêrin ji kîjan alavên pêwendiyê tête rêve kirin ...
Xwedan dide taybetmendiyên din ku divê hûn zanibin:
- Têkiliyên wê, hebek vekirî ye, dikare bibe hem wekî ketin û derketinê tê bikar anîn.
- La herika lûtkeyê ew 25mA ye dema ku ew wekî encamekê tevbigere (sink, dema ku heyî ber bi PCF8574 ve diçe) û 300 μA (jêder, heyî ji PCF8574 diherike).
- La zext dabînkirina hêzê 2.5 û 6v e. Vexwarina stand-by-ê pir kêm e, tenê 10 μA ye.
- Hemî encam leqebên wan hene, bêyî ku hewcedariya kiryarên derveyî hebe dewletê bidomînin. Tenê dema ku hûn dixwazin dewletê biguherînin divê hûn tevbigerin.
- Hûn dikarin 8 bistînin rêwerzên gengaz, ango, heya 8 cîhazên ku pê re têkiliyê datînin an 8 modûlan bikar tînin da ku wê heya 64 cîhazan berfireh bikin. Navnîşan (pîneyên A0, A1, A2) dê ev be:
- 000: navnîşan 0x20
- 001: navnîşan 0x21
- 010: navnîşan 0x22
- 011: navnîşan 0x23
- 100: navnîşan 0x24
- 101: navnîşan 0x25
- 110: navnîşan 0x26
- 111: navnîşan 0x27
- Qebûl dike qutkirin (INT) ji hêla rêzikek taybetî ve bêyî ku bi domdarî çavdêriyê bike, daneyê destnîşan dike.
Integration bi Arduino
Têkiliya bi Arduino re pir hêsan e, hûn tenê hewce ne ku Vcc bi pin 5v ya tîrêja Arduino ve girêdin, û GND bi GND ya Arduino re. Li aliyek din, pîneyên module PCF8574 SDA û SCL dikarin bibin bi pîneyan ve girêbidin 14 (A5 SCL) û 15 (A4 SDA). Tenê bi wê re ew ê dest bi kar bike, eşkere ye ku hûn dikarin Px bikar bînin da ku alavên ku hûn dixwazin pêwendî bidin girêdin ...
Wê hingê ew ê tenê winda bibe bi xêzikek mînakî dest pê bikin li Arduino IDE. Hûn dikarin wê bikar bînin bêyî ku pirtûkxaneyek din wekî ...
#include <Wire.h> const int address = 0x38; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { for (short channel = 0; channel < 8; channel++) { // Escribir dato en cada uno de los 8 canales Wire.beginTransmission(address); Wire.write(~(1 << channel)); Wire.endTransmission(); // Lee dato del canal delay(500); } }
Wekî input:
#include <Wire.h> const int address = 0x38; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { short channel = 1; byte value = 0; // Leer el dato del canal Wire.requestFrom(pcfAddress, 1 << channel); if (Wire.available()) { value = Wire.read(); } Wire.endTransmission(); // Mostrar el valor leido por el monitor serie Serial.println(value); }
An jî pirtûkxaneyan bikar bînin, wekî PCF8574 ku hûn dikarin vir barkirin û ji mînaka ku bi vê pirtûkxanê re tê de kodek dişibihe vê bikar bînin:
#include <Wire.h> #include "PCF8574.h" PCF8574 expander; void setup() { Serial.begin(9600); expander.begin(0x20); /* Setup some PCF8574 pins for demo */ expander.pinMode(0, OUTPUT); expander.pinMode(1, OUTPUT); expander.pinMode(2, OUTPUT); expander.pinMode(3, INPUT_PULLUP); /* Blink hardware LED for debug */ digitalWrite(13, HIGH); /* Toggle PCF8574 output 0 for demo */ expander.toggle(); /* Blink hardware LED for debug */ digitalWrite(13, LOW); } void loop() { }
Beşa yekem be ku şîrove bike