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
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
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.