PCF8574 ile Arduino Pin Çoğaltma (I2C I/O Genişletici)

👤 Yazar: ozcan 📅 Tarih: 20.07.2026 08:05 👁️ Görüntüleme: 34

PCF8574 ile Arduino Pin Çoğaltma (I2C I/O Genişletici)

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.

PCF8574 ile Arduino Pin Çoğaltma (I2C I/O Genişletici)

Adres Seçimi ve Bağlantı: Entegrenin A0, A1 ve A2 pinleri toprak hattına (GND) bağlandığında varsayılan I2C adresi genellikle 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.

Arduino Uygulama Kodları

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

Kodun Çalışma Mantığı ve Veri İletişimi

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:

  • Veri Yazma (Çıkış): Entegreye gönderilen 8 bitlik (1 bayt) verideki her bir bit, sırasıyla P0'dan P7'ye kadar olan fiziksel pinleri temsil eder. Gönderilen veri 0 (Low) olduğunda o pin akım çeker (sink), 1 (High) olduğunda ise zayıf bir şekilde akım verir.
  • Veri Okuma (Giriş): 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.
  • Performans Avantajı: Donanım seviyesinde kaydırmalı kaydedici (Shift Register) entegrelerine kıyasla çok daha az hat çekilmesini sağlar ve veri hattındaki karmaşayı azaltır.

Ç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.

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
↑ Sayfa Başı
📞 İletişim ✉ E-Posta Gönder 🟥 YouTube
© 2026 Yenidir.com
Yenidir CMS V0.1