PCF8574: O I2C I / O Expander pre Arduino

PCF8574 TI CHIP

Určite ste už počuli o PCF8574 IC, čip, ktorý je možné kúpiť samostatne alebo už namontovaný na module ako mnoho iných Elektronické komponenty aby ste uľahčili svoju integráciu s doskou Arduino. V tomto prípade ide o rozširovač vstupov a výstupov pre autobus I2C.

Možno si myslíte, že Arduino už má svoje vlastné integrovaná zbernica I2C, a je to pravda. Ale PCF8574 môže pomôcť rozšíriť túto zbernicu za hranice vašej vývojovej dosky, čo môže byť veľkou pomocou pre niektorých tvorcov, ktorí potrebujú nielen to, čo poskytuje Arduino.

Čo je autobus I2C?

Arduino UNO millis funkcie

Názov I2C pochádza z Medziintegrovaný obvod alebo medziintegrované obvody. Jeho verzia 1.0 bola vytvorená v roku 1992 spoločnosťou Philips. V roku 2.1 by potom prišla druhá 2000 a dnes sa po vypršaní platnosti patentu v roku 100 stala štandardom (pri 3.4 kbit / s, aj keď umožňuje maximálnu rýchlosť až 2006 Mbit / s) a dá sa voľne používať.

V súčasnosti je široko používaný v priemysle pre komunikáciu, a tiež si ich tvorcovia veľmi cenia za svoje projekty zamerané na komunikáciu rôznych mikrokontrolérov a periférií integrovaných do jedného integrovaného obvodu.

El I2C je autobus dobre známe zo sériovej komunikácie. Používa synchrónny komunikačný protokol iba s 2 kanálmi (existuje tretí, ale je spojený s referenčným alebo GND), v skutočnosti je tiež známy ako TWI (dvojvodičové rozhranie):

  • Jeden pre hodiny (SCL).
  • Iné pre údaje (SDA).
Obidve sú pripojenia CMOS s otvoreným odtokom a vyžadujú pull-up rezistory. Tiež, ak jedno zariadenie vysiela 0 a druhé 1, môžu nastať problémy, preto je linka vždy nastavená na 1 (vysoká úroveň) a zariadenia vždy vysielajú 0 (nízka úroveň).

To znamená, že pán a otrok posielajú dáta cez ten istý kábel alebo stopu, ktorá je riadená prvým, ktorý generuje hodinový signál. Každé z periférnych zariadení pripojených na zbernicu I2C bude mať priradenú jedinečnú adresu na smerovanie prenosov. Nie je ale potrebné, aby bol pán vždy ten istý (multi-pán), vždy je to on, kto iniciuje prevod.

Ako som už vysvetlil v článku na Arduino I2C Už som spomínal vyššie, každá doska má tieto I2C pripojenia na rôznych miestach. Musíte mať na pamäti, aby ste ho mohli správne používať v každej verzii taniera:

  • Arduino UNO: SDA je v A4 a SCK v A5
  • ArduinoNano: rovnaké ako predchádzajúce.
  • Arduino MiniPro: rovnaké.
  • Mega Arduino: SDA je na kolíku 20 a SCK na 21.
  • Viac informácií o tanieroch.

Už viete, že I2C môžete pre svoje skice ľahko použiť, pretože: Knižnica Wire.h s rôznymi funkciami pre túto sériovú komunikáciu:

  • začať (): spustite knižnicu Wire a zadajte, či je to master alebo slave
  • requestFrom (): používa ho hlavný server na vyžiadanie údajov od podradeného zariadenia.
  • beginTransmission (): spustenie prenosu s podriadeným.
  • endTransmission (): koncový prevod.
  • napíš ()- Napíšte údaje z podriadeného zariadenia ako odpoveď na požiadavku od hlavného zariadenia, alebo môžete zaradiť prenos hlavného zariadenia do frontu.
  • k dispozícii (): vráti počet bajtov, ktoré sa majú načítať.
  • čítať(): načítanie bajtu prenášaného z podriadeného zariadenia do nadradenej jednotky a naopak.
  • onReceive (): Zavolá funkciu, keď podriadený prijme prenos od nadradeného.
  • na požiadanie (): Zavolá funkciu, keď otrok požaduje dáta od nadradeného.

na viac informácií o programovaní Arduino a funkciách si môžete stiahnuť naše PDF návod.

Čo je to PCF8574?

Modul PCF8574

PCF8574 je a Digitálne vstupy a výstupy (I / O) zbernice I2C. Môžu ho vyrábať rôzni výrobcovia, okrem toho, že sú dostupné v integrovaných obvodoch a moduloch. V každom prípade je veľmi praktické pripojiť ho k vašej doske Arduino a mať kapacitu na ovládanie viac zariadení, ako umožňuje základná doska.

El PCF8574 pinout Je to jednoduché, pretože to iba obsahuje 8 borovice kvázi smerový (P0-P7, kde sú pripojené čipy na komunikáciu), a na druhej strane máte SDA a SCL, ktoré musíte pripojiť k doske Arduino, rovnako ako VCC a GND, ktoré tiež napájajú modul. A nezabudnite na tri adresovacie piny A0, A1, A2, aby ste si vybrali, na ktoré zo zariadení je komunikácia smerovaná ...

Vývod PCF8574

Ďalšie funkcie že by ste mali vedieť:

  • Jeho prípojky, ktoré sú otvoreným odtokom, môžu byť použité ako vstupy aj výstupy.
  • La špičkový prúd je to 25 mA, keď funguje ako výstup (jímka, keď prúd prúdi k PCF8574) a 300 µA (zdroj, prúd prúdi z PCF8574).
  • La napätie napájanie je 2.5 a 6v. Pohotovostná spotreba je veľmi nízka, iba 10 µA.
  • Všetky výstupy mať západky, na udržanie stavu bez potreby vonkajších opatrení. Musíte konať, iba keď chcete zmeniť stav.
  • Môžete získať 8 možné smery, to znamená až 8 zariadení na komunikáciu s alebo pomocou 8 modulov na jeho rozšírenie na 64 zariadení. Adresy (piny A0, A1, A2) budú:
    • 000: adresa 0x20
    • 001: adresa 0x21
    • 010: adresa 0x22
    • 011: adresa 0x23
    • 100: adresa 0x24
    • 101: adresa 0x25
    • 110: adresa 0x26
    • 111: adresa 0x27
  • Pripúšťa prerušenie (INT) špeciálnou linkou na zisťovanie údajov bez neustáleho monitorovania.

Integrácia s Arduino

Screenshot Arduino IDE

Spojenie s Arduinom je veľmi jednoduché, stačí pripojiť Vcc s 5v pinom dosky Arduino a GND s GND Arduina. Na druhej strane môžu byť kolíky modulu PCF8574 SDA a SCL spojiť pomocou čapov 14 (A5 SCL) a 15 (A4 SDA). Iba s tým by to začalo fungovať, samozrejme môžete pomocou Px pripojiť zariadenia, ktoré chcete komunikovať ...

Potom by už len chýbal začnite ukážkovým náčrtom v Arduino IDE. Môžete to urobiť bez použitia ďalšej knižnice, ako je ...

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

Ako vstup:

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

Alebo tiež používať knižnice, ako napríklad PCF8574, ktorý môžete stiahnuť tu a použite podobný kód zo samotného príkladu, ktorý je dodávaný s touto knižnicou:

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


Buďte prvý komentár

Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.