iki pic seri haberleşmede takılıyor

Başlatan sawyer, 10 Şubat 2013, 09:43:27

sawyer

merhaba,

2 adet 18f2620 picim var. Bunlar birbirleriyle seri haberleşiyor, 2 veya 3 saat sonra dinleyici pic kitleniyor.
wdt reset atmasına  rahmen dinleyici pic veri gönderen picten veri dinlemeye başlayınca tekrar kilitleniyor.
Devrenin enerjini kesip açtığımızda normale dönüyor.

gönderici pic:
#use rs232(baud=19200,parity=N,xmit=PIN_A4,rcv=PIN_A1,bits=8,stream=IO)
alıcı pic:
#use rs232(baud=19200,parity=N,xmit=pin_C0,rcv=PIN_C5,bits=8,stream=IO)

sıkıntı nelrden kaynaklabilir?,

osilator frekansları:
#use delay(clock=20000000)

gndleri: aynı,
ayrı ayrı kristallerdede denedim, aynı kristalede bağlayıp denedim fark etmedi,
devreye mcp130t ilede reset atıyorum.

efsanepoldem

Senin kilitleniyor dediğin programda muhakkak bit aksaklık vardır programı görmeden yardımcı olmak zor görünüyor

Erol YILMAZ

#2
Yüksek seviyeli fonksiyonları kullanıyorken bu tarz problemleri çözmek bence zorlaşıyor...

Mcu'nun USART kısmını registerlere direkt yazarak haberleşmeniz daha iyi. Çünkü 2-3 tane register var altı üstü...

Mevcut durumda alıcı pic için ERRORS parametresini ekleyebilirsin.
#use rs232(baud=19200,parity=N,xmit=pin_C0,rcv=PIN_C5,bits=8,stream=IO)

Daha düşük seviyeli konuşacak olursak, Overrun hatası alıyorsun gibime geliyor...
Bu durumda CREN bitini 0 ve tekrar 1 yapman gerekiyormuş...

Başka da hata yok zaten :)

( Frame error modülü durdurmuyor )


Ayrıca hatayı bu şekilde görünmez hale getirmek gerçek bir çözüm değil,
Ağrı kesici kullanmak gibi birşey :)

Hatanın sebebini bulmak, oluşmasını engellemek ama yine de iletişimde hata olursa düzeltici rutinlerin çalışması gerekiyor.

sadogan

#3
Sıkıntı donanımsal seriport haberleşmesi yapmamandan kaynaklanıyor.
Farkındamısın bilmiyorum ama
Alıntı Yapgönderici pic:
#use rs232(baud=19200,parity=N,xmit=PIN_A4,rcv=PIN_A1,bits=8,stream=IO)
alıcı pic:
#use rs232(baud=19200,parity=N,xmit=pin_C0,rcv=PIN_C5,bits=8,stream=IO)
bu tanımlarla soft seri kullanıyorsun.

skara1214

#4
kodun tamamını paylaşabilirmisin? 2-3 saat geçtikten sonra kullandığın ortamın ısısı çok değişiyor ise  kristalin değeri değişip baudrate de değişime sebep olabilir.

mesaj birleştirme:: 10 Şubat 2013, 13:56:12

Alıntı yapılan: Allegro - 10 Şubat 2013, 12:15:23
Mevcut durumda alıcı pic için ERRORS parametresini ekleyebilirsin.
yazılımsal uartta errors işe yaramıyor bildiğim kadarıyla
Herkes ölür ama herkes gerçekten yaşamaz

Erol YILMAZ

Bence de soft-uart ta o parametre bir işe yaramaz.

Bu işi öncelikle donanımsal ve düşük seviyeli kodlarla halletmek lazım.

3 register için bir sürü yüksek seviyeli fonksiyon yazılıyor ve neyin ne olduğunu anlamak ta mümkün değil.

Misal direkt soft-uart ile başlamış arkadaş ama eminim bunun farkında değildi.

serhat1990

@Allegro Hocam'a sonuna kadar katılıyorum . Alttaki 3 register ile bu iş çok rahat biter . Takılırsa nereden kaynaklandığını anlayabilirsin en azından . Kendi yazmadığın bir fonksiyonu kullanmakla kendi yazdığın bir fonksiyonu kullanmak arasında çok fark var .


• Transmit Status and Control (TXSTA)
• Receive Status and Control (RCSTA)
• Baud Rate Control (BAUDCON)

Datanıda TXREG ' e yazıp , RCREG'den gelen verini okursun iş biter.

İyi çalışmalar dilerim .

sawyer

cevap yazan tüm arkadaşlara teşekkür.