PCF8574: Az I2C I / O bővítőiről az Arduino számára

PCF8574 TI CHIP

Biztosan hallott már a PCF8574 IC, külön megvásárolható vagy már modulra szerelhető chip, mint sok más Elektromos alkatrészek hogy megkönnyítse az integrálódást az Arduino táblával. Ebben az esetben a bemenetek és kimenetek kiterjesztése az I2C busz.

Gondolhatja, hogy az Arduino-nak már megvan a sajátja integrált I2C busz, és ez igaz. De a PCF8574 segíthet a busz kiterjesztésében a fejlesztői tábla határain, ami nagy segítség lehet néhány gyártó számára, akiknek nemcsak az Arduino által nyújtott szolgáltatásokra van szükségük.

Mi az I2C busz?

Arduino UNO millis funkciók

Az I2C név származik Integrált áramkör vagy inter-integrált áramkörök. 1.0-s verzióját 1992-ben hozta létre a Philips. Aztán 2.1-ben jön egy második 2000, és mára a szabadalom 100-os lejártával szabványossá vált (3.4 kbit / s sebességgel, bár maximum 2006 Mbit / s sebességet tesz lehetővé), és szabadon felhasználható.

Jelenleg széles körben használják az iparban a kommunikációhoz, és a gyártók is nagyra értékelik a különböző mikrovezérlők és perifériák kommunikációját egy IC-be integrált projektjeik miatt.

El Az I2C egy busz jól ismert soros kommunikáció. Csak 2 csatornás szinkron kommunikációs protokollt használ (van egy harmadik, de referenciához vagy GND-hez van kapcsolva), valójában TWI (Two Wire Interface) néven is ismert:

  • Az egyik az órához (SCL).
  • Egyéb adatok (SDA).
Mindkettő nyitott lefolyású CMOS-csatlakozás, és felhúzási ellenállást igényel. Továbbá, ha az egyik eszköz 0-t, egy másik pedig 1-et továbbít, akkor problémák merülhetnek fel, ezért a vonalat mindig 1-re (magas szint) és az eszközök mindig 0-ra (alacsony szint) állítják.

Ez azt jelenti, hogy a mester és rabszolga ugyanazon a kábelen vagy sávon keresztül küldnek adatokat, amelyet az első vezérel, amely az órajelet generálja. Az I2C buszhoz csatlakoztatott perifériák mindegyikének egyedi címet kell rendelnie az adások irányításához. De nem feltétlenül szükséges, hogy a tanár mindig ugyanaz legyen (több tanár), mindig ő kezdeményezi az átadást.

Amint azt a cikkben már kifejtettem Arduino I2C Korábban utaltam rá, hogy mindegyik táblán különböző helyeken vannak ezek az I2C kapcsolatok. Ezt mindenképpen szem előtt kell tartania, hogy megfelelően tudja használni a tábla minden változatában:

  • Arduino UNO: Az SDA A4-es, az SCK pedig A5-ös
  • ArduinoNano: ugyanaz, mint az előző.
  • Arduino MiniPro: azonos.
  • Mega Arduino: Az SDA a 20. és az SCK a 21. tűn van.
  • További információ a lemezekről.

Már tudja, hogy az I2C-t egyszerűen használhatja vázlataihoz, mivel a Wire.h könyvtár különféle funkciókkal a soros kommunikációhoz:

  • kezdődik (): indítsa el a Wire könyvtárat, és adja meg, hogy master vagy slave
  • requestFrom (): a mester arra használja, hogy adatokat kérjen a rabszolgától.
  • beginTransmission (): indítsa el az adást slave-lel.
  • endTransmission (): a sebességváltó befejezése.
  • ír()- Írjon adatokat egy rabszolgától a master kérésére, vagy sorba állíthatja a master adását.
  • elérhető (): visszaadja az olvasandó bájtok számát.
  • olvas(): beolvassa a rabszolgától a masterhez továbbított bájtot vagy fordítva.
  • onReceive (): Meghív egy funkciót, amikor a rabszolga kap egy adást egy mastertől.
  • kérésre (): Meghív egy függvényt, amikor egy szolga adatokat kér a mastertől.

hogy több információ az Arduino programozásáról és funkcióiról letöltheti PDF bemutató.

Mi az a PCF8574?

PCF8574 modul

A PCF8574 a I2C busz digitális bemenetek és kimenetek (I / O) bővítő. Különböző gyártók gyárthatják, amellett, hogy IC-kben és modulokban elérhetők. Mindenesetre nagyon praktikus csatlakoztatni az Arduino kártyához, és több eszköz vezérlésére van lehetőség, mint amennyit az alaplap megenged.

El PCF8574 tű egyszerű, mivel csak azt tartalmazza 8 fenyők kvázi irányú (P0-P7, ahol a kommunikálni kívánt chipek csatlakoznak), másrészt megvan az SDA és az SCL, amelyet az Arduino táblához kell csatlakoztatnia, valamint a VCC és a GND is a modul áramellátásához. És ne felejtsük el a három A0, A1, A2 címzési csapot, hogy kiválasszuk, melyik eszközhöz irányítja a kommunikációt ...

PCF8574 tű

Meg egyéb funkciók hogy tudnia kell:

  • Csatlakozásai, mivel nyitott lefolyók, lehetnek bemenetként és kimenetként egyaránt használható.
  • La csúcsáram 25mA, ha kimenetként működik (süllyed, amikor az áram a PCF8574 felé áramlik), és 300 µA (forrás, áram áramlik a PCF8574-ből).
  • La feszültség tápellátása 2.5 és 6v. A készenléti fogyasztás nagyon alacsony, csak 10 µA.
  • Minden kimenet reteszek vannak, az állam fenntartása külső cselekvések nélkül. Csak akkor kell cselekednie, ha meg akarja változtatni az állapotot.
  • 8-at kaphat lehetséges irányok, vagyis legfeljebb 8 eszköz kommunikálhat, vagy 8 modullal bővíthető 64 eszközig. A címek (A0, A1, A2 csapok) a következők lesznek:
    • 000: 0x20 cím
    • 001: 0x21 cím
    • 010: 0x22 cím
    • 011: 0x23 cím
    • 100: 0x24 cím
    • 101: 0x25 cím
    • 110: 0x26 cím
    • 111: 0x27 cím
  • Beismeri félbeszakítás (INT) egy speciális vonallal az adatok folyamatos megfigyelés nélküli felderítésére.

Integráció az Arduinóval

Az Arduino IDE képernyőképe

Az Arduino-val való kapcsolat nagyon egyszerű, csak össze kell kapcsolni a Vcc-t az Arduino kártya 5v-es tűjével, a GND-t pedig az Arduino GND-jével. Másrészt a PCF8574 SDA és SCL modul csapjai lehetnek csatlakozzon csapokkal 14 (A5 SCL) és 15 (A4 SDA). Csak ezzel kezdene működni, nyilvánvalóan a Px használatával csatlakoztathatja a kommunikálni kívánt eszközöket ...

Akkor csak hiányozna kezdje egy példa vázlattal az Arduino IDE-ben. Megteheti további könyvtár, például ...

#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);
   }
}

Inputként:

#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);
}

Vagy szintén használjon könyvtárakat, például a PCF8574, amelyet tud itt töltheti le és ehhez hasonló kódot használjon a példával együtt, amely ehhez a könyvtárhoz tartozik:

#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() 
{
}


Legyen Ön az első hozzászóló

Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.