Forum: Mikrocontroller und Digitale Elektronik Benötige Hilfe bei 4x20 LCD-Display


von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin schon seit einigen Tagen dran mein 4x20 LCD-Display zum Laufen 
zu bringen, doch ich bekomme es einfach nicht hin :O(. Das Display 
flackert ständig, mal zeigt es was an, aber dann nicht genau in den 
viereckigen Kästchen sondern etwas versetzt. Langsam bin ich am 
verzweifeln. Ich würde mich riesig freuen, wenn mir jemand helfen würde 
oder vielleicht einen Tipp für mich hat. Die Kontakte habe ich alle 
nochmal nachgelötet. Die Verbindungen sind auf jedenfall in Ordnung. 
Betreiben tue ich das Display im 4 Bit Modus.

Enable an PIN_B0
RS     an PIN_B1
R/W    an PIN_B2

DB4    an PIN_B4
DB5    an PIN_B5
DB6    an PIN_B6
DB7    an PIN_B7

Den Resetpin des Diplays habe ich frei gelassen.

Ich verwende ein 4 x 20 LCD Display (5x8 DOT).
Bezeichnung: EA DIP204-4 mit weißer Hintergrundbeleuchtung und schwarzer 
Schrift. In dem Display befindet sich der Kontroller KS0073. Die 
Adressierung des Displays ist folgende:

1. Zeile 0x00...0x13
2. Zeile 0x20...0x33
3. Zeile 0x40...0x53
4. Zeile 0x60...0x73

Als Prozessor verwende ich den PIC16F88 mit dem CCS - Compiler.

Das Datenblatt des LCD - Displays, und der C-Code für das Hauptprogramm
sowie für den 4x20 LCD Treiber sind im Anhang. Kann es sein, dass ich 
einen Fehler in der Adressierung habe oder vielleicht in der 
Initialisierung des Displays? Ich kann einfach keinen Fehler finden.

Ich bin über jede Hilfe dankbar!!!

von Stephan (Gast)


Lesenswert?

sicher das die Aufteilung der Zeilen stimmt ??

http://sprut.de/electronic/lcd/index.htm#4x20

von spess53 (Gast)


Lesenswert?

Hi

>sicher das die Aufteilung der Zeilen stimmt ??

Wenn kein Mist im Datenblatt steht, ja.

MfG Spess

von Klaus W. (mfgkw)


Lesenswert?

Sind die Wartezeiten vielleicht zu knapp?

von Goa (Gast)


Lesenswert?

Glaube auch, dass Dein Driver mit falschen Timings arbeitet. Den 
Reset-PIN offen zu lassen ist okay, da das Display einen Pullup hat. Die 
Zeilenadressen stimmen meiner Meinung nach so auch.

Schau mal hier:
Beitrag "LCD EA DIP204 KS0073 4-Bit, 8-Bit und serielle C-Routinen"

von holger (Gast)


Lesenswert?

>Glaube auch, dass Dein Driver mit falschen Timings arbeitet.

Mag sein, aber beim KS073 muss man etwas mehr in der Init
machen um in den 4 Zeilen Modus zu schalten.

Und das hier tut vermutlich nicht was es soll:

   lcd_putc("\fZeile 1");
   lcd_putc("\nZeile 2");

lcd_putc() schreibt wohl nur ein Zeichen und keinen String.
Vieleicht gibt es ja ein lcd_puts()?

von Michael R. (mexman) Benutzerseite


Lesenswert?

Hallo Sebastian:

> Ich kann einfach keinen Fehler finden.

Wie bereits beschrieben, gibt es verschiedene Fehler.
Ich habe Deinen Code nicht geoeffnet ...ausserdem Programmiere ich nur 
in Assembler und koennte Dir vermutlich nicht viel helfen..... aber die 
folgenden Fehler sind beim ersten Programmierversuch von LCDs ueblich ( 
in Reihenfolge der Haeufigkeit):


1. Fehlerhafte Initialisierung durch falsches Timing (wenn das 
Busy-Signal nicht ausgewertet wird, dann muss wirklich ausreichend Zeit 
gewartet werden nach jedem Befehl -> Datenblatt Seite 2, letzte Spalte, 
gerne verdoppeln! ACHTUNG: "Cursor home" und "Clear display" dauern 
seeehr lange!)

2. Fehlerhafte Initialisierung durch inkorrekte Steuersequenz -> 
Datenblatt Seite 3 oben...und das Timing beachten !


3. Fehlerhaftes Einleiten des 4Bit-Modes, falls verwendet -> Datenblatt


4. Fehlerhaftes Umschalten zwischen EIngabe von  Daten/Befehlen (RS Bit 
vergessen) -> Datenblatt.


Da sind wir alle mal durchgegangen und ich glaube jeder hat da seine 
persoenliche Ini-Routine auf dem Drive liegen ;-)

Die Adressierung der Zeilen ist erstmal unerheblich.....Zeile 1 startet 
immer bei Adresse Null und wenn es in der ersten Zeile dann schliesslich 
geht, kannst Du Dich um die Zeilenadressen kuemmern.


Gruss

Michael

von Peter D. (peda)


Lesenswert?

Der Hauptfehler, der bei LCDs gemacht wird, ist, daß an tausenden 
Stellen ein Nibble zusammengebastelt wird. Das ist natürlich großer 
Quatsch (fehleranfällig, großer Code, schwer wartbar).

Man muß sich erstmal einen einzige Nibble-Funktion schreiben, die ein 
Nibble ausgibt, ohne andere Pins des/der verwendeten Ports zu ändern!
Dabei ist unerheblich, ob die 4 Datenpins auf einem Port liegen oder auf 
4 verschiedenen. Die 4..28 anderen Pins dürfen ihre Richtung und ihren 
Pegel nicht verändern!

Praktischer Weise enthält die Nibble-Funktion auch gleich das E-Pin 
pulsen (~1µs).

Und erst dann kann man daran gehen, damit das Init und Daten/Befehl 
senden aufzubauen.

Das Busy-Testen läßt man bequemer Weise auch weg und nimmt einfach die 
Delays aus dem Datenblatt.

Das Busy-Testen mag vielleicht einige µs weniger warten, aber das spielt 
keine Rolle.
Man muß einen Text eh lange darstellen, damit der Mensch ihn auch 
ablesen kann. D.h. auch mit festen Wartezeiten ist die CPU-Last durch 
das LCD weit unter 1%.


Peter

von LCD-Geschädigter (Gast)


Lesenswert?

Mit dem Programm kann ich Dir leider nicht helfen. (Atmel-Fan)
Ich hatte aber mit diesem Display auch genug Ärger.

Es liegt zu 99% am Init, da ist nämlich eine Ungenauigkeit
im obigen Datebblatt. Das "fast" 100% kompatibel stimmt eben auch nur 
fast...

Hole Dir das Original Datenblatt des Controllers,
da sind die (detaillierten) Init Routinen drin, incl der Waits usw.
Nach dem ich diese programmiert hatte lief das Display wie es sollte.

von XXX (Gast)


Lesenswert?

Hallo

Lcd_putc erwartet eine Character, du übergibst einen String.

Gruß
Joachim

von Sebastian (Gast)



Lesenswert?

Hallo zusammen,

erst einmal vielen Dank für eure Hilfe!

Ich habe heute nochmal ein wenig im Internet recherchiert. Ich denke, 
dass tatsächlich die Initialierung des HD44780 eine andere ist als die 
für den KS0073 und die Treiber nicht 100% kompatibel sind ohne sie 
anzupassen. Vielleicht sollte ich einfach ein 4x20 LCD Display mit einem 
HD44780 Kontroller suchen ;O), ne Spaß, ich würd schon gerne dieses 
Display zum Laufen bekommen, zumal ich schon ziemlich viel Zeit damit 
verschwendet habe ;O). In der angehängten Word-Datei sind zwei 
Initialisierungsbeispiele für den 8 Bit Modus, einmal für ein 2x16 LCD 
Display mit einem HD44780 Kontroller und einmal für ein 4x20 LCD Display 
mit dem HD44780 Kontroller.

Wenn ich jetzt einmal das Initialisierungsbeispiel für das 4x20 LCD für 
den 8-Bit Modus umbaue, zum 4-Bit Modus, würde das im Prinzip heißen, 
dass ich nacheinander folgende Bytes an das LCD übertragen muss?
(siehe Datenblatt)

Function SET     : 0x2C       101100
Ext. Function SET: 0x09       001001
Function SET     : 0x28       101000
Display ON/OFF   : 0x0F       001111
Clear Display    : 0x01       000001
Entry Mode Set   : 0x06       000110

Das 2x16 LCD Display habe ich mit mit dem lcd.c driver von ccs zum 
Laufen bekommen. Mit dem lcd_putc Befehl zu arbeiten war kein Problem. 
Morgen werde ich versuchen die o.g. Adressen an das LCD zu übertragen um 
es korrekt zu initalisieren. Falls es noch immer nicht funktioniert 
werde ich hier mal den geänderten Driver Code hinterlegen. Wäre schön, 
wenn den dann mal einer unter die Lupe nehmen würde :O)

Danke für eure Hilfe!

von Sebastian (Gast)


Lesenswert?

Hallo Leute,

ich danke euch für eure Hilfe. Hab das Problem gelöst. Ich habe aus der 
Library des CCS Compilers den LCD420.C Treiber verwendet und in diesem 
die Initalisierung angepasst. Außerdem, was sehr seltsam ist, dieses 
Flackern des LCDs kam durch die Spannungsversorgung. Im Datenblatt steht 
geschrieben, dass das LCD mit einer Spannung zwischen 3,3 und 5V 
versorgt werden kann. Für die Hintergrundbeleuchtung (Schwarz-Weiß) des 
LCD, darf die Spannung in einem Bereich zwischen 3,0 und 3,6 V liegen. 
Der Strom darf maximal 45mA betragen. Ich habe mich für 30mA und 3,3V 
entschieden.

Rv = (Ub-Uv)/I = (5V-3,3V)/0,03A = 56,67 Ohm.

Für die Einstellung des Kontrasts habe ich ein 10kOhm Potentiometer 
verwendet. Und jetzt das seltsame.....

Wenn ich die Betriebsspannung, die ja eigentlich in einem Bereich 
zwischen 3,3V und 5V liegen darf, auf 5V lege, dann fängt das Display an 
zu flackern und macht nur Driss. Das Display wird direkt an einem 
Festspannungsregler LM7805 betrieben. Wenn ich aber die Spannung etwas 
reduziere, durch einen Vorwiederstand, so dass die Betriebsspannung bei 
ca. 4V liegt, funktioniert alles einwandfrei. Das ist doch ziemlich 
seltsam, oder? Also entweder isn Fehler im Datenblatt oder ich weiß auch 
nicht....Werde mir morgen sicherheitshalber nochmal alles genau 
anschauen....

Viele Grüße

von holger (Gast)


Lesenswert?

>Wenn ich aber die Spannung etwas
>reduziere, durch einen Vorwiederstand, so dass die Betriebsspannung bei
>ca. 4V liegt, funktioniert alles einwandfrei.

Diese Vorgehensweise bereitet mir fast schon körperliche Schmerzen.

>Vorwiederstand

Vorwiderstand

von lol (Gast)


Lesenswert?

> Vor wieder stand

Da steht er wieder rofl :-)

von Sebastian (Gast)


Lesenswert?

Ja gut, dann eben Vorwiderstand, sorry ist schon spät.
Wieso bereitet dir dieses Vorgehen körperliche Schmerzen?

von Sebastian (Gast)


Lesenswert?

Die Ursache für das Problem waren fehlende Stützkondensatoren!!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.