Hallo liebe Gemeinde,
als Erstes möchte ich mich bei oberallgeier bedanken für den tollen Einfall mit der Interruptkontroll-LEDs, ist bereits in einem anderen Projekt untergebracht worden und wird auch fortan auf Prototypen benutzt 
Allen anderen ebenfalls vielen Dank. Und nun meine Geschichte im Zeitraum "letzter Beitrag - #define Zeit_aktuell dd:mm:yyyy"
Ich habe angefangen den kompletten Projektcode zu optimieren, vorerst ohne die Tasterfunktionen. Der Grundgedanke war in Richtung RTOS zu gehen, bzw. wenigstens einen Scheduler zu implementieren. D.h. der ganze Code wurde hinsichtlich einer quasiparallelen Signal- und Datenverarbeitung optimiert. Es wurden absolut alle delay_ms()-Funktionen entfernt und durch Abfragen des Systemtaktes eines der Timer synchronisiert. Alle großen Tasks wurden aufgeteilt und in einzelnen Funktionsprozeduren untergebracht.
Nachdem der Code geschrumpft war und tatsächlich schneller funktionierte, versuchte ich mich weiterhin an meinen Lieblingstaster. Egal ob
Code:
ISR(INT1_vect) {...}
oder
Code:
uint8_t capt_button(void) {
if (PIND & (1<<PD3))
return 1;
else
return 0;
}
verwendet wurde, der Taster konnte AN, jedoch nicht mehr ausgeschaltet werden.
Und DANN kam die Erleuchtung! Der von mir verwendete gegen +5V angeschlossene Taster durchlief einen passiven Tiefpass. Dadurch, dass der sich dort befindende Kondensator durch +5V aufgeladen wurde, jedoch nicht über den als Input definierten Pin entladen werden konnte, bliebt der Signalpegel nach dem ersten Betätigen stets auf HIGH. Ab da war es einfach: Der entsprechende Pin musste kurzzeitig als Output auf Masse gelegt werden. Et voilà!
Also im Grunde folgende Einstellung, beispielhaft für den ganzen Port.
Code:
DDRD = 0xFF; // Alle Pins als Ausgänge
PORTD= 0x00; // Alle Ausgänge auf Null ziehen
Nun kann ich ohne Probleme verschiedene Druckzeiten abfangen und ggf. verschiedene Reaktionen auslösen etc.
Es war zwar extrem zeitraubend, aber dafür konnte ich mal wieder viel auf diesem Weg lernen und bin nun dabei, ein Echtzeitsystem für 8-Bit zu schreiben. (sprich: Rad neuerfinden, um des Wissens willen.)
Grüße,
Nik
Lesezeichen