Mikrocontroller: Gleichzeitiges Drücken von zwei Tastern ??

Gast #155307
Hallo !

Habe mir eine Aufzug-Steuerung mit Ein-, Ausgangskarten und
Mikrocontroller (Infineon SAB80C537) gebaut.
Ich habe leider nur 3 Eingänge für 3 Taster vorgesehen (E0=Fahre in
Obergeschoss, E1=Fahre in Erdgeschoss, E2=Fahre in Keller) - nun
brauche ich aber doch 4 Taster (möchte noch ein Menü integrieren), habe
aber keine freien Eingänge mehr.
Um dieses Problem zu lösen, habe ich den 4. Taster (=Menue-Taster) so
verdrahtet, dass dieser "gleichzeitig" zwei Eingänge (E1=Fahre
Obergeschoss, E2=Fahre Keller) mit High-Pegel verbindet. Wie ich mir
schon gedacht habe, kommen die beiden nicht zur absolut gleichen Zeit.
Deshalb erkennt der Controller nur gelegentlich die "Taste Menue".

Hier seht Ihr einen Auszug aus meinem C-Code zur Erkennung einer
positiven Flanke (Hervorgerufen durch einen/mehreren Taster). Wie
gesagt funktioniert dies sehr unsicher.

while(TRUE)
{
new_byte = P7 & 0x07;   // P7 ist Port7: E0...E7
edges = old_byte ^ new_byte;
global_pos_edges = edges & new_byte;

// Bei Erkennung von einem der beiden Eingänge, nochmals Kontrolle, ob
nicht der zweite jetzt auch noch High-Pegel hat
if(global_pos_edges == 0x02)
{
  if(P7 & 0x04)
    global_pos_edges = 0x06;
}

// Bei Erkennung von einem der beiden Eingänge, nochmals Kontrolle, ob
nicht der zweite jetzt auch noch High-Pegel hat
if(global_pos_edges == 0x04)
{
  if(P7 & 0x02)
    global_pos_edges = 0x06;
}

switch(global_pos_edges)
{
  case 0x01:  to_og();
    break;
  case 0x02:  to_eg();
    break;
  case 0x04:  to_ke();
    break;
        case 0x06:  enter_menue();
                break;
}
old_byte = new_byte;
}


Habt Ihr vielleicht einen Tip für mich, wie ich sicher Erkennen kann,
dass zwei Taster gleichzeitig gedrückt sind ?

Vielen Dank im voraus für Eure Antworten !

Gruß

Marcus

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.