Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
Programmierung der AVR-Microcontroller mit C - UlrichRadig.de
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
wur<strong>de</strong>.<br />
Das Zeichen muss nun schnellstmöglich aus <strong>de</strong>m Datenregister ausgelesen<br />
wer<strong>de</strong>n. Falls dies nicht erfolgt bevor ein weiteres Zeichen komplett<br />
empfangen wur<strong>de</strong> wird eine Überlauf-Fehlersituation eintreffen. Mit <strong>de</strong>m<br />
Auslesen <strong>de</strong>s Datenregisters wird das Bit automatisch gelöscht.<br />
TXC UART Trans<strong>mit</strong> Complete<br />
Dieses Bit wird vom <strong>AVR</strong> gesetzt, wenn das im Sen<strong>de</strong>-Schieberegister<br />
befindliche Zeichen vollständig ausgegeben wur<strong>de</strong> und kein weiteres<br />
Zeichen im Sen<strong>de</strong>datenregister ansteht. Dies be<strong>de</strong>utet also, wenn die<br />
Kommunikation vollumfänglich abgeschlossen ist.<br />
Dieses Bit ist wichtig bei Halbduplex-Verbindungen, wenn das Programm<br />
nach <strong>de</strong>m Sen<strong>de</strong>n von Daten auf Empfang schalten muss. Im<br />
Vollduplexbetrieb brauchen wir dieses Bit nicht zu beachten.<br />
Das Bit nur dann automatisch gelöscht, wenn <strong><strong>de</strong>r</strong> entsprechen<strong>de</strong><br />
Interrupthandler aufgerufen wird, ansonsten müssen wir das Bit selber<br />
löschen.<br />
UDRE UART Data Register Empty<br />
Dieses Bit wird vom <strong>AVR</strong> gesetzt, wenn ein Zeichen vom<br />
Sen<strong>de</strong>datenregister in das Send-Schieberegister übernommen wur<strong>de</strong> und<br />
<strong><strong>de</strong>r</strong> UART nun wie<strong><strong>de</strong>r</strong> bereit ist, ein neues Zeichen zum Sen<strong>de</strong>n<br />
aufzunehmen.<br />
Das Bit wird automatisch gelöscht, wenn ein Zeichen in das<br />
Sen<strong>de</strong>datenregister geschrieben wird.<br />
FE Framing Error<br />
Dieses Bit wird vom <strong>AVR</strong> gesetzt, wenn <strong><strong>de</strong>r</strong> UART einen<br />
Zeichenrahmenfehler <strong>de</strong>tektiert, d.h. wenn das Stopbit eines empfangenen<br />
Zeichens 0 ist.<br />
Das Bit wird automatisch gelöscht, wenn das Stopbit <strong>de</strong>s empfangenen<br />
Zeichens 1 ist.<br />
OR OverRun<br />
Dieses Bit wird vom <strong>AVR</strong> gesetzt, wenn unser Programm das im<br />
Empfangsdatenregister bereit liegen<strong>de</strong> Zeichen nicht abholt bevor das<br />
nachfolgen<strong>de</strong> Zeichen komplett empfangen wur<strong>de</strong>.<br />
Das nachfolgen<strong>de</strong> Zeichen wird verworfen.<br />
Das Bit wird automatisch gelöscht, wenn das empfangene Zeichen in das<br />
Empfangsdatenregister transferiert wer<strong>de</strong>n konnte.<br />
UDR UART Data Register.<br />
Hier wer<strong>de</strong>n Daten zwischen UART und CPU übertragen. Da <strong><strong>de</strong>r</strong> UART im<br />
Vollduplexbetrieb gleichzeitig empfangen und sen<strong>de</strong>n kann han<strong>de</strong>lt es sich hier<br />
physikalisch um 2 Register, die aber über die gleiche I/O-Adresse angesprochen wer<strong>de</strong>n.<br />
Je nach<strong>de</strong>m, ob ein Lese- o<strong><strong>de</strong>r</strong> ein Schreibzugriff auf <strong>de</strong>n UART erfolgt wird automatisch<br />
das richtige UDR angesprochen.<br />
UBRR UART Baud Rate Register.<br />
In diesem Register müssen wir <strong>de</strong>m UART <strong>mit</strong>teilen, wie schnell wir gerne<br />
kommunizieren möchten. Der Wert, <strong><strong>de</strong>r</strong> in dieses Register geschrieben wer<strong>de</strong>n muss,<br />
errechnet sich nach folgen<strong><strong>de</strong>r</strong> Formel:<br />
UBRR = Taktfrequenz / (Baudrate * 16) - 1<br />
Es sind Baudraten bis zu 115200 Baud und höher möglich.<br />
8.2 Die Hardware<br />
Der UART basiert auf normalem TTL-Pegel <strong>mit</strong> 0V (LOW) und 5V (HIGH). Die<br />
Schnittstellenspezifikation für RS232 <strong>de</strong>finiert jedoch -3V ... -12V (LOW) und +3 ... +12V (HIGH).<br />
Zu<strong>de</strong>m muss <strong><strong>de</strong>r</strong> Signalaustausch zwischen <strong>AVR</strong> und Partnergerät invertiert wer<strong>de</strong>n. Für die