PortD als Ausgang definieren. Alle Pins sollen als Ausgang fungieren.
DDRB &= ~0b00000100;
PB2 als Eingang definieren definieren (mit Bitmaske)
Hauptschleife
if(!(PINB & 0b00000100)) {}
Auf Tastendruck warten.
Dabei ist zu bedenken, dass der Taster low-active ist. Die Abfrage mit der Bitmaske (UND-Maske) muss also noch negiert werden.
PD2 Auf HI setzen. LED einschalten.
PD2 Auf LOW setzen. LED ausschalten.
Der Hauptfehler im ersten Programm ist, dass der internen Pullup-Widerstand am PB2 nicht aktiviert wurde. Der Taster ist extrem anfällig auf äußere EM-Störungen und schaltet ggf. verzögert oder gar nicht.
Der Hauptfehler aus dem ersten Programm wird hier eliminiert. Der interne Pullup-Widerstand an PB2 wird aktiviert.
Das Programm hat dennoch einen gravierenden Fehler im Programmablauf.
Beim Tastendruck wird die if-Bedingung zwar angesprungen und die LED eingeschaltet. Jedoch wird sie danach sofort ausgeschaltet. Die LED wird also mit einem Hochfrequenten PWM-Signal angesteuert. Dies sorgt dafür, dass die LED dunkler leuchtet, allerdings auch und vor allem für viele Störsignale.
Messung 1 an der LED
Die Messung an der LED zeigt ein PWM-Signal mit einer Pulsdauer von T=440ns.
Dies entspricht einer Pulsfrequenz von etwa 2,3MHz.