Forum: Mikrocontroller und Digitale Elektronik HD44780 4-Bit: Störung ergibt falsches Nibble


von Johannes K. (joee)


Lesenswert?

Schönes Wochenende liebe Leute,

ich schlage mich schon eine Weile mit folgendem Problem herum:
- LCD im 4-Bit mode an LED-Treiber (I2C)
- Nicht von mir, aber funktioniert
- Störung (Lötkolben, etc.) verursacht Flanken am EN -> unerwünschte 
Zeichen
- Hardware darf nicht geändert werden :-(

Was mache ich, um fehlerhafte Zeichen schnell (10Hz Abfrage) zu erkennen 
und das Display zu resetten?

LG, Johannes.

von Uwe (de0508)


Lesenswert?

Hallo Johannes,

ich würde den erst mal klarmachen, das hier etwas entstört werden muss.

Was ist mit Lötkolben gemeint ?

RC Glieder am Ausgang zum LCD-Display können helfen, versuchen würde ich 
ca. 1nF - 1kOhm .

Messung und Erfassung der Störung halte ich für eine genaue Analyse auch 
für sehr wichtig.

von Hans (Gast)


Lesenswert?

Welches LCD? Welcher Controller? Was für ein Schaltplan? Wie sieht die 
Störung aus?

von Bastler (Gast)


Lesenswert?

Dagegen gibt es zwei Maßnahmen:
1. Lötkolben entstören (Netzstörung beim Ein-/Ausschalten?)
Beitrag "Re: Lötstation ZD-931 von Pollin"

2. Abblocken der Störungen, bevor sie deinen LCD-Controller verwirren.

von holger (Gast)


Lesenswert?

>Was mache ich, um fehlerhafte Zeichen schnell (10Hz Abfrage) zu erkennen
>und das Display zu resetten?

Gar nichts, schreib alle 1s das ganze Display neu.

von Johannes K. (joee)


Lesenswert?

> Gar nichts, schreib alle 1s das ganze Display neu.

Und wie mache ich das, wenn es sein kann, dass der Kontroller durch ein 
zusätzliches Enable um ein Nibble verrutscht ist?

von Peter D. (peda)


Lesenswert?

Johannes K. schrieb:
> - LCD im 4-Bit mode an LED-Treiber (I2C)

???

Erklär mal genauer, wie ein LED-Treiber ein LCD ansteuern können soll.

Falls Du aber den IO-Expander PCF8574 meinst, der hat nur sehr schwaches 
High an seinen Ausgängen, da gehören dann Pullups ran, zumindest für den 
E-Pin (z.B. 4,7k).


Peter

von Peter D. (peda)


Lesenswert?

Johannes K. schrieb:
> Und wie mache ich das, wenn es sein kann, dass der Kontroller durch ein
> zusätzliches Enable um ein Nibble verrutscht ist?

So, wie es im Datenblatt steht:
3 * 8Bit-Mode setzen und dann wieder in 4Bit-Mode.

Wie lang sind denn die Leitungen zum LCD?
Hast Du auch reichlich 100nF Pillen an jedem VCC-Anschluß?


Peter

von Johannes K. (joee)


Lesenswert?

> Falls Du aber den IO-Expander PCF8574 meinst, der hat nur sehr schwaches
> High an seinen Ausgängen, da gehören dann Pullups ran, zumindest für den
> E-Pin (z.B. 4,7k).

In diesem Fall ist es ein PCA9532 mit 10k Pullup am E-Pin. Dem habe ich 
dann 1n parallel. Ich kann ihn auch noch durch einen 1k ersetzen und 
dann 10n statt 1n nehmen. Verbessert die Fehlerhäufigkeit, behebt aber 
noch nicht das Problem.

>Wie lang sind denn die Leitungen zum LCD?

Im Moment absichtlich 40cm, im Einbau ca, 8cm.

>Hast Du auch reichlich 100nF Pillen an jedem VCC-Anschluß?

Am Display oder am PCA? Ich glaube da sind an beiden 100n, habs grad 
nicht da.

>3 * 8Bit-Mode setzen und dann wieder in 4Bit-Mode.

Genau das wollte ich wissen, vielen Dank. Weißt du auch warum es 3-Mal 
sein muss? Oder meinst du 3 * das 0b0010 Nibble?


Johannes.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Johannes K. schrieb:
> Was mache ich, um fehlerhafte Zeichen schnell (10Hz Abfrage) zu erkennen
> und das Display zu resetten?
Schreib das Display einfach 10 mal pro Sekunde neu...

Dazu machst du dir im uC einen Speicherbereich, der laufend zum Display 
übertragen wird. Und in diesen Speicher schreibst du rein. Dann kannst 
du auch sehr schnell zurücklesen, was da gerade steht.

von Johannes K. (joee)


Lesenswert?

> Schreib das Display einfach 10 mal pro Sekunde neu...

Das funktioniert doch aber nur, wenn die Nibbles stimmen!

> Dazu machst du dir im uC einen Speicherbereich, der laufend zum Display
> übertragen wird. Und in diesen Speicher schreibst du rein. Dann kannst
> du auch sehr schnell zurücklesen, was da gerade steht.

Ich weiß doch, was im Display steht. Ich habs ja selbst zuvor 
reingeschrieben. Entscheidend ist nur, wie ich rausbekomme, ob das 
Display 1 (!) falsches Enable bekommen hat.

von Johannes K. (joee)


Lesenswert?

> Hast Du auch reichlich 100nF Pillen an jedem VCC-Anschluß?

Nur am PCA, am Display ist keine.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Johannes K. schrieb:
> - Hardware darf nicht geändert werden :-(
Was heißt "nicht geändert"?
Du hast doch ein offensichtliches Problem mit der Hardware.
> Entscheidend ist nur, wie ich rausbekomme, ob das
> Display 1 (!) falsches Enable bekommen hat.
Ich würde sagen, das kannst du nicht. Weil du ja das Display nicht mehr 
zuverlässig ansprechen kannst...

Johannes K. schrieb:
> Das funktioniert doch aber nur, wenn die Nibbles stimmen!
Hmmmm.
Richtig, und es macht keinen Spass, jedesmal die Initialisierung 
durchzuführen...
Aber probier doch einfach mal aus, ob du so einen korrupten RAM-Zugriff 
abbrechen kannst, wenn du zwischendurch mal auf die Statusregister 
schreibst. Denn dann könnte der Controller ja draufkommen, dass 
anschliessend ein RAM-Zugriff neu begonnen werden soll.

von Johannes K. (joee)


Lesenswert?

> Aber probier doch einfach mal aus, ob du so einen korrupten RAM-Zugriff
> abbrechen kannst, wenn du zwischendurch mal auf die Statusregister
> schreibst. Denn dann könnte der Controller ja draufkommen, dass
> anschliessend ein RAM-Zugriff neu begonnen werden soll.

Im Prinzip schon. Ich habe aber den Eindruck, dass der Kontroller R/W 
und RS ignoriert, solange die aktuelle Übertragung (2 Nibbles) nicht 
abgeschlossen ist.

Zum Verständnis:
- Die Störungen sind im Einsatz seltenst stark genug, um einen Fehler 
hervor zu rufen.
- Mich stört es trotzdem.
- Ich frage zyklisch die aktuelle (Letzte+1) Schreibposition ab und wenn 
sie nicht stimmt, schreibe ich alles neu.
- Wenn ich jetzt noch den Vorschlag von Peter einbaue, sollte es 
zuverlässig laufen
- (Muss aber grad schnell was anderes machen)

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.