Forum: Mikrocontroller und Digitale Elektronik Hilfe - LCD Probleme WD-C2704


von Stefan Friedrich (Gast)


Angehängte Dateien:

Lesenswert?

hallo

hab ein Problem mit meinem LCD .
Es handelt sich um ein Wintek WD-C2704 von Pollin , 4*27 chars
Mir ist bewusst das ich nicht die Standart routine aus dem tutorial 
verwenden kann und das es im Forum schon Beiträge dazu gibt.
Hab aber leider keinen gefunden der auf mich zutrifft.

Hier das Problem:
Hab den Code so umgeändert das er beide Controller enabled.

Mein System ist ein AtMega32 und das LCD ist so angeschlossen :
RS - PD4
RW - GND
E1 - PD5
E2 - PD6
DB0-3 - NC
DB4 - PD0
DB5 - PD1
DB6 - PD2
DB7 - PD3

Mein Problem ist nun das das LCD zwar irgendwie was anzeigt aber dies 
ändert sich nach jedem Reset und ist nicht das was es eigentlich 
ausgeben soll.
Hab schon einige Variationen bzgl der Enable Routine getestet wie nops 
einfügen oder die 2 controller einzeln zu aktivieren, jedoch nichts 
führte zum Erfolg ...

Was das LCD zb ausgibt ist auf den Bildern zu sehn, der Source ist auch 
angehängt.

Hoffe jemand kann mir helfen.

MFG Stefan

von holger (Gast)


Angehängte Dateien:

Lesenswert?

Versuch mal die HEX-Datei im Anhang

von Stefan Friedrich (Gast)


Angehängte Dateien:

Lesenswert?

Danke für die schnelle Antwort.

das Ergebnis sieht so aus auf meinem Display (siehe Anhang) mit 4 Mhz
. Mit 8 Mhz siehts noch schlimmer aus

MFG Stefan

von holger (Gast)


Lesenswert?

>das Ergebnis sieht so aus auf meinem Display (siehe Anhang) mit 4 Mhz
>. Mit 8 Mhz siehts noch schlimmer aus

Naja, wenigstens kommt der zweite Text komplett an.
Wenn auch an der falschen Stelle:( Irgendwas stimmt da mit
deiner Hardware nicht. Der Source wurde für 16MHz compiliert
und funktioniert so auch mit zwei 2x40 Displays. Timing sollte
für 4 oder 8 MHz also stimmen. Zieh mal das andere Display ab.

von Stefan Friedrich (Gast)


Lesenswert?

Das andere Display dürfte nicht das Problem sein da es nicht am µC 
hängt.
ich vermute das es irgendwie ein Timing Problem ist weil mit meinem 
Prgramm hat er ja auch Test angezeigt manchmal nur nicht da wo er soll.

von Stefan Friedrich (Gast)


Angehängte Dateien:

Lesenswert?

hat keiner eine Lösung für mich ?

hab noch ein wenig weiter experiementiert und die clock frequency auf 1 
Mhz runter sowie 3 nop's vor dem enable und 5 ms pause vor dem lcd init.
Das ganze hat es etwas besser gemacht, das LCD zeigt nun manchmal Test 
an aber scheinbar willkürlich, nach jeden Reset ist was anderes möglich.
Ausserdem kann es doch nicht sein das ich nur mit 1 Mhz arbeiten kann 
oder ?

im Anhang hab ich nochmal die 2 asm files

hoffe jemand kann mir helfen

Stefan

von Muetze1 (Gast)


Lesenswert?

Was mir damals schon aufgefallen sind: Wieviel Meter an Datenkabel und 
Leiterstegen sind zwischen Display und Controller?

von holger (Gast)


Lesenswert?

>Ausserdem kann es doch nicht sein das ich nur mit 1 Mhz arbeiten kann
>oder ?

Du hast irgendwo ein Hardwareproblem. Wie lang sind die Leitungen?

von Stefan Friedrich (Gast)


Lesenswert?

Also insgesamt dürfte die Leitungslänge zwischen Display und µController 
40-50 cm betragen. Sind die Displays da so empfindlich ?

von bix (Gast)


Lesenswert?

Sieht nach einem Timing Problem aufgrund langer Leitungen und ggf. 
parasitärer Kapazitäten aus.

Versuch doch mal in lcd_enable ein paar delays einzubauen und sieh, ob 
es dann besser geht.
1
lcd_enable:
2
       rcall delay50us              ; extra delay
3
       sbi PORTD, 5                 ; Enable high
4
       sbi PORTD, 6
5
       rcall delay50us              ; extra delay
6
       cbi PORTD, 5                 ; Enable wieder low
7
       cbi PORTD, 6
8
       rcall delay50us              ; extra delay
9
       ret

von holger (Gast)


Lesenswert?

>Versuch doch mal in lcd_enable ein paar delays einzubauen und sieh, ob
>es dann besser geht.

Mach mal ne Serienterminierung 10-50 Ohm an E und die Datenleitungen
und sieh dann obs besser geht. Oder schlicht und ergreifend: Mach das
Kabel kürzer;)

von Stefan Friedrich (Gast)


Angehängte Dateien:

Lesenswert?

Danke für euere Antworten, habe das kabel gekürzt und nun scheint es 
stabil zu funktionieren.

Allerdings bin ich nun an einem programmier Problem angekommen.

Wie schaffe ich es die beiden Displayhälften unabhängig von einander 
anzusteuern ?

Mit dem Programm lcd_text_0_asm schaffe ich es das sowohl auf der oberen 
als auch auf der unteren Display hälfte Test 123 ausgegeben wird.
Daraufhin hab ich mir gedanken gemacht und versucht die Routinen so 
umzuschreiben das es sozusagen jeweils 2 daten command init Befehle usw 
gibt.

Allerdings wenn ich dieses Programm (lcd_text.asm) auf den µC spiele 
kommt unsinn dabei raus.

Kann jemand vielleicht mal schauen wo der Fehler liegen koennte bzw wenn 
das Problem mit 2 Controlern schonmal gelöst worden ist mir den Source 
(in ASM ?)
zukommen lassen ?

Danke schonmal

von spess53 (Gast)


Lesenswert?

Hi

>Kann jemand vielleicht mal schauen wo der Fehler liegen koennte bzw wenn
>das Problem mit 2 Controlern schonmal gelöst worden ist mir den Source

Du brauchst einfach zwei LCD-Enable-Routinen. Für jeden Controller 
eine. Mit deiner Routine beschreibst du beide Controller gleichzeitig.

MfG Spess

von Stefan Friedrich (Gast)


Lesenswert?

spess53 schrieb:
> Du brauchst einfach zwei LCD-Enable-Routinen. Für jeden Controller
> eine.

Ja das weiss ich und ich habe versucht das ganze mit dem Programm 
lcd_text.asm versucht zu realisieren, allerdings funktioniert das nicht.
Das Display zeigt dann nur auf einer hälfte Zeichen an.
Finde den Fehler allerdings nicht.

von spess53 (Gast)


Lesenswert?

Hi

Ich sehe in deinen Programmen immer nur ein lcd_enable. E1 und E2 
gleichzeitig anzusprechen funktioniert nur in der LCD-Init. Um etwas auf 
dem LCD auszugeben darfst du je nach Zeile nur E1 oder E2 ansprechen.

MfG Spess

von Stefan Friedrich (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Vielen Dank nochmal an alle die mir geholfen haben.

also ich habe nun das (oder die Probleme) gefunden weswegen das LCD 
nicht das machte was es soll.

1. Leitungen gekürzt (waren wohl doch zu lang)
2. Die übrigen Datenleitungen DB0-DB3 auf GND gelegt
3. Spannungsversorgung statt externes Netzteil Spannungsversorgung vom 
Eval-Board genommen

Ich dachte mir ich poste es mal falls noch jemand ähnliche Probleme mit 
diesem Display hat.

Viele Grüße

Stefan

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.