LCD im 4-bit-mode ansteuern

Hallo NG!

Ich möchte mein Ansteuerungsmodul für LCD-Displays (für Visual Basic) mit einer Möglichkeit erweitern, das Display im 4-Bit-Modus zu verwenden. Ich hab es schon einige Male versucht, aber immer ohne Erfolg. Ich schicke folgendes an das Display:

(R/W und RS sind immer auf Low, bei jeder Ausgabe erfolgt natürlich das Bestätigen mit Enable und danach eine Pause von 1ms)

00110000 20ms Warten

00110000

00110000 '4-bit-mode setzen

00100000 'Functionset

00100000 00100000 'Schrift setzen (8x5)

00000000

11000000 'Display an

00000000

00010000 'Display löschen

00000000

01000000 'Entry Mode set

Wisst ihr, was ich da falsch mache? Das Display zeigt immer nur seine zwei Balken an und ist von der ganzen Sache wenig beeindruckt.

MfG

Chris

--
http://www.hobby-elektronik.de.vu
ICQ: 176979879
Achtung: E-Mailadresse ungültig.
Benutzt hobbyelektronik {at} gmx {dot} net
Reply to
Christof Rueß
Loading thread data ...

Im Datenblatt des KS0070 wird hier eine Pause von 1,64ms gefordert. Im Datenblatt des HD44780 ist bei mir keine Zeit angegeben.

Welcher Controller ist auf dem Display?

Die Länge des Enable-Impulses könntest du noch kontrollieren. Bei mir war die Verdrahtung schlecht und ich mußte ein paar NOPs einfügen.

mfg werner

--
VK: Z80 "NDR Klein Computer"
http://www.my-stuff.onlinehome.de
Reply to
Werner Hoch

Hallo Werner!

[Code]

Es ist ein Samsung, also KS0070 und ein Bruder von ihm (16x4)

Ich habe die Pausen zwischen Ehigh -> Elow und Elow-> nächster Befehl testweise auf 20ms gestellt. Hilft leider nichts.

Wenn ich das Display an meine Funkuhr (PIC16F84) anschließe funzt das Display wie eines mit dem HD44780.

MFG

Chris

Reply to
Christof Rueß

Der Kommentar muß 8-bit mode heißen, denn hier ist das Display im

8Bit-Modus. Die dreimalige Wiederholung stellt sicher, daß das unter allen Umständen (auch im 4bit-Modus) so ist, damit beim nächsten Befehl klar ist, ob man beim Low oder High-Nibble des 4bit-Modus ist.

ok. setzt 4bit-Modus

Ungewöhnliche Initialisierung, 22h. Einzeiliges Display mit integrierten Spannungsinverter?! Üblich wäre: 28h => 0010xxxx 1000xxxx für zweizeilig ohne eingeb. Spannungsinverter, oder manche langen einzeiligen 22h => 0010xxxx 0010xxxx für einzeilig mit eingeb. Spannungsinverter 20h => 0010xxxx 0000xxxx für einzeilig ohne eingeb. Spannungsinverter 2Ah => 0010xxxx 1100xxxx für vierzeilig oder lange zweitzeilige ohne eingeb. Spannungsinverter

also Bit 2+3: 1/2/4Zeilig oder 1/2Zeilig+Schriftart Bit 1: Spannungswandler an/aus (wenn vorhanden, sonst undefiniert)

ok.

ok.

ok.

Das einzig Auffällige ist das SystemSet von 22h. Wenn der stimmt oder eine Änderung nix bewirkt, schreib doch mal Deine Routine, die ein Datenbyte ins Steuerregister ausgibt.

Gruß

Tassilo

--
µC Assembler-IDE für AVR, 8051, Z80, 8048 =>
http://www.theeg.de/aside/index.html
================================================================
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Reply to
Tassilo Heeg

Hallo Tassilo!

*Kopfantischkantehau*

Mann, jetzt kann ich nichteinmall mehr ein Datenblatt lesen. Danke, jetzt wird alles initialisiert!

MfG

Chris

--
http://www.hobby-elektronik.de.vu
ICQ: 176979879
Achtung: E-Mailadresse ungültig.
Benutzt hobbyelektronik {at} gmx {dot} net
Reply to
Christof Rueß

In meinem Datenblatt steht 0 0 1 dl 1 0 x x . Das würde ich auch so machen, weil der erste Transfer manchmal als 4 bit(initialisiertes Display) und manchmal als 8 bit (Neustart) erkannt wird. Deshalb schicke ich alles so als ob das Display schon 4 bit läuft.

Aber was meinst du mit RS immer auf Low?

Zum senden von Daten muß RS umgeschaltet werden. Falls das schon machst versuchs mal mit einem 3K Pullup an Enable.

Außerdem verwende ich zum Initialisieren im 4-bit mode diesen Initstring. lcdinitstring[]={0x28,0x28,12,6,1,0}

--
MFG Gernot
Reply to
Gernot Fink

Hallo Gernot!

machen,

Steht in meinem auch. Aber ich bin auf beiden Augen blöd ;)

Weil man RS nur dazu braucht, wenn man Zeichen in den DD-Ram und CG-Ram braucht?

Verwechselt du RS und E?

Hex und Binär vermischt? Das sieht komisch aus!

MfG

Chris

Reply to
Christof Rueß

Nein mit Daten meinte ich Zeichen. Das andere sind für mich Kommandos ;-)

Mein Compiler schluckt das ohne murren. Ich bin halt tippfaul. Ist aber so gemeint wie es dasteht.

--
MFG Gernot
Reply to
Gernot Fink

Hallo Gernot!

Unter Daten verstehe ich beides! Daten sind eben Daten, egal ob Zeichen, Commands oder sonst irgendwas!

Initstring.

Dann machs ich halt bisschen übersichtlicher ;) lcdinitstring[]={0x28,0x28,0x0A,0x06,0x01,0x00}

MfG

Chris

Reply to
Christof Rueß

12=0x0C Ach ja, die Null wird nicht gesendet.
--
MFG Gernot
Reply to
Gernot Fink

Ich hatte C im Kopf, warum ich A geschrieben hab, weiß ich nicht.

Mfg

Chris

Reply to
Christof Rueß

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.