Tek butonla led yakıp söndürme nasıl yapabilirim

Başlatan umberto, 24 Mayıs 2006, 15:09:48

umberto

Selamlar

Şöyle bir sorum olucaktı.

Mikrodenetleyici olarak 16f84 kullnıyorum.

Yapmak istedigim : Porta.0 pinine bir buton baglı ve ben bu butona bastıgımda portb.0 pinine baglı led yanacak. Butonu bıraksam bile led yanmaya devam edecek.Butona ikinci basısımda led sönecek.(not buton off konumunda porta.0=1 butona basıldıgında porta.0=0 )

Bu işlemi pbp ile nasıl gerçekleştirebilirim?

yardımlarınız için teşekkurler

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

XNHCX

Dostum ,
Bu konu forumda konuşuldu....
Aşağıdaki link işinizi görür.

PicProje Forum Ana Sayfası -> --PICBasicPro--bir butonla bir ledi yakıp söndürmek

https://www.picproje.org/index.php/topic,4092

kurumahmut

belirtilen forumda bu iş için basic kodu yazmışlar. Ancak lojik bir işlemle toggle yapma işlemi yapılabilir. Bunun için exor işlemini kullanabiliriz.

!!! işlemleri açıklarken buton genel kabul olan basılı iken 0, basılmadığında lojik 1 olarak algılanacak şekilde bağlanmış olsun....

fonksiyon şöyle

yeni led durumu = eski led durumu (exor) (NOT)kontrol (yani  butonun durumu)

yani buton okunur değerinin tümleyeni alınır led okunur. bu ikisi exor lanır ve sonuç ledin yeni durumu olur....

eğer led sönük ve buton basılmamış ise:  
0 EXOR !1 = 0 yani led hala sönük kalır...

eğer led sönük ve buton basılmış ise:  
0 EXOR !0 = 1 yani led yanar...

eğer led yanık ve buton basılmamış ise:
1 EXOR !1 = 1 yani led hala yanık kalır...

eğer led yanık ve buton basılmış ise:
1 EXOR !0 = 0 yani led söner...


edit: zaten burası basic forumuymuş... :)

ipek

minik bir hatirlatma 100 miliSaniye buton gecikmesine dikkat edersek
sicramalardan parazitlerden onemli olcude siyrilabiliriz gecenlerde
piyasadan switch'ler aldim duzgun calisan yazilim kararsiz calisti
en son switch'leri degistirdigim aklima geldi yeni buttonun icini actim
gumus kapli olmasi gereken dome kararmis gitmis ulkemizde elektronik
piyasasi 5 nisan kararlarindan sonra rulet carkina dondugu icin saticilarin
10 yil evvel temin ettigi malzemeleri bizlere bugun afiyetle sunuyorlar...

SpeedyX

x:
   if porta.0=1 then
      toggle portb.0
      pause 50
   endif
goto x


Artık forumda arama kısmını kullanmayı öğrensek çok iyi olacak.

Edit: Konu açılmıştır, devam edebilirsiniz.

tnen

Başka bir çözüm bir sayıcıyı butona her basışında arttır son bitine bak 1 ise ledi yak 0 ise sondur.

umberto

Selamlar

Yeni msn göndermeden yardımlarınızla halledebilmek için 2 gündür ugrasıyorum fakat sanırım ben başka bir noktada hata yapıyorum.
Kullandıgım pic proggammer junior pic programmer. Programlayıcı software ic-prog. pic basic pro ve mcs kullanıyorum.

yazdıgım kod

output porta.0
input portb.0
porta.0=1
x:
  if portb.0=0 then
     toggle porta.0
     pause 100
 endif
GOTO X

fakat çalışmıyor led sürekli yanık kalıyor.
not:portb.0 pull up yapılmış durumda butuna basılınca ground'a çekiliyor

Pici programlamada hata mı yapıyorum diye bir deneme programı yazıyorum.

output porta.0
y:
high porta.0
pause 100
low porta.0
pause 100
goto y
end

bu kod ise normal şekilde çalışıyor.led yanıp sönüyor.

Nerde hata yapıyorum.Yardımcı olursanız çok sevinirim.

Saygılarımla

tnen


Klein

Alıntı yapılan: "tnen"Başka bir çözüm bir sayıcıyı butona her basışında arttır son bitine bak 1 ise ledi yak 0 ise sondur.

:D   Güzel fikir....  Birçok koddan daha hızlı ve daha verimli çalışacağına eminim.

sguykan

......
a:
if portb.0=0 then toggle porta.0
WHILE portb.0 :wend  
goto a
.........

umberto

tekrar selam

uzun ugraslar sonucu anladıgım kadarıyla, pic basic pro da

if porta.0=1 veya portb.1=1

gibi komutları çalıştıramadıgımı farkettim.
portb.1 e bir led baglayıp bu komutu yazıp çalıştırdıgımda led yanmıyor fakat high portb.1 komutu ile ledi yakabiliyorum.

Arkadaşlar sorun nedir sizce? Bu başlıktaki bütün önerilenleri denedim ama led bir türlü yanıp sönmüyor.

Yardımlarınızı bekliyorum

Lütfi AYYILDIZ

Pull-up belki yetersiz gelebilir. Sen yinede 10k lık bir dirençle portb.0 ı + beslemeye çek. aşağıdaki programa bir göz at istersen çalışan bir program senin projene uyarladım.

TRISA=0
TRISB=255
HIGH PORTA.0
X:
if portb.0=0 then
while portb.0=0
wend
toggle porta.0
endif
goto x

paradox

merhaba bende butonla led yakıp söndürmeye çalıştım fakat olumsuz sonuçlar aldım.hem proteusta hemde board üzerinde denedim ama olmadı.aşağıda devreyi ve programı yazdım ilgilenirseniz sevinirim...



TRISA=255
TRISB=0
X: 
if porta.1=0 then 
while porta.1=0 
wend 
toggle portb.0 
endif 
goto x


bu bitanesi çalışmadı...

D var byte 
TRISB=%00000000
TRISA=%00000010
PORTB=0
D=0
BUT:
    BUTTON PORTA.1,0,254,0,D,1,LED
    GOTO BUT
LED:
    PORTB.0=1
    PAUSE 1000
    PORTB.0=0
    PAUSE 1000

END


buda ikincisi...ikisi de çalışmadı.[img]

mech

Buton için porta.0 kullanırsan bu portu bir de +5V'a 4K7 gibi bir direnç ile bağlamalısın(pull up). Bunun yerine B portunu kullanırsan içten pullup yapabilirsin.

trisa=0
trisb=1
option_reg.7=0'çıkışlar içten pull-uplı
ra1 var byte
ra1=0' en başta sıfırlanır
devam:
button portb.0,0,100,10,ra1,1,but 'buton portb.0 'a bağlı.
if a=0 then
high porta.0 'lede porta.0'a bağlı
else
low porta.0
endif
goto devam
but:
pause 200
a=a+1'tuşa basışta a 1 artar
if a>1 then a=0
goto devam
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır