Program akışında yavaşlama veri kaçırma hakkında tartışma

Başlatan aRci, 13 Mart 2018, 10:12:52

aRci

herkese merhaba bir fikir alış verişi yapmak için açtım konuyu. kesmeler ve seri haberleşme beraber kullanıldığı vakit iki işlevinde beraber birbirini engellemeyecek şekilde uyum içinde çalıştırmak için ne gibi yöntemler kullanıyorsunuz.

şu ara esp07 ile çalışıyorum amacım sayac, hurda, saatik adet gibi verileri saatte 4 defa (her 15dk da bir) bir web sayfasına kaydetmek.
devre 16f877 ile kurulu(20mhz. 5v)
sayac için Portb.0 kesmesini kullanıyorum.
esp ise 115200 baud hızı ile uart girişlerine bağlı(uart kesmesi kullanılmıyor.)ams1117 ile 3.3.v  ile besleniyor.

kesme satırlarında sinyal girişinde olan parazit yuzunden  b.0 kesmesi sonrasında sayacı arttırıp b.0 kesmesini iptal edip. timer kesmesini çalıştırıyorum. yaklaşık 2sn boyunca b.0 dan kesme almayı engelledim. sure sonrasında ise tekrar b.0 kesmeyi aktif edip timer ı kapatmaya calıştım.( her sayım arası minumum 5sn boşluk var)
DISABLE
KESME:
      INTCON.7=0
      if INTCON.2=1then Tbekle = Tbekle + 1
      if Tbekle >= 100 then Tbekle= 0:intcon.5=0:INTCON.4=1:INTCON.1=0:goto gec
if INTCON.4 = 1 and INTCON.1=1 then                                             
         INTCON.4=0'harici kesmeler pasif
         INTCON.2=0
         INTCON.5=1'timer aktif
         TMR0 = 0
               
         sayac  = sayac + 1
         ssayac = ssayac + 1
endif
         
gec:
      INTCON.7=1 'tum kesmeler aktif   
      RESUME
      ENABLE     



yukardaki senaryo sinyal suresi yaklaşık 200ms kadar fakat sinyalde parazit var yanlış sayımı engelemek için bulduğum bir yontem calışıyor ama karasız kalıyorum tam bir denemeye geçemedim.sinyal girişi basit direnc ve zener diyotla yapılı ters gerilimden korumak içinde seri dirence bağlı diyot ekleyeceğim.ilk başta elimi devreye temas ettirince sayacın arttığını görduğümde giriş ucuna 10k pulldown direnc eklediğimde duzeldi.

esp ile siteye bağlan veriyi gönder sureci wifi ağının yoğunluğu ile bağlı olarak değişkenlik gosteriyor. kesme nin aksamaması için şu sekilde bir yapı oluşturdum

BekleSure:
          bekle = bekle / 10
          ok=0
BekleSure1:
         
          if bekle >=65000 then return
          bekle = bekle - 1
          if sira = 2 then hserin 100,bekleSure1,[wait (">")]
          if sira = 5 then
                hserin 100,bekleSure1,[wait("+IPD,"),f,wait(":"),f2]
                sira = 0
                if f2="P"then sira = 8:bekle=10
                endif
          if sira = 9 then hserin 100,bekleSure1,[wait (34),str Ip\15]
          if sira = 8 then hserin 100,bekleSure1,[wait ("Wifi="),str gelen\79]
          if sira = 4 then HSERIN 100,bekleSure1,[wait ("IP")]
          if sira = 3 then hserin 100,bekleSure1,[wait ("CLOSED")]
          if sira = 6 then hserin 100,bekleSure1,[wait ("-")]                    'bağlantı sorgusunda - işareti bekle
          if sira = 1 then HSERIN 100,bekleSure1,[wait ("OK")]
          if sira = 0 then HSERIN 100,bekleSure1,[wait ("ready")]
         
          ok = 1
          for bekle = 0 to 10
              pause 10
              next bekle
          return


Bu kısımda esp den beklenen veri Sira adlı değişkene yukleniyor mesala siteye bağlan komutu verilince esp bağlantı kurduğunda ">" işareti gönderir. bu sebeple "Sira=2" değeri verilmeli. hserin komutları veri bekleme surelerini 100 ms olarak ayarladım ama bu kısımda ne kadar tekrar yapılacağını "Bekle" adlı değişkene verilen değerdir.
eğer "Bekle=3000" değeri verilmişse bu kısımda
(3000/10)*100= 30sn civarı bekleme yapmakta bu yaptığım similasyonda hatalı sayım yaptırmadığını gördüm.

yaptığım denemelerde bazen esp den gelen veriyi kaçırdığını tespid ettim(virtual terminalde veri görülüyor.)
kullanddığım yöntem tamamen yanlıışmı. bu gibi durumarda yönteminiz nedir.

İlyas KAYA

Esp8266 ve pic aynı anda neden kullanıyorsunuz?
Esp tek başına yeterli. Kaldiki işlemci ram ve rom olarak pic den kat kat üstündür.
Giriş ve çıkışları kullanarak daha hızlı bağlantı sağlayabilirsin.
Bunun için arduino ide sini kullanman ve direk arduino programlar gibi espyi programlaman gerekir.
Arduino ide esp8266 diye arama yaparsanız epey bilgiye ulaşırsınız.

Pic ile senkron çalışmak istiyorsanız da veri transferi esnasında bir sonraki veriyi kaçırmamak için senkron iletişim yapmalısınız.
Diyelim ki pice esp den veri geldi , esp hemen dinleme moduna geçer ve pic den "ok" yanıtını bekler. Yada tam tersi pic veri gönderir ve esp den "ok" gibi bir yanıt bekler. Böylece veri kesin olarak ulaşmış olduğunu anlarsınız

Sayıcı ile ilgili parazit için giriş pinine 47-100nf arası bir kondansatör ekleyin. 10k Pull up yapın.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Burak

Alıntı yapılan: İlyas KAYA - 13 Mart 2018, 11:47:52
Esp8266 ve pic aynı anda neden kullanıyorsunuz?
Esp tek başına yeterli. Kaldiki işlemci ram ve rom olarak pic den kat kat üstündür.
Giriş ve çıkışları kullanarak daha hızlı bağlantı sağlayabilirsin.
Bunun için arduino ide sini kullanman ve direk arduino programlar gibi espyi programlaman gerekir.
Arduino ide esp8266 diye arama yaparsanız epey bilgiye ulaşırsınız.

Pic ile senkron çalışmak istiyorsanız da veri transferi esnasında bir sonraki veriyi kaçırmamak için senkron iletişim yapmalısınız.
Diyelim ki pice esp den veri geldi , esp hemen dinleme moduna geçer ve pic den "ok" yanıtını bekler. Yada tam tersi pic veri gönderir ve esp den "ok" gibi bir yanıt bekler. Böylece veri kesin olarak ulaşmış olduğunu anlarsınız

Sayıcı ile ilgili parazit için giriş pinine 47-100nf arası bir kondansatör ekleyin. 10k Pull up yapın.


İlyas Abi , biraz detay verir misiniz bu direkt ESP programlama ile ilgili..


Burak
Ω Gens Una Sumus Ω

Elektronikprojem

Ilyas abi buyuk ihtimal nodemcu dan bahsediyor. Bir cesit gelistirme karti. Bunun disinda esp modul de ayriyetten programlanabiliyor sanirsam.
Ben de uretimde parca saymak amaciyla saat ve sayici kartlari yapmistim sonra sayaclardaki sayilari sisteme atmami istediklerinde cozum olarak pic arduino haberlesmesi yaptim. Sayactaki sayilari 5 sayida bir arduinoya yolladim ordanda esp moduluyle ag uzerinden sisteme aktardim.boylelikle sayac sadece sayi sayip saydigi sayiyi yolluyor gerisiyle ilgilenmiyordu. Esp modulunun bir veri atmasi yaklasik 3 saniye suruyor.

İlyas KAYA

Esp lerin her modeli programlanabiliyor. Arduino ide si üzerinden arduino programlar gibi programlayıp usb rs232 çevirici ile direk esp ye yükleyebiliyorsunuz. Giriş çıkışlarını aynı pic yada arduino gibi de kullanabiliyorsunuz. Kimsinde analog giriş vs dahi var. Mesela esp8266 12e modeli bir çok uygulama için yeterli. Google dan arduino ide esp programla diye ararsanız görsel anlatımlara da ulaşırsınız.
Normalde içinde At firmware vardır. Siz at yerine kendi firmware inizi yüklemiş olacaksınız.

Arduino daki kodların hemen hemen hepsi esp içinde geçerli. Bootloader vs hepsini arduino ide si hallediyor ve esp ye göre kodları çevirip içine atıyor.
Tek yapmanız gereken esp ye yüklerken download moda almak.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Powered by EzPortal