16F876A + DS18B20 Kullanımı hakkında.

Başlatan sinasos, 28 Mart 2018, 01:09:58

sinasos

İyi geceler herkese,
Basit bir konuda sizden bilgi almak istiyorum. 16f876A işlemcisinde DS18B20 ile ısı ölçümü yapıyorum ve işlemci %87 lerde çalışıyor. Başka bir işlem yapmak istediğimde örneğin bir butona bastığımda o kısma gitmiyor ve program çok kasıyor. Bu kısmı halletmeden diğer kısımları ilave edemiyorum. Ceyhun TOPÇU'ya ait bir siteden örnek program indirdim (16f628a ile yapılmış) test yaptım işlemci DS18B20 ile ölçüm esnasında %14 lerde çalışıyor ve başka işlem yapabiliyor. Sanırım yine yardıma ihtiyacım var ! Sizce ben nerede hata yapıyorum?

ete

Pek çok kez bunu açıkladım. Pause komutları programı daima bloke eder. Oraya koyduğun Pause 1000 1 sn lik bir süredir. Bu süre bitmeden program senin tuşa bastığını göremeyecektir. 1sn işlemci dünyasında çok büyük bir süredir. her işlem adımı 1us dürdüğünü düşünürseniz 1 sn bunun 1 milyon katı oluyor. Çünki 1000 us=1 ms ve 1000ms=1 sn dir. Bu nedenle büyük Pause değerlerinden kaçının. Bu süreleri koyma zorunluluğunuz var ise daha akıllıca ama programıda oraya çakılı bırakmayacak çözümler üretmek zorundasınız.

Diğer bir konuda DS18B20 sensörünün okunması konusudur. Bu sensörde bir çevrim yani bir sıcaklık okuma çevrimi yaklaşık 750 ms sürer. Bu sürede programı oraya bloke eder. Zira sensörü okuma emrini verdikten sonra işlemin tamamlanması BEKLE etiketinden yürütülerek beklemeye alınır. 750 ms sonra program sensörden kurtulur. Buda bir gecikme unsurudur. Sürekli olarak işlemcinin sensörü okuyarak tamamlandı onayını alması işlemci kullanımını artırır.
Çözüm şudur.
Sensöre okuma emri verilir;
OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Sonra return ile oradan çıkılır. Boşuna neden bekleyeyim ki 750 ms. Programın ana bölümünde yaklaşık 750-800 ms lik bir vakit geçirilir. BU işlemde buton kontrolleriyapılır ekrana verilecek bilgi var ise onlar verilir. Ve yaklaşık 800 ms sonra Tekrar Sensör okuma kısmına gidilir ama bu sefer, sadece ;
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
kısımları icra edilir. Bekle etiketi altındakileri kaldırıp direk GOSUB BEKLE denilerek oraya gidilip okunmış sıcaklık bilgileri alınarak geri dönülür. Bu söylediklerim hem işlemciyi rahatlatacak hemde buton kontrolünü daha hassas hale getirecektir.

Ete


ersangundogdu

ETE hocam merhaba. Aynı yazılımı 64 bit makinede kod korumayı aktif ettiğimde derlemiyor.
Bunun sebebi ne olabilir? 64 bit yazılım ektedir.

ete

64 bit makinalr derlemede MPLAB kullanmak zorundadır. MPLAB formatındaki sigorta ayarları farklıdır. Bu onudaki tüm bilgi aşağıdaki linkte verilmiştir.

https://etepic.com/index.php/topic,1687.0.html

ben yinede ne yapman gerektiğini söyleyeyim.
Programdaki sigorta aayrlarını kaldırıp yerine;
@ __CONFIG _CP_ALL & _WRT_256 & _CPD_ON & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_ON & _XT_OSC
veya daha kısa bir ayar vermek gerekirse aşağıdaki yazarsın
@ __config _BODEN_OFF  & _PWRTE_ON & _WDT_ON & _LVP_OFF & _XT_OSC

PBP klasörü içinde yer alan 16f876A.INC dosyasını MCS de aç ve altlarda yer alan sigorta ayar satırlarının önüne noktalı vrgül koyarak kapat ve geriye kayıt et.
Bu aşamadan sonra yeniden derleme yap sorunsuz derlenecektir.

Ete

ersangundogdu

#4
Yazdıklarınızı aynen yaptım hocam. CP_OFF yerine CP_ON yazdığımda derlemiyor. Ben kod koruma yapmak istiyorum.

ersangundogdu

Hocam şimdi gördüm. Kod korumayı aktif etmemiz için CP_ON yerine CP_ALL yazmamız mı gerekiyor?

ete

CP_ON ile CP_ALL aynı işi yapıyor. Program hafızası kod korumayı aktif ediyor.
Bu gibi ifadelerin ne anlama geldiğiniş anlamak için,
MPASM klasörünü aç (Protesus klasörü Tools alt klasöründe yer alıyor)
P16F876A.INC dosyasını MCS ile aç alt taraflarda sigorta aayrlarını görebilirsin. Hepsinin genelde açıklamasıda yanında veriliyor.

Ete

ersangundogdu


ersangundogdu

IF ISI=65535 THEN GOSUB HATA komutu ile program hata etiketine yönlendirilmiş.
Buradaki 65535 in anlamı nedir?

ete

Devrede sensör bağlı değil ise okuma alt programı sıcaklığı 65535 olarak okur.
Ete

Powered by EzPortal