Forum: Mikrocontroller und Digitale Elektronik LCD einfach nur ansteuern.


von Marc Gauger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
Ich hab den Code vom Tutorial genommen und ihn etwas abgeändert. Ich
habe die LCD-Leitungen PB4 bis PB7 beim AT90S2313 an PB4 bis PB7
angeschlossen. RS ist bei PD5 und E bei PD6. Nur leider bekomm ich des
nicht hin, das Display zeigt lediglich die Blöcke in der Ersten zeilen,
aber das tut es ja auch wenn nur der Strom und der Kontrast am Display
ist. der AVR läuft mit 8 Mhz hab aber eigentlich alles angepasst, aber
es tut trotzdem nicht. Könnt ihr mir vielleicht helfen den Fehler zu
finden? Ich bin shcon voll am Verzweifeln.

Gruß Marc

von Marc Gauger (Gast)


Angehängte Dateien:

Lesenswert?

lcd-routines.asm

von Thorsten F. (thorsten)


Lesenswert?

moin moin

sind die anderen datenleitungen am display mit gnd verbunden?
manche displays mögen das, anderen isses z.t. egal.

mfg

von Marc G. (marc_gauger)


Lesenswert?

Ja alle anderen liegen auf GND und an der Verkabelung finde ich auch
keinen Fehler, mein Verdacht ist, dass das Display vielleicht kein
4-Bit-Modus unterstützt.. des am Display regt sich gaar nix :-( Ach
hier noch ein Paar Infos zum Display: 24*2 Ks0063 und Ks0066f00 hab
leider dazu noch keine datenblätter hab irgendwo gelesen dass es
HD44780 Kompatibel sein soll.. Aber am besten besorg ich mir mal die
Datenblätter, aber vielleicht hab ich ja nur einen fehler im Programm
hab leider noch keinen gefunden.

Gruß Marc Gauger

von Thorsten F. (thorsten)


Angehängte Dateien:

Lesenswert?

sind displays von pollin oder?
davon hab ich auch grad 5 hier liegen. wenn vllt. am samstag die
reichelt sachen kommen, kann ich ja mal gucken ob sie bei mir auf 4bit
laufen.

probier doch sonst einfach mal den 8bit modus.

standartblatt von pollin zu dem display. sagt zwar nicht viel aus aber
evtl. hilfts.

mfg

von juergen klauck (Gast)


Lesenswert?

hallo!
hatte auch mal eben vor die ports zu aendern, was dann aber zu einem
laengeren pro wurde.-D
das "problem lag/liegt in der "powerupwait", da du den rs nicht
richtig
angepasst hast
du kannst das anpassen ist aber nicht so einfach weil du schieben und
so musst

zb die zeile
ldi temp1, 0b00101000         ;zeigt das hier mit rs ""gespielt wird

rcall lcd_command

is aber ne tolle uebung

viel spass!!!!!
vieleicht finde ich meine abaenderung ja wieder so zum vergleichen

hoffe ich erzaehle keinen mist

gruss juergen

von Jochen (Gast)


Lesenswert?

lass mal den AVR mit 4 Mhz rennen, oder verlängere die pausen, da die
lcd-routines.asm im Tutorial für 4 Mhz ausgelegt ist.

Mfg Jochen.

von Marc G. (marc_gauger)


Lesenswert?

Ich hab den ASM-Code ja schon angepasst siehe erste zwei Posts. Hab die
Pausen überall verdoppelt aber das Display scheint nicht auf die
initalisierung zu reagieren. Ich habe die Displays bei Ebay ersteigert.
http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=5788490927 Und hab mir
ne kleine Adapterplatte gelötet damit ich das Display ans STK500
anschließen kann und die Platte ist halt auf den 4-Bit-Modus ausgelegt.
Naja mal sehen vielleicht löte ich später noch eine Version mit dem
8-bit-modus.

MFG Marc Gauger

von Gralf (Gast)


Lesenswert?

Hi!

soweit ich weiß, sind HD44780 komp. Display immer in den
Zeilenkombinationen zu 1x8, 1x16, 2x16, 4x8, was effektiv 1 bis 4
Zeilen a 8 Zeichen gleich kommt. Andere Zeilenzahl würde demnach für
mich bedeuten, nicht HD44780 komp., zumindest nicht 100%. Vielleicht
braucht es nur eine andere Init-Routine, wenn es nicht an den Zeiten
liegt, wie ich zuerst vermutete (4 oder 8MHz Quarz)

Gralf

von Marc G. (marc_gauger)


Lesenswert?

Also ich hab des Board mal auf 37,6 khz runtergefahren dann hatte das
Display mehr als genug zeit sich drauf einzustellen aber er macht nix.
Also irgendwas scheint an der Routine falsch zu sein aber ich sehe
darin keine Fehler..

MFG Marc Gauger

von Marc G. (marc_gauger)


Lesenswert?

Ich hab jetzt den Verkäufer auf die Software angesprochen mit der er das
Display zum laufen bekommen hat, damit ich die Routine daraus lesen
kann. Mal sehen ob er mir was schickt.
Gruß Marc

von Thorsten F. (thorsten)


Lesenswert?

moin

ich könnte wetten, dass das displays von pollin sind.

http://www.pollin.de/service/LCD/120142.zip

da gibts anschlusspläne und auch n testprogramm für den parallelport.

mfg

von juergen klauck (Gast)


Lesenswert?

besser waers asm zu verstehen, als mit dem yuppie zu streiten .-D
hab dir doch gezeigt wo das problem ist
good luck

von Marc G. (marc_gauger)


Lesenswert?

Ich hab den Quellcode doch angepasst auch des powerupwait. Versteh nicht
ganz was ich daran noch ändern soll.

MFG Marc Gauger

von Gralf (Gast)


Lesenswert?

Also, die Zeiten sind es wohl nicht. Bleiben nur noch die Steuercodes.
Ohne passendes Datenblatt kann man nur raten welche Sequenz und welche
Befehle nötig sind.

Gralf

von Marc G. (marc_gauger)


Lesenswert?

Ihr hattet recht also das Display ist ein L2432 und vermutlich von
Pollin und mit der Oben Stehenden Software hat das Display auch
einwandfrei funktioniert. Nun hab ich leider kein Programm gefunden
dass den LPT-Port überwacht deshalb werde ich mich mal an den Quellcode
des Programm ran machen. Hab zwar noch nie mit Delphi programmiert aber
mal sehen ob ich dennoch was daraus lesen kann, eventuell werde ich
versuchen die nächten Tage einen neuanfang mit der LCD-Routine
versuchen werde einfach nochmal den Code vom Tutorial umschreiben.

Vielen Dank an alle.
Gruß Marc

von Jadeclaw (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe mir das Ganze mal angesehen,
grundsätzlich sollte es so funktionieren.
Der KS0066 ist komplett kompatibel zum HD44780 und
ich bekomme beide Typen mit denselben Werten ans laufen.
Ich initialisiere mit folgenden Werten:
Warte 20ms
0x03
Warte 10ms
0x03
warte 64us
0x03
warte 2ms
0x02    ;4-Bit mode
warte 64us
0x20    ;0x20 für einzeilige Displays, 0x28 für mehrzeilige Displays.
warte 64us
0x08    ;Display off
warte 64us
0x0c    ;Display on
warte 64us
0x06    ;Set Entrymode
warte 64us
0x14    ;Cursor/Display Shift
warte 64us
Und raus...
Das Ergebnis ist Cursor aus, Cursor wird bewegt, Schreibposition wird
automatisch erhöht.

Ich habe mal das Datasheet vom KS0066 mal mit angehängt.

Gruss
Jadeclaw

von Andi K. (Gast)


Lesenswert?

Wobei man ein KS0066 wesentlich kürzer, wie im Datenblatt beschrieben,
initialisieren kann:

200mS warten
0x22 mit der ganz normalen Ausgabe. Dabei wird 2x 0x02 augegeben für
den 4 Bit-Mode.
50µS warten
0x28 für nochmal 4 Bit-Mode und 2 Line-Mode oder
0x20 4 Bit-Mode und 1 Line-Mode
50µS warten
0x0E Display on, Corsur on und Blink off
50µS warten
0x06 increment mode und entire shift off
50µS warten

Das wars.

Möchte echt mal wissen, was das mit den 3x 0x03 soll. Vielleicht haben
das nur die original HD44780 nötig welches ich noch nicht hatte.

MfG
Andi

von Marc G. (marc_gauger)


Lesenswert?

@ Andi K.
würde am Anfang nicht ein 0x02 reichen anstatt eines 0x22?,also laut
datenplatt, denn so wie du es beschrieben hast, bekommt das Display ja
dreimal hintereinander ein 0010. Braucht aber doch laut Datenblatt nur
2 oder? Oder würde die 0000 dann am anfang stören? Aber ich werde das
einfach mal heute Mittag ausprobieren :-)

Sorry für meine Fragerei, aber das Verwirrt mich doch etwas.

Gruß Marc Guager

von Andi K. (Gast)


Lesenswert?

Ich habe das Anfangs exakt nach Datenblatt ausprobiert, also dierekt nur
die ersten 3 Nibbles ausgegeben was nicht geklappt hat.
Bis ich darauf gekommen bin, das die Nibbles doch eigentlich immer
paarweise ausgegeben werden sollten wegen high- und low-Nibble bzw.
immer ein vollständiges Byte.
Und 3 Nibbles sind 1,5 Bytes was ja dann ein Durcheinander hervorruft.
Also einfach die ersten 2 Nibbles mit 0x2 in 1 Byte zusammengefast und
mit der normalen Ausgabefunktion (z. B. lcd_command) 0x22 ausgeben was
dann das selbe macht und als 2. Byte dann nochmal 4 Bit-Mode mit dem 2
Line-Mode zusammen ausgeben (0x28).
Entweder, es ist ein Fehler im Datenblatt das man im ersten Block 1
Nibble vergessen hat, oder ich bin auf was neues gekommen.
Zumindest klappt es prima.

MfG
Andi

von Marc Gauger (Gast)


Lesenswert?

Vielen Dank nochmal für eure Hilfe aber das Display will trotzdem nicht
funktionieren, ich habe jetzt alles so angeschlossen wie im Tutorial,
und habe auch einen ATMEGA 8 verwendet und den Code unverändert
draufgespielt und die Freq angepasst. Jedoch ohne erfolg, habe dann
auch beide init-Routinen die hier vorgestellt wurden ausprobiert,
jedoch auch ihne Erfolg. Ich habe das Display bisher nur über den
LPT-Prt zum laufen bekommen und ich denke mal der steuert das Display
im 8-bit-Modus an. Jetzt die Frage, kann es sein, dass das Display nur
im 8-bit-Modus funktioniert? Oder, dass es einen Defekt hat, dass es
nur im 8-bit-Modus funktioniert?

mfg Marc Gauger

von Andi K. (Gast)


Lesenswert?

An welchen Pin des Mega8 hast Du welche LCD-Leitung angesteuert?
Sind DB0 bis DB4 and GND?
Wie sieht es mit der Kontrastspannung aus?

MfG
Andi

von Marc Gauger (Gast)


Lesenswert?

Kontrastleitung ist an GND sowie DB0 bis DB3. Der Kontrast stimmt den
wenn ich dD am LPT anschließe funktionierts ja. Aber ich will es ja mit
einerm AVR betreiben und das im 4-bit Modus.

Kann mir vielleicht jemand der das L2432 mal zum laufen bekommen hat
den Code schicken?

Der Code vom Tutorial funktioniert nicht und ich weiß auch nicht weiter
hab das ganze jetzt schon drei Mal gelötet und an das STK500
angeschlossen und dennoch kein Erfolg gehabt.

Gruß Marc Gauger

von Andi K. (Gast)


Lesenswert?

Was ist nun mit DB4 bis DB7, RS und Enable?
Wo ist was am AVR angeschlossen?
Wie sieht Deine modifizierte Software aus?

MfG
Andi

von Marc G. (marc_gauger)


Lesenswert?

Also meine erste Version ist bei den ersten beiden Post im Anhang und im
ersten Post steht wie ich es angeshclossen habe. mitlerweile bin ich
aber so verzweifelt, dass ich eine neue Schaltung mit dem ATMEGA 8
aufgebaut habe und den Orignalquellcode verwendet habe. Habe auch alles
so angeschlossen wie es im Tutorial beschrieben wurde nun hab ich aber
den verdacht dass das L2432 eine extra initroutine benötigt, ich wäre
also sehr froh über Code mit dem der L2432 funktioniert, wenn ich einen
funktionierenden Code habe kann ich ihn für meine Wünsche umschreiben.

Gruß Marc Gauger

von Jadeclaw (Gast)


Angehängte Dateien:

Lesenswert?

@Andi: Das mit den 0x03 stammt aus dem Hitachi-Datenblatt,
Optrex empfiehlt es für seine Module ebenfalls.
Und da ich damit bis jetzt jedes Display dieser Machart anbekommen
habe,
habe ich es einfach dringelassen.

Das ein 44780-kompatibles Display aber den 4-Bit Modus nicht kann,
verwundert mich dann doch, aber wer weiss, wo Pollin das Zeug herhat.
;)

Gruss
Jadeclaw.

PS: Ich habe mal mein LCD-Includefile hier mal drangehängt,
vielleicht hilft es weiter ( ebenfalls ATmega8 ).
Display muss allerdings umgelötet werden, da ich alle Pinne auf einen
Port gelegt habe - ist halt einfacher zu programmieren.
Belegung und Aufruf im Dateikopf.

von Marc G. (marc_gauger)


Lesenswert?

Ich kann den Anhang leider nicht öffnen kannst ihn nochmal Posten?

von Andi K. (Gast)


Lesenswert?

Genau das ist es:

1 Vss GND
2 Vcc 5V
3 Vee GND oder Poti (siehe oben)
4 RS PD4 am AVR
5 RW GND
6 E PD5 am AVR
7 DB0 GND
8 DB1 GND
9 DB2 GND
10 DB3 GND
11 DB4 PD0 am AVR
12 DB5 PD1 am AVR
13 DB6 PD2 am AVR
14 DB7 PD3 am AVR

"Ich habe die LCD-Leitungen PB4 bis PB7 beim AT90S2313 an PB4 bis PB7
angeschlossen."

Die LCD-Leitungen heißen DB4 bis DB7 und gehören an PD0 bis PD3
angeschlossen.
RS gehört an PD4 und E an PD5!

Weis leider immer noch nicht, wie man hier FETT schreiben kann um es
Dir hervorzuheben.
Falls in Deinem ersten Post nur Tipp- oder Denkfehler beim schreiben
waren, vergiss den letzten Satz.

MfG
Andi

von Marc G. (marc_gauger)


Lesenswert?

Sorry hatte mich wirklich verschriben die Datenleitungen vom LCD heißen
DB4 bis DB7. Aber sonst stimmt alles in meinem Posting. Also die
Pinbelegung ist Absicht: Ich verwende bereits PB0 bis PB3 und auch PD0
bis PB4 Daher hab ich ja nur noch PD5 und PD6 fürs LCD. Aber
mitlerweile will ich ja nur das LCD zum laufen bekommen und habe dazu
nen neuen ATMEGA8 verwendet und die Schaltung und Code ausm Tutorial
und hab bei meinem zweiten Test Projekt alles am PortB drangehängt wie
es ja auch im Tutorial gemacht wurde.

@Jadeclaw kannst du deinen Anhang nochmals posten?

Gruß Marc Gauger

von Andi K. (Gast)


Lesenswert?

Oh man, dann erzähle jetzt konkret, wo Du alle LCD-Leitungen am AVR
angeschlossen hast und zeige Deinen geänderten Code (lcd_data,
lcd_command etc.).
Keine Ahnung, wie gut Du ASM kannst, aber für eine komplett andere
Pinbelegung mußt Du den Code komplett umschreiben, nicht nur ändern.
Vermute auch, das im Code ein Fehler ist.

MfG
Andi

von Marc G. (marc_gauger)


Lesenswert?

Also habe 3. Sachen gebaut:

1.
AVR: AT90S1323 Pinbelegung:
AVr -> LCD
PB4 -> DB4
PB5 -> DB5
PB6 -> DB6
PB7 -> DB7

PD5 -> RS
PD6 -> E

Der Code ist im ersten und zweiten Posting.

2. Nach http://www.pollin.de/service/LCD/120142.zip aufgebaut und am
LPT-Port angeschlossen + Software funktioniert das LCD.
Jedoch wird das LCD im 8-bit-Modus angesprochen und nicht im
4-bit-Modus.

3.
AVR: ATMEGA8
Angeschlossen wie Im Tutorial
Code vom Tutorial

Ergebnis = NIX das Display wird nichtmal initalisiert.

Hat jemand das L2432 schonmal im 4-bit-Modus zum laufen bekommen? Ich
bekomms nut im 8-bit-Modus am LPT-Port zum laufen 8-Bit am AVr hab ich
noch nicht probiert (hab auch keinen Code dazu). Könnte mir jemand den
Code dann schicken?

Und zum Thema Assembler, nein ich kann nicht wirklich Assembler bin
noch Schüler und muss mir des irgendwie selber beibringen. Hab mir auch
schon was mit DMX geschrieben udn eine kleine Routine um zwei Taster zu
entprellen und das hat funktioniert. nur Das LCD bekomm ich nicht zum
laufen, hab schon ein anderes LCD des gleichen Typens ausprobiert geht
auch nicht.

Gruß Marc Gauger

von Philipp Burch (Gast)


Lesenswert?

Hi,

hab' deinen Code jetzt nich angeguckt, aber guck mal, ob du das
[AVRASM]
swap
[AVRASM]
auch wirklich verschoben hast, sonst verden die Nibbles verdreht
übertragen.

Aber hast du mal probiert, DB0 - DB3 offenzulassen? Ich hatte sie bei
mir auch eine Weile an GND angeschlossen und nix ging. Dann hab' ich
sie mal offengelassen und es klappte. kA warum.

Und was ist mit der R/W-Leitung? Hast du die auch wirklich an GND und
nicht an Vcc?

von Andi K. (Gast)


Lesenswert?

Überleg mal, ob Du wirklich DB4 bis DB7 an MOSI, SCK, XTAL1 und XTAL2
hängen willst, wenn Du das Dingens programmieren und mit einem externen
Takt betreiben willst.
In lcd_data setzt Du für jedes Nibble RS auf high und low, also jeweils
2 mal. 1 mal high vor dem ersten Nibble und ein mal low vor dem RET
reicht. Auch 50µS zu warten vor RS = low muss (darf?) nicht sein.

MfG
Andi

von Jadeclaw (Gast)


Angehängte Dateien:

Lesenswert?

Hmm, weiss nicht, warum die Forumsoft das nicht gefressen hat...

Zum Thema DB0-3 offenlassen: Der LCD-Chip hat serienmässig
pull-up-Widerstände drin, equivalent 70kOhm.
An Masse legen ist hier nicht nötig.
<Vermutung>
Denkbar wäre, dass der 4-Bit-Modus nicht angeht, wenn was an diesen
Datenleitungen dranhängt.
</Vermutung>

Gruss
Jadeclaw.

von Jadeclaw (Gast)


Angehängte Dateien:

Lesenswert?

.INC mag er wohl nicht, probieren wir es mal mit .TXT
Hinterher in LCD.inc umbenennen und ins Includeverzeichnis werfen.

Gruss
Jadeclaw.

von Marc G. (marc_gauger)


Lesenswert?

Ich hab DB0 bis DB3 jetzt offen gelassen aber auch ohne Erflog (mit dem
Code ausm Tutorial). Werde mir später mal die inc genauers anschaun.

Gruß Marc Gauger

von Thorsten F. (thorsten)


Angehängte Dateien:

Lesenswert?

Nabend

zwar nicht ganz was du erriechen willst, aber immerhin laufen die
displays bei mir im 8 bit modus. 4bit hab ich nicht ausprobiert, weil
ich mir die idee von peter dannegger mit dem hc164 schieberegister
geklaut hab :)

damit das ohne schieberegister läuft müsstest du nur die "rcall
shiftout" mit dem schreibbefehl zum port ersetzen..

is wie gesagt nur die hälfte von dem was du erreichen wolltest, aber
immerhin gehn die display mit 8bit auch am µC

mfg

von Marc G. (marc_gauger)


Lesenswert?

Vielen Dank
Genau sowas hab ich mir auch überlegt einfach ein Schieberegister zu
verwenden. :-) Werd mir den Code mal anschaun :-)

Gruß Marc Gauger

von Marc G. (marc_gauger)


Lesenswert?

@ Thorsten Fritzke (Thorsten)

Dein Code hat bei mir wunderbar funktioniert, hab die Schaltung nun mit
einem Schieberegister aufgebaut, werde jetzt testen ob ich nicht doch
den 4-bit-Modus zum laufen bekomme.

@All
Nochmals vielen Dank für alles :-)

Gruß Marc

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.