2016-04-08: UsartPutHex() hinzugefügt.


Die kleinen AVR-Chips (z.B. ATtiny45) haben keine integrierte USART (Universal Serial Asynchronous Receiver Transmitter). Dennoch ist es gelegentlich notwendig, Daten z.B. zu Kalibrierungszwecken zu senden. Die nachfolgend beschriebene Bibliothek SUSAT (Sofware Universal Serial Asynchronous Transmitter) ermöglicht das Senden über jeden beliebigen Pin. Die Pulsgenerierung kann über einen beliebigen Timer/Counter erfolgen.

Getestet wurden: ATtiny13, ATtiny26, ATtiny44, ATtiny45. Bei anderen Chip-Typen sind ggf. Anpassungen bei den Registerbezeichnungen vorzunehmen.

Download (Zur Verwendung der Dateien siehe Bibliothek: Kein zweites Mal!)

Konfiguration der Bibliothek
Konstante Wirkung Beispiel
USART_BAUDRATE Festlegung der Baudrate.
Zur Berechnung der korrekten Registerbelegung muss außerdem die Konstante F_CPU definiert sein.
#define USART_BAUDRATE 9600
USART_TX_BUFFER_SIZE Festlegung der Größe des Sendepuffers. Hat USART_TX_BUFFER_SIZE den Wert 0, wird ohne FIFO  gearbeitet. #define USART_TX_BUFFER_SIZE 16
USART_TIMER Legt den Timer fest, der für die Pulsgenerierung verwandt wird. Möglich sind 0 oder 1 (je nach Prozessor). #define USART_TIMER 1
PORT_TX
PIN_TX
Legt den Port und den Pin fest, der zum Senden verwandt wird. #define PORT_TX PORTB
#define PIN_TX  PB1

 

Ich bevorzuge die CamelCaseNotation (bin halt ein alter Basic-Fan). Deshalb ist jede Funktion sowohl im C-Stil als auch im CamelCase verfügbar.

Funktionsbeschreibung
Bezeichnung Funktion Beispiel
void UsartInit(void)
void usart_init(void)
Initialisierung der USART in der durch die Konfigurationskonstanten vorgegebenen Einstellung.
Hinweis: Die globale Interrupt wird nicht freigegeben. Dies erfolgt außerhalb der Bibliothek nach Initialisierung aller Komponenten.
UsartInit();
sei();
void UsartPutChar(const uint8_t data)
void UsartPutC(const uint8_t data)
void usart_putc(const uint8_t data)
Übergibt ein Zeichen an die USART zum Senden. Es wird ggf. gewartet bis im Sendepuffer Platz zur Aufnahme des Zeichens ist bzw. bis die USART bereit ist, ein neues Zeichen entgegen zu nehmen. UsartPutChar('x');
void UsartPutInt(const int data)
void UsartPutI(const int data)
void usart_puti(const int data)
Sendet einen int als ASCII-Ziffernfolge. Benutzt itoa zur Konvertierung. Siehe auch UsartPutC! UsartPutInt(-47);
void UsartPutString(const char *s)
void UsartPutS(const char *s)
void usart_puts(const char *s)
Sendet einen String. Siehe auch UsartPutC! UsartPutString("Hello");
void UsartPutString_p(const char *s)
void UsartPutS_p(const char *s)
void usart_puts_p(const char *s)
Sendet einen String aus dem Programmspeicher. Siehe auch UsartPutC! char pS[] PROGMEM = "Flash";
UsartPutString_p(pS);
void UsartPutString_P(const char *s)
void UsartPutS_P(const char *s)
void usart_puts_P(const char *s)
Sendet eine konstanten String und legt ihn im Programmspeicher ab. Siehe auch UsartPutC! UsartPutString_P("Flash");
void usart_put_hex(uint8_t x)
UsartPutHex(uint8_t x)
Gibt ein Byte als Hexadezimalwert aus. UsartPutHex(x);
void DebugUsartInit(void)
void DebugUsartPutChar(const uint8_t data)
void DebugUsartPutInt(const int data)
void DebugUsartPutString(const char *s)
void DebugUsartPutString_p(const char *s)
void DebugUsartPutString_P(const char *s)
DebugUsartPutHex(uint8_t x)
Alle Funktionen noch einmal mit dem Präfix "Debug". Die Benutzung dieser Funktion bleibt Wirkungslos, wenn nicht das Symbol DEBUG definiert ist. DEBUG vor dem Einbinden von "susat.h" erfolgen. #define DEBUG

DebugUsartPutString("Hello");