LCD im 4-bit-mode ansteuern

Sep 28, 2003 10 Replies

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

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

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

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/

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

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

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

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

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

12=0x0C Ach ja, die Null wird nicht gesendet.
MFG Gernot

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

Mfg

Chris

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required