AVR-GCC Blink

Hier möchte ich vorstellen, wie man die LED an PIN 13 des Arduinos in “C” blinken lassen kann…

Ich benutze wieder meine gewohnt Entwicklungsumgebung mit XCode und habe den Arduino per USB angeschlossen. Nachdem das Projekt in XCode angelegt wurde muss das Makefile noch leicht angepasst werden.

mein Arduino findet sich an /dev/cu.usbmodem1414 wieder. Das kann aber von Arduino zu Arduino unterschiedlich sein. Wer sich da unsicher ist, schaut mal in den Ordner /dev/ oder startet schnell die Arduino-IDE. Im Menu Werkzeuge->Port angezeigt, wo der Arduino eingehängt ist. Wer unter Windows arbeitet, trägt dann bitte im Makefile den entsprechenden COM-Port ein. Damit sollte dann sichergestellt sein, dass wir das Programm gleich in den Mikrocontroller flashen können.

 

Jetzt müssen wir noch herausfinden, an welchem Ausgang sich die LED von PIN 13 befindet. Wie man in dem folgenden Bild sehen kann, ist PIN 13 des Arduinos an PORTB und zwar PIN PB5.

PINOUT ARDUINO
PINOUT ARDUINO

Um diesen PIN als Ausgang verwenden zu können, muss das Datenrichtungsregister von PORTB eingestellt werden. Sowas macht man üblicherweise nur einmal im Programm, an der Stelle bevor das Programm in die Endlosschleife eintritt.

Wir möchten nur PB5 als Ausgang als schreiben wir in das entsprechende Bit eine “1”. Jetzt ist der PIN als Ausgang nutzbar und wenn in PORTB an Stelle PB5 eine “1” steht, legt der Mikrocontroller 5V an diesem PIN an (sofern die Versorgungsspannung 5V beträgt…).

Prima, jetzt muss nur noch abwechselnd “0” und “1” in PORTB an der Stelle PB5 geschrieben werden und die LED sollte blinken.

 

So könnte das kann in C-Code aussehen:

Wie man sieht, wird in der While-Schleife HIGH-Pegel an den PIN angelegt und danach eine Pause von 500 Millisekunden eingelegt. Jetzt leuchtet die LED an PIN 13.

Danach wird LOW-Pegel an den PIN angelegt und wieder eine Pause von 500 Millisekunden eingelegt. Jetzt ist die LED aus.

Wie schon in dem Kommentar beschrieben wird der Prozessor mit der _delay_ms() Funktion für 500 Millisekunden eingefroren, was in diesem kleinen Beispielprogramm natürlich kein Problem darstellt, schließlich soll ja eine Pause eingelegt werden. In komplexeren Programmen sollte man aber möglichst vermeiden den Mikrocontroller auf diese Art und Weise schlafenzulegen.

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.