PCF8574: Over I2C I / O Expander voor Arduino

PCF8574 TI CHIP

Je hebt zeker gehoord van de PCF8574 IC, een chip die afzonderlijk kan worden gekocht of al op een module is gemonteerd, zoals vele andere Elektronische componenten om uw integratie met uw Arduino-bord te vergemakkelijken. In dit geval is het een uitbreiding van de in- en uitgangen voor de I2C-bus.

Je denkt misschien dat Arduino al zijn eigen heeft geïntegreerde I2C-bus, en het is waar. Maar de PCF8574 kan helpen om die bus buiten de grenzen van je ontwikkelbord te brengen, wat een grote hulp kan zijn voor sommige makers die meer nodig hebben dan alleen wat Arduino biedt.

Wat is de I2C-bus?

Arduino UNO millis-functies

De naam I2C komt van Inter-geïntegreerde schakeling of onderling geïntegreerde schakelingen. De versie 1.0 is in 1992 gemaakt door Philips. Dan zou een tweede 2.1 komen in 2000 en vandaag is het een standaard geworden (op 100 kbit / s, hoewel het maximaal 3.4 Mbit / s toestaat) toen het patent in 2006 afliep en vrij kan worden gebruikt.

Momenteel wordt het veel gebruikt in de industrie Voor communicatie, en ook zeer gewaardeerd door makers voor hun projecten om verschillende microcontrollers en randapparatuur geïntegreerd in één IC te communiceren.

El I2C is een bus bekend van seriële communicatie. Het gebruikt een synchroon communicatieprotocol met slechts 2 kanalen (er is een derde, maar het is gekoppeld aan referentie of GND), in feite is het ook bekend als TWI (Two Wire Interface):

  • Een voor de klok (SCL).
  • Overig voor gegevens (SDA).
Beide zijn CMOS-verbindingen met open afvoer en vereisen pull-up-weerstanden. Als het ene apparaat een 0 verzendt en het andere een 1, kunnen er problemen zijn, daarom staat de lijn altijd op 1 (hoog niveau) en verzenden de apparaten altijd 0 (laag niveau).

Dat houdt in dat de meester en slaaf ze sturen gegevens over dezelfde kabel of hetzelfde spoor, dat wordt aangestuurd door de eerste die het kloksignaal genereert. Elk van de randapparatuur die op de I2C-bus is aangesloten, krijgt een uniek adres toegewezen om de transmissies te leiden. Maar het is niet nodig dat de master altijd dezelfde is (multi-master), hij is het altijd die de overdracht initieert.

Zoals ik al heb uitgelegd in het artikel over Arduino I2C Ik heb eerder verwezen, elk bord heeft deze I2C-verbindingen op verschillende plaatsen. Het is iets dat u in gedachten moet houden om het in elke plaatversie goed te kunnen gebruiken:

  • Arduino UNO: SDA staat in A4 en SCK in A5
  • Arduino nano: hetzelfde als de vorige.
  • Arduino MiniPro: hetzelfde.
  • Arduino mega: SDA zit op pin 20 en SCK op 21.
  • Meer informatie over borden.

U weet al dat u de I2C gemakkelijk kunt gebruiken voor uw schetsen, aangezien de Wire.h bibliotheek met verschillende functies voor deze seriële communicatie:

  • beginnen (): start de Wire-bibliotheek en specificeer of het master of slave is
  • aanvraag van (): gebruikt door de master om gegevens van de slaaf op te vragen.
  • beginTransmission (): start verzending met slave.
  • endTransmission (): einde transmissie.
  • schrijven()- Schrijf gegevens van een slaaf in reactie op een verzoek van de master, of u kunt de verzending van een master in de wachtrij plaatsen.
  • beschikbaar (): retourneert het aantal te lezen bytes.
  • lezen(): lees een byte verzonden van een slave naar een master of vice versa.
  • onReceive (): Roept een functie op wanneer een slave een transmissie van een master ontvangt.
  • op verzoek (): Roept een functie op wanneer een slaaf gegevens opvraagt ​​bij een master.

naar Meer informatie over Arduino-programmering en functies die u kunt downloaden PDF-zelfstudie.

Wat is de PCF8574?

PCF8574-module

De PCF8574 is een I2C bus digitale ingangen en uitgangen (I / O) uitbreiding. Het kan door verschillende fabrikanten worden vervaardigd, naast dat het beschikbaar is in IC's en modules. In ieder geval is het erg praktisch om hem aan te sluiten op je Arduino-bord en de capaciteit te hebben om meer apparaten te besturen dan het moederbord toestaat.

El PCF8574-pinout Het is eenvoudig, omdat het alleen bevat 8-dennen quasi-directioneel (P0-P7 waar de chips om te communiceren zijn verbonden), en aan de andere kant heb je de SDA en SCL die je op het Arduino-bord moet aansluiten, evenals VCC en GND om ook de module van stroom te voorzien. En vergeet niet de drie adresseringspinnen A0, A1, A2 om te kiezen naar welke van de apparaten de communicatie wordt geleid ...

PCF8574-pinout

Het bezit Andere mogelijkheden dat u moet weten:

  • Zijn verbindingen, die een open afvoer zijn, kunnen dat zijn zowel gebruikt als in- en uitgangen.
  • La piekstroom het is 25mA als het als uitgang fungeert (sink, wanneer stroom naar PCF8574 vloeit) en 300 µA (bron, stroom vloeit uit PCF8574).
  • La spanning voeding is 2.5 en 6v. Het stand-by verbruik is erg laag, slechts 10 µA.
  • Alle uitgangen hebben grendels, om de staat te behouden zonder de noodzaak van externe maatregelen. U hoeft alleen te handelen als u de toestand wilt wijzigen.
  • Je kunt er 8 krijgen mogelijke richtingen, dat wil zeggen tot 8 apparaten om mee te communiceren of 8 modules te gebruiken om het uit te breiden tot 64 apparaten. De adressen (pinnen A0, A1, A2) zijn:
    • 000: adres 0x20
    • 001: adres 0x21
    • 010: adres 0x22
    • 011: adres 0x23
    • 100: adres 0x24
    • 101: adres 0x25
    • 110: adres 0x26
    • 111: adres 0x27
  • Geeft toe onderbreking (INT) door een speciale lijn om gegevens te detecteren zonder constant toezicht.

Integratie met Arduino

Screenshot van Arduino IDE

De verbinding met Arduino is heel eenvoudig, je hoeft alleen Vcc aan te sluiten op de 5v-pin van het Arduino-bord en GND met GND van Arduino. Aan de andere kant kunnen de pinnen van de PCF8574 SDA- en SCL-module verbinden met pinnen 14 (A5 SCL) en 15 (A4 SDA). Alleen dan zou het gaan werken, uiteraard kun je de Px gebruiken om de apparaten aan te sluiten die je wilt communiceren ...

Dan zou het alleen ontbreken begin met een voorbeeldschets in Arduino IDE. U kunt het doen zonder een extra bibliotheek te gebruiken, zoals ...

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

Als invoer:

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

Of ook gebruik bibliotheken, zoals de PCF8574 die u kunt download hier en gebruik een soortgelijke code uit het voorbeeld zelf dat bij deze bibliotheek wordt geleverd:

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


Wees de eerste om te reageren

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.