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 |
Legt den Port und den Pin fest, der zum Senden verwandt wird. | #define PORT_TX PORTB |
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) |
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(); |
void UsartPutChar(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) |
Sendet einen int als ASCII-Ziffernfolge. Benutzt
itoa zur Konvertierung. Siehe auch UsartPutC ! |
UsartPutInt(-47); |
void UsartPutString(const char *s) |
Sendet einen String. Siehe auch UsartPutC ! |
UsartPutString("Hello"); |
void UsartPutString_p(const char *s) |
Sendet einen String aus dem Programmspeicher. Siehe auch UsartPutC ! |
char pS[] PROGMEM = "Flash"; |
void UsartPutString_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) |
Gibt ein Byte als Hexadezimalwert aus. | UsartPutHex(x); |
void DebugUsartInit(void) |
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 |