Taster entprellen und anschliessen
Hallo Leute
Ich möchte einen (später noch ein paar mehr) Taster an den PORTB <7:4> drantun, der dann bei Betätigung einen Interrupt auslöst. Dieser Interrupt sollte dann dazu führen, dass der Timer 1 zu laufen beginnt.
Ich dachte eigentlich, dass das ne ziemlich simple Sache sein sollte, doch so langsam bin ich mit meinem Latein am Ende und das Ding läuft noch immer nicht.
Als Taster verwende ich so ein Ding: http://www.distrelec.com/ishopWebFro...ries/is/1.html
Dieser ist einerseits an 5V, und über eine Pull-Down-Widerstand von 470 Ohm mit der Masse verbunden. Ich habe das ganze auch mal mit dem Multimeter getestet und bekomme bei offenem Taster 0.1mV und bei gedrücktem Taster 5.01V. Somit ist da noch das Problem des Entprellens, doch das sollte ich eigentlich softwaremässig mit einer Warteschleife von 20ms überbrückt haben.
Doch auch so reagiert der PIC nicht auf die Betätigung des Tasters.
Das Programm sieht dann so aus:
Code:
ISR ;interupt service routine
movwf copyw
swapf STATUS, W
bcf STATUS, RP0
movwf copys
btfsc PIR1, TMR1IF
goto TMR1ISR
btfsc PORTB, 7
goto RBInt
goto ISRend
..........
RBInt
bcf INTCON, RBIF
bsf UPDRBI
goto ISRend
ISRend ;interupt end routine
swapf copys, w
movwf STATUS
swapf copyw, f
swapf copyw, w
bsf UPDLCD
retfie
...............
InitTimer
bcf STATUS, RP0
movlw B'00110101' ;prescaler: 1:8; internal clock; no synchronize; Timer1 enabled
movwf T1CON
bsf STATUS, RP0
bcf PIE1, TMR1IE
bcf STATUS, RP0
bsf INTCON, RBIE
bsf INTCON, PEIE
bsf INTCON, GIE
return
Main
btfsc UPDLCD
goto WriteLcd
call Init
call InitLCD
call InitTimer
WriteLcd
bcf UPDLCD
btfsc UPDRBI
goto TestRBI
call printzehn
call printseke
call printsekz
call printmine
call printminz
call printstde
call printstdz
movlw b'11001111'
call OutLcdControl
movlw D'10'
movwf loops
call WAIT
goto WriteLcd
TestRBI
bcf UPDRBI
movlw D'20'
movwf loops
call WAIT
btfsc PORTB, 7
goto StartTMR
goto WriteLcd
StartTMR
bsf STATUS, RP0
bsf PIE1, TMR1IE
bcf STATUS, RP0
goto WriteLcd
Die Hardware und der restliche Code sollten einwandfrei sein, da das ganze ohne den Taster ohne Probs funktionniert
Etwas lustiges ist mir auch noch aufgefallen: Wenn ich den Pull-Down Widerstand am Taster entferne, und dann nur ein Bein des Widerstands an die Masse hänge, läuft der Timer/Uhr. (Das 2. Bein hängt in der Luft) Das ist irgendwie ein bisschen komisch. ^^
Hat jemand schon mal so etwas gemacht, und könnte mir sagen, was ich ändern sollte?
mfg orph