LCD und ATMega8 - Fehlerhafte Ansteuerung

  • Thread starter Christoph Dittmann
  • Start date
C

Christoph Dittmann

Guest
Hallo,

ich habe mir vor ein paar Tagen ein LCD gekauft, das "WINTEK
WD-C2704M-1HNN" von Pollin (4*27 Zeichen, 2 HD44780-kompatible Controller).
Das würde ich gerne mit einem ATMega 8L ansteuern.

Mit einer auf dem Steckboard aufgebauten Schaltung konnte ich das LCD
einwandfrei im 4-Bit-Modus ansteuern, auch das Busy-Flag des LCDs wurde
korrekt abgefragt.

Dann habe ich mir eine Lochraster-Platine gelötet, mit dem ATMega8 in
der Mitte, und dessen PORTD mit allen 8 Pins an einen Stecker gelegt.
PORTD liegt darüber über eine kleine Adapterplatine am LCD.
Der Adapter macht nichts anderes als D0-D3 des LCDs auf GND zu legen
(4-Bit-Modus) und eine Kontrastspannung zu erzeugen.

Naja, und da fingen die Probleme an. Meine LCD-Routinen, die auf dem
Steckboard tadellos funktionierten, hängten sich beim Warten auf das
Busy-Flag auf (BF wollte manchmal nicht auf Low gehen).

Ich habe den Busy-Flag-Test dann wieder durch eine genügend lange
Warteschleife (>10ms) ersetzt. Dann funktionierte es gelegentlich, das
LCD zu initialisieren und Zeichen anzuzeigen. Allerdings wurden
teilweise Zeichen verschluckt, ausgetauscht oder die Cursor-Position
verschob sich unerwartet. Häufig aber wurde der zweite Controller (der
für die unteren beiden Zeilen) gar nicht zu Ende initialisiert. Wenn ich
die Initialisierungsreihenfolge im Code umdrehe, sodass ich zuerst den
unteren Controller aktiviere, wird der obere manchmal nicht vollständig
initialisiert.

Ich habe jede Daten- und Steuer-Leitung mehrmals durchgemessen (vom Pin
des uC bis zum Lötpad am LCD), alle Leitungen sind korrekt verbunden,
keine einzige Querverbindung, kein Wackelkontakt. D0-3 des LCDs liegen
auch auf GND, das LCD bekommt dieselben 5V vom 7805 wie der ATMega.
Die Steuerleitungen sind RS, R/W, E1 und E2 (E vom ersten bzw. zweiten
Controller). Die Datenleitungen (D4-D7) liegen auf PORTD4-7.

Die Software ist genau dieselbe wie auf dem Steckboard (mit AVR-Studio
in Assembler geschrieben, inzwischen habe ich sie aber auch schon nach C
portiert).


Ich vermute fast, dass es am Kabel liegt, weil ich es mir anders nicht
erklären kann. Könnte die Länge entscheidend sein?

===========================***** (8-polig, 20cm) ATMega8 (PORTD)
LCD ===========================*****====================**********
(15-polig Flachbandkabel, Adapter (Lochraster,
1m) D0-3 -> GND,
VCC, GND, Kontrast)

Oder woran könnte es sonst noch liegen, dass das LCD nur noch sporadisch
funktioniert, seit ich den AVR auf Lochraster habe?

mfg,
Christoph
 
Christoph Dittmann wrote:

[...]
Ich vermute fast, dass es am Kabel liegt, weil ich es mir anders nicht
erklären kann. Könnte die Länge entscheidend sein?

===========================***** (8-polig, 20cm) ATMega8 (PORTD)
LCD ===========================*****====================**********
(15-polig Flachbandkabel, Adapter (Lochraster,
1m) D0-3 -> GND,
VCC, GND, Kontrast)
Meintest du wirklich 1 Meter Kabel? Das erscheint mit reichlich viel, vor
allem, weil du typische Symptome der verzerrten Signale beschreibst. Mach
mal max 10 cm und prüfe, ob das sich signifikant ändert.

Robert
 
R.Freitag wrote:

Christoph Dittmann wrote:
[1m Kabel]

Meintest du wirklich 1 Meter Kabel? Das erscheint mit reichlich viel,
vor allem, weil du typische Symptome der verzerrten Signale
beschreibst. Mach mal max 10 cm und prüfe, ob das sich signifikant
ändert.
Vielen Dank.
Ich meinte wirklich 1 Meter Kabel. Ich hab das mal auf 10cm verkürzt
(schade um das schöne Kabel), aber jetzt funktioniert es. Lag wohl
tatsächlich an verzerrten Signalen.

Was für (unerwünschte) physikalische Auswirkungen hat ein so langes
Kabel eigentlich, ist das Induktion?
Und was für Kabeltypen sind für LCDs besser geeignet als Flachbandkabel?

mfg,
Christoph
 
Christoph Dittmann wrote:

Vielen Dank.
Ich meinte wirklich 1 Meter Kabel. Ich hab das mal auf 10cm verkürzt
(schade um das schöne Kabel), aber jetzt funktioniert es. Lag wohl
tatsächlich an verzerrten Signalen.

Was für (unerwünschte) physikalische Auswirkungen hat ein so langes
Kabel eigentlich, ist das Induktion?
Und was für Kabeltypen sind für LCDs besser geeignet als Flachbandkabel?
Ein längeres Kabel ist eine Kombination aus L und C, steile Taktflanken
werden dadurch verschliffen. Ein Rechteck wird dadurch zum Trapez. Da die
Anstiegsgeschwindigkeit der Flanken bestimmte Mindestwerte haben muss,
kollidiert das mitunter.

Robert
 
R.Freitag wrote:

Ein längeres Kabel ist eine Kombination aus L und C, steile Taktflanken
werden dadurch verschliffen. Ein Rechteck wird dadurch zum Trapez. Da die
Anstiegsgeschwindigkeit der Flanken bestimmte Mindestwerte haben muss,
kollidiert das mitunter.
Das finde ich interessant. Wie verhält sich das denn, wenn man ein
doppelt so "breiten" Bus nimmt, und jedes zweite Signal auf GND legt
(wie bei 80pol. IDE-Bus)? Treten dann die Symptome nicht mehr auf?

Viele Grüße
Johannes
 
In article <chi3h4$j1t$1@online.de>,
Christoph Dittmann <cd@dittmann-arheilgen.de> writes:

Was für (unerwünschte) physikalische Auswirkungen hat ein so langes
Kabel eigentlich, ist das Induktion?
Und was für Kabeltypen sind für LCDs besser geeignet als Flachbandkabel?
Es sind eigentlich alle Dreckeffekte zusammen. Du hast die Induktivität
des Kabels und eine entsprechenden Kapazität dann, bei dir aber eher
unerheblich, einen ohmschen Widerstand und dielektrische Verlusten.

Ich glaube aber nicht das du damit wirklich Probleme hattest weil
die Taktrate beim LCD eher gering ist und das Gerät bzgl. der
Flankensteilheit wohl auch eher tollerant.

Ich könnte mir gut vorstellen das du Probleme mit induktiver
oder kapazitiver Einkopplung hast oder auch die Stromversorgung
des LCD nich ausreichend entkoppelt ist.

Du könntest probierern die Anschlüsse des LCD mit ein paar Kiloohm
zu belasten und einen zusätzlichen Kondensator der Stromversorgung
spendieren.

Zur Not könnte man auch nur jede 2. Ader benutzen und die
daziwschenliegenden auf GND schalten. Ich weis aber nicht ob
man das besser auf beiden Seiten macht oder nur auf
einer.

Tschüss
Martin L.
 
Christoph Dittmann wrote:

R.Freitag wrote:

Christoph Dittmann wrote:

[1m Kabel]


Meintest du wirklich 1 Meter Kabel? Das erscheint mit reichlich viel,
vor allem, weil du typische Symptome der verzerrten Signale
beschreibst. Mach mal max 10 cm und prüfe, ob das sich signifikant
ändert.


Vielen Dank.
Ich meinte wirklich 1 Meter Kabel. Ich hab das mal auf 10cm verkürzt
(schade um das schöne Kabel), aber jetzt funktioniert es. Lag wohl
tatsächlich an verzerrten Signalen.
Ich weiß von meinem Cousin, dass er ein LCD über mehrere Meter betreibt.
Wenn ich mich recht entsinne wars ein geschirmtes Kabel. Er hatte aber
auch Probleme, die er nur durch ausprobieren lösen konnte (IIRC
Abschrimung nur auf einer Seite mit Gnd verbunden). Bei Interesse Frage
ich bei ihm nochmal nach, wie er das gemacht hat.

Gruß
Stefan
 
Martin Laabs wrote:

Christoph Dittmann <cd@dittmann-arheilgen.de> writes:

Was für (unerwünschte) physikalische Auswirkungen hat ein so langes
Kabel eigentlich, ist das Induktion?

[...]

Du könntest probierern die Anschlüsse des LCD mit ein paar Kiloohm
zu belasten und einen zusätzlichen Kondensator der Stromversorgung
spendieren.
Was meinst du mit belasten, Widerstände in Reihe mit der Leitung oder
gegen Masse? Was bewirken die?

Der Kondensator in der Stromversorgung ist mir klar. Wobei der leider
20cm vom LCD entfernt ist, weil ich den nicht auf dem LCD festlöten
kann. Meinst du, ich sollte noch einen 100nF in 10cm Abstand vom LCD
einsetzen (auf die Adapterplatine)?

Zur Not könnte man auch nur jede 2. Ader benutzen und die
daziwschenliegenden auf GND schalten. Ich weis aber nicht ob
man das besser auf beiden Seiten macht oder nur auf
einer.
Das kommt bei meinem derzeitigen Kabel leider nicht in Frage (zu wenig
Adern), außerdem ist der Platz zum Löten auf dem LCD zu beschränkt.

mfg,
Christoph
 
In article <chi88p$qr9$1@online.de>,
Christoph Dittmann <cd@dittmann-arheilgen.de> writes:
Martin Laabs wrote:
Christoph Dittmann <cd@dittmann-arheilgen.de> writes:

Du könntest probierern die Anschlüsse des LCD mit ein paar Kiloohm
zu belasten und einen zusätzlichen Kondensator der Stromversorgung
spendieren.
Was meinst du mit belasten, Widerstände in Reihe mit der Leitung oder
gegen Masse? Was bewirken die?
Also stell dir vor ein Strom fließt durch durch eine Ader mit einer
steilen Flanke. Dieser erzeugt ein Magnetfeld welches sich entsprechend
schnell ändert.
Eine andere Ader bildet mit der GND Leitung eine relativ große
Leiterschleife in der ein Strom I=L*dI/dt induziert wird.
L ist zwar klein aber dI/dt groß. Die LCD-Anschlüsse sind CMOS
und damit sehr hochohmig so das ein kleiner Strom ausreicht um eine
signifikate Spannung zu erzeugen. Diese führen dann zu einem Signal
was du gar nicht gesendet hast.

Wenn du jetzt jeden Pin über einen einzelnen Widerstand "erdest"
reicht der Strom nicht mehr aus um eine ausreichende Spannung
zu erzeugen die die Schaltschwelle des LCD übersteigt. Wie klein du die
Widerstände machen kannst ist von der Treiberleistung und der
Eigeninduktivität des Kabels abhängig. Aber ich würde es mal mit
10kOhm versuchen. (Gmein ist es nämlich das wenn der Widerstand zu
klein ist auch ein höherer Strom fließt und die Induktion entsprechend
stärker wird ...)


Der Kondensator in der Stromversorgung ist mir klar. Wobei der leider
20cm vom LCD entfernt ist, weil ich den nicht auf dem LCD festlöten
kann.
Warum? Die LCD die ich kenne haben kleine Pads und da kann man doch
einen axialen Kondensator drüber löten. Entsprechend mit den
Widerständen für die kritischen Leitungen.

Meinst du, ich sollte noch einen 100nF in 10cm Abstand vom LCD
einsetzen (auf die Adapterplatine)?
Wenn du eine Adapterplatine in 10cm Abstand hast wäre es besser als
keinen. Aber wenn du das Kabel von Adapterplatine zu LCD wieder auf
1m verlängerst macht es natürlich weniger Sinn.


Das kommt bei meinem derzeitigen Kabel leider nicht in Frage (zu wenig
Adern), außerdem ist der Platz zum Löten auf dem LCD zu beschränkt.
Evt. kannst du aber die Getakteten Leitungen etwas auseinadern
legen. Also GND und VCC dazwischen. Ist aber nicht wirklich schön
weil man dann beim LCD viele sich kreuzende Leitungen hat ... das
schreit gerade zu nach Lötfehlern.

Tschüss
Martin L.
 
In article <chi3h4$j1t$1@online.de>,
Christoph Dittmann <cd@dittmann-arheilgen.de> writes:
Ich meinte wirklich 1 Meter Kabel. Ich hab das mal auf 10cm verkürzt
(schade um das schöne Kabel), aber jetzt funktioniert es. Lag wohl
tatsächlich an verzerrten Signalen.

Was für (unerwünschte) physikalische Auswirkungen hat ein so langes
Kabel eigentlich, ist das Induktion?
Und was für Kabeltypen sind für LCDs besser geeignet als Flachbandkabel?
Der Enable Eingang ist besonders empfindlich auf spikes und unsaubere
Signale. Du kannst es ja einmal mit 1 nF direkt beim Display auf dieser
Leitung versuchen.


--
MFG Gernot
 
"Johannes Bauer" <dfnsonfsduifb@gmx.de> schrieb im Newsbeitrag

Ein längeres Kabel ist eine Kombination aus L und C, steile Taktflanken
werden dadurch verschliffen. Ein Rechteck wird dadurch zum Trapez. Da
die
Anstiegsgeschwindigkeit der Flanken bestimmte Mindestwerte haben muss,
kollidiert das mitunter.

Das finde ich interessant. Wie verhält sich das denn, wenn man ein
doppelt so "breiten" Bus nimmt, und jedes zweite Signal auf GND legt
(wie bei 80pol. IDE-Bus)? Treten dann die Symptome nicht mehr auf?
theoretisch Ja, praktisch Nein. Dein Fehler liegt woanders. Man bedenke,
dass auch ohne 80pol. IDE-Kabel da Daten mit 33Mbyte/s drübergehen. Gewusst
wie.
100nF am LCD (und nicht 10cm weit weg, direkt am Lötanschluss!!)sind da
schonmal ein guter Anfang.

MfG
Falk
 
"Gernot Fink" <G.Fink@gmx.net> schrieb im Newsbeitrag
news:2q3o6cFquresU1@uni-berlin.de...

Der Enable Eingang ist besonders empfindlich auf spikes und unsaubere
Signale. Du kannst es ja einmal mit 1 nF direkt beim Display auf dieser
Leitung versuchen.
Warum so ein Bastel-Murks? Nimm nen 74HC14, der macht aus Gurkensignalen ein
sauberes ENABLE. Dann kannst du das Ding über 10m Klingeldraht ansteuern.
Aber bitte RC am Eingang (100 Ohm, 1nF) nicht vergessen, und natürlich 100nF
zwischen VCC/GND.

MfG
Falk
 
Gernot Fink schrieb:
Der Enable Eingang ist besonders empfindlich auf spikes und unsaubere
Signale. Du kannst es ja einmal mit 1 nF direkt beim Display auf dieser
Leitung versuchen.

Hallo,

das taugt nichts, denn der Enable Eingang will auch Flanken mit
ordentlicher Steilheit sehen.

Bye
 

Welcome to EDABoard.com

Sponsor

Back
Top