RS232
Wie sieht das spezielle bei PC und ATmega32 implementierte Busprotokoll für die UART aus?
- RS232 verwendet den UART mit einem speziellen Protokoll.
- Sie ist gebräuchlich bei der Kommunikation zwischen PCs und einer Menge an Peripheriegeräten (z.B. GPS, Oszilloskop, etc.)
- Die RS232 stammt aus den 60er Jahren und gilt allgemein als etwas veraltet.
- Sie erfreut sich dessen ungeachtet aber einer weiten Verbreitung und verdient es hier besprochen und getestet zu werden.
- Wir werden sie sowohl dazu verwenden, mehrere Mikrocontroller ATmega32 miteinannder zu verbinden, als auch dazu einen Mikrocontroller mit einem PC zu verbinden.
- Die UART mit RS232-Protokoll zählt zu der in den ATmega32 direkt integrierten Peripherie.
- D.h. man kann nach Aktivierung dieser Schnittstelle in ein bestimmtes dafür vorgesehenes Register parallel ein Byte hineinschreiben und der Baustein sorgt dann dafür, dass diese 8 Bit seriell über diese Schnittstelle gesendet werden.
- Dann kann man die nächsten 8 Bit in das Register schreiben usw.
|
Hinweis
- Neben TxD und RxD existieren bei der seriellen Schnittstelle am PC weitere Leitungen, die z.B. die Funktionstüchtigkeit eines Gerätes anzeigen u.ä.
- Diese Leitungen werden hier nicht behandelt.
- Anstatt ein echtes Bussystem mit der RS232 aufzubauen, werden wir hier nur eine Verbindung zweier Geräte mit gekreuzten Leitungen aufbauen.
- Verbindungen von mehreren Geräten werden wir zu einem späteren Zeitpunkt am Beispiel der SPI-Schnittstelle kennenlernen.
|
Bild 0-1: Null-Modem-Kabel für RS232 zwischen Mikrocontroller und PC.
RS232 - Protokoll
- Die Übertragung der Daten erfolgt Byteweise - d.h. 8 Bit werden direkt als eine Folge von Low und High-Pegeln über den TxD-Kanal geschickt.
- Beispielsweise sieht die Übertragung des Bytes 0b11010001 seriell aufgelöst so aus:
|
Bild 0-2: Serielle Übertragung von 8 Bit mittels RS232.
- Man beachte, dass zuerst Bit0 (unbedeutenstes / leastr significant Bit) gesendet wird und am Ende Bit 7 (bedeutenstes / most significant Bit).
- Beim PC liegt der Low-Pegel bei ungefähr -10Volt gegenüber GND und der High-Pegel bei +10Volt.
- Dagegen liefert der ATmega32 auf Pin 15 (TxD) nur einen TTL-Pegel (5Volt) und kann auch nur auf Pin 14 (RxD) mit TTL-Pegeln umgehen.
- Um diese Differenz auszugleichen, werden wir einen Adapter-IC benutzen, den MAX232, der intern aus 5Volt und 0-Volt-Pegeln +/-10Volt-Pegel erzeugen kann.
- Damit diese Art der Datenübertragung auch wirklich funktioniert, müssen Sender und Empfänger zwischen dem Senden eines Bytes jedesmal neu synchronisiert werden.
- Da diese Synchronisation nicht über eine gesonderte Taktleitung erfolgt, sondern aufgrund der übertragenen Pegel, wird diese Schnittstelle dennoch als "asynchron" bezeichnet.
- Zwischen dem Senden zweier Bytes gibt es eine Pause.
- In dieser Pause wird der Spannungspegel auf High gesetzt.
- Zur Synchronisation des Empfängers mit dem Sender, wird dann vor dem Senden des ersten Bits der Spannungspegel erst einmal auf Low gesetzt.
- Durch diese Konvention kann sich der Empfänger mit dem Sender synchronisieren.
- Die Pause wird als "Stop-Bits" definiert und kann verschieden lang gewählt werden. Die Mindestlänge wird mit der Angabe eingestellt, ob ein oder zwei Stopbits verwendet werden.
- Die Low-Phase zu Beginn wird als Startbit bezeichnet.
- Der gesamte Ablauf beim Übertragen eines Bytes sieht deshalb z.B. folgendermaßen aus:
|
Bild 0-3: Vollständiger Ablauf bei Übertragung von 8 Bit mit einem Start und einem Stop-Bit via RS232.