PCF8574: Ongeveer I2C I / O-uitbreiding vir Arduino

PCF8574 TI CHIP

U het sekerlik gehoor van die IC PCF8574, 'n skyfie wat afsonderlik gekoop kan word of reeds op 'n module soos baie ander gemonteer kan word Elektroniese komponente om u integrasie met u Arduino-bord te vergemaklik. In hierdie geval is dit 'n verlengstuk van die insette en uitsette vir die I2C-bus.

U mag dink dat Arduino reeds sy eie het geïntegreerde I2C bus, en dit is waar. Maar die PCF8574 kan help om die bus buite die perke van u ontwikkelingsbord uit te brei, wat van groot hulp kan wees vir sommige vervaardigers wat meer nodig het as net wat Arduino bied.

Wat is die I2C-bus?

Arduino UNO millis funksies

Die naam I2C kom van Inter-geïntegreerde stroombaan of inter-geïntegreerde stroombane. Die weergawe 1.0 is in 1992 deur Philips geskep. Dan sou daar in 2.1 'n tweede 2000 wees en vandag het dit 'n standaard geword (teen 100 kbit / s, hoewel dit tot 3.4 Mbit / s maksimum toelaat) toe die patent in 2006 verval het en vrylik gebruik kan word.

Tans word dit wyd in die bedryf gebruik vir kommunikasie, en word ook baie waardeer deur vervaardigers vir hul projekte om verskillende mikrobeheerders en randapparatuur in een IC te kommunikeer.

El I2C is 'n bus bekende reekskommunikasie. Dit gebruik 'n sinchrone kommunikasieprotokol met slegs 2 kanale (daar is 'n derde, maar dit is gekoppel aan verwysing of GND), dit staan ​​in werklikheid ook bekend as TWI (Two Wire Interface):

  • Een vir die klok (SCL).
  • Ander vir data (SDA).
Albei is CMOS-verbindings met oop dreinering en benodig uittreksels. Verder, as een toestel 'n 0 en 'n ander a 1 uitstuur, kan daar probleme wees, daarom is die lyn altyd ingestel op 1 (hoë vlak) en stuur die toestelle altyd 0 (lae vlak).

Dit impliseer dat die meester en slaaf hulle stuur data oor dieselfde kabel of spoor, wat beheer word deur die eerste een wat die kloksein genereer. Elk van die randapparate wat aan die I2C-bus gekoppel is, het 'n unieke adres om die uitsendings te stuur. Maar dit is nie nodig dat die onderwyser altyd dieselfde is nie (multi-onderwyser), dit is altyd hy wat die oordrag begin.

Soos ek reeds in die artikel oor Arduino I2C Ek het vroeër verwys, elke bord het hierdie I2C-verbindings op verskillende plekke. Dit is iets wat u in gedagte moet hou om dit in elke plaatweergawe behoorlik te kan gebruik:

  • Arduino UNO: SDA is in A4 en SCK in A5
  • Arduino Nano: dieselfde as die vorige.
  • Arduino Mini Pro: dieselfde.
  • Mega Arduino: SDA is op pen 20 en SCK op 21.
  • Meer inligting oor borde.

U weet reeds dat u die I2C maklik vir u sketse kan gebruik, aangesien die Wire.h-biblioteek met verskillende funksies vir hierdie seriële kommunikasie:

  • begin (): begin die draadbiblioteek en gee aan of dit 'n meester of slaaf is
  • versoekVan (): word deur die meester gebruik om data van die slaaf aan te vra.
  • begin uitsending (): begin uitsending met slaaf.
  • end Transmissie (): eindtransmissie.
  • skryf ()- Skryf data van 'n slaaf in antwoord op 'n versoek van die meester, of u kan die versending van 'n meester in die ry staan
  • beskikbaar (): gee die aantal grepe wat u moet lees.
  • lees (): lees 'n byte wat van 'n slaaf na 'n meester oorgedra word of andersom.
  • onReceive (): Noem 'n funksie wanneer 'n slaaf 'n uitsending van 'n meester ontvang.
  • op versoek (): Bel 'n funksie wanneer 'n slaaf data van 'n meester vra.

om meer inligting oor Arduino programmering en funksies kan u ons aflaai PDF handleiding.

Wat is die PCF8574?

PCF8574 module

Die PCF8574 is 'n I2C-bus digitale in- en uitsette (I / O) -uitbreider. Dit kan deur verskillende vervaardigers vervaardig word, benewens dat dit beskikbaar is in IC's en modules. In elk geval is dit baie prakties om dit aan u Arduino-bord te koppel en die vermoë te hê om meer toestelle te beheer as wat die moederbord dit toelaat.

El PCF8574 pinout Dit is eenvoudig, aangesien dit slegs die volgende insluit 8 dennene kwasi-rigting (P0-P7 waar die skyfies om te kommunikeer gekoppel is), en aan die ander kant het u die SDA en SCL wat u aan die Arduino-bord moet koppel, sowel as VCC en GND om die module ook aan te dryf. En vergeet nie die drie aanspreekpunte A0, A1, A2 om te kies na watter toestelle die kommunikasie gerig is nie ...

PCF8574 pinout

dit het Ander eienskappe dat u moet weet:

  • Die verbindings, wat 'n oop drein is, kan wees beide gebruik word as insette en uitsette.
  • La piekstroom dit is 25mA as dit as 'n uitgang dien (sink, wanneer stroom na PCF8574 vloei) en 300 µA (bron, stroom vloei vanaf PCF8574).
  • La spanning kragbron is 2.5 en 6v. Die bystandverbruik is baie laag, slegs 10 µA.
  • Alle uitsette grendel het, om die staat te handhaaf sonder dat daar eksterne optrede nodig is. U hoef slegs op te tree as u die toestand wil verander.
  • U kan 8 kry moontlike aanwysings, dit wil sê tot 8 toestelle om mee te kommunikeer of om 8 modules te gebruik om dit uit te brei tot 64 toestelle. Die adresse (pen A0, A1, A2) is:
    • 000: adres 0x20
    • 001: adres 0x21
    • 010: adres 0x22
    • 011: adres 0x23
    • 100: adres 0x24
    • 101: adres 0x25
    • 110: adres 0x26
    • 111: adres 0x27
  • Erken onderbreking (INT) deur 'n spesiale lyn om data op te spoor sonder om voortdurend te monitor.

Integrasie met Arduino

Kiekie van Arduino IDE

Die verbinding met Arduino is baie eenvoudig, u moet net Vcc verbind met die 5v-pen van die Arduino-bord en GND met GND van Arduino. Aan die ander kant kan die penne van die PCF8574 SDA en SCL module wees verbind met penne 14 (A5 SCL) en 15 (A4 SDA). Slegs daarmee sal dit begin werk, natuurlik kan u die Px gebruik om die toestelle wat u wil kommunikeer aan te sluit ...

Dan sou dit net ontbreek begin met 'n voorbeeldskets in Arduino IDE. U kan dit doen sonder om 'n ekstra biblioteek te gebruik, soos byvoorbeeld ...

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

As insette:

#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 biblioteke, soos die PCF8574 wat u kan laai hier af en gebruik soortgelyke kode uit die voorbeeld self wat saam met hierdie biblioteek kom:

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


Die inhoud van die artikel voldoen aan ons beginsels van redaksionele etiek. Klik op om 'n fout te rapporteer hier.

Wees die eerste om te kommentaar lewer

Laat u kommentaar

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk met *

*

*

  1. Verantwoordelik vir die data: Miguel Ángel Gatón
  2. Doel van die data: Beheer SPAM, bestuur van kommentaar.
  3. Wettiging: U toestemming
  4. Kommunikasie van die data: Die data sal nie aan derde partye oorgedra word nie, behalwe deur wettige verpligtinge.
  5. Datastoor: databasis aangebied deur Occentus Networks (EU)
  6. Regte: U kan u inligting te alle tye beperk, herstel en verwyder.