Buton Yardımı

Başlatan ekar, 22 Mayıs 2014, 10:21:29

ekar

Öncelikle Herkese Merhaba.

Kendi bilgim dahilinde 12F675 Kullanarak bir program yazmaya çalışıyorum.

Pic Basic Kullanarak yazdığım programda 1 buton var ve butona basınca sırasıyla animasyon değişiyor.

Sizlerden Yardım ve Bilgi isteme sebebim ise Program içinde yazılmış komutlar dahilinde

Butona belli bir saniye basılı tutup (açma/kapama) yapmak Mümkünmüdür?

Kod:
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT ' DAHİLİ OSİLATOR
@ DEVICE pic12F675, WDT_ON
@ DEVICE pic12F675, PWRT_ON
@ DEVICE pic12F675, MCLR_OFF
@ DEVICE pic12F675, BOD_OFF
@ DEVICE pic12F675, CPD_OFF
@ DEVICE pic12F675, PROTECT_ON




CMCON=7          
OPTION_REG.7=0
ANSEL=0
GPIO=0
TRISIO=%110000

SYMBOL TUS= GPIO.5
SYMBOL LED1=GPIO.0
SYMBOL LED3=GPIO.2   

SIRA var byte
SIRA=0
read 0,SIRA


Basla:
IF TUS=0 THEN
SIRA=SIRA+1
IF SIRA>5 then SIRA=0
WHILE TUS=0:WEND
ENDIF

SELECT CASE SIRA
CASE 0
Goto Animasyon_Bir
Case 1
Goto Animasyon_Iki
Case 2
Goto Animasyon_Uc
case 3
goto Animasyon_dort
case 4
goto Animasyon_bes
case 5
goto Animasyon_alti
End Select

Goto basla

Animasyon_bir:
write 0,0
low led1
low led3
pause 100

goto basla

Animasyon_iki:
write 0,1
HIGH LED1
HIGH LED3
PAUSE 100
goto basla

Animasyon_uc:
write 0,2
HIGH LED1
pause 70
LOW LED1
pause 70
HIGH LED1
pause 70
LOW LED1
pause 70
HIGH LED1
pause 70
LOW LED1
pause 70
HIGH LED3
pause 70
LOW LED3
pause 70
HIGH LED3
pause 70
LOW LED3
pause 70
HIGH LED3
pause 70
LOW LED3
pause 70
goto basla

Animasyon_dort:
write 0,3
HIGH LED1
HIGH LED3
pause 70
LOW LED1
LOW LED3
pause 70
HIGH LED1
HIGH LED3
pause 70
LOW LED1
LOW LED3
pause 70
HIGH LED1
HIGH LED3
pause 70
LOW LED1
LOW LED3
pause 420
goto basla

Animasyon_bes:
write 0,4
HIGH LED1
HIGH LED3
pause 140
LOW LED1
LOW LED3
pause 140
HIGH LED1
HIGH LED3
pause 140
LOW LED1
LOW LED3
pause 140
HIGH LED1
HIGH LED3
pause 140
LOW LED1
LOW LED3
pause 140
goto basla

Animasyon_alti:
write 0,5
HIGH LED1
HIGH LED3
pause 70
LOW LED1
LOW LED3
pause 700
goto basla

Maxim

önce şunu sormak isterim
write 0,1 komutu nedir çözemedim ben

ekar

Alıntı yapılan: Maxim - 22 Mayıs 2014, 10:35:22
önce şunu sormak isterim
write 0,1 komutu nedir çözemedim ben

Efendim

write 01 komutu devreden elektrik kesildiği zaman ilk animasyonda değilde kesinti öncesi kaldığı animasyondan devam etmesini sağlıyor.

Komut Başlangıcındaki (read 0,SIRA) ile kullandım

Bu Bilgiye ise rüzgarbeyin yanıtla#5 cevabından öğrendim. https://www.picproje.org/index.php/topic,26561.0.html






Maxim

iyide her butona basmada eeproma yazarsanız devreniz bir süre sonra cortlar
eeproma yazmanın bir sınırı var çünkü.
sadece elektrik kesilmesinden sonra eeproma yazmalısınız.
bunun için tasarımda büyük kapasite falan kullananlar oluyor

ekar

Alıntı yapılan: Maxim - 22 Mayıs 2014, 12:31:21
iyide her butona basmada eeproma yazarsanız devreniz bir süre sonra cortlar
eeproma yazmanın bir sınırı var çünkü.
sadece elektrik kesilmesinden sonra eeproma yazmalısınız.
bunun için tasarımda büyük kapasite falan kullananlar oluyor

Efendim

Öneriniz İçin Teşekkür Ederim

Öğrendiğim bilgilerler dahilinde böyle bir komut kullandım ama diğer her türlü bilgiye açığım.

Önerinizi kullanmaya gayret edicem.

Maxim

bana maxim diyebilirsin.
şimdi butona tık tık basınca bir iş, uzun süre basılı tutunca başka iş yaptırmak zor değil
asıl elektrik kesintisi algılaması zor
dışarı çıkıyorum dönüşte devam ederiz.

ipek

Daha evvel netten bulduğum örnekleri yolluyorum uyarlayabilirsen.
http://www.dosya.tc/server30/WTGGyk/Desktop.rar.html

astechotomasyon

devre şemanı yayınlarsan sana yardımcı olabilirim.
burda yapman gereken tek şey devre besleme girişine seri bir diyot ve ondan sonrada bir kondansatör koy. ayrıca bir optocuploru diyottan önceki besleme ile sür. ve opto. nun çıkışını pic e gir. elektrik kesilmesi anında önce diyot öncesinde voltaj sıfırlanır ve senin kondansatör deşarj süresi kadar zamanın olur. optokuplor sürümü kesince, yani çıkış 0( logic 0) olunca sende kayıt yaprsın. ama kayıt yaparken ayrıca bir bit kullan. yani işaret biti. kaydı bir defa yaptınmı o biti 1 yapki her döngüde kayıt yapmasın. ve programın başındada bu biti 0 yap.

ekar

Alıntı yapılan: ipek - 22 Mayıs 2014, 13:39:18
Daha evvel netten bulduğum örnekleri yolluyorum uyarlayabilirsen.
http://www.dosya.tc/server30/WTGGyk/Desktop.rar.html

Efendim Paylaşımınız için Teşekkür Ederim . Uyarlamak içinse elimden geleni yapacağım sevgili maxim'inde dediği gibi (şimdi butona tık tık basınca bir iş, uzun süre basılı tutunca başka iş yaptırmak zor değil) olabilceğini bilmek bile güzel.

Maxim

bir örnek yapalım

buton gpio.5 e bağlı ve gpio.5 pull-up yapılmış durumda
butonun diğer ucu gnd ye bağlı.

butona tık tık diye basarsam adet 1 artarak büyüyecek
adet yerine goto da koyulabilir. (peş peşe bir kaç goto kullanırsan sorun çıkar)

yok butona elimizi sabit basılı tutarsak bir süre sonra program GoTo neresi? diye bir yere dallanır
hiç adet bölümüne uğramaz
goto yerine başka birşeyde yaptırabilirsin.


buradaki bekleme zamanını delayms komutu yada Dim SAY As Byte belirler
Dim SAY As word yaparsın çook daha uzun süre bekleme yapabilirsin

kodlar proton+ ama picbasice çevirmesi çok kolay


SYMBOL TUS=GPIO.5
Dim SAY As Byte
Dim Adet as byte

If TUS=0 Then
  DelayMS 5
  SAY=0

While TUS=0
     inc SAY
     DelayMS 10

     If SAY = 250 Then 
     GoTo neresi?
     EndIf
Wend

ADET= ADET + 1

endif

ekar

Alıntı yapılan: astechotomasyon - 22 Mayıs 2014, 13:58:32
devre şemanı yayınlarsan sana yardımcı olabilirim.
burda yapman gereken tek şey devre besleme girişine seri bir diyot ve ondan sonrada bir kondansatör koy. ayrıca bir optocuploru diyottan önceki besleme ile sür. ve opto. nun çıkışını pic e gir. elektrik kesilmesi anında önce diyot öncesinde voltaj sıfırlanır ve senin kondansatör deşarj süresi kadar zamanın olur. optokuplor sürümü kesince, yani çıkış 0( logic 0) olunca sende kayıt yaprsın. ama kayıt yaparken ayrıca bir bit kullan. yani işaret biti. kaydı bir defa yaptınmı o biti 1 yapki her döngüde kayıt yapmasın. ve programın başındada bu biti 0 yap.

Efendim yardım isteğiniz için çok teşekkür ederim kompanentlerle ilgili malesef yeterli bilgiye sahip değilim. eğerki bunlarıda yapmaya kalkarsam okuyarak ögrenmeye çalıştığım pic konusunda kafam dahada çok karışacak o yüzden devre yapımını hep ikinci planda tutuyorum yinede çok Teşekkür ederim.

Sevgili Maxim anlatımın ve örnek için teşekkür ederim senin verdiğin ve ipek arkadaşımızın verdiği örnekler dahilinde bir gelişim sağlıyacağım başarı sonucunda burda diğer arkadaşlara yardım açısından paylaşım yapacağım herkese teşekkürler...