erstellt
29.01.2012
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Meiner erster Versuch
ein Display mit dem AVR Atmega 8 anzusteuern
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Als erstes hab ich mich für ein LCD Dot-Matrix-Modul, 2x 16 Zeichen entschieden weil, es vom Preis / Leistungsverhältnis mir am nächsten kam. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ansteuerung per
Mikrocontroller
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Die Ansteuerung
eines Displays mit HD44780 Controller gestaltet sich
sowohl was den Hardware- als auch den Softwareaufwand
angeht relativ einfach und eignet sich somit sehr gut
als Übungsprojekt für Anfänger. Der HD44780-Controller
benutzt 8 Datenleitungen(D0 bis D7) sowie den 3
Steuerleitungen RS(Register Select), R/W(Read/Write)
und E(Enable). Das Displays wird mit 5V
Betriebsspannung versorgt, die Kontrastspannung Vee
bekommt man, indem man ein 10k-Poti zwischen VCC und
GND anschließt und den mittleren Anschluss als
Kontrastspannung verwendet. Bei ca. 4,5 Volt je nach
verwendeten Display werden dann die Pixel sichtbar.
Optional haben viele Displays noch eine
LED-Beleuchtung eingebaut,wie auch hier die von mir
verwendete. Möchte man nur einen 8-Bit-Port zur
Ansteuerung verwenden, so ist dies möglich, indem man
lediglich die Pins D4-D7 sowie die 3 Steuerleitungen
an den Controller anschließt, das Display muss dann im
4-Bit-Modus betrieben werden.Es können auch Displays
verwendet werden die einen Kompatiblen Controller
verwenden, z.B. KS0073. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Das LCD und sein
Controller
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Die meisten Text-LCDs verwenden den Controller HD44780 oder einen kompatiblen (z.B. KS0070) und haben 14 oder 16 Pins. Die Pinbelegung ist praktisch immer gleich: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Display mit weiße Schrift auf blauem Hintergrund Punktgröße: 5,56 mm Modulgröße: 80 x 36 x 13 mm sichtbares Feld: 66 x 16 mm Controller: KS0070B, HD44780 kompatibel weiße LED Hintergrundbeleuchtung Ultra Low-Power 15 ... 60 mA |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Achtung:
Unbedingt von der richtigen Seite zu zählen anfangen!
Meistens ist neben Pin 1 eine kleine 1 auf der
LCD-Platine, ansonsten im Datenblatt nachschauen. Bei
LCD's mit 16-poligem Anschluss sind meist die beiden
letzten Pins ( Pin 15 und 16 )für die
Hintergrundbeleuchtung reserviert. Hier unbedingt das
Datenblatt zu Rate ziehen weil die
Hintergrundbeleuchtung aus Leuchdioden besteht muss der
Strom dafür mit einem Vorwiderstand begrenzt werden.
Falls kein Datenblatt vorliegt, kann man mit einem
Durchgangsprüfer feststellen, welcher Anschluss mit
Masse (GND) verbunden ist. Vss wird ganz einfach an GND angeschlossen und Vcc an 5V. Vee kann man testweise auch an GND legen. Wenn das LCD dann zu dunkel sein sollte muss man ein 10k-Potentiometer zwischen GND und 5V schalten, mit dem Schleifer an Vee |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 oder 4 Bit Modus
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Es gibt
zwei verschiedene Möglichkeiten zur Ansteuerung
eines solchen Displays: den 8-Bit- oder
4-Bit-Modus. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Der 4-Bit-Modus hat
den Vorteil, dass man 4 IO-Pins weniger benötigt als
beim 8-bit-Modus, weshalb ich mich hier für eine
Ansteuerung mit 4 Bit entschieden habe. Neben den vier
Datenleitungen (DB4, DB5, DB6 und DB7) werden noch die
Anschlüsse RS, RW und E benötigt. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Display an Pollin
Board
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Es folgt eine kurze Beschreibung , wie ein Display an ein Experementierboard der Firma Pollin anzuschließen ist: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Da auf dem Board von Pollin kein Anschluß für ein Display vorgesehen ist, hab ich folgendermaßen zu einer Notlösung gefunden:Das Board besitzt mehrere IC Fassungen, um mit verschiedene Controllern zu Experementieren, da ich aber wahrscheinlich nur mit den etwas größeren arbeite , weil sie mittlerweile zu einen sehr erschwinglichen Preis zu bekommen sind, habe ich mich entschlossen die Fassung für den Tiny-Contoller ersteinmal Zweck zu entfremden, indem ich in der vorhandenen IC-Fassung abermals eine IC-Fassung eingesteckt habe, an denen ich die Anschlüsse für's Display angelötet habe. So habe ich die Möglichkeit, bei Bedarf einfach die zusätzlich eingsteckte Fassung wieder zu entnehmen. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Anschluss an
den Controller Jetzt da wir wissen, welche
Anschlüsse des LCD's benötigt, können wir das LCD
mit dem Mikrocontroller verbinden:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Da kein 85 Ohm
Widerstand zu verfügung stand , hab ich mich mit zwei
in Reihe gelöteten 47 Ohm Wiedrstände beholfen.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Anschluß an
der IC Fassung die eigentlich für den Atmel Tiny
vorgesehen ist.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Erstes Programm
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Nach Anschluss des Displays am
Board, geht es nun daran, das Programm zu schreiben,
um einen Text auf's Display zu bringen.
$regfile = "m8def.dat" 'definieren des verwendeten Chips .......................................' Hier wird Art des Controllers definiert ,hier eine Atmega 8 $crystal = 4000000 'definieren des
verwendeten externen Quarz (16MHz)...............'
Hier wird der verwendete Quarz angegeben Config Lcd = 16 * 2
...............................................................................................................'wir
Verwenden Ein Display Mit 16 Mal 2 Zeichen Cls..........................................................................................................................................'Display Löschen Do............................................................................................................................................ 'Schleife anfang Locate 1 , 1.............................................................................................................................'Locate
definiert
Ausgabe in Zeile 1 und Spalte 1 Locate 2 , 1...............................................................................................................................Definiert
Textausgabe
in Zeile 2 und Spalte 1 Waitms 15...................................................................................................................................
'Pause
von 15 Millisekunden
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Nach dem Kompilieren und anschließenden abspeichern des Programms kann es mit dem Programm " Ponyprg" eingelesen und in den Controller übertragen werden. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Das Ergebnis sieht dann folgendermaßen aus: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
FAQ | |
Erkenne nichts auf dem Display | Dann erst einmal die Kontrasteinstellung überprüfen. Den Kontrast so einstellen das die schwarzen Kästchen zu erkennen sind , dann den Kontrast herunterdrehen bis die Kästchen gerade nicht mehr zu sehen sind. |
LCD flackert | Pausenzeiten also hauptsächlich die "Wait" Befehle überprüfen . Da ein ausgegebener Text erst gelöscht werden muss bevor ein neuer Text angezeigt werden kann, ist möglicherweise die Zeitspanne zwischen dem Löschen [CLS] und der neuen Textausgabe zu lang. |
Text läuft in der Anzeige | Der Anschluß R/S am Display ist für das Löschen der Anzeige zuständig, möglicherweise ist er nicht richtig Konfiguriert, entweder im Programmiertool ( z.B. Bascom) oder aber sollte die Konfiguration im selbst erstellten Programm erfolgt sein , somit ist die Konfigurationeinstellung im (Bascom Menü) hinfällig, und es sollte die Konfiguration im selbst erstellten Programm überprüft werden. |
Text läuft in der Anzeige | Der Anschluß R/S am Display ist für das Löschen der Anzeige zuständig, dieser Anschluß muss auf 0 gelegt werden damit die Anzeige gelöscht wird. Wird die Anzeige nicht gelöscht , wird immer wieder Neu geschrieben bis das Display vollgeschrieben ist, dann wird am Anfang des Displays wieder weiter geschrieben, und der alte vorhandene Text überschrieben, somit sieht es dann aus wie Hieroglyphen. Ursache kann ein nicht Konfigurierter Pin sein, und zwar muss der Ausgang am Atmega , welcher den R/S Anschluß am Display steuert als Ausgang definiert sein z.B. (Ddrb = &B10000000 ) setzt Pin B.7 als Ausgang. |
Kontrast vorhanden aber keine Textanzeige | Beim Fabrikneuen Atmega 32 ( nicht beim Atmega 8 ) ist Standardmäßig der Port C als JDTAG Schnittstelle konfiguriert, bei Anschluß eines DiBeim Fabrikneuen Atmega 32 ( nicht beim Atmega 8 ) ist Standardmäßig der Port C als JDTAG Schnittstelle konfiguriert, bei Anschluß eines Displays an Port C oder sonstiger Nutzung muss in den Fusebits die JDTAG Schnittstelle deaktiviert werden .splays an Port C oder sonstiger Nutzung muss in den Fusebits die JDTAG Schnittstelle deaktiviert werden . |
Keine
Anzeige oder nur ein Strich |
Überprüfen ob die "$crystal" Anweisung im
Programm den passenden Wert zum Quarz übergeben wurde,
wenn beispielsweise in den "FuseBits" der Wert für 16
Mhz Quarz angegeben ist und in der "$Crystal"
Anweisung nur 1Mhz angegeben wurde , führt dies zu
diesen Erscheinungen. |
Aktualisiert 16.08.2013 |