Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Kesme [Yardım]

Başlatan reptir, 22 Temmuz 2011, 00:15:55

reptir

Pic-16F628A kullanıyorum ve Programlama dili olarak Proton .
Proje: En hızlı buton basma.

Seri port ayarlarını yaptım. (seri port iletişiminde sorun yok)
Bir buton koydum ve butona kaçkez basıldığını sayabiliyorum. Sorun iki basma arasında ne kadar zaman geçtiğini bulmak.
Örnek kod:

Dim Sayac As Float
Dim Zaman[30] as Float
Dim Sira as Byte
Sayac = 0
Sira = 0
'----------------------------------------------------------
'İlk tuşa basma Kontrol ediliyor.

Kontrol:
if Portb.4 = 1 then goto Say : Else : Goto Kontrol
'----------------------------------------------------------
'İki buton basması arasında Mikro saniye cinsinden sayacak.

Say:
delayus 1
Inc Sayac
GoTo Say
'----------------------------------------------------------
'Kesme işleminde yapılacak işler..

KesmedeBurayaGelecek:
Zaman[sira] = sayac 'Sıradaki değişkene Zamanı aktar.
sayac = 0                'Zamanı sıfırla
inc Sira                    'Sıradaki değişkeni bir artır.
if sira = 30 then      '30 ise işlemi bitir ve bilgiyi seri porttan gönder. (0-29 arası 30 değişkendeki bilgi)
Sayac = 0
Sira = 0
hserout [str Sira]
Sleep 5                  '5 Saniye durmasını söylediğimde adamın fazladan basmastıklarını görmezlikten gelmesi için.
goto Kontrol            'Tekrar kontrol etmeye başla.
EndIf
Goto Say                 '30 değilse Diğer tuş için zamanı saymak için sayaca git.
End

Şimdi bana lazım olan şey ise:  RBIF kesmesini nasıl yapacağıma dair bir döküman. Google amcaya sordum fakar bir yanıt alamadım :(


Farklı bir yöntem:
Butona basılınca Timer çalışır ve zaman tutmaya başlar. ikinci kez butona basılınca timer değeri değişkene alınır ve timer sıfırlanarak yeniden çalıştırılır.
Yeni başladığım için Timer kullanmayı da bilmiyorum. Bu yüzden bu konuda bir kodum yok.


* Bunun anlatılması biraz meşakatli fakat iyilik yapmak herzaman kolay olmuyor.

Yapabileceğiniz yardımlar için şimdiden teşekkürler.

reptir

Soronumu hallettim. Zaman ayırarak okuyan bütün arkadaşlara teşekkür ederim.
Yardım aldığım sayfa:
http://etepic.com/forum/

ETE beyin forum'u.
13. dersi çıkmuş bu arada. ilgilenlerin dikkatine :)

Biraz reklam kokan bir yazı oldu ama reklamı hak ediyor.
Madem reklam yaptık tam yapalım :)

Forum yeni açılmış. 2 aylık bir geçmişi var.
Sorulan sorulara ETE beyin kendisi cevap veriyor. :) Malum henüz başı kalabalık değil ve forum ile tek başına ilgilenebiliyor. Erinmeden Uzun uzun detayları ile cevap veriyor anlamamk imkansız.

Paylaşmayı çok seviyor.
İnernette yazdığı dersleri bir araya getirseniz PIC konusunda en iyi kitaplardan birini elde etmiş olursunuz.

Reklamı hak etmesindeki en önemli sebep ise:
Diğer hocalar gibi Kitap yazıp sonrada...
"O kadar emek verdik. Kidabın PDF taramasını dağıtmayın internette. Bırakın da 3 5 kuruş da biz kazanalım."

demiyor, maddi amaç gütmüyor ve Blgilerini paylaşmaktan hiç çekinmiyor. İşte bu yüzden gerçek bir bilgi ve bilim adamı olduğunu düşünüyorum.

fryrmnd

hocam baya güzel düşünmüşünüz gerisini yapmak sizin için zor olcağa benzemiyor. mesela tmr1 i sayıcı olarak kullanırsanız ,tmr1 in düşük ve yüksek byte larını buton geldiğinde okutabilirsiniz. Datasheetten bunların nasıl yapılcağını rahatlıkla görebilirsiniz.Gerçi sayıcı olarak çalıştırıldığında saat darbesini dışardan vermek gerebilir tam emin değilim.yada timer olarak kulanıp kesme ile de yapabilrisiniz sanırım.Bende  yeterince tecrübeli olmadımdan sadece aklıma gelenleri aktarabiliyorum.Gerçeklemesi ne kadar  mümkün bilmiyorum. timer kesmesini açarsınız . Butonu da rb0 bağlarsınız. kesme oluştuğunda kesmenin Rb0 da  mı timerdan mı kaynaklandığına bakarsanız.Timerdan kaynaklanıyorsa bir değişkenin içeriğini artırıp kesmeden çıkarsanız. b0 kesmesi gelince de  tmr0  ı okuyup içeriğini artırdığımız değişken ile birlikte geçen süreyi hesaplayabilirsiniz. Daha basit yöntemler de olabili tabii   

reptir

ETE bey'in önerisi de bu yönde oldu ve yaptık :)
ilgi ve alakan için sağol.