www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Tasten gegen +UB


Autor: Zerberus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Zerberus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Zerberus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Oje Sorry Falk,

des wollt i net :-)
Falls ich das Programm mit deiner Hilfe zum laufen bekomm, geb i Dir 
gern nen Euro :-)
Hier der Anhang....

Autor: The Devil (devil_86)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[OT]
@ Zerberus:
Du Schleimer: Von 'Hallo Simon' auf 'Hallo Falk'.
[/OT]

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für high aktive Tasten muß das ~ im Interrupt natürlich raus.
Und:
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

Autor: Zerberus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Peter,

danke für den Tip.
Ich hab jetzt mal

unsigned char key_state = 0xFF;

gemacht, aber welche ~ meinst Du?? Wo soll die sein?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zerberus wrote:

> gemacht, aber welche ~ meinst Du?? Wo soll die sein?

Das hier:
i = key_state ^ ~KEY_PIN;


Peter

Autor: Zerberus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Peter,

schicke Sache das Programm rennt!!!!!! Jipi....
Danke

Gruß
Simon

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.