sensör ile otobüse binen ve inen yolcu sayısını hesaplama

Başlatan a4tech33, 08 Ağustos 2011, 15:09:21

ehliseyf

B portundaki değişimleri sezen bir kesme olması lazım.o kesmeleri kullansan daha kolay olur işin.Ben CCS C ile çalışıyorum fakat mantıken anlatayım biraz.

İlk olarak 2 adet kesme kullanmalısın. sensor 1 ve sensor 2 için.Kesmeler aktif oldugunda ayrı bir programa dallanma yapıyor.Bu ayrı fonksiyon program  senin saclarından birini artıyor. İki sayacın eşit oldugundan sayın 1 artması gerekiyor ve sayaclardaki değişmeleri kayıt etmek gerekiyor sanırsam.yoksa sürekli aynı olacagından sayı sürekli artmak isteyecektir.yani kesmelerden cıkıp kesmelere girdikce uygulaması gerekiyor.

rb7 rb6 rb5 rb4  pinlerindeki değişimleri sezen bir kesme var diye biliyorum. pic16f877 ile halledebilirsin sanırım. 628a da var mı bilmiyorum aynı kesmeler.
Code'm mu oturturum !

eistain_54

Hocam bildiğimiz gibi otobüslerde 2 kapı vardır.Bunların önündeki kapı binmek için kullanılırken arkadaki kapı inmek için kullanılır.Bunu zorunlu kılarsanız ki bazı otobüslerde bu şekilde zorunlu bir sensör öne diğeri arkaya konulabilir.Eğer böylesine kabulsen program kodlarını paylaşabilirim?
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

a4tech33

yok hocam ya olmuyor öyle :( tek kapı olduğu farzedilecek..

subram

merhaba

portb.7= 1. sensör
portb.6=2.sensör olsun.

şimdi ilk yapman gereken portb değişik kesmesini kullanman. önce bunu araştır. portbde değişiklik olunca led falan yak vs.. bu kesmeyi kullanmayı önce öğren. adım adım yardım ederim sana
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

a4tech33

bi araştırıyım isis te denemelerimi yapıyım hocam..

subram

portb kesmesi bittikten sornra TMR0 kesmesini de araştır. ondan sonra işin o olacak.
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

a4tech33

porta=0
portb=0



ON INTERRUPT GOTO KESME
OPTION_REG=%0000000
INTCON=%10010000
TRISA=%0000000
TRISB=%00000001
CMCON=7
basla:

porta.0=1
PAUSE 50
PORTA.0=0
PAUSE 50


goto basla
DISABLE
KESME:
PORTB.3=1
PAUSE 100
PORTB.3=0
PAUSE 50

PORTB.3=1
PAUSE 100
PORTB.3=0
PAUSE 50






INTCON.1=0
RESUME
ENABLE
END




TMR0  KESMESİNİ ÖGRENİRKEN KENDİ YAPTIGIM PROGRAM HOCAM BU PİC16F628 İN  0.PİNİNE BAGLI LED SÜREKLİ YANIP SÖNERKEN KESME OLDUGUNDA PORTB.3 BİTİNDEKİ LED YANIP SÖNÜYOR İŞİ BİTTİGİNDE TEKRAR AYNI İŞİ YAPIYOR.

subram

tamam devam et. portb kesmesine de bak sonra bunları birleştiricez.. bu arada TMR0 kesmesini 1 saniye olacak şekilde ayarlayabilir misin?
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

a4tech33

pause ile ilgili değilmi süresi hocam 1 de aklıma 1 sey geldi dolmusla ilgili buyurun anlatıyım



diyelimki sen1 ve sen2 sensörleri var



adam binecek otobuse ilk sen2  okudu derhal kesmeye gitse sayı da 1 artsa
diyelimki adam inecek sen 1 okudu derhal kesmeye gitse sayı 1 eksilse
?

gerci öyle düşündüm ama olsun ben rb4-rb7 değişiklik kısmındada bir inceleme yapıyım

subram

pause ile değil! TMR0 kesmesini niye kullanıyoruz sanki. süre hesabı için. TMR0 ile istediğin bir süreye kesme nasıl ayarlayanır ona da bak.
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

a4tech33

timer zamanlayıcısı taştığı zaman  kesme oluyor 0-255 bunuda   bölücü değerlerden ayarlıyoruz  hocam taşma zamanını.. 1usx değer x256 ? tablosu var benim kitabımda

subram

he işte tamda bu formül. yalnız dikkat et formüldeki 1uS  4MHZ osc için geçerli(pic oscyi 4e bölüp kullanıyor.) 20MHZ olsaydı 5us olacaktı.

ilk işin 1s de kesme oluşturacak bir TMR0 kurmak.
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

a4tech33

saat hesabı
sayac var byte

ON INTERRUPT GOTO KESME
OPTION_REG=%1000101
INTCON=%10100000
TRISA=%0000000
TRISB=%00000001
CMCON=7
basla:


pauseus 100
goto basla

dısable


kesme:

sayac=sayac+1
ıf sayac =61 then
sayac =0
endıf

ıntcon.2=0
resume
enable
end