AVR C: LED blinkt
Aus ConeleK-Wiki
Einleitung
In diesem Artikel wird eine Implementierung des Testprogramms aus dem Artikel
in der Programmiersprache C vorgestellt. Der Sourcecode wird erstellt und kompiliert. Hierzu ist keine integrierte Entwicklungsumgebung (IDE) erforderlich, es reichen einige Kommandozeilen-Tools. Die verwendeten Programme sind kostenlos und Open Source. Wer lieber mit einer integrierten Entwicklungsumgebung arbeiten möchte, sei auf den Artikel
verwiesen. Allerdings ist einiges zu tun, bis so eine IDE reibungslos läuft. Vorher kann man mit den Kommandozeilen-Tools teste, ob die ganze Kette, vom Compilieren bis zum Upload in den Mikrocontroller funktioniert.
Für ein embedded Projekt braucht man natürlich eine HW. Diese kann man selbst bauen, oder ein Modul [4] wie rechts im Bild verwenden. Dieses gibt es als Platine, Bausatz oder Fertigmodul. Es ist in einem weiteren Artikel in diesem Wiki beschrieben:
Eine andere Möglichkeit ist es die HW auf einer Steckplatine aufzubauen. Dies ist in den Artikeln
beschrieben und im 2. Bild zu sehen.
Inhaltsverzeichnis |
Kurzanleitung
Wie man das Programm compiliert und mit Hilfe des CEK-Mikrocontroller-Moduls MC-AVR8 testet, erfahren Sie im entsprechenden Tutorial.
Wir haben dieses Beispiel unter Linux Kubuntu 11.10 erstellt und getestet. Wenn man Windows als Betriebssystem hat, kann man Cygwin verwenden und die folgenden Programme installeiren. Wir haben das allerdings nicht getestet.
Besitzen Sie bereits
- avr-gcc
- avrdude
- avr-objcopy
- angeschlossenes Programmiergerät AVR ISP mkII [5], Herstellerseite: [6] und
- Mikrocontroller Modul ATmega8 MC-AVR8 (eingerichtet bspw. nach dieser Anleitung)
, dann brauchen Sie nur den C-Quelltext herunterzuladen und die folgende Befehlssequenz auf den Kommandozeile auszuführen:
avr-gcc -O3 -Os -Wall -mmcu=atmega8 -o Ledblinkc.elf Ledblinkc.c avr-objcopy -j .text -j .data -O ihex Ledblinkc.elf Ledblinkc.hex avrdude -c avrisp2 -P usb -p m8 -Uflash:w:Ledblinkc.hex:a -Ulfuse:w:0xe1:m -Uhfuse:w:0xd9:m
Diese Befehle können Sie auch als Linux-Kommandozeilen-Skript herunterladen.
Zum Ausprobieren...
Blinkfrequenz
Verändern Sie die Werte von delay_0, delay_1, delay_2, führen Sie obigen Befehlssequenz erneut aus und beobachten Sie die Frequenz, mit der die LED danach blinkt.
Dauerhaft an- und ausschalten
Indem Sie die Zeile
PORTB |= 0b00000001;
auskommentieren (durch einen Doppelslash '//' davor), wird die LED dauerhaft leuchten.
Das Gegenteil passiert, wenn Sie die Zeile
PORTB &= 0b11111110;
auskommentieren: Die LED bleibt nun dunkel, was natürlich wenig spektakulär ist.
Quelltext
/******************************************************************************* * * Dieses Programm dient dazu die Programmierung des * CEK-Moduls MC-AVR8 zu testen. * * Der Effekt des Programms ist, dass eine Leuchtdiode, die mit dem PIN 10 * des Moduls verbunden ist, blinkt. * * Die Variablen delay_0, delay_1 und delay_2 dienen dazu die Frequenz des * Blinkens anzupassen. * * Autor: Roland Kluge * Datum: 29. März 2011 * ******************************************************************************* */ #include <avr/io.h> const unsigned char delay_0 = 255; const unsigned char delay_1 = 255; const unsigned char delay_2 = 1; /* * Warteroutine * * Der Mikrocontroller führt insgesamt delay_2 * delay_1 * delay_0 * Schleifendurchläufe aus, während denen er nichts tut ('asm ("nop")'). */ void delay() { unsigned char i = delay_2; while (i) { unsigned char j = delay_1; while (j) { unsigned char k = delay_0; while (k) { k--; asm ("nop"); } j--; } i--; } } /* * Hauptroutine * * In einer Endlosschleife wird abwechselnd der PIN 0 von PORT B mit einer * 1 (LED ausgeschaltet) und einer 0 (LED eingeschaltet) belegt. * * Dazwischen wartet der Mikrocontroller. */ int main(void) { // Aktiviere PIN0 von PORT B. DDRB = 0b00000001; // Hauptschleife des Programms while (1) { PORTB |= 0b00000001; delay(); PORTB &= 0b11111110; delay(); } }
Weitere Artikel in diesem Wiki
Weitere Artikel zum ATmega8 AVR
- Mikrocontroller Minimalsystem mit AVR ATMega8
- Mikrocontroller Modul ATmega8 MC-AVR8
- Fuses ATmega8
- AVR C: LED blinkt
- AVR C: Softwareentwicklung mit der Eclipse IDE
- AVR Assembler: LED blinkt
- Programmieren mit dem MC-AVR8 und avrdude
Downloads
- Ledblinkc_create.sh Linux-Kommandozeilen-Skript compilieren, .hex File erzeugen, upload in Mikrcontroller
- Ledblinkc.c C-Quelltext für das Programm "blinkende LED" in C
- Ledblink.asm Sourcecode für das Programm "blinkende LED" in Assembler
- Ledblink.hex .hex File , Intel intellec 8/MDS (Intel HEX Format) des Assembler Programms
Weitere Artikel CEK Module
Steckplatinen