Viele modernen MC verfügen heute über ein programmierbares serielles Kommunikationsinterface.

USART:    Universal Synchronous and Asynchronous Serial Receiver and Transmitter

Der USART stellt eine Schnittstelle im MC dar, mit welcher es möglich ist, zwischen ihm und einem über zwei entsprechende Ports angeschlossenen PC (COM-Schnittstelle) Daten auszutauschen. Diese Schnittstelle kann natürlich auch zum Anschluss bzw. dem Aufbau eines Bus-Systems genutzt werden.

Um den USART technisch nutzbar zu machen, d.h. um den Controller per Modem-Kabel an den Rechner anzuschließen, sollte ein MAX232 zwischengeschaltet werden. Dieser dient dazu, die Pegel zwischen der COM-Schnittstelle des Rechners an die des Mikrocontrollers anzupassen (Spannungspegel und Signalinvertierung).
Hier die entsprechende Beschaltung des MAX232, TXD und RXD werden direkt an den Controller angeschlossen:

Um den USART zum Senden bzw. Empfangen von Daten zu Verwenden, müssen in bestimmten Registern des Controllers bestimmte Bits gesetzt werden.
Zuerst ist hier UBRR (USART Baud Rate Register) anzuführen. Dessen Inhalt legt fest, mit welcher Baudrate die Übertragung stattfinden soll. Bei neueren ATmegas sind die Register in UBRRH und UBRRL geteilt. Für niedrige Baudraten ist allerdings alleine UBBRL von Bedeutung. Der Wert, welcher in dieses Register zu schreiben ist berechnet sich wie folgt:
UBRR = fosz/(16*Baudrate)-1
Dieser Wert ermöglicht eine Übertragung im asynchronen Betrieb. (asynchronous normal mode)
Durch Setzen von U2X in UCSRA (USART Control and Status Register A) ist es möglich, in den Asynchronous Double Speed Mode zu wechseln. In diesem ist allerdings auf genaue Einhaltung der Baudrateneinstellungen und der Taktfrequenz des Systems zu achten, es ist somit fehleranfälliger.
Für normale Experimente und Programme reicht der zuerst genannte Modus vollkommen aus.
Zuletzt gilt es noch den synchronen Modus zu erwähnen. Dieser wird z. B. zum Aufbau von Multiprozessorsystemen verwendet. Dazu muss UMSEL (USART Modus Select) auf '1' gesetzt werden. Hierbei kann der XCK-Pin als Ausgang (Master) oder Eingang (Slave) für das Taktsignal genutzt werden.

Der USART-Transmitter wird durch das Setzen von TXEN (Transmit Enable) in UCSRB (USART Control and Status Register) aktiviert. Durch Schreiben eines Bytes in UDR (USART Data Register) wird der Controller veranlasst, dieses Byte über den USART auszugeben. Dieses sollte allerdings erst dann stattfinden, wenn das Register bereit ist, d.h. wenn das Bit UDRE (USART Data Register Empty) in UCSRA gelöscht ist. Das Ausschalten des Transmitters erfolgt durch das Löschen von TXEN.

Der USART-Receiver funktioniert analog zum Transmitter. Er wird durch das Setzen von RXEN (Receive Enable) in UCSRB eingeschaltet. Sobald der USART Daten empfangen hat, wird das RXC-Flag gesetzt. Das Ausschalten erfolgt durch das Löschen von RXEN.

Interrupts:

Der USART stellt 3 separate Interrupts zur Verfügung.
a.) TX Complete (eine Transmission (Sendung) wurde abgeschlossen)
b.) TX Data Register Empty (Transmissionsregister ist nicht bereit)
c.) RX Complete (es wurde ein Datenpaket erhalten)

zu a.) Es muss TXCIE in UCSRB gesetzt werden. Der Interrupt wird ausgelöst, wenn das TXC-Flag gesetzt wird. Der Interrupt löscht automatisch das TXC-Flag.

zu b.) Es muss das UDRIE-Bit in UCSRB gesetzt werden. Der Interrupt wird sofort ausgelöst, sobald UDRE gesetzt ist. Die Interrupt-Routine muss, wenn der Interrupt ausgelöst wurde, neue Daten in UDR schreiben um UDRE zu löschen oder den Interrupt ausschalten. Sonst wird sofort nach Beendigung der Interrupt-Routine ein neuer Interrupt ausgelöst werden.

zu c.) Es muss das RXCIE-Bit in UCSRB gesetzt werden. Sobald das RXC-Flag gesetzt ist, wird dieser Interrupt ausgelöst. Die ISR (Interrupt-Service-Routine) sollte die empfangenen Daten in UDR lesen um RXC zu löschen, andernfalls würde sofort nach Beendigung der ISR ein erneuter Interrupt ausgelöst werden.

Der USART eignet sich sehr gut zum debuggen eventuell fehlerhaft arbeitender Programme, da der Controller ständig Statusmeldungen an den Rechner schicken kann. Dieses muss natürlich dann je nach laufendem Programm zusätzlich in die Software implementiert werden.
Auch kann man mit seiner Hilfe sehr gut beispielsweise die Daten angeschlossener Sensoren in bestimmten Intervallen an einen PC senden, mit dem diese dann aufbereitet werden können (Bsp. Temperatur- oder Helligkeitssensorauswertung im Excel).

Eine oft gestellte Anfängerfrage ist, welcher Terminalprogramm am besten verwendet werden soll. Wer unter Windows arbeitet, bekommt bereits das "Hyper-Terminal" mitgeliefert. Das reicht zwar für einfach Experimente aus, ist ansonsten aber meiner Meinung nach einfach nur ungeeignet. Ein von vielen Anwender bevorzugtes Terminalprogramm ist "Terminal" von Bray. Dieses kann man sich hier herunterladen.

Einige Implementierungen kann man unter Programme finden.

 

Zurück zur Startseite.