Du har säkert hört talas om PCF8574 IC, ett chip som kan köpas separat eller redan monterat på en modul som många andra Elektroniska komponenter för att underlätta din integration med ditt Arduino-kort. I det här fallet är det en förlängare av in- och utgångar för I2C-bussen.
Du kanske tror att Arduino redan har sin egen integrerad I2C-buss, och det är sant. Men PCF8574 kan hjälpa till att förlänga den bussen utanför gränserna för ditt utvecklingskort, vilket kan vara till stor hjälp för vissa tillverkare som behöver mer än bara vad Arduino tillhandahåller.
Vad är I2C-bussen?
Namnet I2C kommer från Interintegrerad krets eller interintegrerade kretsar. Version 1.0 skapades 1992 av Philips. Sedan skulle en andra 2.1 komma 2000 och idag har den blivit en standard (vid 100 kbit / s, även om den tillåter upp till 3.4 Mbit / s) när patentet löpte ut 2006 och kan användas fritt.
För närvarande används den ofta i branschen för kommunikation, och också mycket uppskattade av tillverkare för deras projekt för att kommunicera olika mikrokontroller och kringutrustning integrerade i en IC.
El I2C är en buss välkänd från seriekommunikation. Den använder ett synkron kommunikationsprotokoll med endast två kanaler (det finns en tredje, men den är kopplad till referens eller GND), i själva verket är den också känd som TWI (Two Wire Interface):
- En för klockan (SCL).
- Övrigt för data (SDA).
Det innebär att herre och slav de skickar data över samma kabel eller spår, som styrs av den första som genererar klocksignalen. Var och en av de perifera enheterna som är anslutna till I2C-bussen kommer att ha en unik adress tilldelad för att styra sändningarna. Men det är inte nödvändigt att mästaren alltid är densamma (multi-master), det är alltid han som initierar överföringen.
Som jag redan förklarade i artikeln om Arduino I2C Jag refererade tidigare, varje kort har dessa I2C-anslutningar på olika platser. Det är något du måste tänka på för att kunna använda det ordentligt i varje plattversion:
- Arduino UNO: SDA finns i A4 och SCK i A5
- ArduinoNano: samma som föregående.
- Arduino MiniPro: samma.
- arduino mega: SDA är på stift 20 och SCK på 21.
- Mer information om tallrikar.
Du vet redan att du enkelt kan använda I2C för dina skisser, eftersom Wire.h-biblioteket med olika funktioner för denna seriekommunikation:
- Börja (): starta Wire-biblioteket och ange om det är master eller slav
- förfrågan från (): används av mastern för att begära data från slaven.
- beginTransmission (): starta överföring med slav.
- endTransmission (): slutöverföring.
- skriva()- Skriv data från en slav som svar på en förfrågan från mastern, eller så kan du köa en masters överföring.
- tillgängligt (): returnerar antalet byte som ska läsas.
- läsa(): läs en byte som överförs från en slav till en mästare eller vice versa.
- onReceive (): Anropar en funktion när en slav tar emot en sändning från en mästare.
- på förfrågan (): Anropar en funktion när en slav begär data från en master.
till mer om Arduino programmering och funktioner kan du ladda ner vår PDF-handledning.
Vad är PCF8574?
PCF8574 är en I2C-buss digitala in- och utgångar (I / O) expander. Den kan tillverkas av olika tillverkare, förutom att den finns tillgänglig i IC och moduler. I vilket fall som helst är det mycket praktiskt att ansluta det till ditt Arduino-kort och ha kapacitet att styra fler enheter än moderkortet tillåter.
El PCF8574 pinout Det är enkelt, eftersom det bara innehåller 8 tallar kvasiriktad (P0-P7 där chipsen för att kommunicera är anslutna), och å andra sidan har du SDA och SCL som du måste ansluta till Arduino-kortet, liksom VCC och GND för att också driva modulen. Och glöm inte de tre adressstiften A0, A1, A2 för att välja vilken av enheterna kommunikationen riktar sig till ...
Det äger andra funktioner att du borde veta:
- Dess anslutningar, som en öppen dränering, kan vara används både som in- och utgångar.
- La toppström den är 25mA när den fungerar som en utgång (sjunker, när ström flyter mot PCF8574) och 300 µA (källa, ström strömmar från PCF8574).
- La spänning strömförsörjningen är 2.5 och 6v. Standby-förbrukningen är mycket låg, endast 10 µA.
- Alla utgångar har spärrar, för att upprätthålla staten utan behov av externa åtgärder. Du behöver bara agera när du vill ändra tillstånd.
- Du kan få 8 möjliga vägbeskrivningar, det vill säga upp till 8 enheter för att kommunicera med eller använda 8 moduler för att utöka den till 64 enheter. Adresserna (stift A0, A1, A2) kommer att vara:
- 000: adress 0x20
- 001: adress 0x21
- 010: adress 0x22
- 011: adress 0x23
- 100: adress 0x24
- 101: adress 0x25
- 110: adress 0x26
- 111: adress 0x27
- Medger avbrott (INT) med en speciell linje för att upptäcka data utan att ständigt övervaka.
Integration med Arduino
Anslutningen med Arduino är väldigt enkel, du behöver bara ansluta Vcc med 5v-stiftet på Arduino-kortet och GND med GND of Arduino. Å andra sidan kan stiften på PCF8574 SDA och SCL-modulen vara anslut med stift 14 (A5 SCL) och 15 (A4 SDA). Bara med det skulle det börja fungera, självklart kan du använda Px för att ansluta de enheter du vill kommunicera ...
Då skulle det bara saknas börja med en exempelskiss i Arduino IDE. Du kan göra det utan att använda ett extra bibliotek som ...
#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); } }
Som ingång:
#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); }
Eller också använda bibliotek, till exempel PCF8574 som du kan ladda ner här och använd kod som liknar detta från själva exemplet som följer med detta bibliotek:
#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() { }