Inhaltsverzeichnis
Beschreibung
Das kleine 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 der Option -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 wo die LED angeschlossen ist als Ausgang setzen */ LED_DDR |= (1<<LED_PORTPIN); //Die LED die ganze Zeit an und aus schalten while(1){ LED_PORT |= (1<<LED_PORTPIN); //Den Portpin auf high setzen sleep_ms(1000); //1sek warten LED_PORT &= ~(1<<LED_PORTPIN); //Den Portpin auf low setzen sleep_ms(1000); //1sek warten } } /* 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){ 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
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
Weblink
Das Programm kann als zip-Datei von meiner Homepage heruntergeladen werden. led_blinken.zip