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 |