Guten Morgen! :)
Ich verwende hier an einem atmega88 Pins doppelt sowohl zur
Tasterabfrage als auch für Kontrollleuchten.
Praktisch sieht das so aus, dass ich alle ~10ms den Port von Ausgang auf
Eingang umkonfiguriere, einen ggf. vorliegenden Tastendruck auslese,
entprelle usw. und danach den Port wieder auf Ausgang schalte, um die
Statusleds wiederherzustellen.
Soweit alles gut, nur macht das Timing Output->Input Probleme, sodass
der letzte Output-Status teilweise (wenig überraschend) direkt als
Tastendruck erkannt wird.
Das Ganze ist jetzt "provisorisch" so gelöst (bei 8MHz internem RC):
1 | DDRD &= ~(1 << .....);
|
2 | PORTD |= (1 << ......);
|
3 | asm volatile("nop");
|
4 | asm volatile("nop");
|
5 | asm volatile("nop");
|
Ist euch zufällig bekannt, wie lange genau die Umschaltzeit beträgt? Im
Datenblatt hab ich entweder nichts entsprechendes gefunden, oder
jedesmal überlesen.
Schonmal Danke für die Hilfe!
Tom