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.