PCF8574: Rreth Zgjeruesit I / O I2C për Arduino

PCF8574 TI ÇIP

Ju me siguri keni dëgjuar për PCF8574 IC, një çip që mund të blihet veçmas ose të montohet tashmë në një modul si shumë të tjerë Komponentët elektronikë për të lehtësuar integrimin tuaj me bordin tuaj Arduino. Në këtë rast, është një zgjerues i hyrjeve dhe daljeve për autobusi I2C.

Ju mund të mendoni se Arduino tashmë ka të vetat autobus i integruar I2C, dhe është e vërtetë. Por PCF8574 mund të ndihmojë në zgjerimin e këtij autobusi përtej kufijve të bordit tuaj të zhvillimit, i cili mund të jetë një ndihmë e madhe për disa prodhues që kanë nevojë për më shumë sesa ato që sigurohen nga Arduino.

Çfarë është autobusi I2C?

Arduino UNO funksionet milis

Emri I2C vjen nga Qarku i integruar ose qarqeve ndër-integruese. Versioni i tij 1.0 u krijua në 1992 nga Philips. Pastaj një 2.1 i dytë do të vinte në 2000 dhe sot ai është bërë një standard (me 100 kbit / s, megjithëse lejon deri në 3.4 Mbit / s maksimum) kur patenta skadon në 2006 dhe mund të përdoret lirshëm.

Aktualisht përdoret gjerësisht në industri për komunikim, dhe gjithashtu shumë i vlerësuar nga prodhuesit për projektet e tyre për të komunikuar mikrokontrollues dhe periferikë të ndryshëm të integruar në një IC.

El I2C është një autobus i njohur mirë nga komunikimi serik. Përdor një protokoll sinkron komunikimi me vetëm 2 kanale (ekziston edhe një i tretë, por shoqërohet me referencë ose GND), në fakt njihet ndryshe si TWI (Two Wire Interface):

  • Një për orën (SCL).
  • Tjetër për të dhëna (SDA).
Të dyja janë lidhje të hapura CMOS dhe kërkojnë rezistencë tërheqëse. Gjithashtu, nëse një pajisje transmeton një 0 dhe një tjetër një 1, mund të ketë probleme, kjo është arsyeja pse linja vendoset gjithmonë në 1 (nivel i lartë) dhe pajisjet transmetojnë gjithmonë 0 (nivel të ulët).

Kjo nënkupton se zot dhe skllav ata dërgojnë të dhëna në të njëjtin kabllo ose udhë, e cila kontrollohet nga e para që është ajo që gjeneron sinjalin e orës. Secila prej pajisjeve periferike të lidhura me autobusin I2C do të ketë një adresë unike të caktuar, në mënyrë që të drejtojë transmetimet. Por nuk është e nevojshme që mjeshtri të jetë gjithmonë i njëjti (multi-master), është gjithmonë ai që fillon transferimin.

Siç e kam shpjeguar tashmë në artikullin në Arduino I2C Unë u referova më herët, secili bord ka këto lidhje I2C në vende të ndryshme. Somethingshtë diçka që duhet ta keni parasysh që të mund ta përdorni si duhet në secilin version të pllakës:

Ju tashmë e dini që mund ta përdorni I2C për skicat tuaja me lehtësi, pasi që Wire.h biblioteka me funksione të ndryshme për këtë komunikim serik:

  • filloj (): filloni bibliotekën Wire dhe specifikoni nëse është master ose skllav
  • kërkesa nga (): përdoret nga master për të kërkuar të dhëna nga skllavi.
  • startTransmission (): fillo transmetimin me skllav.
  • endTransmission (): transmetimi përfundimtar.
  • shkruaj()- Shkruani të dhëna nga një skllav në përgjigje të një kërkese nga masteri, ose mund të vendosni në radhë për transmetimin e një masteri.
  • në dispozicion (): do të kthejë numrin e bajteve për t'u lexuar.
  • lexo (): lexoni një bajt të transmetuar nga një skllav te një zotëri ose anasjelltas.
  • onReceive (): Thërret një funksion kur një skllav merr një transmetim nga një master.
  • ne kerkese (): Thërret një funksion kur një skllav kërkon të dhëna nga një master.

më shumë informacion në lidhje me programimin dhe funksionet Arduino ju mund të shkarkoni tonë Udhëzues PDF.

Çfarë është PCF8574?

Moduli PCF8574

PCF8574 është një Zgjerues i hyrjeve dhe daljeve dixhitale të autobusit I2C. Mund të prodhohet nga prodhues të ndryshëm, përveç që e ka të disponueshëm në IC dhe module. Në çdo rast, është shumë praktike ta lidhësh atë me bordin tënd Arduino dhe të kesh kapacitetin për të kontrolluar më shumë pajisje sesa lejon pllaka amë.

El PCF8574 pinout është e thjeshtë, pasi përfshin vetëm Pisha 8 quasidirectional (P0-P7 ku janë të lidhura patate të skuqura për të komunikuar), dhe nga ana tjetër ju keni SDA dhe SCL që duhet t'i lidhni me bordin Arduino, si dhe VCC dhe GND për të furnizuar gjithashtu modulin. Dhe mos harroni tre kunjat e adresimit A0, A1, A2 për të zgjedhur se në cilën nga pajisjet drejtohet komunikimi ...

Pinout PCF8574

ajo ka karakteristika të tjera që duhet të dini:

  • Lidhjet e tij, duke qenë një kanal i hapur, mund të jenë përdoret si hyrje dhe dalje.
  • La rryma kulmore është 25mA kur vepron si dalje (lavaman, kur rryma rrjedh drejt PCF8574) dhe 300 μA (burimi, rryma rrjedh nga PCF8574).
  • La tension furnizimi me energji është 2.5 dhe 6v. Konsumi i gatishmërisë është shumë i ulët, vetëm 10 μA.
  • Të gjitha rezultatet kanë shulë, për të ruajtur shtetin pa pasur nevojë për veprime të jashtme. Ju duhet të veproni vetëm kur dëshironi të ndryshoni shtetin.
  • Ju mund të merrni 8 drejtimet e mundshme, që do të thotë, deri në 8 pajisje për të komunikuar me të ose duke përdorur 8 module për ta zgjeruar atë deri në 64 pajisje. Adresat (kunjat A0, A1, A2) do të jenë:
    • 000: adresa 0x20
    • 001: adresa 0x21
    • 010: adresa 0x22
    • 011: adresa 0x23
    • 100: adresa 0x24
    • 101: adresa 0x25
    • 110: adresa 0x26
    • 111: adresa 0x27
  • Pranon ndërprerje (INT) nga një linjë e veçantë për të zbuluar të dhëna pa monitoruar vazhdimisht.

Integrimi me Arduino

Foto nga Arduino IDE

Lidhja me Arduino është shumë e thjeshtë, thjesht duhet të lidhni Vcc me pinin 5v të bordit Arduino dhe GND me GND të Arduino. Nga ana tjetër, kunjat e modulit PCF8574 SDA dhe SCL mund të jenë lidheni me kunjat 14 (A5 SCL) dhe 15 (A4 SDA). Vetëm me atë do të fillonte të funksiononte, padyshim që mund të përdorni Px për të lidhur pajisjet që dëshironi të komunikoni ...

Atëherë do të mungonte vetëm filloni me një skicë shembull në Arduino IDE. Mund ta bëni pa përdorur një bibliotekë shtesë si ...

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

Si hyrje:

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

Ose gjithashtu përdorni biblioteka, të tilla si PCF8574 që mundeni shkarko këtu dhe përdorni kod të ngjashëm me këtë nga vetë shembulli që vjen së bashku me këtë bibliotekë:

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


Bëhu i pari që komenton

Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.