Library - UART (AVR)
Diese Biblitothek von Peter Fleury ermöglicht eine Kommunikation über das Hardware UART Interface von Atmel. Die UART Library ist nach der Application Note AVR306 für con ATmel für den avr-gcc erstellt. Die Library verwendet Sende- und Empfangs-Interrupts und je einen FIFO Ringbuffer für die Sende und Empfangsroutinen. Dadurch wird nur sehr wenig Rechenleistung des Controllers verbraucht. Unterstützt werden eigentlich alle Controller der Reihe ATmega von ATmel.
UART
Das Universal Synchronous & Asynchronous Receiver & Transmitter Interface, USART, dient dem Senden und Empfangen von Daten über eine Datenleitung und bildet den Standard der seriellen Schnittstellen an PCs und Mikrocontrollern. Im industriellen Bereich ist die Schnittstelle als RS-232 oder RS-485 Interface verbreitet. Eine RS232-Verbindung arbeitet (bit-)seriell mit je einer Datenleitung für beide Übertragungsrichtungen. Somit können Daten Voll-Duplex, also gleichzeitig in beide Richtungen übertragen werden. Aufgrund des hohen Taktsignals, welches bis in den MHz Bereich gehen kann, sind relativ hohe Übertragungsraten möglich. Im Gegensatz zum einfachen UART bietet die USART Schnittstelle die Möglichkeit einer zusätzlichen synchronen Datenübertragung. In dieser Arbeit wird jedoch nur auf die asynchrone Schnittstelle eingegangen.
Funktionsweise
Die Daten werden als serieller digitaler Datenstrom mit einem fixen Rahmen übertragen, der aus einem Start-Bit, fünf bis maximal neun Datenbits, einem optionalen Parity-Bit zur Erkennung von Übertragungsfehlern und einem Stopp-Bit besteht. Um dem Empfänger eine Synchronisationszeit auf den Takt der empfangenen Daten einzuräumen, kann das Stopp-Bit auf das 1,5 oder 2-fache der normalen Übertragungszeit eines Bits verlängert werden. Das wird als 1,5 bzw. 2 Stopp-Bits bezeichnet. Für den Betrieb der asynchronen Datenübertragung wird kein eigenes Taktsignal benötigt. Stattdessen synchronisiert sich der Empfänger durch den Rahmen, bestehend aus dem Start- und Stopp-Bit, und eine bestimmte Bitrate, die manchmal nicht ganz richtig als Baudrate bezeichnet wird. Da der Beginn einer Übertragung mit dem Start-Bit zu beliebigen Zeitpunkten erfolgen kann, wird diese serielle Schnittstelle als asynchron bezeichnet. Um eine Synchronisation gewährleisten zu können, ist die Anzahl der übertragbaren Bits stark eingeschränkt. Bei einem längeren Datenstrom könnte die Synchronisation verloren gehen, was zu Fehlinterpretationen des Datenstromes und somit zu einer fehlerhaften Übertragung führen kann. Serielle Schnittstellen in synchroner Betriebsweise arbeiten mit dem Bittakt aus der Übertragungsleitung und benötigen keinen Rahmen aus Start-/Stopp-Bits.
Software - Beispiel für UART
#include <uart.h> #define UART_BAUD_RATE 9600 // 9600 baud int main(void) { char buffer[7]; cli(); uart1_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); // initialize library sei(); // now enable interrupts uart1_puts("String stored in SRAM\n"); uart1_puts_P("String stored in FLASH\n"); // Send string from flash
itoa( 145, buffer, 10); // interger into string (decimal format) uart1_puts_P(buffer); // transmit string uart1_putc('\r'); // Transmit single character Enter while(1) { uart1_puts_P("funktioniert\n"); // Send string } }
Anwendungen
Aufbau einer Kommunikation von einem Controllern zum PC, zu einem GPS Modul oder zu einem anderen Controller.
Beispiel
Die Biblitothek enthält ein voll funktionsfähiges Beispiel, inclusive makefile. Das Programm sollte sich ohne Probleme mit dem Programmers Notepad kompilieren lassen.
Viel erfolg!
Links |
|
|
Produktseite
Forum
|
|
Downloads |
|
|
Lib - UART ATmega
Terminal Software
|
|