Arduino projelerinde LCD ekranlar, butonlar ve LED'ler arttıkça dijital pinler hızla tükenebilir. PCF8574 entegresi, I2C protokolünü kullanarak sadece 2 pin (SDA ve SCL) üzerinden mikrodenetleyicinize 8 adet ekstra dijital giriş/çıkış pini kazandırır. Üstelik adresleme pinleri sayesinde aynı hat üzerine 8 adet PCF8574 bağlanarak toplam pin sayısı 64'e kadar artırılabilir.

0x20 olur (PCF8574AT modellerinde 0x3F olabilir). Arduino Uno bağlantısı için VCC -> 5V, GND -> GND, SDA -> A4 ve SCL -> A5 hatları birleştirilmelidir.
#include <Wire.h>
// PCF8574 I2C adresi (Donanım kurulumunuza göre 0x20 veya 0x3F yapın)
const int pcfAddress = 0x20;
void setup() {
Wire.begin(); // I2C haberleşmesini başlatıyoruz
Serial.begin(9600); // Seri port ekranını başlatıyoruz
// PCF8574 üzerindeki tüm pinleri başlangıçta kapatıyoruz (Giriş veya High durumu)
Wire.beginTransmission(pcfAddress);
Wire.write(0xFF);
Wire.endTransmission();
}
void loop() {
// --- ÇIKIŞ ÖRNEĞİ (Sırayla LED yakıp söndürme) ---
// P0 pinine bağlı LED'i yakmak için binary 11111110 (0xFE) gönderiyoruz (Açık = 0, Kapalı = 1 mantığı)
Serial.println("P0 Aktif (LED Açık)");
Wire.beginTransmission(pcfAddress);
Wire.write(0xFE);
Wire.endTransmission();
delay(1000);
// P0 pinindeki LED'i söndürmek için binary 11111111 (0xFF) gönderiyoruz
Serial.println("P0 Pasif (LED Kapalı)");
Wire.beginTransmission(pcfAddress);
Wire.write(0xFF);
Wire.endTransmission();
delay(1000);
// --- GİRİŞ ÖRNEĞİ (Buton Okuma) ---
// Entegre üzerindeki pinlerin durumunu okuyoruz
Wire.requestFrom(pcfAddress, 1);
if (Wire.available()) {
byte pinDurumu = Wire.read();
// Eğer P7 pinine bağlı buton basıldıysa (LOJİK 0 düştüyse)
if ((pinDurumu & 0x80) == 0) {
Serial.println("P7 Pinindeki Butona Basıldı!");
}
}
delay(200);
}
PCF8574, harici bir kütüphaneye ihtiyaç duymadan doğrudan Arduino'nun standart Wire.h kütüphanesiyle kontrol edilebilir. Entegre, quasi-bidirectional (yarı iki yönlü) bir port yapısına sahiptir:
0 (Low) olduğunda o pin akım çeker (sink), 1 (High) olduğunda ise zayıf bir şekilde akım verir.Wire.requestFrom komutuyla entegre durumu sorgulanır. Buton veya sensör gibi giriş elemanları tetiklendiğinde ilgili bitlerin lojik seviyeleri maskeleme yöntemleriyle (bit kontrolü) kolayca analiz edilir.Çalışmayı test ederken sorun yaşamamak adına seri port hızını 9600 baud değerine getirmeyi ve I2C hatlarına (SDA ve SCL) 4.7kΩ pull-up dirençleri eklemeyi ihmal etmeyin.
Henüz yorum yapılmamış. İlk yorumu siz yapın!