AVR C: LED blinkt

From ConeleK Electronic Wiki
Jump to: navigation, search

Einleitung

Mikrocontroller CEK-Modul MC-AVR8 ATMega8 [1]
Mikrocontroller mit ISP Interface auf Steckplatine BB2T1D [2] mit mit AVRISP mk2 [3]


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 mit dem Modul - Bausatz einfach selbst bauen [4]. 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.



Kurzanleitung

Inhalt

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

, 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

Inhalt

Der Quelltext kann auch hier heruntergeladen werden.

/*******************************************************************************
 * 
 * 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

Inhalt

Weitere Artikel zum ATmega8 AVR

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

Bezugsquellen

  • Mikrocontroller Modul ATmega8 MC-AVR8 [6]


Inhalt