Problem mit Tasten gegen +UB

Gast #684551
Lesenswert?

Hallo, ich habe ein ganz seltsames Problem,

ich habe 8 Tasten an meinem AT90CAN128 angeschlossen, die gegen + 
schalten. Die Pins des Controllers hängen also im nichtbetätigeten 
Zustand über 10k Pulldown Widerstände gegen Masse. Wird eine Taste 
gedrückt, so bekommt der Pin High Pegl. Soweit alles tip top, 
funktioniert auch.
Allerdings habe ich das Problem, jedesmal wenn ich mein Programm starte, 
bzw. das Board einschalte, springt mir das Programm in eine Routine, die 
hinter der ersten Taste an PA0 hinterlegt ist?? Tastenentprellung über 
Interrupt usw. hab ich alles eingebaut, funktioniert auch bestens, nur 
das erste mal darf eben nicht sein!! Woran kann sowas liegen??

Hier noch etwas Code, zum die erste Taste abfragen:
if (get_key_press(1<<PA0))    //Abfrage der Flanke Taster SN0

{

lesen_contr (0x00);  //Funktion zum lesen von Controllregister 0

uart_puts0 (&USART_RxBuf[0]);  //Reginhalt an Terminalprogramm schicken
LCD_puts("Contr.Register 0 auslesen");//Ausgeführte Fkt an Display 
anzeigen
}

Wie kann ich verhindern das das Programm immer beim ersten mal in diese 
Routine läuft?
En Tip wäre voll super.
Danke
Gruß
#684617
Lesenswert?

@ Zerberus (Gast)

>Allerdings habe ich das Problem, jedesmal wenn ich mein Programm starte,
>bzw. das Board einschalte, springt mir das Programm in eine Routine, die
>hinter der ersten Taste an PA0 hinterlegt ist?? Tastenentprellung über
>Interrupt usw. hab ich alles eingebaut,

Wahrscheinlich ist die Routine für LOW aktive Tasten entwickelt und 
detektiert beim Start erstmal den Tastendruck (Pull-Down). 
Wahrscheinlich musst du die Variabeln, mit denen die Entprellung gemacht 
wird, invertiert initialisieren.

MFG
Falk
Gast #684625
Lesenswert?

Hey Frank, danke für den Tip.
Sowas in der Art hab ich mir auch schon gedacht.
Allerdings weiß ich net wie ich eine Variable invertiert initialisiere.
Kannst Du mir da bitte ein Bsp. nennen.
Danke schon mal
#684630
Lesenswert?

@ Zerberus (Gast)

>Hey Frank, danke für den Tip.

Wenn fü jedes Mal, wenn man mich mit Frank anspricht, nur eien Euro 
bekommen würde . . .

>Allerdings weiß ich net wie ich eine Variable invertiert initialisiere.
>Kannst Du mir da bitte ein Bsp. nennen.

Zeig deinen komplette Sourcecode als Anhng.

MFG
Falk
#684651
Lesenswert?

Für high aktive Tasten muß das ~ im Interrupt natürlich raus.
Und:
1
unsigned char key_state = 0xFF;

Damit werden alle Tasten als gedrückt gesetzt, d.h. es muß erst ein 
Loslassen erkannt werden.

Selbst Drücken beim Einschalten bewirkt dann keine Aktion.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren