PCF8574: Pri I2C I / O Expander por Arduino

PCF8574 TI CHIP

Vi certe aŭdis pri la IC PCF8574, blato aĉetebla aparte aŭ jam muntita sur modulo kiel multaj aliaj Elektronikaj komponantoj por faciligi vian integriĝon kun via Arduino-tabulo. Ĉi-kaze ĝi estas etendilo de la enigoj kaj eliroj por la I2C-buso.

Vi eble pensas, ke Arduino jam havas sian propran integrita I2C-buso, kaj ĝi estas vera. Sed la PCF8574 povas helpi etendi tiun buson preter la limoj de via disvolva tabulo, kio povas esti de granda helpo por iuj fabrikantoj, kiuj bezonas pli ol nur kion provizas Arduino.

Kio estas la I2C-buso?

Arduino UNO milis-funkcioj

La nomo I2C devenas Inter-Integra Cirkvito aŭ inter-integritaj cirkvitoj. Ĝia versio 1.0 estis kreita en 1992 de Philips. Tiam dua 2.1 venus en 2000 kaj hodiaŭ ĝi fariĝis normo (je 100 kbit / s, kvankam ĝi permesas ĝis 3.4 Mbit / s maksimume) kiam la patento eksvalidiĝis en 2006 kaj povas esti uzata libere.

Nuntempe ĝi estas vaste uzata en la industrio por komunikado, kaj ankaŭ tre ŝatata de fabrikantoj pro iliaj projektoj komuniki malsamajn mikroregilojn kaj flankaparatojn integritajn en unu IC.

El I2C estas buso bone konata per seria komunikado. Ĝi uzas sinkronan komunikan protokolon kun nur 2 kanaloj (estas tria, sed ĝi estas kunligita al referenco aŭ GND), fakte ĝi ankaŭ estas konata kiel TWI (Du Drata Interfaco):

  • Unu por la horloĝo (SCL).
  • Aliaj por datumoj (SDA).
Ambaŭ estas malfermaj drenaj CMOS-ligoj kaj postulas streĉajn rezistilojn. Ankaŭ, se unu aparato transdonas 0 kaj alia 1, povus esti problemoj, tial la linio estas ĉiam agordita al 1 (alta nivelo) kaj la aparatoj ĉiam transdonas 0 (malalta nivelo).

Tio implicas, ke la mastro kaj sklavo ili sendas datumojn per la sama kablo aŭ trako, kiun regas la unua, kiu generas la horloĝan signalon. Ĉiu el la ekstercentraj aparatoj konektitaj al la I2C-buso havos unikan adreson asignitan, por direkti la transsendojn. Sed ne necesas, ke la majstro estu ĉiam la sama (multmajstro), estas ĉiam li, kiu iniciatas la translokigon.

Kiel mi jam klarigis en la artikolo pri Arduino I2C Mi antaŭe menciis, ĉiu tabulo havas ĉi tiujn I2C-ligojn en diversaj lokoj. Estas io, kion vi devas memori, por povi uzi ĝin ĝuste en ĉiu versio de la plato:

  • Arduino UNO: SDA estas en A4 kaj SCK en A5
  • Arduino Nano: same kiel la antaŭa.
  • Arduino Mini Pro: same.
  • Arduino Mega: SDA estas sur pinglo 20 kaj SCK sur 21.
  • Pliaj informoj pri platoj.

Vi jam scias, ke vi povas uzi la I2C por viaj skizoj facile, ekde la Wire.h biblioteko kun diversaj funkcioj por ĉi tiu seria komunikado:

  • komenci (): komencu la Dratan bibliotekon kaj specifu ĉu ĝi estas mastro aŭ sklavo
  • petoDe (): uzata de la mastro por peti datumojn de la sklavo.
  • beginTransmission (): komencu dissendon per sklavo.
  • endTransmission (): fina transdono.
  • skribi ()- Skribu datumojn de sklavo responde al peto de la mastro, aŭ vi povas vicigi transsendon de mastro.
  • disponebla (): redonos la legotan nombron da bajtoj.
  • legi (): legi bajton transdonitan de sklavo al mastro aŭ inverse.
  • onRiceive (): Vokas funkcion kiam sklavo ricevas transdonon de mastro.
  • onRequest (): Alvokas funkcion kiam sklavo petas datumojn de mastro.

para pli da informoj pri programado kaj funkcioj de Arduino vi povas elŝuti niajn PDF-lernilo.

Kio estas la PCF8574?

Modulo PCF8574

La PCF8574 estas I2C-busaj ciferecaj enigaĵoj kaj eliroj (I / O) ekspansiiĝas. Ĝi povas esti fabrikita de diversaj fabrikantoj, krom havi ĝin havebla en IC-oj kaj moduloj. Ĉiukaze estas tre praktike konekti ĝin al via Arduino-plato kaj havi la kapablon regi pli da aparatoj ol la patrino-plato permesas.

El PCF8574 pinout Ĝi estas simpla, ĉar ĝi nur inkluzivas 8-pinoj kvazaŭdirekta (P0-P7 kie la blatoj por komuniki estas konektitaj), kaj aliflanke vi havas la SDA kaj SCL, kiujn vi devas konekti al la Arduino-tabulo, same kiel VCC kaj GND por ankaŭ funkciigi la modulon. Kaj ne forgesu la tri adresajn pinglojn A0, A1, A2 por elekti al kiuj el la aparatoj la komunikado estas direktita ...

PCF8574 pinout

Posedas aliaj ecoj ke vi sciu:

  • Ĝiaj ligoj, estante malferma drenaĵo, povas esti uzata kaj kiel enigoj kaj eliroj.
  • La pintfluo ĝi estas 25mA kiam ĝi funkcias kiel eligo (lavujo, kiam kurento fluas al PCF8574) kaj 300 µA (fonto, kurento fluas de PCF8574).
  • La streĉo nutrado estas 2.5 kaj 6v. La anstataŭa konsumo estas tre malalta, nur 10 µA.
  • Ĉiuj rezultoj havas klinkojn, por subteni la ŝtaton sen bezono de eksteraj agoj. Vi devas agi nur kiam vi volas ŝanĝi la staton.
  • Vi povas akiri 8 eblaj direktoj, tio estas ĝis 8 aparatoj por komuniki kun aŭ uzi 8 modulojn por pligrandigi ĝin ĝis 64 aparatoj. La adresoj (pingloj A0, A1, A2) estos:
    • 000: adreso 0x20
    • 001: adreso 0x21
    • 010: adreso 0x22
    • 011: adreso 0x23
    • 100: adreso 0x24
    • 101: adreso 0x25
    • 110: adreso 0x26
    • 111: adreso 0x27
  • Agnoskas interrompo (INT) per speciala linio por detekti datumojn sen konstante kontroli.

Integriĝo kun Arduino

Ekrankopio de Arduino IDE

La ligo kun Arduino estas tre simpla, vi nur devas konekti Vcc kun la 5v-pinglo de la Arduino-tabulo, kaj GND kun GND de Arduino. Aliflanke, la pingloj de la modulo PCF8574 SDA kaj SCL povas esti konekti kun pingloj 14 (A5 SCL) kaj 15 (A4 SDA). Nur per tio ĝi funkcius, evidente vi povas uzi la Px por konekti la aparatojn, kiujn vi volas komuniki ...

Tiam ĝi nur mankus komencu per ekzempla skizo en Arduino IDE. Vi povas fari ĝin sen uzi plian bibliotekon kiel ...

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

Kiel enigo:

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

Aŭ ankaŭ uzi bibliotekojn, kiel ekzemple la PCF8574, kiun vi povas elŝuti ĉi tie kaj uzu kodon similan al ĉi tiu el la ekzemplo mem kun ĉi tiu biblioteko:

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


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

Estu la unua por komenti

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita per *

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.