avatar_elektro77

lcd_led kesmesi sorunu.

Başlatan elektro77, 27 Ekim 2019, 01:28:05

elektro77

Hocam ekteki yeni tasarladığım fc-20 kablo test devresi ve yazılımında lcd arka ışık kesmesini çalıştıramadım. Ana programıda bozuyor. Kesmelerde hiç iyi değilim.
Nerde hata yapıyorum bakabilirmisiniz?
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

#1
Binlerce kez söylüyorum ama dinleyen yok. "KESME KULLANILAN PROGRAMDA PAUSE KULLANILMAZ."
Timer0 kesmesi kullanıyorsun. Bölme oranı 1/256. Bu demektir ki 256*256=65535 ms sonra ikinci kesme oluşacak.
Diğer taraftan şöyle bir kural var, Bir kesme oluştuğu zaman şayet bir Basic komutu ki özellikle gecikme komutu icra ediliyor ise komut işleme süresi bitmeden program kesmeye gidemez.
Programda PASUE 200 şeklinde komut var. 200/65=BU  yaklaşık 3 kesme süresi kadar bir gecikme.
Program Pause 200 e gelince 200 ms lik bir gecikme uygulamak zorundadır. Buda 200 ms bitmeden kesme etiketine atlayamaz anlamına geliyor.
Pause 200 yerine,
FOR W=0 to 200
  pause 1
Next
şeklinde komut dizisi kullansan programın Kesme etiketine gitme süresi en fazla 1 ms olur.
Buradan şu kuralı koyuyoruz. Kesme kullanılan programlarda döngüsel gecikmeler uygulayın ve en büyük gecikmeniz 1 ms hatta mümkünse 5-10us olsun. Bunları döngü ile çoğaltarak istenilen gecikme süreleri yaratılabilir.

TRIS komutu programın BASLA etiketinden önce 1 kere pinlerin giriş ve çıkışlarını ayarlamak için kullanılır. Program içinde TRIS yerine INPUT yada OUTPUT kullanılır ve bit bazında çalışır bu komut.
PORTB.2 pinini giriş yapmak için (program içinde) TRIS yerine INPUT PORTB.2 demek yeterli olur.
Yada aynı pini çıkış yapmak için, OUTPUT PORTB.2 denilmesi yeterlidir.

PORTB de dahili Pullup dirençleri yer alır. Bunları aktif etmek için OPTION_REG.7 bti set edilmelidir. Pulluplar açık ise ve bir pini input yapmış isen o pin hemen HIGH olur. Sende PORTB.7 pinini input yapıyorsun ve PORTB.6 ya 1 veriyorsun. Bu ikisi kısadevre olunca sanıyorsunki Input olan pin hemen HIGH olacak ve kısa devre ikazını verecek program. Halbuki Input olan o pin Pullup dan dolayı HIGH oluyor ve kısa devre olmamasına rağmen kısa devre ikazı veriyor.
Programa bakalım;
OPTION_REG.7=1        'portB deki dahili PULL-UP lar iptal edildi.
INTCON=%11000000
OPTION_REG=%00000111 'verilerek bölme oranı 1/256 ya ayarlanmalı.
şeklinde satırların var. İlk satır pullup ları iptal ediyor. Ama son satır yeniden aktif ediyor. Sence saçmalık değilmi bu. Nasıl oluyorda bu gibi şeyleri göremiyorsun. Biraz kafanı çalıştır lütfen. Üstelik yanında ne olacağı yazıyor uyanman gerekirdi.
İlk satırı kaldır ve son satırın 7. bitini 1 yap olsun bitsin.

Son hatan da LCD_LED'i ile ilgili. Nereye bağlı bu led? PORTA.0 pinine bağlı.
Butona basılınca LCD_LED=1 diyerek ledi yakıyorsun. Yani PORTA.0=1 yapmış oluyorsun. Sayac=1000 yapıyorsun ve sayac=0 oluncada sönsün şeklinde düşünmüşsün. Buraya kadar her şey doğru. O halde programın başka yerlerine PORTA.0 pinine dokunmaman gerekirdi. Ama şöyle bir bak programa!!!!!
Kaç tane  "PORTA=0:PORTB=0:PORTC=0:PORTD=0:PORTE=0" komut satırından var say bakalım.
PORTA=0 dedikten sonra o ledin yanma şansı varmı sence????? Yok elbette. Bunuda düşünemiyorsan bırak bu işleri. Musluğu aç su aksın ama ardından hemen kapa ve sonra otur düşün bu su neden akmıyor diye olacak iş değil bu. Bütün bunlar merdivenin altından üst basamaklara atlama isteğinden kaynaklanıyor. Yavaş yavaş pişerek çıkman gerek o merdivenleri. Yine aynı şeyi söyleyeceğim. Derslere çalış. Bunu kaç kez söyledim farkındamısın???
Ama ne yapayımki bütün hataların buna bağlı tecrübesizlikten kaynaklanıyor. Program yazma-okuma tecrüben yok büyük çaplı programlar yazmaya kalkışıyorsun. Çalış şu derslere.
Bu arada PORTA yı sıfırlamak ve PORTA.0 pinine dokunmamak istiyor isen çözüm şu PORTA=(PORTA AND %00000001) Bu komut PORTA nın mevcut değerini alıp %00000001 değeri ile AND işlemine tabi tutar ve sonucu yeniden PORTA ya yerleştirir. Böylece PORTA.0=1 ise 1AND1=1 olacağı için led de sönmemiş olur ama diğer pinler sıfırlanır.

Belki başka hatalarında vardır ama artık onlara bakmayacağım. Bulduklarım sana yeter.

Ete

Powered by EzPortal