Şimdi Ara

16f877 buffer ????

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
7
Cevap
0
Favori
859
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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...







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




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




  • döngüde problemim olduğunu hiç sanmıyorum.
    yinede bi bakarım.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.