bir projede 16f877 ile input/output kontrol yapıyorum. detaylandırmak gerekirse :
---------------------------------------- microcontroller : 16f877a iletişim biçimi : rs232 (donanımsal) yazılım : jal ----------------------------------------- sorunum : projede inputların sürekli kontrol edilmesi gerekiyor. ve kontroleri ise microcontrollera sorgulamak gerekiyor. yani microcontrolera sürekli olarak bana input değerlerini göndermesi için bir değer gönderiyorum ve o da bana istediğim inputun değerini 1 veya 0 olarak gönderiyor.
ancak sorgulama 0,5 saniyenin (tahmini olarak söylüyorum) altına düşerse sistem çakılıp kalıyor. bunu engellemk için ise buffer yapmayı düşündüm.
bu problem neden kaynaklanıyor ? sizce buffer bir çözümmüdür ? buffer nasıl yapabilirim ?
Orjinalden alıntı: koby ancak sorgulama 0,5 saniyenin (tahmini olarak söylüyorum) altına düşerse sistem çakılıp kalıyor. bunu engellemk için ise buffer yapmayı düşündüm.
hangi sistem çakılıyor?. PIC mi?, sorgulama yaptığınız PC mi?. çakılmaktan kastınız nedir?. JAL bilmiyorum ama sorununuzu biraz daha detaylandırırsanız daha kolay çözümler üretilebilir.
ilk aklıma gelen; PIC seri porttan bilgi beklerken watchdog timer zaman aşımına uğrayıp resetliyor olabilir. programlarken WDT'ı kapatıp deneyin.
pic donup kalıyor sistemi resetlemek gerekiyor. bunuda ben input değeri okumak için gönderdiğim sorguyu yarım saniyenin altında tekrarlarsam yapıyor.
örneğin 1. inputun değerini okumak için "i1" değerini yolluyorum. 2. inputun değerini okumak için "i2" yolluyorum. i1 yolladıktan 0.3 sn sonra i2 yollarsam microcontroller çalışmaz hale geliyor. hiçbir sorguyada cevap vermiyor.
eğer kendini resetliyor olsa. reset için yaptığım bir kontrol var, bana geri bildirim vermesi gerekirdi.
komutlara cevap vermiyor ve resetlenmiyor ama normal döngü devam ediyor mu?. Belki bir döngü içinde, muhtemelen de seri portu dinlediğiniz döngüde takılıp kalıyordur. pic kodunu da yazın isterseniz, böyle fikir yürütmek zor.
var byte veri if h_asynch_poll ( veri ) then if veri == "r" then direnc end if if veri == "o" then portout end if if veri == "i" then portin end if if veri == "m" then h_asynch = "m" h_asynch = "a" h_asynch = "i" h_asynch = "n" end if if veri == "l" then portlow end if if veri == "h" then porthigh end if if veri == "s" then reset = 1 h_asynch = " " h_asynch = "o" h_asynch = "k" end if if veri == "L" then cselinput end if if veri == "S" then cseloutput end if if veri == "M" then pexp end if end if
if reset == 0 then h_asynch = "r" h_asynch = "e" h_asynch = "s" h_asynch = "e" h_asynch = "t" delay_100ms (5) end if
end loop ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; procedure portin is var byte looper = 0
JAL bilmediğim için fazla yorum yapamıyacağım. Ancak looper döngüsünde data değişkeni "1,2,3,4,e" olmadığı sürece döngüde kalıyor. burada sorun olabilir. (herhangi bir data kaybında bu döngüden çıkamıyacak). Döngülerinizin içine durumlarını görebileceğiniz satırlar (örneğin döngüdeyse led yakıp söndürmek veya yaptığınız gibi seri porttan bilgi göndermek gibi) eklerseniz nerede takıldığını daha kolay bulabilirsiniz.
Örneğin: <if h_asynch_poll (data) then> satırının altına data'yı tekrar geri gönderecek bir komut ekleyin.
bu sorunun çözümü değil tabi ama; pc'den komut gönderdikten sonra cevabı bekleyip yeni komuta geçmek daha iyi. Bir de JAL kullanmak için özel bir nedeniniz yoksa mikroelektronika'nın C, pascal, Basic derleyicilerini öneririm. Kütüphanesi de oldukça geniş. (jal'a göre)
bir projede 16f877 ile input/output kontrol yapıyorum. detaylandırmak gerekirse :
----------------------------------------
microcontroller : 16f877a
iletişim biçimi : rs232 (donanımsal)
yazılım : jal
-----------------------------------------
sorunum : projede inputların sürekli kontrol edilmesi gerekiyor. ve kontroleri ise microcontrollera sorgulamak gerekiyor.
yani microcontrolera sürekli olarak bana input değerlerini göndermesi için bir değer gönderiyorum ve o da bana istediğim inputun değerini 1 veya 0 olarak gönderiyor.
ancak sorgulama 0,5 saniyenin (tahmini olarak söylüyorum) altına düşerse sistem çakılıp kalıyor. bunu engellemk için ise buffer yapmayı düşündüm.
bu problem neden kaynaklanıyor ?
sizce buffer bir çözümmüdür ?
buffer nasıl yapabilirim ?
yardımlarınızı bekliyorum...