www.mikrocontroller.net

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


Autor: Stefan Friedrich (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Versuch mal die HEX-Datei im Anhang

Autor: Stefan Friedrich (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Friedrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Friedrich (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Muetze1 (Gast)
Datum:

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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Friedrich (Gast)
Datum:

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

Autor: bix (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
lcd_enable:
       rcall delay50us              ; extra delay
       sbi PORTD, 5                 ; Enable high
       sbi PORTD, 6
       rcall delay50us              ; extra delay
       cbi PORTD, 5                 ; Enable wieder low
       cbi PORTD, 6
       rcall delay50us              ; extra delay
       ret

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;)

Autor: Stefan Friedrich (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Friedrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Friedrich (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.