Hai sicuramente sentito parlare del CI PCF8574, un chip che può essere acquistato separatamente o già montato su un modulo come tanti altri Componenti elettronici per facilitare la tua integrazione con la tua scheda Arduino. In questo caso, è un estensore degli ingressi e delle uscite per il bus I2C.
Potresti pensare che Arduino abbia già il suo bus I2C integrato, ed è vero. Ma il PCF8574 può aiutarti a estendere quel bus oltre i limiti della tua scheda di sviluppo, il che può essere di grande aiuto per alcuni produttori che hanno bisogno di qualcosa di più di ciò che è fornito da Arduino.
Cos'è il bus I2C?
Il nome I2C deriva da Circuito inter-integrato o circuiti interintegrati. La sua versione 1.0 è stata creata nel 1992 da Philips. Poi un secondo 2.1 sarebbe arrivato nel 2000 e oggi è diventato uno standard (a 100 kbit / s, anche se consente fino a 3.4 Mbit / s massimo) quando il brevetto è scaduto nel 2006 e può essere utilizzato liberamente.
Attualmente è ampiamente utilizzato nell'industria per la comunicazione, e anche molto apprezzati dai produttori per i loro progetti per comunicare diversi microcontrollori e periferiche integrate in un unico circuito integrato.
El I2C è un autobus ben noto dalla comunicazione seriale. Utilizza un protocollo di comunicazione sincrono con solo 2 canali (ce n'è un terzo, ma è accoppiato a riferimento o GND), infatti è noto anche come TWI (Two Wire Interface):
- Uno per l'orologio (SCL).
- Altro per dati (SDA).
Ciò implica che il file padrone e schiavo inviano i dati sullo stesso cavo o traccia, che è controllato dal primo che genera il segnale di clock. Ciascuna delle periferiche collegate al bus I2C avrà un indirizzo univoco assegnato, al fine di dirigere le trasmissioni. Ma non è necessario che l'insegnante sia sempre lo stesso (multi-insegnante), è sempre lui che avvia il trasferimento.
Come ho già spiegato nell'articolo su ArduinoI2C Ho fatto riferimento in precedenza, ogni scheda ha queste connessioni I2C in luoghi diversi. È qualcosa che devi tenere a mente per poterlo utilizzare correttamente in ogni versione del piatto:
- Arduino UNO: SDA è in A4 e SCK in A5
- Arduino Nano: lo stesso del precedente.
- Arduino MiniPro: stesso.
- Arduino Mega: SDA è sul pin 20 e SCK su 21.
- Maggiori informazioni sui piatti.
Sai già che puoi usare facilmente l'I2C per i tuoi schizzi, poiché il Libreria Wire.h con varie funzioni per questa comunicazione seriale:
- begin (): avvia la libreria Wire e specifica se è master o slave
- richiesta da (): utilizzato dal master per richiedere dati allo slave.
- beginTransmission (): avvia la trasmissione con lo slave.
- endTransmission (): fine trasmissione.
- write ()- Scrivere i dati da uno slave in risposta a una richiesta del master oppure è possibile mettere in coda la trasmissione di un master.
- a disposizione (): restituirà il numero di byte da leggere.
- read (): legge un byte trasmesso da uno slave a un master o viceversa.
- onReceive (): Richiama una funzione quando uno slave riceve una trasmissione da un master.
- su richiesta (): Chiama una funzione quando uno slave richiede dati da un master.
a ulteriori informazioni sulla programmazione e le funzioni di Arduino puoi scaricare il nostro Tutorial PDF.
Cos'è il PCF8574?
Il PCF8574 è un file Espansore ingressi e uscite digitali (I / O) bus I2C. Può essere prodotto da vari produttori, oltre ad averlo disponibile in circuiti integrati e moduli. In ogni caso, è molto pratico collegarlo alla tua scheda Arduino e avere la capacità di controllare più dispositivi di quanto la scheda madre consenta.
El Pinout PCF8574 È semplice, poiché include solo Pini 8 quasidirezionale (P0-P7 dove sono collegati i chip per comunicare), e d'altra parte hai SDA e SCL che devi collegare alla scheda Arduino, oltre a VCC e GND per alimentare anche il modulo. E non dimenticare i tre pin di indirizzamento A0, A1, A2 per scegliere a quale dei dispositivi indirizzare la comunicazione ...
Possiede Altre caratteristiche che dovresti sapere:
- Le sue connessioni, essendo uno scarico aperto, possono essere utilizzato sia come ingressi che come uscite.
- La corrente di picco è 25mA quando funge da uscita (sink, quando la corrente fluisce verso il PCF8574) e 300 µA (source, la corrente fluisce dal PCF8574).
- La tensione l'alimentazione è 2.5 e 6v. Il consumo in stand-by è molto contenuto, solo 10 µA.
- Tutte le partenze hanno chiavistelli, per mantenere lo stato senza la necessità di azioni esterne. Devi solo agire quando vuoi cambiare lo stato.
- Puoi ottenere 8 possibili indicazioni, ovvero, fino a 8 dispositivi con cui comunicare o utilizzando 8 moduli per espanderlo fino a 64 dispositivi. Gli indirizzi (pin A0, A1, A2) saranno:
- 000: indirizzo 0x20
- 001: indirizzo 0x21
- 010: indirizzo 0x22
- 011: indirizzo 0x23
- 100: indirizzo 0x24
- 101: indirizzo 0x25
- 110: indirizzo 0x26
- 111: indirizzo 0x27
- Ammette interruzione (INT) da una linea speciale per rilevare i dati senza un monitoraggio costante.
Integrazione con Arduino
La connessione con Arduino è molto semplice, devi solo collegare Vcc con il pin 5v della scheda Arduino e GND con GND di Arduino. D'altra parte, i pin del modulo PCF8574 SDA e SCL possono essere connettersi con i perni 14 (A5 SCL) e 15 (A4 SDA). Solo così comincerebbe a funzionare, ovviamente puoi usare il Px per connettere i dispositivi con cui vuoi comunicare ...
Allora mancherebbe solo inizia con uno schizzo di esempio in Arduino IDE. Puoi farlo senza utilizzare una libreria aggiuntiva come ...
#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); } }
Come 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); }
O anche usa le biblioteche, come il PCF8574 che puoi scaricare qui e usa un codice simile a questo dall'esempio stesso fornito con questa libreria:
#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() { }