PCF8574: Tentang I2C I / O Expander untuk Arduino

PCF8574 TI CHIP

Anda pasti pernah mendengar tentang IC PCF8574, sebuah chip yang dapat dibeli secara terpisah atau sudah dipasang pada modul seperti banyak lainnya Komponen elektronik untuk memfasilitasi integrasi Anda dengan papan Arduino Anda. Dalam hal ini, ini adalah perpanjangan dari input dan output untuk bus I2C.

Anda mungkin mengira Arduino sudah memiliki sendiri bus I2C terintegrasi, dan itu benar. Tetapi PCF8574 dapat membantu memperluas bus itu melampaui batas papan pengembangan Anda, yang dapat sangat membantu bagi beberapa pembuat yang membutuhkan lebih dari sekedar apa yang disediakan Arduino.

Apa itu bus I2C?

Arduino UNO fungsi milis

Nama I2C berasal Sirkuit Antar Terpadu atau sirkuit antar-terintegrasi. Versi 1.0 dibuat pada tahun 1992 oleh Philips. Kemudian 2.1 kedua akan datang pada tahun 2000 dan hari ini telah menjadi standar (pada 100 kbit / dtk, meskipun memungkinkan hingga maksimum 3.4 Mbit / dtk) ketika paten berakhir pada tahun 2006 dan dapat digunakan secara bebas.

Saat ini banyak digunakan di industri untuk komunikasi, dan juga sangat dihargai oleh pembuatnya atas proyek mereka untuk mengkomunikasikan mikrokontroler dan periferal berbeda yang terintegrasi dalam satu IC.

El I2C adalah bus terkenal dari komunikasi serial. Ini menggunakan protokol komunikasi sinkron dengan hanya 2 saluran (ada yang ketiga, tetapi digabungkan ke referensi atau GND), sebenarnya juga dikenal sebagai TWI (Two Wire Interface):

  • Satu untuk jam (SCL).
  • Lainnya untuk data (SDA).
Keduanya adalah koneksi CMOS drain terbuka dan membutuhkan resistor pull-up. Selain itu, jika satu perangkat memancarkan 0 dan perangkat lainnya 1, mungkin ada masalah, itulah sebabnya saluran selalu disetel ke 1 (level tinggi) dan perangkat selalu memancarkan 0 (level rendah).

Itu menyiratkan bahwa tuan dan budak mereka mengirim data melalui kabel atau jalur yang sama, yang dikontrol oleh yang pertama yang menghasilkan sinyal clock. Setiap perangkat periferal yang terhubung ke bus I2C akan memiliki alamat unik yang ditetapkan, untuk mengarahkan transmisi. Tetapi tidak perlu bahwa master selalu sama (multi-master), selalu dialah yang memulai transfer.

Seperti yang sudah saya jelaskan di artikel di Arduino I2C Saya mereferensikan sebelumnya, setiap papan memiliki koneksi I2C ini di tempat yang berbeda. Ini adalah sesuatu yang harus Anda ingat untuk dapat menggunakannya dengan benar di setiap versi pelat:

Anda sudah tahu bahwa Anda dapat menggunakan I2C untuk sketsa Anda dengan mudah, sejak Perpustakaan Wire.h dengan berbagai fungsi untuk komunikasi serial ini:

  • mulai(): mulai pustaka Wire dan tentukan apakah itu master atau slave
  • requestFrom (): digunakan oleh master untuk meminta data dari slave.
  • beginTransmission (): mulai transmisi dengan budak.
  • endTransmission (): mengakhiri transmisi.
  • menulis()- Tulis data dari budak sebagai tanggapan atas permintaan dari master, atau Anda dapat mengantrekan transmisi master.
  • tersedia (): akan mengembalikan jumlah byte untuk dibaca.
  • Baca(): membaca byte yang dikirimkan dari budak ke master atau sebaliknya.
  • onReceive (): Memanggil fungsi saat budak menerima transmisi dari master.
  • dalam permintaan (): Memanggil fungsi ketika seorang budak meminta data dari master.

untuk informasi lebih lanjut tentang pemrograman Arduino dan fungsi yang dapat Anda unduh dari kami Tutorial PDF.

Apakah PCF8574 itu?

Modul PCF8574

PCF8574 adalah Expander input dan output digital (I / O) bus I2C. Ini dapat diproduksi oleh berbagai produsen, selain tersedia dalam IC dan modul. Bagaimanapun, sangat praktis untuk menghubungkannya ke papan Arduino Anda dan memiliki kapasitas untuk mengontrol lebih banyak perangkat daripada yang diizinkan motherboard.

El Pinout PCF8574 sederhana, karena hanya mencakup Pinus 8 quasi-directional (P0-P7 di mana chip untuk berkomunikasi terhubung), dan di sisi lain Anda memiliki SDA dan SCL yang harus Anda sambungkan ke papan Arduino, serta VCC dan GND untuk juga memberi daya pada modul. Dan jangan lupa tiga pin pengalamatan A0, A1, A2 untuk memilih perangkat mana yang akan menjadi tujuan komunikasi ...

Pinout PCF8574

Memiliki fitur lainnya yang harus Anda ketahui:

  • Koneksinya, menjadi saluran terbuka, bisa jadi digunakan baik sebagai input maupun output.
  • La arus puncak 25mA ketika bertindak sebagai output (sink, ketika arus mengalir menuju PCF8574) dan 300 µA (sumber, arus mengalir dari PCF8574).
  • La ketegangan catu daya adalah 2.5 dan 6v. Konsumsi siaga sangat rendah, hanya 10 µA.
  • Semua keluaran memiliki kait, untuk mempertahankan negara tanpa perlu tindakan eksternal. Anda hanya perlu bertindak ketika Anda ingin mengubah keadaan.
  • Anda bisa mendapatkan 8 arah yang mungkin, yaitu, hingga 8 perangkat untuk berkomunikasi dengan atau menggunakan 8 modul untuk mengembangkannya hingga 64 perangkat. Alamat (pin A0, A1, A2) adalah:
    • 000: alamat 0x20
    • 001: alamat 0x21
    • 010: alamat 0x22
    • 011: alamat 0x23
    • 100: alamat 0x24
    • 101: alamat 0x25
    • 110: alamat 0x26
    • 111: alamat 0x27
  • Mengaku gangguan (INT) dengan jalur khusus untuk mendeteksi data tanpa pemantauan terus-menerus.

Integrasi dengan Arduino

Tangkapan layar dari Arduino IDE

Koneksi dengan Arduino sangat sederhana, Anda hanya perlu menghubungkan Vcc dengan pin 5v dari papan Arduino, dan GND dengan GND dari Arduino. Di sisi lain, pin modul PCF8574 SDA dan SCL bisa terhubung dengan pin 14 (A5 SCL) dan 15 (A4 SDA). Hanya dengan itu akan mulai berfungsi, jelas Anda dapat menggunakan Px untuk menghubungkan perangkat yang ingin Anda komunikasikan ...

Maka itu hanya akan hilang mulai dengan contoh sketsa di Arduino IDE. Anda dapat melakukannya tanpa menggunakan pustaka tambahan seperti misalnya ...

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

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

Atau juga menggunakan perpustakaan, seperti PCF8574 yang Anda bisa download disini dan gunakan kode yang mirip dengan ini dari contoh itu sendiri yang disertakan dengan pustaka ini:

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


Jadilah yang pertama mengomentari

tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.