PCF8574: Despre I2C I / O Expander pentru Arduino

PCF8574 TI CHIP

Cu siguranță ați auzit de PCF8574 IC, un cip care poate fi achiziționat separat sau deja montat pe un modul ca multe altele Componente electronice pentru a vă facilita integrarea cu placa Arduino. În acest caz, este un extender al intrărilor și ieșirilor pentru autobuzul I2C.

S-ar putea să credeți că Arduino are deja propriile sale autobuz I2C integrat, și este adevărat. Dar PCF8574 vă poate ajuta să extindeți autobuzul dincolo de limitele plăcii dvs. de dezvoltare, ceea ce poate fi de mare ajutor pentru unii producători care au nevoie de mai mult decât ceea ce oferă Arduino.

Ce este autobuzul I2C?

Arduino UNO funcții de milis

Numele I2C provine de la Circuit inter-integrat sau circuite inter-integrate. Versiunea 1.0 a fost creată în 1992 de Philips. Apoi, un al doilea 2.1 ar veni în 2000 și astăzi a devenit un standard (la 100 kbit / s, deși permite maxim 3.4 Mbit / s) când brevetul a expirat în 2006 și poate fi utilizat în mod liber.

În prezent este utilizat pe scară largă în industrie pentru comunicareși, de asemenea, foarte apreciat de producători pentru proiectele lor de comunicare a diferitelor microcontrolere și periferice integrate într-un singur IC.

El I2C este un autobuz bine cunoscută comunicare în serie. Folosește un protocol de comunicație sincronă cu doar 2 canale (există un al treilea, dar este cuplat la referință sau GND), de fapt este cunoscut și sub numele de TWI (Two Wire Interface):

  • Unul pentru ceas (SCL).
  • Altele pentru date (SDA).
Ambele sunt conexiuni CMOS cu drenaj deschis și necesită rezistențe de tragere. De asemenea, dacă un dispozitiv transmite un 0 și altul un 1, ar putea exista probleme, de aceea linia este întotdeauna setată la 1 (nivel înalt) și dispozitivele transmit întotdeauna 0 (nivel scăzut).

Aceasta implică faptul că stăpân și sclav trimit date prin același cablu sau cale, care este controlată de primul care generează semnalul de ceas. Fiecare dintre dispozitivele periferice conectate la magistrala I2C va avea atribuită o adresă unică, pentru a direcționa transmisiile. Dar nu este necesar ca stăpânul să fie întotdeauna același (multi-stăpân), el este întotdeauna cel care inițiază transferul.

După cum am explicat deja în articolul de pe Arduino I2C Am făcut referire mai devreme, fiecare placă are aceste conexiuni I2C în locuri diferite. Este ceva de care trebuie să țineți cont pentru a-l putea folosi corect în fiecare versiune de placă:

  • Arduino UNO: SDA este în A4 și SCK în A5
  • ArduinoNano: la fel ca anterior.
  • Arduino MiniPro: la fel.
  • arduino mega: SDA este pe pinul 20 și SCK pe 21.
  • Mai multe informații despre plăci.

Știți deja că puteți utiliza I2C pentru schițele dvs. cu ușurință, din moment ce Biblioteca Wire.h cu diverse funcții pentru această comunicație serială:

  • începe (): porniți biblioteca Wire și specificați dacă este master sau slave
  • o cerere de la (): folosit de comandant pentru a solicita date de la sclav.
  • beginTransmission (): începe transmisia cu slave.
  • endTransmission (): transmisie finală.
  • scrie()- Scrieți date de la un sclav ca răspuns la o cerere din partea masterului sau puteți coada transmiterii unui master
  • disponibil (): va returna numărul de octeți de citit.
  • citit(): citiți un octet transmis de la un sclav la un maestru sau invers.
  • onReceive (): Apelează o funcție atunci când un sclav primește o transmisie de la un maestru.
  • la cerere (): Apelează o funcție atunci când un sclav solicită date de la un maestru.

la mai mult despre programarea și funcțiile Arduino le puteți descărca Tutorial PDF.

Ce este PCF8574?

Modul PCF8574

PCF8574 este un Extensie intrări și ieșiri digitale (I / O) a magistralei I2C. Poate fi fabricat de diverși producători, pe lângă faptul că îl are disponibil în circuite integrate și module. În orice caz, este foarte practic să o conectați la placa Arduino și să aveți capacitatea de a controla mai multe dispozitive decât permite placa de bază.

El PCF8574 pinout Este simplu, deoarece include doar 8 pini cvasidirecțional (P0-P7 unde sunt conectate cipurile pentru a comunica), iar pe de altă parte aveți SDA și SCL pe care trebuie să le conectați la placa Arduino, precum și VCC și GND pentru a alimenta modulul. Și nu uitați cei trei pini de adresare A0, A1, A2 pentru a alege către care dintre dispozitive este direcționată comunicarea ...

Pinout PCF8574

are Alte caracteristici că ar trebui să știți:

  • Conexiunile sale, fiind un canal de scurgere deschis, pot fi utilizate atât ca intrări, cât și ca ieșiri.
  • La curent de vârf este de 25mA când acționează ca o ieșire (scufundare, când curentul curge spre PCF8574) și 300 µA (sursă, curentul curge de la PCF8574).
  • La tensiune sursa de alimentare este de 2.5 și 6v. Consumul de stand-by este foarte mic, doar 10 µA.
  • Toate ieșirile au zăvoare, pentru a menține statul fără a fi nevoie de acțiuni externe. Trebuie să acționezi numai atunci când vrei să schimbi starea.
  • Puteți obține 8 direcții posibile, adică până la 8 dispozitive pentru a comunica cu sau folosind 8 module pentru ao extinde până la 64 de dispozitive. Adresele (pinii A0, A1, A2) vor fi:
    • 000: adresa 0x20
    • 001: adresa 0x21
    • 010: adresa 0x22
    • 011: adresa 0x23
    • 100: adresa 0x24
    • 101: adresa 0x25
    • 110: adresa 0x26
    • 111: adresa 0x27
  • admite întrerupere (INT) printr-o linie specială pentru detectarea datelor fără monitorizare constantă.

Integrare cu Arduino

Captură de ecran a Arduino IDE

Conexiunea cu Arduino este foarte simplă, trebuie doar să conectați Vcc cu pinul de 5v al plăcii Arduino și GND cu GND din Arduino. Pe de altă parte, pinii modulului PCF8574 SDA și SCL pot fi conectați cu pini 14 (A5 SCL) și 15 (A4 SDA). Numai cu asta ar începe să funcționeze, evident, puteți utiliza Px pentru a conecta dispozitivele pe care doriți să le comunicați ...

Atunci ar lipsi doar începeți cu un exemplu de schiță în Arduino IDE. Puteți face acest lucru fără a utiliza o bibliotecă suplimentară, cum ar fi ...

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

Ca intrare:

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

Sau, de asemenea folosește biblioteci, cum ar fi PCF8574 pe care îl puteți descărcați aici și utilizați cod similar cu acesta din exemplul în sine care vine împreună cu această bibliotecă:

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


Fii primul care comenteaza

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.