16F877A ve 16F628A UART haberleşme sırasında zaman sorunu

Başlatan dcelektronik, 05 Haziran 2018, 09:58:57

dcelektronik

Dediğiniz gibi düzelttim.Şimdi daha anlaşılır oldu gibi.628 tarafından tusa basınca 877 interrup a gitmiyor arka arkaya basarsam bazen alıyor.Uyarılarınız için teşekkürler

ete

628 tarafında bir tuşa basılınca 877 tarafı kesmeye giriyor. Bunu ancak kendi yazdığım programdan görebiliyorum.Görmenin yolu şöyle;
    Tx = 0
       GIE=0 
       HSerIn  10,cik, [Wait ("DCM"),DURDUR,CALISTIR]
       Print At 1,1,"DURDUR=",DEC DURDUR
       Print At 2,1,"CALISTIR=",DEC CALISTIR

Şeklinde komutları eklersen ne olup bittiğini görebilirsin. Ben deniyorum. Basla tuşuna basınca Calıstır=55 oluyor. Dur tuşuna basınca da Dur=66 oluyor.Bu durumda program içinde  bu tusların bir şekilde kontrol edilmeleri gerekir. Program muhtemel hangi konumlarda olabiliyor ise oralara ;IF CALISTIR=55 then ....şunu yapIF DUR=66 then ....Şunu yap demen gerekir.
Sanırım hata şu;If DURDUR=55 Then
bu komut IF CALISTIR=55 THEN şeklinde düzeltilmeli.BU şekilde çalıştır düzelir ama durdurmak için bir komut yazmamışsın.En iyisi 877 tarafındaki baslat ve durdur tuş komutlarına seri yoldan gelen bilgileri kullanacak komut eklemek.

If start = 0 Then  yerine  IF START=0 or CALISTIR=55 THEN yazaman

If stp = 0 or durdur=66 Then şeklinde de diğerini eklemen gerekir.
Ete

dcelektronik


ete

Tabiiki bu tuşların fonksiyonlarını tahmin ederek bunları söyledim. He riki tarafta da start ve stop butonları olduğuna göre iki taraftan da sistemi çalıştırmak yada durdurmak için kullanılıyor olduklarını düşündüm.
Ete

dcelektronik

Doğru düşünmüşsünüz her iki taraftanda kumanda edilebilmeli ana ünite de sorun yok uzak kontrolde start stop işlemini yapmıyor dediğiniz gibi kesmemin içine
       
       Tx = 0
       GIE=0 
       HSerIn  10,cik, [Wait ("DCM"),DURDUR,CALISTIR]
       Print At 2,1,"tus 1",Dec DURDUR
       Print At 2,8,"tus2",Dec CALISTIR
     
       yazdım ama ekranda birşey yazmıyor.beklemede kalıyor.

ete

Ekranda bir şey yazmaması muhtemelen çok fazla CLS komutu kullanmandan kaynaklanıyor.
Daha ekranda bir şey gösteremeden hemen karşısına bir CLS komutu çıkıyor. Ama şunu deneyebilirsin.
Sistemi çalıştır, 16F628 tarafında stop tuşuna bas bakalım. Bu konumda 16F877A ekranında o dediklerini görmen gerekir. Görmüyorsan bir sorunun var programda.
Son verdiğin programını yeniden PBP ya çevirdim ve iki satırı HSERIN komutunun altına ekledim. Benim sistem gerektiği gibi çalışıyor. O da bazı konumlarda ekrana birşey göstermiyor çünki anında siliniyor CLS den dolayı.
Ama komutları yerine getiriyor bu onun kesmeye girdiğinin işaretidir.
Kesme kısmında ufak bir kusur görmüştüm.
Şöyle;
If dakika = 60 Then   dakika =0
   saat= saat+1     
EndIf
  EndIf
      EndIf
        EndIf
        INTCON.2=0
        GoTo cik

Burada INTCON.2=0 ve Goto CIK satırları en sondaki endif ten önce yer alması gerekir.  Şayet bu şekilde kullanırsan USART kesmesi geldiğinde program INTCON.2=0 yapar ve CIK etiketine atlar direk çünki komutların onu yapmasını söylüyor. Kusur bu.Satırlar şöyle olmalı ;

If dakika = 60 Then

dakika =0

saat= saat+1
EndIf 
EndIf
EndIf 
INTCON.2=0     
GoTo cik
      EndIf

Önce istersen bu kusuru düzelt ve programını dene. Sonra benim yolladıklarımı önce bir incele. Zira yazım kurallarını tam olarak uygulamıyorsun yada yanlış anladığın yerler var. Burada doğrusunu göreceksin. Sonra çalıştır ve gör bakalım nasıl çalışıyor.
Ete

dcelektronik

Merhaba Erol hocam dediğiniz gibi programı düzeltip similasyonda çalıştırdım.Ekrana yazmada hata vardı yazılar karşık ve okunmuyordu.Programa gecikme ilave edince normale döndü.Similasyonda düzgün çalıyor gibi.Sizin programı yüklediğimde bazı problemler çıktı.Daha sonra iki programıda pice yükleyerek gerçek te denedim izlediğim sonuçları tablo da yazdım ekte sizede gönderiyorum.Proteusda simlasyonda herşey normal gözüküyor ama gerçekte olmuyor.Adama kafayı yedirtir. >:(  programi neye göre yazacağım şaşırdım.Cumartesi ve dün zamanımın büyük bölümünü PBP aramakla geçirdim ama bulamadım .15 günlük deneme sürümünü indirdim.PBP sanki daha iyi gibi geldi.Programları ve karşılaştırma tablosunu eke koyuyorum.İncelerseniz sevinirim.İyi günler.

ete

Bu programlara artık benim bakıp ilave edeceğim bir şey yok maalesef. Ben simulasyonu esas alırım ve benim programlar tablonda belirtip olmuyor dediğin şeyleri yapıyor. Gerçek devrende çalışmıyorsa kusuru devrede araman gerekir.
Programların gerçek mantığını bilmiyorum. Ben görsel olarak yada yüzeysel olarak araya girerek olması gerekenleri  yazıp örnek olsun diye sana verdim. Verdiğim programlar çalışıyor. Senin yapman gereken şey öncelikle düzgün bir senaryo oluşturman ve program akışını bu senaryoya göre tamamlaman gerekir. Şurada bir kaç mesaj yazdım her seferinde farklı program mantıkları koydun onüme. Kesinbir senaryon yok anlaşılan. Kiminde stp butonu var kiminde yok. Dediğim gibi önce senaryonu ortaya koy kim ne yapacak ne zaman yapacak bunları belirle. Göztermiş olduğum yola uygun düzeltmeleri yap çalışması gerekir.
Değilse yapacak bir şey yok maalesef.

Ete

dcelektronik

İlginiz ve yardımlarınız için çok teşekkürler.Dediklerinizi dikkate alacağım tekrar teşekkürler.

Powered by EzPortal