avatar_emrecatal00

12f675 buton

Başlatan emrecatal00, 01 Mart 2016, 09:45:08

emrecatal00

Herkese merhaba! sorunum butonla alakalı
Örnek= buton(a) ya 1 kere  basıldığı zaman animasyon_1 de ise animasyon_1 i çalıştırıp bitirecek , butonb ' ye 1 kez  basıldığında ise animasyon_2 hazırda olacak birdaha buton(a) ya basıldığı zaman animasyon_2 yi çalıştıracak ve bitirecek.
Butonlama olayını tam yapamadım kafam iyice bir karıştı yardımcı olursanız sevinirim..
@ Device PIC12F675,WDT_OFF,PWRT_ON,PROTECT_OFF, CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT
;@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF
GPIO=0
ANSEL=0
cmcon=7

SYMBOL BUTONB=GPIO.5
SYMBOL BUTONA=GPIO.4

SIRA VAR BYTE
SIRA=0

CALISTIR:
IF BUTON2=0 THEN BASLA:

BASLA:
IF BUTON=0 THEN
SIRA=SIRA+1
IF SIRA>3 THEN SIRA=0
WHILE BUTON=0:WEND
ENDIF

SELECT CASE SIRA
CASE 0
goto animasyon_1
CASE 1
goto animasyon_2
case 2
goto animasyon_3

end select
goto CALISTIR   

animasyon_1:
PAUSE 210
TRISIO=%111110
pause 170
TRISIO=%111111
PAUSE 170

TRISIO=%111110
PAUSE 170
TRISIO=%111111
PAUSE 170

TRISIO=%111010
PAUSE 170
TRISIO=%111111
PAUSE 320

TRISIO=%111010
PAUSE 170
TRISIO=%111111
PAUSE 170

TRISIO=%111010
PAUSE 170
TRISIO=%111111
PAUSE 170
GOTO CALISTIR

animasyon_2
TRISIO=%111010
PAUSE 50
TRISIO=%111111
PAUSE 25
goto CALISTIR

animasyon_3
TRISIO=%111110
PAUSE 120
TRISIO=%111111
PAUSE 120

TRISIO=%111011
PAUSE 80
TRISIO=%111111
PAUSE 80

TRISIO=%111110
PAUSE 120
TRISIO=%111111
PAUSE 120

TRISIO=%111110
PAUSE 120
TRISIO=%111111
PAUSE 120

TRISIO=%111011
PAUSE 80
TRISIO=%111111
PAUSE 80

TRISIO=%111010
PAUSE 60
TRISIO=%111111
PAUSE 60






goto CALISTIR 
end

ersangundogdu

Kod tag nasıl yapılıyor bilemediğim için zipli olarak gönderdim. Bir dener misin?

ete

#2
12F675 de porta değer vermek için GPIO registeri kullanılır. Emre TRISIO yu kullanmış ersan da aynı yanlışı tekrarlamış.
TRIS registeri giriş çıkış pinlerini ayarlayan registerdir PORT registeri değildir. Bunu unutmayın.
Programın başına ;
TRISIO=%00110000  komutu eklenmeli. Bu komut ButonA ile ButonB pinlerini giriş olarak ayarlayacaktır.
Select Case kısmında ise TRISIO=%111110 komutları yerine GPIO=%00111110 şeklinde komutlar verilmesi gerekir.

Ete

ersangundogdu

Haklısınız hocam. MCS derleme yapmıyordu sadece o hataları giderdim. Diğer tarafları kontrol etmedim.

ete

#4
Hem programı düzeltelim hemde sistemi n çalışmasına açıklık getirelim istedim.
Tarife bakılırsa Ersan da doğrusunu yapmamış gözüküyor. Zira,

Programda 3 adet animasyon var ise ve ButonB yalnızca ikinci animasyonu sıraya sokacak ise sistemi şöyle özetlemek mümkün.
BUTONA sıradaki animasyonu çalıştıracak. Her basışta sırayı bir sonraki animasyona eşitleyecek.
BUTONB ise yalnızca Animasyon-2 yi sıraya alacak.
Başlangıçta sıra=0 olacağı için ButonA ya basılırsa Animasyon-1 çalışacak. Ardından Sıra=Sıra+1 yapacak.
Yeniden ButonA ya basarsam sırada Animasyon-2 olduğu için o çalışacak ve SIra=Sıra+1 yapılıp sıraya Animasyon-3 alınmış olacaktır.
Yeniden butonA ya basarsam bu sefer Animasyon-3 çalışacak ve Sıra tekrar sıfırlanacak ve animasyon-1 sıraya girmiş olacak.
Arada ButonB ye basarsam Sıra ne olursa olsun Sıra=1 olacak yani Animasyon-2 sırası.

Şimdi bu senaryoya göre programı verirsek aşağıdaki gibi olmalı,
@ Device PIC12F675,WDT_OFF,PWRT_ON,PROTECT_OFF, CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF
GPIO=0
ANSEL=0
cmcon=7
TRISIO=%00110000
SYMBOL BUTONB=GPIO.5
SYMBOL BUTONA=GPIO.4

SIRA VAR BYTE
SIRA=0

pause 300

BASLA:
WHILE BUTONB=1

  IF BUTONA=0 THEN
    SIRA=SIRA+1
    IF SIRA>3 THEN SIRA=0
    WHILE BUTONA=0:WEND
    pause 50
ENDIF

WEND

SELECT CASE SIRA
CASE 0
goto animasyon_1
CASE 1
goto animasyon_2
case 2
goto animasyon_3

end select
goto BASLA   

animasyon_1:
PAUSE 210
GPIO=%00111110
pause 170
GPIO=%00111111
PAUSE 170

GPIO=%00111110
PAUSE 170
GPIO=%00111111
PAUSE 170

GPIO=%00111010
PAUSE 170
GPIO=%00111111
PAUSE 320

GPIO=%00111010
PAUSE 170
GPIO=%00111111
PAUSE 170

GPIO=%00111010
PAUSE 170
GPIO=%00111111
PAUSE 170
GOTO BASLA

animasyon_2
GPIO=%00111010
PAUSE 50
GPIO=%00111111
PAUSE 25
goto BASLA

animasyon_3
GPIO=%00111110
PAUSE 120
GPIO=%00111111
PAUSE 120

GPIO=%00111011
PAUSE 80
GPIO=%00111111
PAUSE 80

GPIO=%00111110
PAUSE 120
GPIO=%00111111
PAUSE 120

GPIO=%00111110
PAUSE 120
GPIO=%00111111
PAUSE 120

GPIO=%00111011
PAUSE 80
GPIO=%00111111
PAUSE 80

GPIO=%00111010
PAUSE 60
GPIO=%00111111
PAUSE 60

goto BASLA
end

emrecatal00

#5
Hocam cevabınız için teşekkürler , en basit olarak şöyle a butonu animasyon değiştirecek b butonu hangi animasyondaysa onu çalıştıracak mesela animasyon 1 de a butonuna bastım çalıştı ve bitti birdaha basarsam yine animasyon 1 çalışacak sonra b butonuna bastım 2. animasyona geçti a butonuna bastığımda 2. animasyon çalışacak bitecek ben birdaha a butonuna basarsam yine 2. animasyon çalışacak , animasyon değiştirmediğim sürece yani b butonuna basmadığım sürece animasyon aynı kalacak teşekkürler yardımlarınız için tekrardan

ete

Birinci mesajın böyle söylemiyordu. Açıklamalara biraz özen göstermek gerek.
Boşuna çalışmış olduk şimdi.

Ete

emrecatal00

#7
Hocam nasıl aciklayacagimi bilemedim o nedenle açıklamayı sonradan uzun tuttum kusura bakmayın lisede mikro işlemciler dersi kaldırıldığı için kendi cabalarimla ve sizin derslerinizle birşeyler yapmaya çalışıyorum bu yüzdende fazla aciklayamadim galiba fakat dediğim gibi b butonuna basılınca hangi animasyondaysa çalışacak a butonuna basıldığında ise 1. animasyondaysa 2. animasyona yine basılırsa 3. animasyona gibi gidecek ama b butonu örnek 3. animasyonda b ye bastığım zaman 3. animasyon çalışacak yine bastım yine çalışacak sonra a ya bastım 1. animasyona geçti b ye bastığımda 1. animasyonu çalıştıracak teşekkürler kusurum varsa affola..

ete

Yukarıda verdiğim program örneğini son açıklamaya göre düzelttim. Bakabilirsin.

Ete

Powered by EzPortal