PCF8574: Arduinorako I2C I / O hedatzaileari buruz

PCF8574 TI TXIP

Zalantzarik gabe entzun duzu IC PCF8574, txip bat bereizita eros daiteke edo dagoeneko modulu batean muntatu daiteke beste asko bezala Osagai elektronikoak zure Arduino plakarekin zure integrazioa errazteko. Kasu honetan, sarreren eta irteeren hedatzailea da I2C autobusa.

Arduinok jada berea duela pentsa dezakezu I2C bus integratua, eta egia da. Baina PCF8574 autobusak zure garapen taularen mugetatik haratago hedatzen lagun dezake, eta hori Arduinok eskaintzen duena baino zerbait gehiago behar duten zenbait fabrikatzaileri laguntza handia eman diezaieke.

Zer da I2C autobusa?

Arduino UNO millis funtzioak

I2C izena dator Zirkuitu Integratu artekoa edo integratutako zirkuituak. Bere 1.0 bertsioa 1992an sortu zuen Philips-ek. 2.1. urtean bigarren 2000 bat etorriko litzateke eta gaur egun estandar bihurtu da (100 kbit / s-koa, nahiz eta gehienez 3.4 Mbit / s-koa ahalbidetzen duen) 2006an patentea iraungi zenean eta libreki erabil daitekeen.

Gaur egun industrian asko erabiltzen da komunikaziorako, eta egileek asko eskertzen dute IC batean integratutako mikrokontrolagailu eta periferiko desberdinak komunikatzeko egindako proiektuengatik.

El I2C autobusa da serieko komunikazioan ezaguna. Komunikazio protokolo sinkronikoa erabiltzen du 2 kanalekin soilik (hirugarrena dago, baina erreferentziarekin edo GNDarekin akoplatuta dago), hain zuzen ere TWI (Two Wire Interface) izenarekin ere ezagutzen da:

  • Bat erlojurako (SCL).
  • Beste bat datuetarako (SDA).
Biak konexio irekiko CMOS konexioak dira eta tiratzeko erresistentziak behar dituzte. Gainera, gailu batek 0 bat eta beste batek 1 transmititzen baditu, arazoak egon litezke, horregatik linea beti 1 (maila altua) ezartzen da eta gailuek 0 (maila baxua) transmititzen dute beti.

Horrek esan nahi du nagusi eta esklabo datuak kable edo pista beretik bidaltzen dituzte, erlojuaren seinalea sortzen duen lehenengoak kontrolatzen duena. I2C busera konektatutako gailu periferiko bakoitzak helbide bakarra izango du esleituta, transmisioak zuzentzeko. Baina ez da beharrezkoa masterra beti berdina izatea (master anitzekoa), beti bera da transferentzia hasten duena.

Artikuluan dagoeneko azaldu nuen bezala Arduino I2C Lehenago erreferentzia egin nuen, taula bakoitzak I2C konexio hauek leku desberdinetan ditu. Plaka bertsio bakoitzean behar bezala erabili ahal izateko kontuan hartu behar duzun zerbait da:

  • Arduino UNO: SDA A4an dago eta SCK A5ean
  • Arduino Nano: aurrekoaren berdina.
  • Arduino Mini Pro: bera.
  • Arduino Mega: SDA 20 pinean dago eta SCK 21ean.
  • Plaken inguruko informazio gehiago.

Badakizu I2C zure zirriborroetarako erraz erabil dezakezuela Wire.h liburutegia serieko komunikazio honetarako hainbat funtzio ditu:

  • begin (): hasi Wire liburutegia eta zehaztu maisu edo esklabo den
  • requestFrom (): nagusiak esklaboari datuak eskatzeko erabiltzen du.
  • beginTransmission (): esklabuarekin transmisioa hasi.
  • endTransmission (): amaiera transmisioa.
  • idatzi ()- Idatzi esklabo baten datuak maisuaren eskaera bati erantzunez, edo maisuaren transmisioa ilaran jar dezakezu.
  • eskuragarri (): irakurtzeko byte kopurua itzuliko du.
  • irakurri (): irakurri esklabo batetik maisuari igorritako byte bat edo alderantziz.
  • onReceive (): Funtzio bati deitzen dio esklabo batek maisu baten transmisioa jasotzen duenean.
  • onRequest (): Funtzio bati deitzen dio esklabo batek maisu bati datuak eskatzen dizkionean.

For informazio gehiago Arduino programazioari eta funtzioei buruz deskargatu ditzakezu PDF tutoriala.

Zer da PCF8574?

PCF8574 modulua

PCF8574 da I2C buseko sarrera eta irteera digitalak (I / O) zabaltzailea. Hainbat fabrikatzailek fabrikatu dezakete, IC eta moduluetan eskuragarri izateaz gain. Nolanahi ere, oso praktikoa da zure Arduino plakara konektatzea eta plakak onartzen dituenak baino gailu gehiago kontrolatzeko ahalmena izatea.

El PCF8574 pinout erraza da, soilik sartzen baitu 8 piinak kuasidirekzionala (komunikatzeko txipak konektatzen diren P0-P7), eta bestetik Arduino plakara konektatu behar dituzun SDA eta SCL dituzu, baita VCC eta GND modulua ere pizteko. Eta ez ahaztu A0, A1, A2 helbideetako hiru pinak komunikazioa zein gailutara bideratuko den aukeratzeko ...

PCF8574 pinout

It ditu Beste ezaugarri batzuk jakin beharko zenukeela:

  • Bere konexioak, hustubide irekia izanik, izan daitezke sarrera eta irteera gisa erabiltzen dira.
  • La korronte gailurra 25mA da irteera gisa jokatzen duenean (konketa, korrontea PCF8574 aldera doanean) eta 300 µA (iturria, korrontea PCF8574tik).
  • La tentsioa energia hornidura 2.5 eta 6v da. Egonean dagoen kontsumoa oso txikia da, 10 µA bakarrik.
  • Irteera guztiak karraxak dituzte, egoera mantentzeko kanpoko ekintzarik egin beharrik gabe. Egoera aldatu nahi duzunean baino ez duzu jokatu behar.
  • 8 lor ditzakezu norabide posibleak, hau da, 8 gailu arte komunikatzeko edo 8 modulu erabiliz 64 gailura arte zabaltzeko. Helbideak (A0, A1, A2 pinak) hauek izango dira:
    • 000: helbidea 0x20
    • 001: helbidea 0x21
    • 010: helbidea 0x22
    • 011: helbidea 0x23
    • 100: helbidea 0x24
    • 101: helbidea 0x25
    • 110: helbidea 0x26
    • 111: helbidea 0x27
  • Onartzen du etenik (INT) linea berezi baten bidez datuak etengabe kontrolatu gabe detektatzeko.

Integrazioa Arduinorekin

Arduino IDEren pantaila-argazkia

Arduinorekin konexioa oso erraza da, Vcc Arduino plakako 5v pin-arekin konektatu behar duzu eta GND Arduinoko GND-rekin. Bestalde, PCF8574 SDA eta SCL moduluko pinak izan daitezke konektatu pinekin 14 (A5 SCL) eta 15 (A4 SDA). Horrekin bakarrik funtzionatzen hasiko litzateke, jakina, Px erabil dezakezu komunikatu nahi dituzun gailuak konektatzeko ...

Orduan bakarrik faltako zen hasi zirriborro adibide batekin Arduino IDEn. Liburutegi gehigarririk erabili gabe egin dezakezu ...

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

Sarrera gisa:

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

Edo baita ere liburutegiak erabili, esaterako, ahal duzun PCF8574 deskargatu hemen eta erabili honen antzeko kodea liburutegi honekin batera datorren adibidetik:

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


Artikuluaren edukia gure printzipioekin bat dator etika editoriala. Akats baten berri emateko egin klik hemen.

Idatzi lehenengo iruzkina

Utzi zure iruzkina

Zure helbide elektronikoa ez da argitaratuko. Beharrezko eremuak markatuta daude *

*

*

  1. Datuen arduraduna: Miguel Ángel Gatón
  2. Datuen xedea: SPAM kontrolatzea, iruzkinen kudeaketa.
  3. Legitimazioa: Zure baimena
  4. Datuen komunikazioa: datuak ez zaizkie hirugarrenei jakinaraziko legezko betebeharrez izan ezik.
  5. Datuak biltegiratzea: Occentus Networks-ek (EB) ostatatutako datu-basea
  6. Eskubideak: Edonoiz zure informazioa mugatu, berreskuratu eta ezabatu dezakezu.