PCF8574: O I2C I / O proširivaču za Arduino

PCF8574 TI CHIP

Sigurno ste čuli za PCF8574 IC, čip koji se može kupiti zasebno ili već montirati na modul kao i mnogi drugi Elektroničke komponente kako bi vam olakšali integraciju s Arduino pločom. U ovom slučaju, to je produžitelj ulaza i izlaza za autobus I2C.

Možda mislite da Arduino već ima svoje integrirana I2C sabirnica, i to je istina. Ali PCF8574 može vam pomoći proširiti tu magistralu izvan granica vaše razvojne ploče, što može biti od velike pomoći nekim proizvođačima kojima je potrebno više od onoga što nudi Arduino.

Što je I2C sabirnica?

Arduino UNO milis funkcije

Ime I2C dolazi od Inter-integrirani krug ili inter-integrirani krugovi. Njegovu verziju 1.0 kreirao je 1992. godine Philips. Tada bi 2.1. došao drugi 2000, a danas je postao standard (pri 100 kbit / s, iako dopušta najviše 3.4 Mbit / s) kada je patent istekao 2006. godine i može se slobodno koristiti.

Trenutno se široko koristi u industriji za komunikaciju, a takođe ih proizvođači jako cijene za njihove projekte komuniciranja različitih mikrokontrolera i perifernih uređaja integrisanih u jednu IC.

El I2C je autobus dobro poznat iz serijske komunikacije. Koristi protokol sinhrone komunikacije sa samo 2 kanala (postoji treći, ali je povezan sa referencom ili GND), u stvari je poznat i kao TWI (dvožično sučelje):

  • Jedan za sat (SCL).
  • Ostalo za podatke (SDA).
Obje su otvorene odvodne CMOS veze i zahtijevaju povlačenje otpornika. Također, ako jedan uređaj odašilje 0, a drugi a 1, moglo bi doći do problema, zato je linija uvijek postavljena na 1 (visoki nivo), a uređaji uvijek prenose 0 (niži nivo).

To implicira da gospodar i rob oni šalju podatke istim kablom ili trakom, kojim upravlja prvi koji generira signal sata. Svaki od perifernih uređaja povezanih na I2C sabirnicu imat će dodijeljenu jedinstvenu adresu kako bi se usmjeravali prijenosi. Ali nije neophodno da je učitelj uvijek isti (multi-učitelj), uvijek je on taj koji inicira premještanje.

Kao što sam već objasnio u članku o Arduino I2C Spomenuo sam ranije, svaka ploča ima ove I2C veze na različitim mjestima. To morate imati na umu da biste ga mogli pravilno koristiti u svakoj verziji ploče:

  • Arduino UNO: SDA je u A4, a SCK u A5
  • ArduinoNano: isto kao i prethodni.
  • Arduino MiniPro: isto.
  • arduino mega: SDA je na pinu 20, a SCK na 21.
  • Više informacija o pločama.

Već znate da I2C možete lako koristiti za svoje skice, budući da Biblioteka Wire.h sa raznim funkcijama za ovu serijsku komunikaciju:

  • početi (): pokrenite Wire knjižnicu i navedite je li glavna ili pomoćna
  • requestFrom (): koristi ga master za traženje podataka od pomoćnog uređaja.
  • beginTransmission (): pokretanje prijenosa s pomoćnim uređajem.
  • endTransmission (): krajnji prenos.
  • pisati()- Napišite podatke iz podređenog kao odgovor na zahtjev glavnog, ili možete poslati glavni prijenos u red.
  • dostupno (): vratit će broj bajtova za čitanje.
  • pročitaj (): pročitajte bajt koji se prenosi s slave na master ili obratno.
  • onReceive (): Poziva funkciju kada slave prima prijenos od master-a.
  • na zahtjev (): Poziva funkciju kada slave traži podatke od glavnog.

para više informacija o Arduino programiranju i funkcijama možete preuzeti naš PDF vodič.

Šta je PCF8574?

PCF8574 modul

PCF8574 je Proširivač digitalnih ulaza i izlaza sabirnice I2C (I / O). Mogu ga proizvoditi različiti proizvođači, pored toga što je dostupan u IC-u i modulima. U svakom slučaju, vrlo je praktično spojiti ga na svoju Arduino ploču i imati kapacitet za upravljanje većim brojem uređaja nego što matična ploča dozvoljava.

El PCF8574 pinout je jednostavno, jer uključuje samo 8 borovi kvazi-usmjerni (P0-P7 gdje su povezani čipovi za komunikaciju), a s druge strane imate SDA i SCL koje morate spojiti na Arduino ploču, kao i VCC i GND za napajanje modula. I ne zaboravite tri pina za adresiranje A0, A1, A2 da biste odabrali na koji će od uređaja komunikacija biti usmjerena ...

pinout PCF8574

Posjeduje ostale karakteristike da biste trebali znati:

  • Njegove veze, budući da su otvoreni odvod, mogu biti koristi se i kao ulazi i kao izlazi.
  • La vršna struja to je 25mA kada djeluje kao izlaz (sudoper, kada struja teče prema PCF8574) i 300 µA (izvor, struja teče od PCF8574).
  • La stres napajanje je 2.5 i 6v. Potrošnja u stanju pripravnosti je vrlo mala, samo 10 µA.
  • Svi izlazi imaju zasune, za održavanje države bez potrebe za vanjskim akcijama. Morate djelovati samo kada želite promijeniti stanje.
  • Možete dobiti 8 mogući pravci, to jest, do 8 uređaja za komunikaciju sa ili pomoću 8 modula za proširenje do 64 uređaja. Adrese (pinovi A0, A1, A2) bit će:
    • 000: adresa 0x20
    • 001: adresa 0x21
    • 010: adresa 0x22
    • 011: adresa 0x23
    • 100: adresa 0x24
    • 101: adresa 0x25
    • 110: adresa 0x26
    • 111: adresa 0x27
  • Priznaje prekid (INT) posebnom linijom za otkrivanje podataka bez stalnog nadzora.

Integracija s Arduinom

Snimak ekrana Arduino IDE-a

Veza s Arduinom je vrlo jednostavna, samo trebate povezati Vcc s 5v pinom ploče Arduino, a GND s GND Arduina. S druge strane, igle PCF8574 SDA i SCL modula mogu biti spojite sa iglama 14 (A5 SCL) i 15 (A4 SDA). Tek s tim bi počeo raditi, očito Px možete koristiti za povezivanje uređaja s kojima želite komunicirati ...

Tada bi to samo nedostajalo započnite s primjerom skice u Arduino IDE. To možete učiniti bez upotrebe dodatne biblioteke kao što 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);
   }
}

Kao ulaz:

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

Ili takođe koristiti biblioteke, kao što je PCF8574 koji možete preuzmite ovde i koristite kod sličan ovom iz samog primjera koji dolazi uz ovu biblioteku:

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


Budite prvi koji komentarišete

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.