Mein Problem ist recht grundlegend, trotzdem finde ich darauf keine
direkte Erklärung im Internet.
Ich habe ein AVR-Experimentierboard von meiner Schule für ein Projekt
zur Verfügung gestellt bekommen. Ich programmiere es mit dem GCC.
Nun wollte ich einfach nur ein kleines Programm schreiben, das eine LED
anschalten, wenn ein Taster gedrückt wird. (Nur zu Experimentierzwecken,
ob ich alles verstanden habe)
Mir wurde gesagt, dass Board hätte eine "invertierte Logik" was wohl
bedeutet, dass bei nicht gedrückter Taste das entsprechende Bit im
Eingangsregister = 1 ist und wenn es gedrückt wird, ist es = 0.
Entsprechend dachte ich mir, ich Verknüpfe das Byte des
Eingangsregisters mit einer Bitmaske, in der das mich interessierende
Bit markiert ist (00 01 00 00), ein (wie es ja in den Tutorials auch
gemacht wird) und prüfe in einer Endlosschleife, ob dieser Ausdruck = 0
ist.
Das Problem ist, dass das nicht funktioniert und ich nicht verstehe
wieso.
wo ist der Fehler in meiner Überlegung? Steht in dem Byte, das ich aus
Verküpfung des Eingangsregisters und Bitmaske erstelle etwas noch etwas
drin, was ich gerade nicht hervorsehe?
Hier nochmal kurz der Code der Abfrage
1 | while(1)
|
2 | {
|
3 | if ((PIND & (1<<PIN4) == 0))
|
4 | {
|
5 | PORTD |= (1<<PIN3);
|
6 | }
|
7 | }
|