Jūs tikrai girdėjote apie PCF8574 IC, lustą, kurį galima įsigyti atskirai arba jau pritvirtinti prie modulio, kaip ir daugelį kitų Elektroniniai komponentai kad būtų lengviau integruotis su „Arduino“ lenta. Šiuo atveju tai yra įėjimų ir išėjimų pratęsėjas I2C magistralę.
Galite pagalvoti, kad „Arduino“ jau turi savo integruota I2C magistralė, ir tai tiesa. Tačiau PCF8574 gali padėti išplėsti šį autobusą už jūsų kūrimo lentos ribų, o tai gali būti labai naudinga kai kuriems kūrėjams, kuriems reikia ne tik to, ką teikia „Arduino“.
Kas yra „I2C“ magistralė?
Pavadinimas I2C kilęs Tarpusavyje integruota grandinė arba tarpusavyje integruoti grandynai. Jo versiją 1.0 1992 m. Sukūrė „Philips“. Tada antrasis 2.1 pasirodys 2000 m., O šiandien jis tapo standartu (100 kbit / s greičiu, nors leidžia maksimaliai iki 3.4 Mbit / s), kai patento galiojimo laikas baigėsi 2006 m., Ir jis gali būti laisvai naudojamas.
Šiuo metu jis plačiai naudojamas pramonėje bendravimuiir taip pat labai vertinami kūrėjų už savo projektus, skirtus bendrauti su įvairiais mikrovaldikliais ir periferiniais įrenginiais, integruotais į vieną IC.
El I2C yra autobusas gerai žinomas nuoseklus ryšys. Jis naudoja sinchroninį ryšio protokolą, kuriame yra tik 2 kanalai (yra trečiasis, bet jis susietas su nuoroda arba GND), iš tikrųjų jis taip pat žinomas kaip TWI (dviejų laidų sąsaja):
- Vienas skirtas laikrodžiui (SCL).
- Kita duomenų (SDA).
Tai reiškia, kad šeimininkas ir vergas jie siunčia duomenis tuo pačiu kabeliu ar takeliu, kurį valdo pirmasis, kuris generuoja laikrodžio signalą. Kiekvienam iš I2C magistralės prijungtam periferiniam įrenginiui bus suteiktas unikalus adresas, kad būtų galima nukreipti transliacijas. Tačiau nebūtina, kad meistras visada būtų tas pats (daugiamederis), visada jis inicijuoja perkėlimą.
Kaip jau paaiškinau straipsnyje apie „Arduino I2C“ Aš minėjau anksčiau, kiekviena plokštė turi šias I2C jungtis skirtingose vietose. Tai turite nepamiršti, kad galėtumėte tinkamai naudoti kiekvienoje plokštės versijoje:
- Arduino UNO: SDA yra A4, o SCK - A5
- „Arduino Nano“: tas pats kaip ir ankstesnis.
- „Arduino Mini Pro“: tas pats.
- „Arduino Mega“: SDA yra ant kaiščio 20, o SCK - ant 21.
- Daugiau informacijos apie plokštes.
Jūs jau žinote, kad galite lengvai naudoti I2C savo eskizams, nes Wire.h biblioteka su įvairiomis šio nuoseklaus ryšio funkcijomis:
- pradėti (): paleiskite „Wire“ biblioteką ir nurodykite, ar ji yra pagrindinė, ar pavaldi
- requestFrom (): naudoja kapitonas, norėdamas paprašyti duomenų iš vergo.
- beginTransmission (): pradėti perduoti su vergu.
- endTransmission (): galinė transmisija.
- rašyti ()- Parašykite duomenis iš vergo, atsakydami į šeimininko prašymą, arba galite sudaryti eilę prie pagrindinio perdavimo
- galima (): grąžins perskaitytų baitų skaičių.
- skaityti (): perskaitykite baitą, perduotą iš vergo valdovui arba atvirkščiai.
- onReceive (): Iškviečia funkciją, kai vergas gauna perdavimą iš šeimininko.
- pageidaujant (): Iškviečia funkciją, kai vergas prašo duomenų iš pagrindinio.
į más información apie „Arduino“ programavimą ir funkcijas galite atsisiųsti mūsų PDF pamoka.
Kas yra PCF8574?
PCF8574 yra a „I2C“ magistralės skaitmeninių įėjimų ir išėjimų (įvesties / išvesties) plėtiklis. Jį gali gaminti įvairūs gamintojai, be to, kad jis yra prieinamas IC ir moduliuose. Bet kokiu atveju labai praktiška prijungti jį prie „Arduino“ plokštės ir turėti galimybę valdyti daugiau įrenginių, nei leidžia pagrindinė plokštė.
El PCF8574 kištukas Tai paprasta, nes ji apima tik 8 pušys kvaziakryptis (P0-P7, kur prijungtos lustai, per kuriuos reikia bendrauti), ir, kita vertus, turite SDA ir SCL, kuriuos turite prijungti prie „Arduino“ plokštės, taip pat VCC ir GND, kad galėtumėte maitinti modulį. Nepamirškite trijų adresinių kaiščių A0, A1, A2, kad pasirinktumėte, į kurį iš prietaisų yra nukreiptas ryšys ...
Priklauso kitos savybės kad turėtumėte žinoti:
- Jo jungtys, kaip atviras kanalizacija, gali būti naudojami ir kaip įėjimai, ir išėjimai.
- La piko srovė jis yra 25mA, kai jis veikia kaip išėjimas (kriauklė, kai srovė teka link PCF8574) ir 300 µA (šaltinis, srovė teka iš PCF8574).
- La įtampa maitinimas yra 2.5 ir 6v. Budėjimo režimu sunaudojama labai mažai, tik 10 µA.
- Visi išėjimai turėti skląsčius, išlaikyti valstybę nereikalaujant išorinių veiksmų. Elgtis reikia tik tada, kai norima pakeisti valstybę.
- Galite gauti 8 galimos kryptys, tai yra iki 8 įrenginių, skirtų bendrauti su 8 moduliais, arba naudojant 64 modulius, kad išplėstumėte iki 0 įrenginių. Adresai (kaiščiai A1, A2, AXNUMX) bus:
- 000: adresas 0x20
- 001: adresas 0x21
- 010: adresas 0x22
- 011: adresas 0x23
- 100: adresas 0x24
- 101: adresas 0x25
- 110: adresas 0x26
- 111: adresas 0x27
- Pripažįsta pertraukimas (INT) specialia linija duomenims aptikti be nuolatinio stebėjimo.
Integracija su „Arduino“
Ryšys su „Arduino“ yra labai paprastas, jums tereikia prijungti „Vcc“ su „Arduino“ plokštės 5v kaiščiu, o GND - su „Arduino“ GND. Kita vertus, PCF8574 SDA ir SCL modulio kaiščiai gali būti sujungti su kaiščiais 14 (A5 SCL) ir 15 (A4 SDA). Tik tuo atveju jis pradės veikti, be abejo, jūs galite naudoti Px ir prijungti įrenginius, su kuriais norite bendrauti ...
Tada jo tik trūktų pradėkite nuo eskizo pavyzdžio „Arduino IDE“. Tai galite padaryti nenaudodami papildomos bibliotekos, tokios kaip ...
#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); } }
Kaip įvestis:
#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); }
Arba taip pat naudotis bibliotekomis, pvz., PCF8574, kurį galite Atsisiųskite čia ir naudokite kodą, panašų į šį pavyzdį, pateiktą kartu su šia biblioteka:
#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() { }