avatar_ete

Tecrübelerim

Başlatan ete, 28 Ekim 2017, 09:51:01

ete

Bu bölümde hem işlemcilerle yaşadığım gariplikleri hemde çözümleri sunmaya karar verdim.
Aslına bakarsanız bu işi uzun zamandır yapmadığıma pişman oldum. Ama en azından şimdi başlamak sureti ile bu konularda çalışanlara faydalı olacak bilgiler sağlayacaktır. Bu bir bilgi birikimi olacak ve ileride genişleyerek gideceğini umuyorum.

Zaman zaman gelen istekler doğrultusunda ücreti mukabilinde programlar yazıyorum. Geçtiğimiz hafta iki gariplik meydana geldi. Bunları anlatmakla bu işe başlamış olacağım.

Birinci projede değişken tanımlamalarım içinde HATA isimli bir değişkenim var. Meydana gelebilecek bir kaç hata kaynağı var bunların bir kısmı girişlerden birisi ADC okumasından gelebilecek hatalar. Her bir hata oluştuğunda 8 bitlik HATA değişkeninin bir bitini set ediyoruz. Normalde sistemde hiç hata yok ise HATA=0 oluyor ve şayet HATA>0 ise bir hata var demek oluyor ve ilgili led ikaz vermeye başlıyor. BASLA satırından sonra programın alt kısımlarında Hata kontrol satırım var. IF HATA>0 then hata kontrol gibi. Programı ilk çalıştırdığımızda (Gerçek devrede oluyor bu simulasyonda sorun yok) sistem Hata ikazı vermeden kendini kapatıyor. Çünki hata varsa sistemi kapat şeklinde bir komutumuz var. Ancak normalde hata var ise önce ekrana bunun hangi hata olduğunu yazıyor sonra sistemi kapatıyor. Ama burada ikaz gelmeden sistem kapanıyor.
Sizce bu garip değilmi. Biraz düşündükten sonra HATA isimli değişkenimin açılışta sürekli olarak sabit bir değer aldığını düşünmeye başladım. Buda hata ikazı vermeden sistemin direk hataya girmesine sebep oluyor idi. Düşünün Pic her defasında ilk çalıştığında registerleri yerleştirirken HATA değişkenine sıfır yerine bir değer vererek PIC'i  açıyor.
Hemen çözüm olarak BASLA satırından evvel HATA=0 komutunu ekledim programa her şey düzeldi. Genelde programa başlamadan önce CLEAR ile değişkenleri sıfırlarım. Çünki açılışta değişkenlerin sıfırlanacağına dair bir garanti yoktur. Ancak bazı programlarda işe başlamadan önce değişkenlere bazı değerler vererek sistemi açarım o zamanda Clear komutunu kullanmak zorun olabiliyor. Her neyse siz siz olun BASLA satırından evvel kullandığınız ana değişkenlerinizi sıfırlayın yada değişken tanımlamasından sonra CLEAR komutunu kullanın.

İkinci gariplik yine benzer bir durum. Bir başka programda PORTB.7 pinine RÖLE bağlı ve sistem çalıştığında RÖLE bir kaç saniye çekili kalarak sistem açılıyor yada sürekli çekili kalıyor. Programın başında PORTB=0 komutu var hemde iki yerde birden. Bütün PORTB çıkış olarakkullanılıyor ama ne hikmetse bu PORTB.7 HİGH olarak açılıyor. Önce röleyi çektirecek komutlardan şüphelendim. Onları kapatıp sistemi çalıştırınca yine çekti röle. O halde bunlardan değil dedim. Sonra PORTB.7 pinini giriş yapıp sistemi öyle açtım. Basla satırından evvel tekrar çıkışa çevirdim ama işe yaramadı röle yine çekti. Sonra düşündüm ne olabilir diye. Aklıma pullup geldi dahili pullupları aktif bırakmışım. Kapatınca röle çekmeden açıldı.
Buradaki enteresanlık nedir diye soracak olursanız, PortB yi sıfırlamış olmam (bir en başta TRIS tanımlamasında birde değişken tanımlamalarından hemen sonra) PORTB.7 nin HIGH olarak açılmasını engellemedi. Ancak ve ancak o pini girişe çevirip dahili pullup'ı da kapatıp tam Basla satırından evvel tekrar aynı pini çıkışa çevirince sistem normale döndü.
Buradan şu dersi çıkartabiliriz. İşlemci pinleri tamamen rastgele değerler alarak açılıyor. Genelde sıfırlanıp açılıyor ama bazı chiplerde bu farklı olabiliyor. Öyleki, Program açılırken yaptığınız sıfırlamada bazen işe yaramıyor daha özel bir tedbir almanız gerekebiliyor. Buda aynı pini giriş yaparak sistemi açıp kullanmaya başlayacağınız anda çıkışa çevirmek oluyor.

Varsa, yaşadığınız benzer tecrübeleri buraya aktarırsanız bilgi dağarcığımızı genişletiriz diye düşünüyorum.

Ete

F®T

Hocam teşekkürler güzel bir konu olmuş.Umarım bizimde yazacağımız bir çözüm olabilir.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

MB_77

#2
bu mesaj tarafımdan silinmiştir.

Powered by EzPortal