PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Störungen bei langem Kabel zum LCD



Bääääär
26.12.2008, 09:46
Hallihallo!

Wie im Thema genannt, habe ich Probleme mit einem ATMega32 und einem ca. 80cm langem Flachbandkabel zu einem blauen 16*2 LCD von Reichelt.
Schalte ich den Strom ein, fährt der uC hoch und versucht, das LCD zu initialisieren. Dabei hängt er in einer Warteschleife fest, wie ich nach umfangreichem Debuggen feststellte. Diese Schleife sollte die Rückmeldung des Displays abwarten. Fahre ich nun mit dem Finger über die Kontakte auf der Platine des LCD (was mir mal durch Zufall passiert ist) so scheint dies den Pegel der abgefragten Leitung gerade so zu beeinflussen, dass es dem AVR reicht. Das Display zeigt dann meine Ausgaben an. Allerdings erscheinen die Zeichen sehr langsam der Reihe nach, ähnlich dem Schreibmaschineneffekt bei PowerPoint.
Bei einem Kabel von 10cm Länge gibt es keine Probleme.
Das Display wird komplett über das Kabel versorgt. Alle sieben Datenleitungen für den 4Bit Modus, Power, Masse und die Kontrastspannung bezieht es über dieses Kabel. Die Spannungsversorgung des gesammten Aufbaus läuft über einen Festspannungsregler.

Das Problem scheinen folglich Störungen zu sein, derer ich aber dank mangelndem Fachwissen nicht Herr werde. Ich habe schonmal an sämtliche Datenleitungen auf LCD-Seite einen größeren Widerstand gen Masse gehängt, in der Hoffnung, damit einem kleinen Stromfluss zu erzeugen, der dann die Störungen "schluckt".

Das Kabel muss so lang sein, ich kann es leider nicht kürzen. Nun habe ich schon von diversen Möglichkeiten gelesen, wie man Störungen beseitigen kann, weiß aber nicht, welche ich hier anwenden sollte. Serienwiderstände? Kapazitäten? Wenn ja, auf welcher Seite und wie groß?

Vielen Dank für Tipps,
Bääääär

PS: Ich hoffe, mit dem Beitrag im richtigen Forum gelandet zu sein... =c)

[Edit] Kabellänge korrigiert

Easter
26.12.2008, 10:24
Das Display fängt sich warscheinlich Störungen ein.
Versuch mal einen IC4584 oder IC4093 an den Datenpins, direkt am Display.

Bääääär
26.12.2008, 10:26
Hmmm, hab ich nich da. Kann ich sonst noch was versuchen?

[Edit] Abgesehen davon liegt das Problem ja nicht bei den Datenleitungen sondern bei derjenigen, die die Bereitschaft des LCD meldet

Hubert.G
26.12.2008, 10:49
Die busy-Abfrage geschieht auch über die Datenleitungen.
Wenn du aber nicht feststellen kannst ob die Störungen vom Kontroller oder vom LCD selbst sind ist es schwer die Störungen in den Griff zu bekommen.
Am besten mit den Grundsätzlichen Sachen beginnen.
Genügend Abblockkondensatoren vorhanden, 100Ohm Widerstände in die Daten und Steuerleitungen einfügen wären so die ersten Maßnahmen.

McJenso
26.12.2008, 10:50
Hallo,

hast du mal ein Datenblatt zum Display. Welcher Pin soll das sein? Wenn du das Busy Flag meinst, das kommt mit als Antwort über die Datenleitungen.

Gruß

Jens

Bääääär
26.12.2008, 12:31
Hallihallo!

Mit Abblockkondensatoren meinst du 100nF an den Versorgungspins von uC und LCD? Am uC sind genug dran, am LCD keine, die werde ich dann mal übernehmen.
Die Serienwiederstände: Wohin sollen die? An beiden Seiten, nur am uC, nur am LCD? Ich werde für das LCD nochmal eine neue Platine ätzen müssen, deswegen will ich erstmal so viele Informationen wie möglich suchen, damit ich alles Mögliche gleich auf die Platine übernehmen kann.

Das Datenblatt des Displays ist dieses hier: klick (http://www.reichelt.de/?;ACTION=7;LA=6;OPEN=1;INDEX=0;FILENAME=A500%252FL CD162CBL%2523EAS.pdf;)

Danke für die Antworten,
Bääääär

PS: Ja, ihr habt Recht, das BusyFlag geht tatsächlich über die Datenleitungen. Mich wundert eins: Ich bekomme keine falschen Zeichen übertragen, das heißt, der uC macht alles richtig. Die Störungen könnten also nur vom LCD selber kommen, oder? Schließlich gibt es immer Probleme, wenn ich von ihm lese.

McJenso
26.12.2008, 12:59
Hallo,


wenn du nicht vom Display liest, hast du die Pins als Ausgang definiert. Dann liegt immer definiertes Potential auf der Leitung.

Als erstes würde ich versuchen ob, die internen Pullups beim Lesen Besserung bringen. Wenn das nicht hinhaut, versuch es mit externen Pulldowns.

Gruß

Jens

Bääääär
26.12.2008, 14:19
Hallo!

Ich habe jetzt ans Display noch einen Kondensator mit 100nF gelötet. Der hat jedoch keinerlei Verbesserung gebracht. Pulldowns hatte ich auf Seite des Displays schon angebracht. Ich glaube nicht, dass es Sinn macht, parallel noch welche auf uC-Seite anzubringen, oder? Ich kann sie natürlich auch nochmal ablöten, wenn das Aussicht auf Erfolg bringt.

Da ich das Modul eben nochmal gestartet habe, um eben das zu testen, habe ich auch nochmal geschaut, wie es mit dem "berühren" der Kontakte am Display aussieht (wie oben schon beschrieben): Das Display stellt, wenn ich meinen Finger auf den Pin für Datenleitung 7 lege (also auch die für das BusyFlag) gleich einen Schwung Zeichen ohne Verzögerung dar. Ich vermute mal, ich bin elektrostatisch aufgeladen und solange, wie meine Ladung reicht, beeinflusse ich die Leitung zum positiven Effekt hin.

Ich habe auch nochmal einen Versuch mit einem kürzeren Kabel durchgeführt. Dabei fiel mir auf, dass das Display auf Anhieb initialisiert (was beim langen Kabel erst nach Berührunf der Kontakte passierte), die Zeichen bis zur Hälfte der zweiten Zeile auch schnell und ohne Verzögerung überträgt, dann jedoch in den selben "Schreibmaschineneffekt" fällt, wie beim langen Kabel.

Vielen Dank für eure Hilfe,
Bääääär

Crazy Harry
26.12.2008, 15:34
ich weiß nicht ob du das so willst, aber versuchs mal mit I²C. ich betreibe 7-segment-led/lc-, zeilen- und grafische displays über I²C mit bis zu 2.5m kabellänge - ohne probleme :)

Rofo88
26.12.2008, 15:38
20 cm ist nach nicht sonderlich lang. Ich hatte mit Kabeln von 1 m noch keine Probleme.
Bist Du dir sicher daß das Kabel in Ordnung ist und auch die Kontakte sauber sind?

Hubert.G
26.12.2008, 15:47
Wenn es mit dem "Finger auf den Pin halten" funktioniert, dann wird da ein Grundlegendes Problem sein.
Das kann von schlechtem Kontakt über schlechte Masseverbindung ziemlich alles sein.

Bääääär
26.12.2008, 16:11
Hallo!

@Crazy Harry: Hmmmm, ja, das habe ich auch schon überlegt. Ich dachte bisher, I²C sei nur für kurze Strecken gedacht. Aber wenn es bei dir klappt... Warum nicht? Ich habe auf meinen Platinen auch einen I²C Stecker vorgesehen. Allerdings hoffe ich immernoch, dass es einfacher geht. Schließlich bedeutet das, sich in das Interface einzuarbeiten (ok, das muss ich eh irgendwann machen). Vorallem aber brauche ich dann entweder noch einen uC oder einen I²C - I/O Wandler (weiß grade nicht, wie die Dinger heißen), den ich nicht vorrätig habe. Aber im Notfall werde ich wohl darauf ausweichen müssen. Vielleicht kannst du mir ja für den Fall, dass ich das so machen muss, einige Tipps und/oder Code geben, damit ich einfacher dahinterkomme.

@Rofo88: 20cm war ein Tippfehler. Ich hatte es vorhin schon geändert, es sind etwa 80cm. Das kurze Kabel, welches ich vorhin getestet habe, ist etwa 20cm lang.
Ja, das Kabel ist i.O. - definitiv. Es ist ein Flachbandkabel mit Wannensteckern - alles sauber montiert. Höchstens die Platine vom Display könnte noch eine Fehlerquelle sein, aber das halte ich auch für unwahrscheinlich. Zwar habe ich Lötfett verwendet (ich weiß, soll man nicht - ich hatte manchmal das Gefühl es leitet?!) aber ich habe alles sauber abgewaschen.

@Hubert.G: Das Display steckt über eine Buchsenleiste auf der Platine, das Kabel ist an selbige über einen Wannenstecker angeschlossen und verbindet so die Displayplatine mit dem uC-Board. Eigentlich soltle da nix schlechten Kontakt haben. Kann ich das Mit Multimeter messen oder eher nicht?

Bääääär

PICture
26.12.2008, 18:55
Hallo!

@ Bääääär

Bei längerem Flachbandkabel sind die Kapazitäten zwischen benachbarten Leitungen wahrscheinlich zu groß. Versuche es mit einzelner Leitung für Pin 7 die ein bischen weiter und nicht direkt am Flachbandkabel liegt.

Es hilft oft auch mehradriges Flachbandkabel zu nehmen und zwishen jede zwei Leitungen eine Ader mit GND verbinden, die sie kapazitativ auseinander trennt.

MfG

Bääääär
27.12.2008, 06:51
Ja, stimmt, für GND hatte ich leider auf dem Kabel keinen Platz mehr. Ich werde, wenn ich wieder Zeit habe, mal eine extraleitung für Pin7 machen, denn die Verzögerung in der Darstellung könnte (was mir intuitiv sinnvoll erscheint) sehr gut von diesen Kapazitäten herrühren.
Für extre GND-Leitungen müsste ich dann aber die Anzahl der Pole von 10 auf 20 erhöhen, und neue Platinen ätzen... deshalb werde ich das nur machen, wenn es wirklich nötig ist. In zukünftigen Platinen muss ich solche Masseleitungen wohl doch verstärkt einplanen.

Bääääär

PICture
27.12.2008, 13:19
Du könntest aber zum Ausprobieren nur ein neues Kabel machen und die alle GND Leitungen ausser der geäzten Platine zusammen und mit einer Leitung mit GND auf der Platine verbinden. Dann kannst du zumindest sicher sein, ob das hilft und in der Zukunft verwendet wird.

MfG

Bääääär
12.01.2009, 20:39
Hallo alle zusammen.

Ich bin heute wieder zum Basteln gekommen. Folgendes habe ich gemacht:
Ich habe die Daten-Leitung 7 des Displays, über die die Rückmeldung läuft, aus dem Kabelverband des Flachbandkabels herausgetrennt. Sobald man diese Leitung auf einen Abstand von etwa 10cm zum Rest des Kabel bringt, funktioniert alles, wie es soll. Näher als 10cm geht nicht, dann tritt wieder die altbekannte Verzögerung auf, die ich oben schon beschrieben habe. Ich habe, in der Hoffnung, die immensen Störungen etwas einzudämmen ein Kabel mit Masseanschluss um diese Datenleitung gewickelt. Keine Veränderung. Ein Abstand <10cm erzeugt Störungen. Das selbe gilt bei einem Koax-Kabel, welches ich testweise genutzt habe.
Was kann ich jetzt noch machen, außer auf I²C auszuweichen?

Bääääär

PICture
12.01.2009, 21:27
Hallo!

Du kannst noch zwei Sachen probieren:

1. Alles was auf der Leitung hängt entfernen und nur auf dem µC Ende des Kabels ein pullup um 1k bzw. kleiner anschliessen.

2. Der Schirm des Koaxkabels nur auf einem Ende des Kabels mit GND verbinden.

Viel Erfolg! :)

MfG

Bääääär
14.01.2009, 15:58
Hallo!

1. Habe ich ausprobiert mit 700Ohm, leider hat sich nichts verändert
2. Habe ich von vorn herein so angeschlossen gehabt.

Trotzdem Danke für die Idee!
Bääääär

PICture
14.01.2009, 16:13
Hallo!

Es kann auch sein, das die VCC und GND Verteilung nicht richtig ist. Es sollte eben sternförmig sein, damit vom Knotenpunt, der sich am Zuführung der Versorgungsspannung befinden soll, ein Strom nur von einem IC (mit Beschaltung) fliessen kann. Wenn durch die GND bzw. VCC Leitungen Ströme von mehreren ICs fliessen, lassen sich dadurch enstehende Kopplungen kaum beseitigen.

MfG

Bääääär
14.01.2009, 17:49
Hallo nochmal!

Das habe ich eigentlich eingehalten, Masseschleifen könnten sich eigentlich nicht gebildet haben. Vom Spannungsregler geht die Leitungs an den uC und von dort im Flachbandkabel zum Display. Hier nochmal die Belegung des 80cm-Kabels:

1: DisplayData4
2: +5V
3: DisplayData5
4: Kontrastspannung
5: DisplayData6
6: Ground
7: DisplayData7
8: EN
9: RS
10: RW

Wie gesagt, sobald ich die Leitung "DisplayData7" näher als 10cm vom Rest des Kabels entfernt lege, wird die Übertragung sehr verzögert. Offensichtlich reicht die Flankensteilheit des Displays nicht mehr aus, um das Lange Kabel ohne Probleme zu überstehen. Oder der Innenwiderstand der Treiber oder sonstwas. Die Verzögerung hat wohl mit der Kapazität des Kabels zu tun, aber sorry, da fehlt mir als Schüler und Autodidakt das Wissen. Ich habe allerdings

hier: http://www.wer-weiss-was.de/theme59/article4157249.html

einen interessanten Thread gefunden, der ein ähnliches Thema behandelt. Wie ich diese Lösungsansätze auf mein Problem übertragen kann, ist mir allerdings ein Rätsel.

Ich hätte noch die Möglichkeit, auf Seite des LCD am entsprechenden Kabel (Data7) einen Treiber zu installieren. Wie ich dann aber ermögliche, dass der uC über die Gleiche Leitung auch Daten senden kann, weiß ich nicht.

Bääääär

PICture
14.01.2009, 19:07
Alle deine Überlegungen sind richtig. Du kannst einen 4-fachen Treiber mit 3-State Ausgang nehmen (z.B. 74HC125) und die RW Leitung (10) zum Steuern der Datenrichtung der Leitung DisplayData7 (7) nutzen. Der Treiber 3 arbeitet als Inverter, so dass immer nur ein Ausgang von Treiber 1 bzw. 2 aktiv ist. Der Wert vom R ist nicht kritisch und kann zwischen ca. 1k bis 10k sein. Die Eingänge des unbenutzten 4. Treibers sollten mit GND bzw. VCC verbunden werden. Beim Aufbau mit SMD lässt sich die Schaltung mit doppelseitigem Klebeband sogar auf dem Displaymodul unterbringen.

Ich habe entsprechende Schaltung im Code skiziert.

MfG

74HC125

|\
DisplayData7 (7) >------------+-|1>-+-----> DisplayData7
| |o |
| | |
+---------+ |
| | |
| | /| |
| +-<2|-+
Kabel | VCC o|
| + |
| | |\ |
| +-|3>-+
| |o |
| | .-.
_ | | | |R
R/W (10) >-----+------+ | |4k7
'-'
|
===
GND

Bääääär
14.01.2009, 22:05
Hallo PICture!

Ich hab mal ein bisschen im Datenblatt des 74HC125 gestöbert und der sieht alles in allem sehr Idiotensicher aus. Ich scheine ja neben dem IC und dem Widerstand nichts zu brauchen. Dein Schaltplan sieht total logisch aus und lässt sich leicht mit auf meiner Display-Anschlussplatine unterbringen - Ich werde also morgen mal zum örtlichen Elektronikgeschäft laufen und den IC besorgen. Ich hoffe, damit lösen sich die Probleme.

Vielen Dank,
Bääääär