Fachbereich Elektrotechnik und Informatik Labor für Angewandte Informatik und Datenbanken Praktikum Automatisierung / Echtzeitregelung (BAU/BER) Prof.Dr.-Ing. Coersmeier UART-Kommunikation mit dem Atmel AVR Name, Vorname Versuchstag Matrikelnummer Testat
UART-Kommunikation mit dem Atmel AVR Seite 2 1. Aufgabenstellung In diesem Versuch soll die interne UART Schnittstelle eines AVR-Mikrocotrollers zur seriellen Kommunikation mit einem PC verwendet werden. Um die Funktion der UART-Schnittstelle zu testen sollten Sie ein Programm zur Initialisierung der internen Schnittstelle schreiben und Zeichen über den UART senden und empfangen. Zur Durchführung des Versuchs benötigen Sie das Datenblatt des ATmega16 Mikrocontrollers. Machen Sie sich vor Beginn des Praktikums mit der UART / RS232 Schnittstelle vertraut. Um den korrekten Empfang von Zeichen in jeder Situation sicherzustellen ist die Verwendung eines Interrupts erforderlich. Machen Sie sich mit den Interrupts des ATmega16 Mikrocontrollers vertraut. Wie werden Interrupts, insbesondere Interrupt Service Routinen, im AVR-Studio programmiert? Wie funktioniert eine FIFO-Warteschlange? Was bewirkt das Schlüsselwort volatile in C? Welche Aufgabe hat der MAX232-Baustein? 1.1. Aufbau der Versuchsanordnung AVR-Platine Auf der Platine ist ein ATmega16 Controller mit einem 8MHz-Quarz und externer Beschaltung vorhanden. Des weiteren ist zum Anschluss an den PC ein MAX232 Schnittstellenbaustein der Firma Maxim und eine 9-Polige D-Sub Buchse vorgesehen.
UART-Kommunikation mit dem Atmel AVR Seite 3 1.2. UART Die UART (Universal Asynchronous Receiver and Transmitter) Schnittstelle dient der asynchronen seriellen Datenübertragung. Diese Schnittstelle bildet selbständig einen Rahmen in dem die Nutzdaten übertragen werden. Üblicherweise besteht dieser Rahmen aus einen Start-Bit, fünf bis maximal neun Daten-Bits, einem Paritäts-Bit und einem Stopp-Bit. Beispiel für einen Datenrahmen: Im Rahmen dieses Praktikums soll eine Kommunikation mit folgenden Parametern realisiert werden:?? Baud (wird bei Versuchsbeginn bekanntgegeben) 8 Daten-Bits keine Parität 1 Stopp-Bit Die für diese Kommunikation notwendigen Informationen zur Initialisierung des Mikrocontroller-UARTs finden Sie im Datenblatt im Kapitel USART. Warum verwendet Atmel im Zusammenhang mit dieser Schnittstelle die Bezeichnung USART?
UART-Kommunikation mit dem Atmel AVR Seite 4 2. Das Atmel AVR Studio Die in diesem Versuch eingesetzten Mikrocontrollerkarten enthalten einen ATmega16 AVR Mikrocontroller der Firma Atmel. Zu diesen Mikrocontroller-Typen stellt der Hersteller eine Entwicklungsumgebung zur Verfügung, die auf den Praktikumsrechnern installiert ist. Der verwendete AVR-GCC-Compiler ist auf den Rechnern bereits im AVR Studio integriert. Starten Sie das AVR Studio in dem Sie auf das AVR Studio 4 Symbol auf dem Desktop klicken. Folgendes Fenster öffnet sich automatisch: Es ist ein Standardprojekt voreingestellt und Sie können direkt Ihren Code eingeben. Achtung! Ändern Sie keinesfalls die Projekteinstellungen! Um Ihr Projekt zu kompilieren klicken Sie auf den Button Projekt-kompilieren. Im Build-Fenster werden dabei Compilermeldungen angezeigt, die Ihnen Rückschlüsse auf eventuelle Programmierfehler erlauben. Als Ergebnis erhalten Sie eine Intel-HEX Datei die in den Mikrocontroller programmiert werden kann.
UART-Kommunikation mit dem Atmel AVR Seite 5 1.3. Das Programmiertool Der Mikrocontroller wird im Rahmen dieses Praktikums mit einem Flash-Tool über eine ISP- Schnittstelle programmiert. Um die vom Compiler erzeugte Hex Datei in den Controller zu flashen, müssen Sie zunächst die Software AVRFlash starten. Kontrollieren Sie zunächst ob die Einstellungen im Flashtool mit den hier angezeigten übereinstimmen. Anschließend können Sie mit dem Button Load im Bereich Code die von Ihnen erzeugte Hex-Datei in das Programmiertool laden. Mit dem Button Write können Sie anschließend die Datei zum Controller übertragen. Nach erfolgreichem Programmiervorgang wird das Programm automatisch ausgeführt.
UART-Kommunikation mit dem Atmel AVR Seite 6 3. Terminal-Software Um die Kommunikation zu testen wird das Programm Termite benutzt. Um das Programm zu starten klicken Sie auf das entsprechende Symbol auf dem Desktop. Nachdem sich das Programm geöffnet hat können Sie mit dem Button Settings die vorgegebene Baudrate (wird bei Versuchsbeginn bekanntgegeben) und die Parameter (8 Datenbits, 1 Stoppbit und keine Parität) einstellen. Alle vom Controller an den PC gesendeten Zeichen werden im oberen Bereich des Terminalfensters ausgegeben. Alle Zeichen die Sie in der unteren Zeile des Terminalfensters eingeben werden vom PC an den Controller gesendet wenn Sie den Senden-Button am Zeilenende klicken.
UART-Kommunikation mit dem Atmel AVR Seite 7 4. Versuchsdurchführung: Gehen Sie zur Versuchsdurchführung in folgenden Schritten vor Teil 1: Im Datenblatt auf den Seiten 168ff finden Sie die Einstellungen für das Baudratenregister UBRR für einige übliche Quarzfrequenzen und Baudraten. Suchen Sie in diesen Tabellen die richtigen Werte für die vorgegebene Baudrate. Die Quarzfrequenz finden Sie in den Versuchsunterlagen. Auf den Seiten 164 bis 167 finden Sie die Informationen zu den USART Control und Status Registern UCSRA, UCSRB und UCSRC. Ermitteln Sie die erforderliche Konfiguration für eine asynchrone Kommunikation ohne Parität mit 8 Datenbits und einem Stoppbit (8-N-1). Die Kommunikation soll in diesem Versuchsteil ohne die Verwendung von Interrupts ablaufen. Vorgegebene Baudrate Ermittelte Registerwerte B7 B6 B5 B4 B3 B2 B1 B0 UCSRA UCSRB UCSRC UBRRH UBRRL Ergänzen Sie zunächst das vorgegebene Programm um die erforderlichen Anweisungen zur Konfiguration der seriellen Schnittstelle. Verwenden Sie dazu die ermittelten Registerwerte. Programmieren Sie Funktionen zum Senden und zum Empfangen von Zeichen. Verwenden Sie dazu die im ATMega16-Datenblatt auf Seite 151 und Seite 154 vorgeschlagenen Funktionen. Geben Sie zum Test dieser Funktion beim Programmstart das aktuelle Datum über die serielle Schnittstelle aus. Teil 2: Verwenden Sie jetzt die aus dem A/D-Wandler-Versuch bekannte Display-Bibliothek zur Anzeige von empfangenen Zeichen auf dem LC-Textdisplay. Welche Beobachtung machen Sie, wenn der PC mehrere Zeichen gleichzeitig sendet? Teil 3: Ergänzen Sie das Programm um eine Empfangs-Warteschlange mit (über #define) einstellbarer Länge. Verwenden Sie für die Warteschlange zunächst eine Länge von 8 Zeichen. Verändern Sie die USART-Konfiguration so, dass der RX Complete Interrupt ausgelöst wird. Schreiben Sie eine Interrupt Service Routine zur Behandlung dieses Interrupts. Innerhalb dieser ISR schreiben Sie empfangene Zeichen in die Warteschlange. Geben Sie im Hauptprogramm die in der Warteschlange gespeicherten Zeichen auf dem LC- Display aus. Welches Verhalten beobachten Sie, wenn die Warteschlange zu kurz für die Zahl der empfangenen Zeichen ist? Variieren Sie jetzt die Länge der Warteschlange. Warum ist die Definition des Warteschlangen-Zeigers als volatile erforderlich?