Arama butonu
Bu konudaki kullanıcılar: 1 misafir
6
Cevap
861
Tıklama
0
Öne Çıkarma
16f877 buffer ????
K
17 yıl
Teğmen
Konu Sahibi

Selam arkadaşlar,

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



G
17 yıl
Yüzbaşı

Buffera gerek yok.

quote:

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.





< Bu mesaj bu kişi tarafından değiştirildi garfie -- 23 Nisan 2008; 21:47:39 >
Bu mesaja 1 cevap geldi.
K
17 yıl
Teğmen
Konu Sahibi

wdt kullanmıyorum.

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.


Bu mesaja 1 cevap geldi.
G
17 yıl
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
K
17 yıl
Teğmen
Konu Sahibi

forever loop

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

h_asynch = "i"
h_asynch = "n"
h_asynch = "p"
h_asynch = "u"
h_asynch = "t"

in1_dir = input
in2_dir = input
in3_dir = input
in4_dir = input

while looper < 10 loop
if h_asynch_poll (data) then

if data == "1" then
if in1 == high then
h_asynch = "0"
else
h_asynch = "1"
end if
looper = 10
end if

if data == "2" then
if in2 == high then
h_asynch = "0"
else
h_asynch = "1"
end if
looper = 10
end if

if data == "3" then
if in3 == high then
h_asynch = "0"
else
h_asynch = "1"
end if
looper = 10
end if

if data == "4" then
if in4 == high then
h_asynch = "0"
else
h_asynch = "1"
end if
looper = 10
end if

if data == "e" then looper = 10 h_asynch = "e" end if

end if
end loop
end procedure


Bu mesaja 1 cevap geldi.
G
17 yıl
Yüzbaşı

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)

Kolay gelsin.


Bu mesaja 1 cevap geldi.
K
17 yıl
Teğmen
Konu Sahibi

döngüde problemim olduğunu hiç sanmıyorum.
yinede bi bakarım.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.