avr-gcc Utils Library

Die Utils Library enthält allgemeine Funktionen.

Das BIT() Makro

Mit dem BIT() Makro kann man IO Ports einen Namen geben und anschließend direkt ansprechen. Dies geschieht mit Defines, die man am besten in der config.h unterbringen kann. Zum Beispiel

/*-----------------------------------
 * Define your IO here
 * Examples for LED at PORTD.0 and switch at PIND.1
 * #define LED1       BIT(PORTD, 0)
 * #define SWITCH1    BIT(PIND, 1)
 *----------------------------------*/
#define LED1        BIT(PORTD,1)
#define LED2        BIT(PORTD,2)
#define LED3        BIT(PORTD,3)
#define TASTER1     BIT(PIND,4)
#define TASTER2     BIT(PIND,5)
#define TASTER3     BIT(PIND,6)

Man kann diese Definitionen ganz einfach anwenden.

LED1=0;
LED2=1;
while(TASTER1)
{
    LED3=TASTER2;
}

Defines

#define LINE_END 0        // 0=UNIX='\n', 1=MAC='\r', WIN='\r\n'

LINE_END definiert, welches Zeilenende Zeichen gesendet werden soll. 0 sendet ein \n, 1 sendet ein \r und 2 sendet ein \r\n.

Funktionen

void write(void (*f)(char), const char *s );

Die Funktion write() sendet einen String an eine Funktion. Diese Funktion muss in der Lage sein einzelne Bytes zu empfangen. Anwendungsbeispiele sind zb das Senden von Daten an den USART oder das Schreiben auf ein Display.

void writeln(void (*f)(char), const char *s );

Die Funktion writeln() entspricht der Funktion write(), aber der String wird mit einem \n (Newline), einem \r (Carridge Return) oder \r\n abgeschlossen. Welches Zeichen gesendet wird definiert LINE_END

void write_p(void (*f)(char), const char *progmem_s );
void writeln_p(void (*f)(char), const char *progmem_s );

Die Funktionen write_p() und writeln_p() entsprechen write() und writeln(), nur das der String aus dem Programmspeicher gelesen wird.

Beispiel

write (lcd_putc, "Hallo Welt!");       //Sendet den String an das Display
write (usart_putc, "Hello World!");    //Sendet den String an den USART

IO Example

Ein einfaches Beispiel soll die Funktion des BIT() Makro verdeutlichen. Das Beispiel ist in dem Download Archiv enthalten

#include <avr/io.h>
#include <utils.h>
 
 
int main(void)
{
    DDRB=(1<<PB0);                      /* Set PB0 as Output for LED1 */
    PORTB=(1<<PB1);                     /* Enable internal pullup for TASTER1 */
    for (;;)                            /* loop forever */
    {
        LED1=~(TASTER1);
    }
}

Die config.h enthält zwei Einträge.

/*
 * Utils Defines
 */
#define LED1        BIT(PORTB,0)
#define TASTER1     BIT(PINB,1)

Der Schaltplan für dieses Beispiel sieht so aus:

Schaltplan

Aufgebaut auf einem Mega32 Prototype Board könnte das in etwa so aussehen:

Mega32 Prototype Board

Diskussion

KianaKiana, 2011/12/05 22:29

Wowza, problem solved like it never hapeepnd.

Geben Sie Ihren Kommentar ein (Wiki-Syntax ist zugelassen):
Wenn Sie die Buchstaben auf dem Bild nicht lesen können, laden Sie diese .wav Datei herunter, um sie vorgelesen zu bekommen.
/www/htdocs/w00645de/dokuwiki/data/pages/mikrocontroller/avr/avr-gcc-library/utils_library.txt · Zuletzt geändert: 2009/05/06 15:44 von burli
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0