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
