Aus RN-Wissen.de
Wechseln zu: Navigation, Suche


Das kleine C-Programm lässt eine LED an einem AVR ohne Timer blinken und ist somit einfacher zu verstehen als Hallo Welt für AVR (LED blinken). Wegen der delay-Funktion muß das Programm mit Optimierung übersetzt werden, also einer der Optionen -Os, -O1, -O2 oder -O3 nicht aber mit -O0.

Das Programm

#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>

// Prototypen
void sleep_ms (uint16_t ms);

// LED Defines
// Hier müssen die richtigen Angaben hin
#define LED_DDR     DDRC        // DDRA, DDRB...
#define LED_PORT    PORTC       // PORTA, PORTB...
#define LED_PORTPIN PC1         // PA0, PA1..., PB0, PB1...

int main(void)
{
    // Den Pin, an den die LED angeschlossen ist, als Ausgang setzen
    LED_DDR |= (1 << LED_PORTPIN);
    	
    // Die LED die ganze Zeit an- und ausschalten
    while(1)
    {
        // Den Portpin auf high setzen
        LED_PORT |= (1 << LED_PORTPIN);
        // 1 Sekunde warten
        sleep_ms (1000);

        // Den Portpin auf low setzen
        LED_PORT &= ~(1 << LED_PORTPIN);
        // 1 Sekunde warten
        sleep_ms (1000);
    }
}

// Diese Funktion lässt den Controller ms Millisekunden warten.
// Die while-Schleife wird so oft durchlaufen,
// wie der Funktion übergeben wurde.
// Bei jedem Duchlauf wir noch 1ms gewartet.

void sleep_ms (uint16_t ms)
{
    while (ms--)
        _delay_ms (1);
}

Makefile

Im Makefile müssen noch die Einträge MCU, F_CPU und TARGET an die Schaltung angepasst werden.

MCU: der verwendete Prozessor
F_CPU: Quarzfrequenz in Hertz
TARGET: der Dateiname des Programms ohne Endung
Hinweis
Die Verwendung dieser Variablen setzt ein spezielles Makefile voraus. Es handelt sich dabei nicht um Variablen, die dem make-Programm von Natur aus bekannt sind!

Beispiel

//Der verwendete Prozessor
MCU = atmega32   //Ein Atmega 32 wird verwendet

//Die Quarzfrequenz in Hertz
F_CPU = 16000000     //16 MHz

//Name des Programms ohne die Endung
TARGET = main    //Das Programm heißt main.c

Weblinks

Das Programm kann als zip-Datei von meiner Homepage heruntergeladen werden. led_blinken.zip

Autor