Pic18f2550 ve 2 adet PCF8574 bağlantı hatası

Başlatan pathetic, 10 Ocak 2012, 08:38:04

pathetic

18f2550 kullanarak yaptığım bir devrede pin sayısı ile ilgili problemim oldu ve tasarruf için PCF8574 kullanmaya karar verdim.
Amaç 16 buton konumunu iki pin ile öğrenebilmek.
Kod proteus simulasyonunda düzgün çalışıyor. Bütün butonlardan doğru değerleri okuyorum.
Devreyi gerçekte kurduğumda ise ilk PCF8574 ten doğru okumalar gerçekleştiriyorum ancak ikinci PCF8574'e bağlı butonlardan birine bastığımda sanki iki tarafında butonlarına basılmış gibi anlamsız bir değer okuyorum. Yani hem VAR1 hem VAR2 değişkenim etkileniyor.
Nedeni hakkında fikri olan varsa sevinirim.

Dim VAR1 As Byte
 Symbol Control %01000001 'PCF8574 Slave (A0,A1,A2 to GND)
 BusIn Control,[VAR1]
 DelayMS 10
   Dim VAR2 As Byte 
 Symbol Control2 %01000011 'PCF8574 Slave (A0 VCC A1,A2 to GND)
 BusIn Control2,[VAR2]


Kabil ATICI

R1 ve R2 dirençlerin dijital olarak atanmamışsa sorun olabiliyor. Yoksa görünürde bir şey yok.
ambar7

umberto

Proteusta doğru çalışıyor gerçekte hatalar var demiş arkadaş. Doalyısıyla dirençlerin dijital olaran ayarlanmaması ile problem yok sanırsam

Kabil ATICI

Pardon.

Fiziksel durum.

Entegrelerin besleme hatlarına yakın 100nF kondansatör var mı? i2c hatlları üzerindeki sinyalleri osilaskop ile izleme imkanınız var mı?  İşçiliğiniz konusunda  yorum yapmak istemem ama ; soğuk lehim veya bir pcb hatası olabilir mi? veya i2c iletişim hızı yüksek kalıyor olabilir mi?
ambar7

pathetic

#4
Cevaplar için teşekkürler
Devreyi iki ayrı boarda kurdum.
Birinci boardda PIC18f2550 ve baglantıları var.
İkinci boardda iki adet pcf8574 var.

Aradaki iletişim için 20cm lik 4 iletkenli bir kablo kullanıyorum. (+5v,gnd,scl,sda)
SDA ve SCL direnci seçimi neye göredir ve dirençlerin PIC'e mi PCF ye mi yakın olmasının etkisi var mı?
100nf Sadece ana beslemede vardı (USB beslemesi kullanıyorum), mesajınızdan sonra PCFlerin oldugu kartada 100nf bir adet ekledim.
Sorun hala devam ediyor.

iki değişkende de gözüken değer aynı "00010000"

umberto

PCFlerin P0-P7 bacaklarına 10k ile +5V'a pull up yapmayı deneseniz. Belki uçlar boşta kalınca sapıtıyordur, dış etkenlerden etkileniyordur.

Kabil ATICI

Israrla entegrelerin besleme bacaklarına 100nF kondansatör takılmasını önermemin sebebi lojik entegrelerle devrelerden kalma bir alışkanlıktır ama inkar edilemez bir etkisi vardır. Birçok entegreli bir sistemde eğer entegre besleme bacaklarına kondansatör takılmadığında farklı davranışlar gösterebildiğini gördüm. 

Burada belirtilen entegreyi tanımıyorum ve kullanmadım.

Belki vardır, besleme hattına 10uF/25V kondansatör, ve her entegrenin besleme bacaklarının yakınına kondansatör, çözüm olabilir. (uzun kablo ile taşınan tarafın besleme üzerine de 10uF konabilir)

Mümkünse en azından çalışan pcf8574 devre dışı bırakılıp sorunun devam edip etmediği görülebilir.

i2c iletişim hızı düşürülebilir.

Mümkünse en azından pcf8574 entegreleri için harici bir besleme.

i2c direnci geniş bir aralıkta kullanılabiliyor. Hatta bu direnç yerine akım kayanğı kullananlar da var.
ambar7

pathetic

Problem çözüldü.

İkinci PCF8574'ün SDA hattında bir iletim problemi vardı sanırım. Etrafında büyüteçle bakarak temizlik yaptıktan sonra devre çalıştı. Şuan ikisi ile de iletişimde sorun yok.
PCF sayısını arttırıp, direnç değerleri ile de oynayarak teste devam edeceğim.
Teşekkürler yardımlarınız için.