Persyaratan umum saat bekerja dengan MCU adalah kebutuhan untuk menambahkan lebih banyak I/O digital daripada yang didukung perangkat secara asli. PCF8574 adalah salah satu metode penambahan jalur yang lebih populer karena menggunakan bus I2C yang hanya membutuhkan 2 jalur di MCU. Ini menyediakan 8 jalur I/O digital tambahan, yang dapat dengan mudah diperluas hingga 64.
Key features of PCF8574 I2C I/O expansion
- 8 bi-directional data lines
- Loop-thru feature allows expansion of up to 8 modules / 64 data lines
- I2C interface with jumper adjustable addresses
- Interrupt output capability
- 3.3V and 5V compatible.
I2C Interface
Modul ini memiliki antarmuka I2C yang mudah digunakan yang dapat dikonfigurasi untuk menggunakan salah satu dari delapan alamat I2C yang berbeda jika Anda ingin menggunakan beberapa modul dalam sistem yang sama atau jika Anda mengalami konflik alamat dengan perangkat lain.
Ada tiga lompatan alamat (A0-A2) yang menentukan alamat I2C mana yang akan digunakan. Saat dikirim, semua jumper ini disetel ke sisi '-', yaitu ground atau LOW, seperti yang ditunjukkan pada gambar. Sisi '+' adalah Vcc atau TINGGI.
I/O Functionality
I/O didefinisikan sebagai quasi-bidirectional. I/O quasi-bidirectional adalah port input atau output tanpa menggunakan register kontrol arah. Ketika diatur sebagai input, pin bertindak sebagai input normal. Saat disetel sebagai output, perangkat PCF8574 menggerakkan output RENDAH dengan kemampuan sink hingga 25mA, tetapi saat menggerakkan output TINGGI, mereka hanya ditarik tinggi dengan pull-up internal yang lemah. Itu memungkinkan perangkat eksternal untuk mengalahkan pin dan mendorongnya RENDAH.
Perangkat menyala dengan 8 jalur data yang semuanya diatur sebagai input.
Saat menggunakan pin sebagai input, pin disetel ke HIGH oleh MCU, yang mengaktifkan pull-up internal 100 uA yang lemah ke Vcc. Mereka akan terbaca TINGGI jika tidak ada input atau jika pin digerakkan TINGGI oleh sinyal eksternal tetapi dapat digerakkan RENDAH oleh sinyal eksternal yang dapat dengan mudah mengesampingkan pull-up yang lemah.
Jika digunakan sebagai output, pin tersebut dapat digerakkan LOW oleh MCU dengan menulis LOW ke pin tersebut. Pull-down yang kuat dihidupkan dan tetap aktif agar pin tetap ditarik RENDAH. Jika pin didorong TINGGI oleh MCU, pull-up yang kuat dihidupkan untuk waktu yang singkat untuk menarik pin TINGGI dengan cepat, dan kemudian pull-up 100uA yang lemah dihidupkan kembali untuk menjaga pin TINGGI.
Port I/O sepenuhnya independen satu sama lain, tetapi dikontrol oleh byte data baca atau tulis yang sama.
How I2c Works
I2C bekerja dengan dua kabelnya, SDA (jalur data) dan SCL (jalur jam).
Kedua saluran ini adalah saluran terbuka tetapi ditarik dengan resistor.
Biasanya, ada satu master dan satu atau beberapa slave di telepon, meskipun bisa ada beberapa master. Kita akan membicarakannya nanti.
Baik master maupun slave dapat mengirimkan atau menerima data. Oleh karena itu, perangkat dapat berada di salah satu dari empat status berikut: master mengirimkan, master menerima, mengirimkan slave, dan menerima slave.
Jika pin diatur menjadi output dan didorong RENDAH, penting agar sinyal eksternal juga tidak mencoba menggerakkannya TINGGI atau arus berlebih dapat mengalir dan merusak bagian tersebut.
Setiap kali register internal dibaca, nilai yang dikembalikan tergantung pada tegangan aktual atau status pin.
Library
You can find my library here.
Constructor
Di konstruktor, Anda harus memberikan alamat i2c. Anda dapat menggunakan pin A0, A1, dan A2 untuk mengubah alamat, dan Anda dapat menemukan nilai alamat di sini (untuk memeriksa alamat, gunakan panduan ini I2cScanner).
Shematic Diagram :
Berikut adalah diagram rangkaian interfacing PCF8574 dengan board Arduino UNO untuk mengendalikan 8 buah LED.
Components Required
- Arduino UNO (or any Arduino Board)
- PCF8574 IO Expander Board
- Connecting Wires
- 5V Power Supply
- 8 x LEDs
- 8 x 330Ω Resistors
Coding di Arduino :
Untuk Menyelesaikan Alamat Slave I2C.
Pertama, kita harus mengetahui alamat slave bus I2C dari Modul PCF8574. Gunakan kode berikut untuk menghitung alamat Modul. Dalam kasus saya, ketika pin A0, A1 dan A2 terhubung ke LOW, alamatnya ternyata 0x20. Jadi, saya akan menggunakan alamat ini dalam kode saya yang sebenarnya. Untuk mengetahui alamat Slave I2C pakai software I2C Scanner.
/*
* PCF8574 GPIO Port Expand
* https://zentronic.co.id
*
* PCF8574 ----- Arduino UNO R3
* A0 ----- GRD
* A1 ----- GRD
* A2 ----- GRD
* VSS ----- GRD
* VDD ----- 5V/3.3V
* SDA ----- A4(PullUp)
* SCL ----- A5(PullUp)
*
* P0 ----------------- LED0
* P1 ----------------- LED1
* P2 ----------------- LED2
* P3 ----------------- LED3
* P4 ----------------- LED4
* P5 ----------------- LED5
* P6 ----------------- LED6
* P7 ----------------- LED7
*
*/
#include "Arduino.h"
#include "PCF8574.h" // https://github.com/xreef/PCF8574_library
// Set i2c address
PCF8574 pcf8574(0x20);
void setup()
{
Serial.begin(9600);
// Set pinMode to OUTPUT
for(int i=0;i<8;i++) {
pcf8574.pinMode(i, OUTPUT);
}
pcf8574.begin();
}
void loop()
{
static int pin = 0;
pcf8574.digitalWrite(pin, HIGH);
delay(1000);
pcf8574.digitalWrite(pin, LOW);
delay(1000);
pin++;
if (pin > 7) pin = 0;
}
Penjelasan :
Karena Modul PCF8574 bekerja pada Komunikasi I2C, kita harus menggunakan Pin I2C dari Arduino untuk mengontrol Pin IO modul. Pin A4 dan A5 Arduino UNO adalah Pin I2C dimana A4 adalah pin SDA (Data) dan A5 adalah pin SCL (Clock).
Hubungkan pin ini ke Pin SDA dan SCL yang sesuai pada Board PCF8574. Sekarang, sambungkan Pin VCC dan GND dari modul ke +5V dan pin GND dari Arduino.
Untuk menguji proyek ini, mari kita sambungkan beberapa LED ke Port IO Modul PCF8574 sehingga kita dapat mengontrolnya menggunakan Arduino kita. Jadi, sambungkan 8 LED dengan resistor pembatas arus yang sesuai antara VCC dan Port IO.
CATATAN: Saya tidak menghubungkan resistor pembatas arus seri dalam diagram rangkaian. Tapi saya sarankan Anda untuk menghubungkan mereka, hanya untuk berada di sisi yang aman.
CATATAN: Disarankan untuk menggunakan catu daya 5V eksternal untuk LED dan tidak menyalakan LED dari Papan Arduino.
Pengerjaan proyek ini sangat sederhana. Saya telah menghubungkan PCF8574 dengan Arduino menggunakan Komunikasi I2C. Setelah menentukan alamat slave Modul PCF8574, kita harus memulai Komunikasi I2C menggunakan alamat ini.
Karena LED terhubung ke port IO, yang harus Anda lakukan hanyalah mengirim pola kode pengalih LED yang berbeda dalam format HEX.
Karena I2C tidak menggunakan pin IO Digital Arduino yang ada, Anda mendapatkan total 21 Pin IO pada papan Arduino UNO Anda (13 pada Arduino UNO dan 8 pada Port IO PCF8574), yang dapat Anda gunakan untuk yang lebih besar proyek.
Ringkasan
Sebuah proyek sederhana ditanamkan
di sini di mana jumlah Pin IO dari Board Arduino UNO ditingkatkan dengan
menghubungkan PCF8574 dengan Arduino. Dengan menggunakan modul expander IO ini,
Anda dapat menghubungkan sejumlah perangkat IO seperti Sensor Suhu, Sensor
Kelembaban, Layar LCD 16×2, LED Status, Relay, Motor dll. tanpa perlu
mengkhawatirkan jumlah Pin IO.
Tidak ada komentar:
Posting Komentar