PCF8574: Mengenai I2C I / O Expander untuk Arduino

PCF8574 TI CIPTA

Anda pasti pernah mendengar tentang IC PCF8574, cip yang boleh dibeli secara berasingan atau sudah dipasang pada modul seperti yang lain Komponen elektronik untuk memudahkan penyatuan anda dengan papan Arduino anda. Dalam kes ini, ini adalah pemanjangan input dan output untuk bas I2C.

Anda mungkin berfikir bahawa Arduino sudah mempunyai yang tersendiri bas I2C bersepadu, dan memang benar. Tetapi PCF8574 dapat membantu memperluas bas itu melebihi had papan pengembangan anda, yang dapat membantu banyak pembuat yang memerlukan lebih dari sekadar yang disediakan oleh Arduino.

Apakah bas I2C?

Arduino UNO fungsi milis

Nama I2C berasal Litar Bersepadu atau litar bersepadu. Versi 1.0 dibuat pada tahun 1992 oleh Philips. Kemudian 2.1 kedua akan datang pada tahun 2000 dan hari ini sudah menjadi standar (pada 100 kbit / s, walaupun memungkinkan hingga maksimum 3.4 Mbit / s) ketika paten itu habis pada tahun 2006 dan dapat digunakan secara bebas.

Pada masa ini ia banyak digunakan dalam industri untuk komunikasi, dan juga sangat dihargai oleh pembuat untuk projek mereka untuk menyampaikan mikrokontroler dan periferal yang berbeza yang disatukan dalam satu IC.

El I2C adalah bas komunikasi bersiri yang terkenal. Ia menggunakan protokol komunikasi segerak dengan hanya 2 saluran (ada yang ketiga, tetapi digabungkan dengan rujukan atau GND), sebenarnya ia juga dikenali sebagai TWI (Two Wire Interface):

  • Satu untuk jam (SCL).
  • Lain untuk data (SDA).
Kedua-duanya adalah sambungan CMOS longkang terbuka dan memerlukan perintang penarik. Juga, jika satu peranti menghantar 0 dan yang lain 1, mungkin ada masalah, itulah sebabnya saluran selalu diatur ke 1 (tingkat tinggi) dan perangkat selalu mengirimkan 0 (tingkat rendah).

Itu menunjukkan bahawa tuan dan hamba mereka menghantar data melalui kabel atau trek yang sama, yang dikendalikan oleh yang pertama yang menghasilkan isyarat jam. Setiap peranti periferal yang disambungkan ke bas I2C akan mempunyai alamat unik yang diberikan, untuk mengarahkan transmisi. Tetapi tidak semestinya guru selalu sama (multi-guru), selalu dia yang memulakan pertukaran.

Seperti yang telah saya jelaskan dalam artikel mengenai Arduino I2C Saya merujuk sebelumnya, setiap papan mempunyai sambungan I2C ini di tempat yang berbeza. Ini adalah sesuatu yang harus anda ingat untuk dapat menggunakannya dengan betul dalam setiap versi papan:

  • Arduino UNO: SDA berada di A4 dan SCK di A5
  • Arduino Nano: sama seperti sebelumnya.
  • Arduino Mini Pro: sama.
  • Arduino Mega: SDA berada pada pin 20 dan SCK pada 21.
  • Lebih banyak maklumat mengenai pinggan.

Anda sudah tahu bahawa anda boleh menggunakan I2C untuk lakaran anda dengan mudah, sejak Perpustakaan Wire.h dengan pelbagai fungsi untuk komunikasi bersiri ini:

  • bermula (): mulakan perpustakaan Wire dan tentukan apakah itu master atau slave
  • permintaanDari (): digunakan oleh master untuk meminta data dari hamba.
  • permulaanPenghantaran (): mulakan penghantaran dengan hamba.
  • penghantaran akhir (): penghantaran akhir.
  • tulis ()- Tulis data dari hamba sebagai respons terhadap permintaan dari master, atau anda boleh mengantri transmisi master.
  • ada (): akan mengembalikan bilangan bait untuk dibaca.
  • baca (): membaca bait yang dihantar dari hamba kepada tuan atau sebaliknya.
  • onMenerima (): Memanggil fungsi ketika hamba menerima transmisi dari master.
  • atas permintaan (): Memanggil fungsi ketika hamba meminta data dari master.

kepada más Informacion mengenai pengaturcaraan dan fungsi Arduino anda boleh memuat turun kami Tutorial PDF.

Apakah PCF8574 itu?

Modul PCF8574

PCF8574 adalah Pengedar input dan output digital I2C (I / O) pengembang. Ia boleh dihasilkan oleh pelbagai pengeluar, selain tersedia dalam IC dan modul. Walau apa pun, sangat praktikal untuk menyambungkannya ke papan Arduino anda dan mempunyai keupayaan untuk mengawal lebih banyak peranti daripada yang dibenarkan oleh motherboard.

El Pinout PCF8574 Ia mudah, kerana hanya merangkumi Pine 8 semu-arah (P0-P7 di mana cip untuk berkomunikasi disambungkan), dan di sisi lain anda mempunyai SDA dan SCL yang mesti anda sambungkan ke papan Arduino, serta VCC dan GND untuk juga menghidupkan modul. Dan jangan lupa tiga pin alamat A0, A1, A2 untuk memilih peranti mana yang diarahkan komunikasi ...

Pinout PCF8574

Mempunyai ciri-ciri lain yang anda harus tahu:

  • Sambungannya, sebagai longkang terbuka, boleh digunakan sebagai input dan output.
  • La arus puncak 25mA ketika ia bertindak sebagai output (sink, ketika arus mengalir ke arah PCF8574) dan 300 µA (sumber, arus mengalir dari PCF8574).
  • La ketegangan bekalan kuasa adalah 2.5 dan 6v. Penggunaan siap sedia sangat rendah, hanya 10 µA.
  • Semua output mempunyai selak, untuk mengekalkan keadaan tanpa memerlukan tindakan luaran. Anda hanya perlu bertindak apabila anda mahu mengubah keadaan.
  • Anda dapat 8 arahan yang mungkin, iaitu, sehingga 8 peranti untuk berkomunikasi dengan atau menggunakan 8 modul untuk mengembangkannya hingga 64 peranti. 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) oleh garis khas untuk mengesan data tanpa pemantauan berterusan.

Integrasi dengan Arduino

Tangkapan skrin Arduino IDE

Sambungan dengan Arduino sangat mudah, anda hanya perlu menyambungkan Vcc dengan pin 5v papan Arduino, dan GND dengan GND Arduino. Sebaliknya, pin modul PCF8574 SDA dan SCL boleh sambungkan dengan pin 14 (A5 SCL) dan 15 (A4 SDA). Hanya dengan itu ia akan mula berfungsi, jelas anda boleh menggunakan Px untuk menyambungkan peranti yang anda ingin berkomunikasi ...

Maka ia akan hilang mulakan dengan lakaran contoh di Arduino IDE. Anda boleh melakukannya tanpa menggunakan perpustakaan tambahan seperti ...

#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 input:

#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 gunakan perpustakaan, seperti PCF8574 yang anda boleh muat turun di sini dan gunakan kod yang serupa dengan ini dari contoh itu sendiri yang disertakan dengan perpustakaan 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() 
{
}


Kandungan artikel mematuhi prinsip kami etika editorial. Untuk melaporkan ralat, klik di sini.

Menjadi yang pertama untuk komen

Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.