PCF8574: Babagan I2C I / O Expander kanggo Arduino

PCF8574 TI CHIP

Sampeyan mesthi wis krungu babagan IC PCF8574, chip sing bisa dituku kanthi kapisah utawa wis dipasang ing modul kaya liyane Komponen elektronik kanggo nggampangake integrasi karo dewan Arduino. Ing kasus iki, iki minangka tambahan input lan output kanggo bis I2C.

Sampeyan bisa uga mikir manawa Arduino wis duwe dhewe bis I2C terpadu, lan iku bener. Nanging PCF8574 bisa ngewangi bis kasebut ngluwihi watesan papan pangembangan sampeyan, sing bisa dadi pitulungan gedhe kanggo sawetara produsen sing mbutuhake luwih saka mung sing disedhiyakake dening Arduino.

Apa bis I2C?

Arduino UNO fungsi millis

Jeneng I2C asale Sirkuit Antar-Integrasi utawa sirkuit inter-integrated. Versi 1.0 digawe ing taun 1992 dening Philips. Banjur 2.1 liya bakal teka ing taun 2000 lan saiki wis dadi standar (ing 100 kbit / s, sanajan nganti maksimal 3.4 Mbit / s) nalika paten kadaluwarsa ing taun 2006 lan bisa digunakake kanthi bebas.

Saiki digunakake ing industri kanggo komunikasi, lan uga dihargai dening para produsen proyek kanggo komunikasi mikrokontroler lan periferal sing beda-beda sing ana ing siji IC.

El I2C bis kondhang saka komunikasi serial. Nggunakake protokol komunikasi sinkronis kanthi mung 2 saluran (ana sing katelu, nanging ditambah karo referensi utawa GND), nyatane uga dikenal kanthi jeneng TWI (Two Wire Interface):

  • Siji kanggo jam (SCL).
  • Liyane kanggo data (SDA).
Loro-lorone yaiku sambungan CMOS saluran terbuka lan mbutuhake resistor penarik. Salajengipun, yen siji piranti ngirim 0 lan liyane 1, bisa uga ana masalah, mula larik kasebut mesthi disetel dadi 1 (level dhuwur) lan piranti kasebut mesthi ngirim 0 (level sedheng).

Iki tegese yen master lan abdi dheweke ngirim data liwat kabel utawa trek sing padha, sing dikontrol karo sing pertama sing nggawe sinyal jam. Saben piranti periferal sing nyambung menyang bis I2C bakal duwe alamat unik sing ditugasake kanggo ngarahake transmisi. Nanging ora prelu master isih padha (multi-master), mesthi dheweke sing miwiti transfer.

Kaya sing wis dakkandhakake ing artikel ing Arduino I2C Kab Aku referensi sadurunge, saben papan duwe koneksi I2C iki ing macem-macem panggonan. Sampeyan kudu eling yen bisa nggunakake kanthi bener ing saben versi piring:

  • Arduino UNO: SDA ana ing A4 lan SCK ing A5
  • Arduino Nano Kab: padha karo sadurunge.
  • Arduino Mini Pro Kab: padha
  • Arduino Mega Kab: SDA ing pin 20 lan SCK ing 21.
  • Informasi liyane babagan piring.

Sampeyan wis ngerti manawa sampeyan bisa nggunakake I2C kanggo sketsa kanthi gampang, wiwit Perpustakaan Wire.h kanthi macem-macem fungsi kanggo komunikasi serial iki:

  • wiwiti (): wiwiti perpustakaan Wire lan pilih manawa master utawa budak
  • requestFrom (): digunakake master kanggo njaluk data saka babu.
  • startTransmission (): wiwiti transmisi karo abdi.
  • Pangiriman pungkasan (): transmisi pungkasan.
  • nulis ()- Tulis data saka abdi kanggo nanggepi panjaluk saka master, utawa sampeyan bisa ngantri transmisi master.
  • kasedhiya (): bakal ngasilake nomer bait kanggo diwaca.
  • waca (): maca bait sing dikirim saka abdi menyang master utawa kosok balene.
  • onReceive (): Nelpon fungsi nalika abdi nampa panularan saka master.
  • onRequest (): Nelpon fungsi nalika abdi njaluk data saka master.

para informasi liyane babagan program lan fungsi Arduino sing bisa didownload Tutorial PDF.

Apa PCF8574?

Modul PCF8574

PCF8574 yaiku a Input lan output digital bis I2C (I / O) expander. Bisa diproduksi dening macem-macem pabrikan, saliyane kasedhiya ing IC lan modul. Ing kasus apa wae, praktis banget kanggo nyambung menyang papan Arduino lan duwe kapasitas kanggo ngontrol luwih saka piranti sing diidini motherboard.

El Pinout PCF8574 Iku gampang, amarga mung kalebu 8 pines kuasi arah (P0-P7 ing endi chip kanggo komunikasi wis nyambung), lan ing sisih liyane sampeyan duwe SDA lan SCL sing kudu sampeyan sambung menyang papan Arduino, uga VCC lan GND kanggo uga modul kasebut. Lan aja lali telung pin ngarahake A0, A1, A2 kanggo milih piranti sing diarahake komunikasi ...

Pinout PCF8574

Nduweni fitur liyane sing sampeyan kudu ngerti:

  • Sambungane, dadi saluran terbuka, bisa digunakake minangka input lan output.
  • La arus puncak iku 25mA nalika tumindak minangka output (sink, nalika arus mili menyang PCF8574) lan 300 µA (sumber, arus saiki saka PCF8574).
  • La ketegangan catu daya 2.5 lan 6v. Konsumsi sing sithik sithik banget, mung 10 µA.
  • Kabeh output duwe latches, kanggo njaga negara tanpa prelu tumindak njaba. Sampeyan mung kudu tumindak nalika pengin ngganti negara.
  • Sampeyan bisa entuk 8 bisa arah, yaiku nganti 8 piranti kanggo komunikasi karo utawa nggunakake 8 modul kanggo nggedhekake nganti 64 piranti. Alamat (pin A0, A1, A2) yaiku:
    • 000: alamat 0x20
    • 001: alamat 0x21
    • 010: alamat 0x22
    • 011: alamat 0x23
    • 100: alamat 0x24
    • 101: alamat 0x25
    • 110: alamat 0x26
    • 111: alamat 0x27
  • Ngakoni gangguan (INT) dening baris khusus kanggo ndeteksi data tanpa ngawasi kanthi terus-terusan.

Integrasi karo Arduino

Screenshot saka Arduino IDE

Sambungan karo Arduino gampang banget, sampeyan mung kudu nyambungake Vcc karo pin 5v saka papan Arduino, lan GND karo GND saka Arduino. Saliyane, pin modul PCF8574 SDA lan SCL bisa sambungake karo pin 14 (A5 SCL) lan 15 (A4 SDA). Mung kanthi iku bakal mulai bisa digunakake, jelas sampeyan bisa nggunakake Px kanggo nyambungake piranti sing pengin dikomunikasikake ...

Banjur mung bakal ilang miwiti karo conto sketsa ing Arduino IDE. Sampeyan bisa nindakake tanpa nggunakake perpustakaan tambahan kayata ...

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

Minangka masukan:

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

Utawa uga nggunakake perpustakaan, kayata PCF8574 sing sampeyan bisa download kene lan gunakake kode sing padha karo iki kayata conto sing ana ing perpustakaan iki:

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


Konten artikel kasebut sesuai karo prinsip kita yaiku etika editorial. Kanggo nglaporake klik kesalahan Kene.

Dadi pisanan komentar

Ninggalake komentar sampeyan

Panjenengan alamat email ora bisa diterbitake. Perangkat kothak ditandhani karo *

*

*

  1. Tanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Kontrol SPAM, manajemen komentar.
  3. Legitimasi: idin sampeyan
  4. Komunikasi data: Data kasebut ora bakal dikomunikasikake karo pihak katelu kajaba kanthi kewajiban ukum.
  5. Panyimpenan data: Database sing dianakake dening Occentus Networks (EU)
  6. Hak: Kapan wae sampeyan bisa matesi, mulihake lan mbusak informasi sampeyan.