PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR reagiert nicht auf Tastendruck



quad
12.06.2005, 00:37
Hallo

Ich habe das Problem dass mein AVR den Tastendruck vollkommen kalt lässt...

Die Taster sind zwischen Masse und AVR Eingang geschalten.
Hier der Code



Declare Sub t_0
Declare Sub t_1

Portd.4 = 1
Portd.5 = 1

Do

Debounce Pind.4 , 0 , t_0 , Sub
Debounce Pind.5 , 0 , t_1 , Sub

Loop
End


Sub t_0
Waitms 2000
End Sub

Sub t_1
Waitms 4000
End Sub

Klaus_0168
12.06.2005, 00:45
Hi quad,

abgesehen vom entprellen und warten macht Dein Programm nichts.
Welche Reaktion hast Du erwartet ?

Zu den Tastern fällt mir das Thema Pull-Up-Widerstände ein. Die wurden vor kurzem hier ausreichend diskutiert.
Port d.4 und d.5 sind definiert, werden aber nicht weiter verwendet. Welche Funktion sollten diese Pin's ausführen ??

Gruß Klaus

quad
12.06.2005, 00:49
Ich habe die Aktionen die der AVR machen sollte absichtlich durch Waitms xxxx ersetzt. Spielt ja keine Rolle und das ist übersichtlicher als wenn ich nun 10 Zeilen Code einsetze.

PC4 und PC5 sind meine Eingänge für die 2 Taster

Klaus_0168
12.06.2005, 01:30
Hi quad,

sorry wegen der Pins, da war ich wohl von Blindheit erschlagen.

Das Beispielprogramm DEBOUN.BAS ist folgendermasen aufgebaut.


'-----------------------------------------------------
' DEBOUN.BAS
' Demonstrates DEBOUNCE
'-----------------------------------------------------
Config Debounce = 30 'when the config statement is not used a default of 25mS will be used


'Debounce Pind.0 , 1 , Pr 'try this for branching when high(1)
Debounce Pind.0 , 0 , Pr , Sub
Debounce Pind.0 , 0 , Pr , Sub

'When Pind.0 goes low jump to subroutine Pr
'Pind.0 must go high again before it jumps again
'to the label Pr when Pind.0 is low

Debounce Pind.0 , 1 , Pr 'no branch
Debounce Pind.0 , 1 , Pr 'will result in a return without gosub
End

Pr:
Print "PIND.0 was/is low"
Return

Demnach liegt Dein Problem in der Definition der Subroutine.

Der Anfang der Subroutine beginnt mit einer Markendefinition und endet mit einem Return.

mit :


Declare Sub t_0
Declare Sub t_1

Portd.4 = 1
Portd.5 = 1

Do

Debounce Pind.4 , 0 , t_0 , Sub
Debounce Pind.5 , 0 , t_1 , Sub

Loop
End

t_0 :
Waitms 2000
Return

t_1 :
Waitms 4000
Return
müsste es funktionieren.

Gruß Klaus

quad
12.06.2005, 14:04
Mein Programm sieht nun so aus aber es geht immer noch nicht?!

PicNick
12.06.2005, 15:36
Sag was du willst, aber es muß was mit den Tastenanschlüssen auf sich haben. Das Programm kann da nichts dafür.
Wenn die Pins nicht wenigstens EINMAL auf High stehen, tut der debounce nix.

quad
12.06.2005, 18:55
Wie meinst du das?
Also wie gesagt, ich bin Anfänger in der Sache ich kenne mich da noch nicht so super aus.

Die Taster sind an den richtigen Pins angeschlossen und hängen, ich sags nochmal kurz, auf Masse.
Oder muss ich die an 5V hängen?