buton hakkında

Başlatan yolcu27, 25 Mart 2016, 19:39:57

robomaster

Alıntı yapılan: yolcu27 - 05 Mayıs 2016, 17:00:39
Pause dan önce koydum
Bu şekilde de sadece porta.3 e bakar değil mi en son satır var çünkü.

Hayır  pauseden önceki 3 satırda hızlıca bir çırpıda çalışır.  Buradaki çırpı kavramı PIC kristal hızı ile ilgilidir.
Hangi satır işletilirken istenilen şart gerçekleşiyor ise program o prosedure dallanacaktır. Burada her satırın
sonunda BASLA olduğuna göre nereye dallanılacağı belli. Eğer 3 satırdaki şart ta gerçekleşmezse (çok kısa sürede butona bastın bastın)
program pause satırında boş bir şekilde bekleyecek ve kendinden önceki satırlar umurunda olmayacaktır.
Bu konuyu aydınlatayım dedim.

yolcu27

#31
Alıntı yapılan: robomaster - 05 Mayıs 2016, 17:57:26
Hayır  pauseden önceki 3 satırda hızlıca bir çırpıda çalışır.  Buradaki çırpı kavramı PIC kristal hızı ile ilgilidir.
Hangi satır işletilirken istenilen şart gerçekleşiyor ise program o prosedure dallanacaktır. Burada her satırın
sonunda BASLA olduğuna göre nereye dallanılacağı belli. Eğer 3 satırdaki şart ta gerçekleşmezse (çok kısa sürede butona bastın bastın)
program pause satırında boş bir şekilde bekleyecek ve kendinden önceki satırlar umurunda olmayacaktır.
Bu konuyu aydınlatayım dedim.

banada öyle geldi:)

şu şekilde yazdım kodları sizce bir sıkıntısı varmıdır? 100ms içinde kontrol ettiği için butona bastığımı algılar diye düşünüyorum..

@ DEVICE pic16F628A                      'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
define osc 4

cmcon=7
trisa=%10111111   '  a6 çıkış geri kalan  pinler giriş butonlara bağlanacak
trisb=%00000000   '  b portu rölelere gidecek full çıkış

porta=0
portb=0

basla:

portb=0

if porta.4=1 then ikiyon
if porta.3=1 then sol
if porta.2=1 then sag

goto basla


ikiyon:

high porta.6
pause 1000
low porta.6

    ikiyon1:

portb=%00011000
pause 100
gosub oku1
pause 100
gosub oku1
pause 100
gosub oku1
portb=%00111100
pause 100
gosub oku1
pause 100
gosub oku1
pause 100
gosub oku1
portb=%01111110
pause 100
gosub oku1
pause 100
gosub oku1
pause 100
gosub oku1
portb=%11111111
pause 100
gosub oku1
pause 100
gosub oku1
pause 100
gosub oku1

goto ikiyon1

sol:
high porta.6
pause 1000
low porta.6
    sol1:

portb=%00010000
pause 100
gosub oku2
pause 100
gosub oku2
pause 100
gosub oku2
portb=%00110000
pause 100
gosub oku2
pause 100
gosub oku2
pause 100
gosub oku2
portb=%01110000
pause 100
gosub oku2
pause 100
gosub oku2
pause 100
gosub oku2
portb=%11110000
pause 100
gosub oku2
pause 100
gosub oku2
pause 100
gosub oku2


goto sol1


sag:
high porta.6
pause 1000
low porta.6
    sag1:

portb=%00001000
pause 100
gosub oku3
pause 100
gosub oku3
pause 100
gosub oku3
portb=%00001100
pause 100
gosub oku3
pause 100
gosub oku3
pause 100
gosub oku3
portb=%00001110
pause 100
gosub oku3
pause 100
gosub oku3
pause 100
gosub oku3
portb=%00001111
pause 100
gosub oku3
pause 100
gosub oku3
pause 100
gosub oku3

goto sag1

oku1:
if porta.3=1 then sol
if porta.2=1 then sag
if porta.0=1 then basla
if porta.1=1 then basla
if porta.7=1 then basla
return

oku2:
if porta.4=1 then ikiyon
if porta.2=1 then sag
if porta.0=1 then basla
if porta.1=1 then basla
if porta.7=1 then basla
return

oku3:
if porta.4=1 then ikiyon
if porta.3=1 then sol
if porta.0=1 then basla
if porta.1=1 then basla
if porta.7=1 then basla
return


bu kodlardaki 6 buton baska bir devreye de bağlı orada ilk 3 buton burada portları sıfırlarken diğer devrede başka etiketlere yönlendiriyor.
son 3 buton ise tam tersi işlemi diğer devredeki portb yi sıfırlıyor bu devrede portb den çıkış veriyor

yolcu27

yine buton kontrolü hakkında aklıma takılan bir yer daha var yeni konu açmak istemedim buradan sorayım hemen

şimdi ben buton kontrolünü en son vermiş olduğum kodlarda 100 ms de bir bir etikete gidip butona bakarak gelerek yapıyprdum bekleme süreleri içerisinde.

programı kısaltmak istedim for next döngüsü içine pause 10  ile 100 kere tekrar etmesini sağladım. örnek kod parçasını aşağıda vereceğim.

merak ettiğim konu şu. ete hocanın verdiği örnekte pause 1 verilmiş ve 500 kere tekrar ile 500ms elde edilmiş.

ben 1 saniye için pause 10 verip 100 kere tekrar ettirdim.    pause 1 verip 1000 kere tekrar et dersem pic bunu yapabilecek midir? pic16f628a dahili osilatör kullanıyorum. kodum aşağıda ben bunu pause 1  verip 1000 kere dönmesini istiyorum yani olabilir mi sizce?

oku3:
for a=1 to 100
pause 10
if porta.4=1 then ikiyon
if porta.3=1 then sol
if porta.0=1 then basla
if porta.1=1 then basla
if porta.7=1 then basla
next
return

ete

Pic in ne yapıp yapamayacağını tartışmak çok anlamsız. Döngüyü 100 olarak kurup Pause 10 verirsen 10*100=1000 ms lik gecikme yaratırsın. Ama butonları her 10 ms de bir kontrol edebilirsin. Bu 10 ms lik buton kontrol gecikmesi demek olur.
Ama 100 yerine 1000 olarak döngüyü kurup (döngü değişkenin word cinsinden olmalı) pause değerini 1 olarak kullanırsan yine 1000 ms lik gecikme yaratır ama butonların kontrol aralığı 1 ms ye düşmüş olur. Bazen bu kadar fark bile çok önemli hale gelebilir.
Soruna direk cevap arıyor ise Pic bunu yapabilir merak etme.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

yolcu27

Alıntı yapılan: ete - 18 Mayıs 2016, 11:08:23
Pic in ne yapıp yapamayacağını tartışmak çok anlamsız. Döngüyü 100 olarak kurup Pause 10 verirsen 10*100=1000 ms lik gecikme yaratırsın. Ama butonları her 10 ms de bir kontrol edebilirsin. Bu 10 ms lik buton kontrol gecikmesi demek olur.
Ama 100 yerine 1000 olarak döngüyü kurup (döngü değişkenin word cinsinden olmalı) pause değerini 1 olarak kullanırsan yine 1000 ms lik gecikme yaratır ama butonların kontrol aralığı 1 ms ye düşmüş olur. Bazen bu kadar fark bile çok önemli hale gelebilir.
Soruna direk cevap arıyor ise Pic bunu yapabilir merak etme.
Ete

Tesekkurker hocam hep bu isi nasil yapabilirim diye dusunuyordum  gecikmeden etkilenmeyen buton için. Bu sayede deidiginiz gibi yaparak word değişkeni ile pause 1 e 1000 kere dönmesi için değiştirip butonun bekleme süresinden etkilenmesini sıfıra indirmis oluyoruz.

Pic bunu yapabiliyorsa sıkıntı yok artık. Yeniden teşekkürler