LEDİ KAPATAMADIM

harf

Üye
Katılım
9 Nis 2009
Mesajlar
102
Puanları
1
ARKADAŞLAR BUTONA BASILINCA LED YANIP SÖNECEK TEKRAR BASINCA SÖNECEK
AMA BEN SÖNDÜREMEDİM HATAM NERDE SİZCE

İŞTE KODLARIM
Kod:
TRISB=250
TRISA=0
BUTON VAR PORTB.0
LED VAR PORTA.0
D VAR BYTE

basla:
IF BUTON=0 then
D=D+1
ENDIF

    IF D=1 theN:HIGH LED:pAUSE 1000:LOW LED:pAUSE 1000
    GOTO BASLA
    IF D=2 then
    LOW LED
    D=0
    ENDIF
GOTO BASLA
END
 
Uzun zamandır basic ile yazmıyorum ama yanlış hatırlamıyorsam D=2 yazarak D ye 2 sayısını veriyoruz. D==2 yazarsak D nin 2 ye eşit olup olmadığını test ettiriyoruz.

Kod:
TRISB=250
TRISA=0
BUTON VAR PORTB.0
LED VAR PORTA.0
D VAR BYTE

basla:
IF BUTON==0 then
D=D+1
ENDIF

IF D==1 theN:HIGH LED:pAUSE 1000:LOW LED:pAUSE 1000
GOTO BASLA
IF D==2 then
LOW LED
D=0
ENDIF
GOTO BASLA
END
 
nazmi arkadaş o şekildede denedim olmadı ufak bir yerde yanlış yapıyorum ama bulamadım ya sıralamamda bir yanlış var diye düşünüyorum neyse arkadaşların ceveplarını bekliyorum şimdilik
 
İf then komutunu kullanmışsın. else komutunu kullan. yani
if D==1
then
HIGH LED:pAUSE 1000:LOW LED:pAUSE 1000
else
LOW LED
D=0
ENDIF
end
Burada D==1 eşit olduğu sürece then konutunu işleyecektir. Butona tekrar bastığında D==1 yanlış olacağı için else komutunu işleyecek. Ayrıca goto basla komutlarınıda kullanmayacaksın. program biraz daha sade hale gelir. Ben C ile yazıyorum. if,then,else komutunu bu şekilde kullanıyorun. İf şartı doğru ise then komutunu işler. Yanlış ise else komutunu işler. Umarım işene yarar.
 
S.A.
sN. Arkadaşım butona basmayı birkere algılayacak bir şey yapmazsan değişkenin her pic saykılında 1 değer artar aslında komutu işler ama hoş durumlar olmaz örneğin sen her butona basışında 1 değer artmasını beklerken elini çekinceye kadar o atıyorum 0-255 arasıbda değer alır.
Birde bu düzeltmeyi denermisin.

TRISB=250
TRISA=0
BUTON VAR PORTB.0
LED VAR PORTA.0
D VAR BYTE

basla:
IF BUTON=0 then
D=D+1
WHILE BUTON=1:WEND
ENDIF

IF D=1 theN:HIGH LED:pAUSE 1000:LOW LED:pAUSE 1000:GOTO BASLA

IF D=2 then
LOW LED
D=0
ENDIF

GOTO BASLA

END
 
sayın muratmert arkadaşım öncelikle ilgilendiyin için teşekkürler dediyin komutlarla denedim gene aynı led yanıp sönüyor ama tekrar aynı butona basınca durmuyor normalde devamlı yanmasını isteyince 1 arttırarak sorunsuz çalışıyor ama belli aralıklarla yanıp sönmesini isteyince 1 arttırmıyor 1 haftadır düşünüyorum araştırıyorum ama nerde hata yapıyorum bulamadım ilgilenen herkese teşekkürlerimi sunuyorum
 
Dostum TRISB 250 iken TRISB bit 0 = 0 (250 çift sayı bit 0 = 0) olur ki bu da pic mcu larda Çıkış kurulumudur PortB 0 dan buton nasıl okudun anlamadım?
 
Alternatif program:

dugme var PORTB.0
led var PORTA.0
durum var BYTE
flipr var BYTE

SIFIRLA:
TRISB = 1
TRISA = 0
durum = 0
flipr = 0
low led

BASLA:
pause 200
flipr = flipr +1
if flipr > 10 then flipr = 0
if (dugme == 0) then durum = durum +1: if (durum == 1 )then flipr = 0
if (durum == 1) then if flipr < 5 then high led else low led
if (durum == 2) then high led
if (durum > 2) then durum = 0:low led
goto BASLA

Bu kod hem her 200ms de bir düğme denetimi yapar hem de durum 0 ise led'in yanması söz konusu değildir.
Kod sentaksı doğru olmayabilir , mantık açısından yazdım picbasic bilmiyorum normalde assembler ile kodlarım.
dugme active low ise yani basıldığında giriş TTL low oluyorsa dugme == 0 basılma anlamına gelir aksi halde kodda dugme == 0 yerine dugme == 1 konmalı.
while ...wend koymadım çünkü while wend orada muhtemelen gümler. Sebebi ise düğmelerin stabilizasyon sürecidir. settling time dedikleri bu facia anahtarları açıp kapattığında gerçekte bir çok defa anahtar sinyalinin sıçrama yapmasından kaynaklanır hem elektronik hem mekanik sebepleri var. While wend e gerek kalmadı çünkü her düğme denetimi standart çevrim süresi olan 200ms de bir yapılıyor ki bu da settling time için yeterli bir süre.
Kod durum 0 iken bir şey yapmıyor, durum 1 iken flaş yapıyor (flipr ı kullanıyor flipr 0,1,2,3,4 iken yanıyor 5,6,7,8,9 iken sönük) her flipr adımı 200ms olduğundan 1 saniye sürüyor. düğme basılır basılmaz yansın diye durum bir olursa flipr sıfırlanıyor
durum iki olduğunda led sabit yanıyor
durum üç olursa durum sıfırlanıyor ve led söndürülüyor.
Ayrıca Altın kural : her değişkeni başlangıçta sıfırlamalı. Reset veya BOR sonrası mcu toparlanırken yararlı olur.
 
Son düzenleme:

Forum istatistikleri

Konular
129,728
Mesajlar
929,298
Kullanıcılar
452,448
Son üye
nadir14

Yeni konular

Geri
Üst