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

PCF8574 TI ČIP

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 biste olakšali integraciju s Arduino pločom. U ovom je slučaju produžitelj ulaza i izlaza za sabirnica I2C.

Možda mislite da Arduino već ima svoje integrirana I2C sabirnica, i istina je. 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 koji trebaju više od onoga što nudi Arduino.

Što je I2C sabirnica?

Arduino UNO milis funkcije

Ime I2C potječe iz Međuintegrirani krug ili inter-integrirani krugovi. Njegovu verziju 1.0 stvorio je 1992. godine Philips. Tada bi 2.1. došao drugi 2000, a danas je postao standard (brzinom od 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đer ih proizvođači jako cijene zbog njihovih projekata komuniciranja različitih mikrokontrolera i perifernih uređaja integriranih u jedan IC.

El I2C je autobus dobro poznat iz serijske komunikacije. Koristi sinkroni komunikacijski protokol sa samo 2 kanala (postoji treći, ali je povezan s referencom ili GND), zapravo 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 (visoka razina), a uređaji uvijek prenose 0 (niska razina).

To implicira da gospodar i rob podatke šalju istim kabelom ili trakom, kojim upravlja prvi koji generira signal sata. Svaki periferni uređaj povezan na I2C sabirnicu imat će dodijeljenu jedinstvenu adresu kako bi se usmjeravali prijenosi. Ali nije nužno da je učitelj uvijek isti (multi-učitelj), uvijek je on taj koji inicira prijenos.

Kao što sam već objasnio u članku o Arduino I2C Ranije sam spomenuo, svaka ploča ima ove I2C veze na različitim mjestima. To je nešto š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 pin 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 Knjižnica Wire.h s raznim funkcijama za ovu serijsku komunikaciju:

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

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

Što je PCF8574?

PCF8574 modul

PCF8574 je Proširivač digitalnih ulaza i izlaza sabirnice I2C (I / O). Mogu ga proizvoditi različiti proizvođači, uz to što je dostupan u IC-ima 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 dopušta matična ploča.

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

Isključivanje PCF8574

ima ostale značajke 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 napetost napajanje je 2.5 i 6v. Potrošnja u stanju pripravnosti vrlo je 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će upute, to jest, do 8 uređaja za komunikaciju sa ili pomoću 8 modula za njegovo 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

Snimka zaslona Arduino IDE-a

Veza s Arduinom vrlo je 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 povezati s 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 samo nedostajalo započnite s primjerom skice u Arduino IDE-u. To možete učiniti bez upotrebe dodatne knjižnice poput ...

#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đer koristiti knjižnice, kao što je PCF8574 koji možete preuzmite ovdje i koristite kod sličan ovom iz samog primjera koji dolazi uz ovu knjižnicu:

#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 će komentirati

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  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 obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.