PCF8574: Informazioni sull'espansore I / O I2C per Arduino

PCF8574 TI CHIP

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?

Arduino UNO funzioni millis

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).
Entrambi sono connessioni CMOS a drain aperto e richiedono resistori di pull-up. Inoltre, se un dispositivo trasmette uno 0 e un altro un 1, potrebbero esserci dei problemi, ecco perché la linea è sempre impostata su 1 (livello alto) e i dispositivi trasmettono sempre 0 (livello basso).

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?

Modulo 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 ...

Pinout PCF8574

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

Screenshot dell'IDE di 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() 
{
}


Puoi essere il primo a lasciare un commento

Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.