Problem mit Tasten gegen +UB

Gast #684551
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ß
@ 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
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
@ 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
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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.