PCF8574: O I2C I / O Expander pro Arduino

PCF8574 TI CHIP

Určitě jste už slyšeli o IC PCF8574, čip, který lze zakoupit samostatně nebo již namontovaný na modulu jako mnoho jiných Elektronické komponenty pro usnadnění vaší integrace s vaší deskou Arduino. V tomto případě se jedná o rozšiřovač vstupů a výstupů pro sběrnici I2C.

Možná si myslíte, že Arduino již má své vlastní integrovaná sběrnice I2Ca je to pravda. PCF8574 ale může pomoci rozšířit tuto sběrnici nad hranice vaší vývojové desky, což může být velkou pomocí pro některé výrobce, kteří potřebují více než jen to, co Arduino poskytuje.

Co je sběrnice I2C?

Arduino UNO millis funkce

Název I2C pochází Interintegrovaný obvod nebo vzájemně integrované obvody. Jeho verze 1.0 byla vytvořena v roce 1992 společností Philips. V roce 2.1 by pak přišel druhý 2000 a dnes se stal standardem (při 100 kbit / s, i když umožňuje až 3.4 Mbit / s maximum), když patent vypršel v roce 2006 a lze jej volně používat.

V současné době je v průmyslu široce používán pro komunikaci, a také si je velmi cení tvůrci za své projekty komunikace různých mikrokontrolérů a periferií integrovaných do jednoho IC.

El I2C je autobus dobře známé ze sériové komunikace. Používá synchronní komunikační protokol pouze s 2 kanály (existuje třetí, ale je spojen s referenčním nebo GND), ve skutečnosti je také známý jako TWI (Two Wire Interface):

  • Jeden pro hodiny (SCL).
  • Jiné pro data (SDA).
Oba jsou připojení CMOS s otevřeným odtokem a vyžadují pull-up rezistory. Také pokud jedno zařízení vysílá 0 a druhé 1, mohou nastat problémy, takže linka je vždy nastavena na 1 (vysoká úroveň) a zařízení vždy vysílají 0 (nízká úroveň).

Z toho vyplývá, že pán a otrok posílají data přes stejný kabel nebo stopu, která je řízena prvním, který generuje hodinový signál. Každé z periferních zařízení připojených ke sběrnici I2C bude mít přiřazenou jedinečnou adresu, aby směrovala přenosy. Není však nutné, aby byl pán vždy stejný (více pánů), vždy je to on, kdo iniciuje přenos.

Jak jsem již vysvětlil v článku o Arduino I2C Odkazoval jsem dříve, každá deska má tato připojení I2C na různých místech. Je to něco, co musíte mít na paměti, abyste jej mohli správně použít v každé verzi štítku:

  • Arduino UNO: SDA je v A4 a SCK v A5
  • Arduino Nano: stejné jako předchozí.
  • Arduino Mini Pro: stejné.
  • Arduino Mega: SDA je na kolíku 20 a SCK na 21.
  • Více informací o deskách.

Už víte, že I2C můžete pro své skici snadno použít, protože Knihovna Wire.h s různými funkcemi pro tuto sériovou komunikaci:

  • začít (): spusťte knihovnu Wire a určete, zda je to master nebo slave
  • requestFrom (): používá hlavní k vyžádání dat od podřízeného.
  • beginTransmission (): zahájení přenosu s podřízeným.
  • endTransmission (): koncový přenos.
  • napsat()- Napište data z podřízeného zařízení v reakci na požadavek od nadřízeného, ​​nebo můžete zařadit do fronty přenos velitele.
  • k dispozici (): vrátí počet bajtů ke čtení.
  • číst(): přečíst bajt přenášený z podřízeného zařízení na nadřízený nebo naopak.
  • onReceive (): Vyvolá funkci, když slave přijme přenos z masteru.
  • na znamení (): Vyvolá funkci, když slave požaduje data od nadřízeného.

na viac info o programování Arduino a funkcích si můžete stáhnout naše Výukový program PDF.

Co je PCF8574?

Modul PCF8574

PCF8574 je a Expandér digitálních vstupů a výstupů (I / O) sběrnice I2C. Může být vyroben různými výrobci, kromě toho, že je k dispozici v integrovaných obvodech a modulech. V každém případě je velmi praktické jej připojit k desce Arduino a mít kapacitu pro ovládání více zařízení, než umožňuje základní deska.

El PCF8574 pinout Je to jednoduché, protože zahrnuje pouze 8 borovice kvazi-směrový (P0-P7, kde jsou připojeny čipy pro komunikaci) a na druhé straně máte SDA a SCL, které musíte připojit k desce Arduino, stejně jako VCC a GND, které také napájejí modul. A nezapomeňte na tři adresovací piny A0, A1, A2 pro výběr, na které ze zařízení je komunikace směrována ...

Pinout PCF8574

Vlastní další funkce že byste měli vědět:

  • Jeho připojení může být otevřeným odtokem používá se jako vstupy i výstupy.
  • La špičkový proud je to 25 mA, když funguje jako výstup (jímka, když proud proudí k PCF8574) a 300 µA (zdroj, proud teče z PCF8574).
  • La napětí napájení je 2.5 a 6v. Pohotovostní spotřeba je velmi nízká, pouze 10 µA.
  • Všechny výstupy mít západky, udržovat stav bez nutnosti vnějších akcí. Musíte pouze jednat, když chcete změnit stav.
  • Můžete získat 8 možné směry, tj. až 8 zařízení pro komunikaci s nebo pomocí 8 modulů k rozšíření na 64 zařízení. Adresy (piny A0, A1, A2) budou:
    • 000: adresa 0x20
    • 001: adresa 0x21
    • 010: adresa 0x22
    • 011: adresa 0x23
    • 100: adresa 0x24
    • 101: adresa 0x25
    • 110: adresa 0x26
    • 111: adresa 0x27
  • Připouští přerušení (INT) pomocí speciální linky pro detekci dat bez neustálého sledování.

Integrace s Arduino

Screenshot Arduino IDE

Spojení s Arduino je velmi jednoduché, stačí připojit Vcc s 5v pinem desky Arduino a GND s GND Arduina. Na druhé straně mohou být piny modulu PCF8574 SDA a SCL spojte se s kolíky 14 (A5 SCL) a 15 (A4 SDA). Pouze s tím by to začalo fungovat, samozřejmě můžete použít PX pro připojení zařízení, která chcete komunikovat ...

Pak by jen chyběl začněte ukázkovým náčrtem v Arduino IDE. Můžete to udělat bez použití další knihovny, jako 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);
   }
}

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

Nebo také používat knihovny, například PCF8574, který můžete stáhnout zde a použijte podobný kód ze samotného příkladu, který je dodáván s touto knihovnou:

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


Obsah článku se řídí našimi zásadami redakční etika. Chcete-li nahlásit chybu, klikněte zde.

Buďte první komentář

Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.