PCF8574: Om I2C I / O-udvidelse til Arduino

PCF8574 TI CHIP

Du har helt sikkert hørt om IC PCF8574, en chip der kan købes separat eller allerede monteret på et modul som mange andre Elektroniske komponenter for at lette din integration med dit Arduino-kort. I dette tilfælde er det en udvidelse af input og output til I2C-bussen.

Du tror måske, at Arduino allerede har sin egen integreret I2C-bus, og det er sandt. Men PCF8574 kan hjælpe med at udvide den bus ud over grænserne for dit udviklingskort, hvilket kan være til stor hjælp for nogle producenter, der har brug for mere end bare hvad Arduino leverer.

Hvad er I2C-bussen?

Arduino UNO millis funktioner

Navnet I2C kommer fra Inter-integreret kredsløb eller interintegrerede kredsløb. Dens version 1.0 blev oprettet i 1992 af Philips. Derefter ville et andet 2.1 komme i 2000, og i dag er det blevet en standard (ved 100 kbit / s, selvom det tillader op til 3.4 Mbit / s maksimum), når patentet udløb i 2006 og kan bruges frit.

På nuværende tidspunkt er det meget brugt i branchen til kommunikation, og også meget værdsat af producenter for deres projekter til at kommunikere forskellige mikrocontrollere og perifere enheder integreret i en IC.

El I2C er en bus velkendt seriel kommunikation. Det bruger en synkron kommunikationsprotokol med kun 2 kanaler (der er en tredje, men den er koblet til reference eller GND), faktisk er den også kendt som TWI (Two Wire Interface):

  • Én til uret (SCL).
  • Andet til data (SDA).
Begge er åbne CMOS-forbindelser og kræver pull-up-modstande. Også, hvis en enhed transmitterer en 0 og en anden en 1, kan der være problemer, det er derfor, at linjen altid er indstillet til 1 (højt niveau), og enhederne transmitterer altid 0 (lavt niveau).

Det indebærer, at mester og slave de sender data over det samme kabel eller spor, som styres af det første, der er det, der genererer urets signal. Hver af de perifere enheder, der er forbundet til I2C-bussen, får en unik adresse tildelt for at dirigere transmissionerne. Men det er ikke nødvendigt, at mesteren altid er den samme (multi-master), det er altid han, der starter overførslen.

Som jeg allerede har forklaret i artiklen om Arduino I2C Jeg henviste til tidligere, hvert kort har disse I2C-forbindelser forskellige steder. Det er noget, du skal huske på for at kunne bruge det korrekt i hver pladeversion:

  • Arduino UNO: SDA er i A4 og SCK i A5
  • Arduino Nano: det samme som det foregående.
  • Arduino Mini Pro: samme.
  • Arduino Mega: SDA er på pin 20 og SCK på 21.
  • Flere oplysninger om plader.

Du ved allerede, at du nemt kan bruge I2C til dine skitser, da Wire.h bibliotek med forskellige funktioner til denne serielle kommunikation:

  • begynde (): start Wire-biblioteket, og angiv, om det er master eller slave
  • requestFrom (): bruges af mesteren til at anmode om data fra slaven.
  • beginTransmission (): start transmission med slave.
  • endTransmission (): slut transmission.
  • skrive()- Skriv data fra en slave som svar på en anmodning fra masteren, eller du kan sætte en mastertransmission i kø
  • ledig (): returnerer antallet af byte, der skal læses.
  • Læs(): læs en byte transmitteret fra en slave til en mester eller omvendt.
  • onReceive (): Opkald til en funktion, når en slave modtager en transmission fra en master.
  • onRequest (): Opkald til en funktion, når en slave anmoder om data fra en master.

til flere oplysninger om Arduino programmering og funktioner kan du downloade vores PDF-vejledning.

Hvad er PCF8574?

PCF8574 modul

PCF8574 er en I2C bus digitale ind- og udgange (I / O) -udvidelse. Det kan fremstilles af forskellige producenter ud over at have det tilgængeligt i IC'er og moduler. Under alle omstændigheder er det meget praktisk at forbinde det til dit Arduino-kort og have kapacitet til at styre flere enheder, end bundkortet tillader.

El PCF8574 pinout Det er simpelt, da det kun inkluderer 8 fyrretræer kvasi-retningsbestemt (P0-P7, hvor chips til kommunikation er forbundet), og på den anden side har du SDA og SCL, som du skal oprette forbindelse til Arduino-kortet såvel som VCC og GND for også at drive modulet. Og glem ikke de tre adressestifter A0, A1, A2 for at vælge, hvilke af enhederne kommunikationen er rettet mod ...

PCF8574 pinout

Det ejer andre funktioner at du skal vide:

  • Dens forbindelser kan være et åbent afløb bruges både som input og output.
  • La spidsstrøm det er 25mA, når det fungerer som et output (synker, når strømmen strømmer mod PCF8574) og 300 µA (kilde, strømmen strømmer fra PCF8574).
  • La spænding strømforsyningen er 2.5 og 6v. Stand-by forbrug er meget lavt, kun 10 µA.
  • Alle udgange har låseat opretholde staten uden behov for eksterne handlinger. Du skal kun handle, når du vil ændre tilstand.
  • Du kan få 8 mulige retninger det vil sige op til 8 enheder til at kommunikere med eller bruge 8 moduler til at udvide det til 64 enheder. Adresserne (ben A0, A1, A2) er:
    • 000: adresse 0x20
    • 001: adresse 0x21
    • 010: adresse 0x22
    • 011: adresse 0x23
    • 100: adresse 0x24
    • 101: adresse 0x25
    • 110: adresse 0x26
    • 111: adresse 0x27
  • Indrømmer afbrydelse (INT) ved en speciel linje til at registrere data uden konstant overvågning.

Integration med Arduino

Skærmbillede af Arduino IDE

Forbindelsen med Arduino er meget enkel, du skal bare forbinde Vcc med 5v-stiften på Arduino-kortet og GND med GND of Arduino. På den anden side kan stifterne på PCF8574 SDA og SCL-modulet være forbind med stifter 14 (A5 SCL) og 15 (A4 SDA). Kun med det ville det begynde at arbejde, selvfølgelig kan du bruge Px til at forbinde de enheder, du vil kommunikere ...

Så ville det kun mangle start med et eksempel på en skitse i Arduino IDE. Du kan gøre det uden at bruge et ekstra bibliotek som ...

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

Som input:

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

Eller også brug biblioteker, såsom PCF8574, som du kan download her og brug kode svarende til dette fra selve eksemplet, der følger med dette 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() 
{
}


Indholdet af artiklen overholder vores principper for redaktionel etik. Klik på for at rapportere en fejl her.

Vær den første til at kommentere

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.