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

 
(Typo, indent)
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 1: Zeile 1:
=Beschreibung=
+
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)]].
+
  
=Das Programm=
+
== Das Programm ==
  
<pre>
+
#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);
 +
}
  
//Prototypen
+
== Makefile ==
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);
+
}
+
}
+
 
+
</pre>
+
  
=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>
  
=Weblink=
+
== 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]]
+
  
 +
* [[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.

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


LiFePO4 Speicher Test