Fachbereich Elektrotechnik und Informatik Labor für Angewandte Informatik und Datenbanken Praktikum Automatisierung / Echtzeitregelung (BAU/BER) Prof.Dr.-Ing. Coersmeier HD44780-LC-Display am Atmel-AVR Mikrocontroller Name, Vorname Matrikelnummer Versuchstag Testat LC-Display am Atmel AVR-Mikrocontroller Seite 2 1. Aufgabenstellung Teil 1 In diesem Versuchsteil soll ein mit einem Atmel AVR Mikrocontroller verbundenes 2x16-Zeichen LC-Display angesteuert werden. Um diese Funktion zu testen sollen Sie ein Programm schreiben, das auf dem Display den Gruppennamen und das aktuelle Datum ausgibt. Das Programm sollte so strukturiert sein, dass mehrfach benötigte Programmteile als Unterprogramme geschrieben sind. Diese Unterprogramme sollten von Ihrem Hauptprogramm aufgerufen werden. 1.1. Schaltplan Zur Durchführung des Versuches ist folgende Schaltung aufgebaut: 1.2. Vorbereitung • • • • • • Veranschaulichen Sie sich die Funktionen des HD44780-Displaycontrollers (ggf. mit Hilfe des Simulators) Kontrollieren Sie ob das Display im 4-Bit-Modus oder im 8-Bit-Modus angesteuert werden kann. Welcher Port wird für die Datenleitungen verwendet? Mit welchen Operationen kann ein zu übertragendes Byte in zwei 4-Bit Teile (Nibble) zerlegt werden? Welche Funktion hat der ENABLE-Anschluss des Displays? Welche Portleitungen sind an RS, RW und ENABLE angeschlossen? Bereiten Sie in groben Zügen das von Ihnen zu erstellende Programm vor. (mit Kommentaren !!!) Diese Vorbereitungsaufgaben sind zum Praktikumstermin von jedem Versuchsteilnehmer schriftlich vorzulegen! Bei Unklarheiten oder Problemen melden Sie sich rechtzeitig vor dem Versuchstermin! LC-Display am Atmel AVR-Mikrocontroller 1.3. Versuchsdurchführung • • • • Besprechen Ihrer Vorbereitungsaufgaben Eingeben des vorbereiteten Programms (mit Kommentaren !!!) Übertragen auf das Testsystem Testen 1.4. Aufbau der Versuchsanordnung 2. LCD-Module mit Hitachi-HD44780-Controller Seite 3 LC-Display am Atmel AVR-Mikrocontroller Seite 4 2.1. Anschlußbelegung Nr. 1 2 3 4 5 6 7 Pin VSS VDD VEE RS R/W E DB0 Funktion Spannungsversorgung (0V) Spannungsversorgung (5V) LCD-Kontrasteinstellung Register Select Read / Write Enable I/O-Datenbit 0 Nr. 8 9 10 11 12 13 14 Pin DB1 DB2 DB3 DB4 DB5 DB6 DB7 Funktion I/O-Datenbit I/O-Datenbit I/O-Datenbit I/O-Datenbit I/O-Datenbit I/O-Datenbit I/O-Datenbit 1 2 3 4 5 6 7 2.2. Funktion der Anschlüsse VSS VDD VEE RS Betriebsspannung Betriebsspannung LCD-Kontrast Eingang R/W Eingang E DB4-7 Eingang Ein-/Ausgang DB0-3 Ein-/Ausgang GND-Anschluß 5-Volt Spannungsversorgung Spannung zur Kontrasteinstellung des LC-Displays Register Select 0→ Zugriff auf Instruction Register (schreiben) Zugriff auf Busy-Flag und Address Counter (lesen) 1→ Zugriff auf Data Register (lesen und schreiben) Read / Write Signal 0→ Schreibzugriff 1→ Lesezugriff Data Read / Write Enable Signal Die oberen 4 Bit des Datenbus. (Bidirektionale Tri-State Signale) DB7 kann auch als Busy-Flag Verwendung finden Die unteren 4 Bit des Datenbus. (Bidirektional/Tri-State) Diese Anschlüsse werden im 4-Bit-Modus nicht benötigt. 2.3. Auswahl von Registern und Schreib/Lesezugriff RS 0 R/W 0 0 1 1 0 1 1 Operation Schreiben in das Instruction-Register und Ausführen von internen Operationen (Clear Display o.a.) Lesen des Address Counter (DB0-DB6) und Busy-Flag (DB7) Schreiben in das Data Register und Ausführen von internen Operationen (DD RAM – DR oder CG RAM – DR) Lesen des Data Register und Ausführen von internen Operationen (DD RAM – DR oder CG RAM – DR) 2.4. Timing Mit Ausnahme des Enable-Signals gibt es keine obere Grenze für Wartezeiten. Ein Flankenwechsel des Enable Signals muß in max. 25ns erfolgen Es gibt zwei mögliche Methoden um ein korrektes Timing sicherzustellen: • Vor jeder neuen Operation warten bis das Busy-Flag wieder den Zustand 0 hat • Verwendung von Warteschleifen (Diese Variante kann einen Port einsparen) Da das Timing für diesen Versuch unkritisch ist verwenden wir hier die zweite Variante. LC-Display am Atmel AVR-Mikrocontroller Seite 5 DB0 DB3 DB1 DB6 DB5 DB4 DB2 Befehl RS R/W DB7 2.5. Befehlsliste Beschreibung Clear Display Return Home Entry Mode Set 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 * S 0 0 0 1 0 1 I/ D C 0 0 0 0 0 1 S/C R/L * * 0 0 0 0 1 D L 1 N * Display löschen und Cursor Home Cursor Home Cursor Bewegungsrichtung und Display Shift AN / AUS ON / OFF für Display, Cursor und Cursor-Blinken Cursor bewegen und Display Shift ohne Änderung des DD-Ram Interfacelänge (4/8 Bit), Zeilenzahl und Zeichensatz Auswahl CG-Ram-Adresse setzen Display ON/OFF 0 0 0 D Cursor und Display Shift Funktion setzen CG-Ram Adr. Setzen DD-Ram Adr. Setzen Busy-Flag / Adr. Lesen Daten schreiben in CG oder DD Daten lesen aus CG oder DD 0 0 0 F * ACG B Zeit 1.7ms 1.6ms 40µs 40µs 40µs 40µs 40µs 0 0 1 ADD DD-Ram-Adresse setzen 40µs 0 1 BF AC Busy-Flag und Adr.Counter lesen 40µs Daten in das CG oder DD-Ram schreiben Daten aus dem CG oder DD-Ram lesen 40µs 1 0 Write Data 1 1 Read Data I/D=1: Increment S=1: Display Shift S/C=1: Display Shift R/L=1: Shift rechts DL=1: 8-Bit Interface N=1: 2 Zeilen F=1: 5x10 Pixel BF=1: Warten I/D=0: Decrement S/C=0 Cursor Move R/L=0: Shift links DL=0: 4-Bit Interface N=0: 1 Zeile F=0: 5x7 Pixel BF=0: Frei DD-Ram CG-Ram ADD ACG AC Display-Data-Ram Character Generator Ram DD-Ram-Adresse Entspricht Cursoradresse CG-Ram-Adresse Adress Counter für CG und DD Ram 40µs LC-Display am Atmel AVR-Mikrocontroller Seite 6 2.6. Initialisierung für 4-Bit Interface 1. Power On 2. > 15ms warten RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 11. 0 0 0 0 1 0 1 0 0 0 3. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 12. 0 0 0 0 1 1 * * * * 13. > 40µs warten RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 4. Funktion setzen: 4 Bit, 2 Zeilen, 5x7 > 4.1ms warten 5. 0 0 0 0 0 0 0 0 0 1 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Return Home 14. 0 0 0 0 1 1 * * * * 15. > 4.1ms warten RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 6. > 1.64ms warten 7. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 0 0 1 1 C B Display an, C=Cursor, B=Blinken 0 0 0 0 1 1 * * * * 8. > 40µs warten 16. > 40µs warten 17. Initialisierung beendet RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 9. 0 0 0 0 1 0 * * * * Umschalten auf 4 Bit Interface 10. > 40µs warten AB HIER: 4-Bit Interface 2.7. Adressierung des Display-RAM (DD-Ram) Das hier verwendete LCD-Modul hat 2 Zeilen mit jeweils 16 Zeichen. Zeile 1 wird adressiert von 00h to 0Fh (0 bis 15), Zeile 2 wird adressiert von 40h to 4Fh (64 bis 79). Zeile 1 Zeile 2 00 40 01 41 02 42 03 43 04 44 05 06 45 46 07 47 08 48 09 49 0A 0B 0C 0D 0E 0F 4A 4B 4C 4D 4E 4F Unabhängig vom Aufbau des Displays sind immer 80 Byte DD-Ram vorhanden. Der zusätzliche Speicher kann durch Scrollen des Displays verwendet werden. Beim Schreiben eines Zeichens wird der Cursor automatisch auf die nächste Zelle gesetzt. Das gezielte Setzen der Schreibposition ist möglich über den Befehl DD-Ram-Adresse setzen. RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1. 0 0 1 Cursor setzen 2. > 1.64ms warten Adresse LC-Display am Atmel AVR-Mikrocontroller Seite 7 2.8. Zeichentabelle Der Zeichensatz des LCD entspricht weitgehend dem Standard-ASCII-Zeichensatz. Zusätzlich zu der hier angegebenen Zeichentabelle ist auch die Definition von benutzerdefinierten Zeichen möglich. Der Compiler kann einfache ASCII-Zeichen in Hochkommata direkt einer Variablen zuweisen. LC-Display am Atmel AVR-Mikrocontroller Seite 8 3. 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. LC-Display am Atmel AVR-Mikrocontroller Seite 9 3.1. Das Programmiertool Der Mikrocontroller wird im Rahmen dieses Praktikums mit einem Flash-Tool über eine ISPSchnittstelle 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.