(→Beschreibung) |
(Typo, indent) |
||
| Zeile 1: | Zeile 1: | ||
| − | + | 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 <tt>-Os</tt>, <tt>-O1</tt>, <tt>-O2</tt> oder <tt>-O3</tt> nicht aber mit <tt>-O0</tt>. | |
| − | 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 | + | |
| − | =Das Programm= | + | == Das Programm == |
| − | + | #include <avr/io.h> | |
| − | #include <avr/io.h> | + | #include <util/delay.h> |
| − | #include <util/delay.h> | + | #include <stdint.h> |
| − | #include <stdint.h> | + | |
| + | {{ccomment|Prototypen}} | ||
| + | void sleep_ms (uint16_t ms); | ||
| + | |||
| + | {{ccomment|LED Defines}} | ||
| + | {{ccomment|Hier müssen die richtigen Angaben hin}} | ||
| + | #define LED_DDR DDRC {{ccomment|DDRA, DDRB...}} | ||
| + | #define LED_PORT PORTC {{ccomment|PORTA, PORTB...}} | ||
| + | #define LED_PORTPIN PC1 {{ccomment|PA0, PA1..., PB0, PB1...}} | ||
| + | |||
| + | int main(void) | ||
| + | { | ||
| + | {{ccomment|Den Pin, an den die LED angeschlossen ist, als Ausgang setzen}} | ||
| + | LED_DDR |= (1 << LED_PORTPIN); | ||
| + | |||
| + | {{ccomment|Die LED die ganze Zeit an- und ausschalten}} | ||
| + | while(1) | ||
| + | { | ||
| + | {{ccomment|Den Portpin auf high setzen}} | ||
| + | LED_PORT |= (1 << LED_PORTPIN); | ||
| + | {{ccomment|1 Sekunde warten}} | ||
| + | sleep_ms (1000); | ||
| + | |||
| + | {{ccomment|Den Portpin auf low setzen}} | ||
| + | LED_PORT &= ~(1 << LED_PORTPIN); | ||
| + | {{ccomment|1 Sekunde warten}} | ||
| + | sleep_ms (1000); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | {{ccomment|Diese Funktion lässt den Controller ms Millisekunden warten.}} | ||
| + | {{ccomment|Die while-Schleife wird so oft durchlaufen,}} | ||
| + | {{ccomment|wie der Funktion übergeben wurde.}} | ||
| + | {{ccomment|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 <tt>MCU</tt>, <tt>F_CPU</tt> und <tt>TARGET</tt> an die Schaltung angepasst werden. | |
| − | Im Makefile müssen noch die Einträge MCU, F_CPU und TARGET an die Schaltung angepasst werden. | + | |
<pre> | <pre> | ||
MCU: der verwendete Prozessor | MCU: der verwendete Prozessor | ||
| Zeile 56: | Zeile 56: | ||
</pre> | </pre> | ||
| − | ==Beispiel== | + | ;Hinweis: Die Verwendung dieser Variablen setzt ein spezielles Makefile voraus. Es handelt sich dabei ''nicht'' um Variablen, die dem <tt>make</tt>-Programm von Natur aus bekannt sind! |
| + | |||
| + | === Beispiel === | ||
| + | |||
<pre> | <pre> | ||
//Der verwendete Prozessor | //Der verwendete Prozessor | ||
| Zeile 68: | Zeile 71: | ||
</pre> | </pre> | ||
| − | = | + | == Weblinks == |
| + | |||
Das Programm kann als zip-Datei von meiner Homepage heruntergeladen werden. | Das Programm kann als zip-Datei von meiner Homepage heruntergeladen werden. | ||
[http://royalclan.de/index.php?site=downloads&show=15 led_blinken.zip] | [http://royalclan.de/index.php?site=downloads&show=15 led_blinken.zip] | ||
| − | =Autor= | + | == Autor == |
| − | + | ||
| + | * [[Benutzer:PcVirus|PcVirus]] | ||
[[Kategorie:Quellcode C]] | [[Kategorie:Quellcode C]] | ||
[[Kategorie:Robotikeinstieg]] | [[Kategorie:Robotikeinstieg]] | ||
Aktuelle Version vom 8. Juni 2012, 08:59 Uhr
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.
Inhaltsverzeichnis
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