Forum: Mikrocontroller und Digitale Elektronik unbekanntes Display (16x2 / 80 Spalten?) ersetzen


von Wolfgang Seiler (Gast)


Lesenswert?

Hallo allerseits,
Ich muß ein LCD Display mit 2x16 Zeichen (5x8 dots) ersetzen.
Soweit so gut.Es hat einen Standart-16-poligen Anschluß.
Schließe ich ein HD44780 kompatibles an habe ich nur die erste Zeile.
Bei genauerer Untersuchung habe ich gemerkt , daß das alte Display wie 
das neue 16 Zeilen zur Ansteuerung hat aber das alte hat 80 ! Spalten.
Das neue nur 40 , weil die ja über alle 16 Zeilen gehen und nicht nur 
über 8 wie beim alten. Gibt es sowas noch neu, oder ist das eine Frage 
der Initialisierung ? Sieht für mich so aus , als ob das alte Display 
als eine lange Reihe betrieben wird .Kann das sein ? Alles lesen bei 
Sprut hat mich nicht weitergebracht. Da braucht man wohl etwas 
Kampferfahrung .
Ich hoffe jemand kennt sowas...

von Benedikt K. (benedikt)


Lesenswert?

Wolfgang Seiler wrote:
> Schließe ich ein HD44780 kompatibles an habe ich nur die erste Zeile.

Was heißt nur die erste Zeile: Ist die zweite Zeile komplett dunkel 
(wird also nichtmal gescannt), oder erscheinen da nur keine Zeichen?

> Bei genauerer Untersuchung habe ich gemerkt , daß das alte Display wie
> das neue 16 Zeilen zur Ansteuerung hat aber das alte hat 80 ! Spalten.

Die 16 Zeilen sind da, weil jede Textzeile 8 Pixelzeilen hat. Die 80 
kommen durch 16x5. Soweit ist alles klar.

> Das neue nur 40 , weil die ja über alle 16 Zeilen gehen und nicht nur
> über 8 wie beim alten.

Das verstehe ich jetzt nicht. Wie kann das neue Display nur 40 Spalten 
haben? Bei 16 Zeilen wäre dies ein 2x8 LCD (2x8, 8x5)

von Wolfgang Seiler (Gast)


Lesenswert?

Entschuldigung , alles mal 2 natürlich , also 160 Spalten...
Die 2. Reihe blebt wie tot. nicht einmal grau .
Die erste Reihe zeigt korrekt an mit etwas grau ,ist aber 
Kontrasteinstellungsbedingt.

von Benedikt K. (benedikt)


Lesenswert?

Wenn ich dich also richtig verstehe, dann ist das alte Display 
elektrisch als 1x32 geschaltet, es werden also nur 8 Zeilen angesteuert?

von Wolfgang Seiler (Gast)


Lesenswert?

So habe ich das bisher gedeutet. Allerdings habe ich soetwas noch nicht 
neu gesehen.

von Wolfgang Seiler (Gast)


Lesenswert?

Ich muß mich korrigieren , es hat auch 16 Zeilen.

von Benedikt K. (benedikt)


Lesenswert?

Du könntest mal ein 2x40 oder 4x20 LCD ausprobieren. Wenn da der Text 
komplett in der 1. Zeile (bzw. in der 1. und 3. beim 4x20) steht, dann 
ist es wirklich ein 1x32.
Gesehen habe ich sowas auch noch nie, nur umgekehrt, (also 1x16 LCDs 
sind meist als 2x8 geschaltet, da die zusätzliche Spaltentreiber 
einspart, da der 44780 8 Zeichen und 2 Zeilen direkt ansteuern kann).
Die Ansteuerung macht in der Hinsicht Sinn, dass das LCD nur mit 1/8 Mux 
läuft und daher der Kontrast besser ist und das LCD weniger Spannung 
benötigt. Das LCD dürfte dann irgendwas kundenspezifisches gewesen sein.

Es könnte aber auch sein, dass in der Software etwas gepfuscht wurde, 
und diese daher nicht kompatibel zu neueren Displays ist, da z.B. das 
Timing zu knapp gewählt wurde. Dann würde das Display nicht korrekt 
initialisiert werden, und würde im 1 Zeilen Modus bleiben.

von Wolfgang Seiler (Gast)


Lesenswert?

Das vermute ich auch . Das heißt ich werde keine einfache Lösung für das 
Problem finden. Ich hatte gehofft , das Standartdisplays auch diesen 
Modus durch eine Initialisierung verstehen.
Das würde ja bedeuten, daß ich die Daten abfangen und umrechnen lassen 
muß.
Sieht nach viel Arbeit aus...
Vielen Dank für die fachliche Unterstützung.

von Benedikt K. (benedikt)


Lesenswert?

Ich vermute mal, auf dem alten Display ist ein original HD44780 drauf?
Falls ja, dann schließe doch mal ein anderes 2x16 LCD mit original 44780 
an, das sollte dann eigentlich funktionieren (oder kauf dir eines, 
Pollin Best.Nr. 120 060 sollte einen echten 44780 drauf haben, so 
vergammelt wie das Datenblatt aussieht, ist das Display nämlich schon 
etwas älter).
Alternativ übertakte mal den Controller: Auf dem Display gibt es fast 
immer ein Widerstand mit rund 100k (oft 91k). Setz dafür z.B. mal 60-70k 
ein, dann läuft der Controller schneller.
Ist zwar keine perfekte Lösung, aber besser da irgendwas dazwischen zu 
hängen.

von Wolfgang Seiler (Gast)


Lesenswert?

Das kann ich nicht mit Gewißheit sagen, Ist ja direkt gebondet und 
schwarz vergossen. Auf der Platine sind 4 Chips. Einer dürfte der 
Spannungswandler wegen hohem Temperaturbereichs sein. Daraus habe ich 
entnommen 1 Controller und zwei zusätzliche Displaytreiber. Alle in Form 
schwarzer runder "Kleckse".
Ich kann das Display mit einem PIC 16F84 einzeilig ansteuern mit dem 
selben Programm das für den 44780 gedacht ist. Daher die Annahme es sei 
kompatibel.
Aber ich habe auch schon von Timingproblemen gelesen.
Haben Sie eine Idee wie ich es in der Entwicklungsumgebung mit dem PIC 
noch testen könnte ?

von Benedikt K. (benedikt)


Lesenswert?

Man könnte in der Software das Timing verschärfen, aber das bringt nicht 
allzuviel, da man nicht weiß, wo das Problem bei der anderen Software 
liegt.
Ich würde den Widerstand testweise verkleinern, und schauen ob es geht. 
Wenn es damit läuft, dann kann man sicher sagen, dass es am Timing 
liegt: Die alten 44780 waren nämlich sehr viel besser als die 
Toleranzangaben im Datenblatt. Die Nachbauten nutzen den Toleranzbereich 
aus, daher kann es bei neueren Displays Probleme geben.

von Wolfgang Seiler (Gast)


Lesenswert?

Dann teste ich das wie empfohlen und melde mich mit dem Ergebnis zurück.
Das wird dann erst Montag gehen .
Vielen Dank für die sehr schnelle Hilfe und noch einen angenehmen Abend.

von Wolfgang Seiler (Gast)


Lesenswert?

Also das alte Display ist definitiv ein 1x32 !
Ich habe mal mit dem PIC eine lange Ausgabe programmiert, länger als 16 
Zeichen und dann geht es nahtlos ohne Verluste auf der 2. Reihe weiter.
Dann ist natürlich auch die Initialisierung nur für eine Reihe.
Dadurch ist das Standart 2x16 in der 2. Reihe ohne Funktion.
Welche Möglichkeiten habe ich so ein Teil zu ersetzen ?
Ich kann das Programm des steuernden Controllers nicht beeinflussen ist 
maskenprogrammiert ...
Nur die Initialisierung beeinflussen reicht ja wohl nicht , da die 
Adressierung ja unterschiedlich sein wird für die 2. Reihe.

von Klaus2 (Gast)


Lesenswert?

...daten loggen, umrechnen neu ausgeben. quasi mit einem uC "dazwischen" 
oder einem "virtuellen 1x32 display marke eigenbau" - wenn sich das 
lohnt.

Klaus.

von Wolfgang Seiler (Gast)


Lesenswert?

Das habe ich befürchtet. Ich habe bei 
http://www.electronic-engineering.ch ein Projekt von Herrn Peter Luethi 
gesehen welches PC-Tataturcode in Morsezeichen mit LCD Ausgabe umsetzt 
und ausgibt. Kann ich soetwas als Basis nehmen und ändern ? So wie ich 
das sehe würde ein 16F84 ausreichen ?
Für mich ist die Sache schon etwas wert. Ich habe zwar schon kleine 
Sachen mit PIC und Display gemacht, aber hier bin ich erstmal 
überfordert...

von Klaus2 (Gast)


Lesenswert?

du musst dir quasi ein virtuelles display (1x32) als strings aufbauen, 
die vollschreiben und von einer anderen routine wieder lesen und 
"re-interpretieren lassen" und ausgeben. da muss man sich erstmal 
hinsetzen undmklar amchen, was da genau passiert und WAS man überhaupt 
ändern muss - problematisch ist ja quasi nur das "offset" deines neuen 
2x16, denke ich. daher das "virtuelle display" als zwischenspeicher. 
interessant wäre auch zu wissen, wie schnell die daten geschrieben 
werden - das hat einflüsse auf die softwarestruktur und evtl den 
prozessortyp.

im schlimmsten fall muss man erstmal die daten des 1x32 "sniffen" und 
mit dessen datenblatt reverse engineeren, bevor man weiß, wie man es 
umstricken kann.

alternative: ein 1x32 finden - ich bin mir sicher, das gibts noch 
irgendwo!

Klaus.

von Wolfgang Seiler (Gast)


Lesenswert?

Ich denke auch, das der PIC das neue Display allein ansteuern sollte.
Die Anzeige ist nicht zeitkritisch. Also eine Verzögerung beim Umstzen 
wäre nicht tragisch. Da ich das alte Display (1x32)mit meinen Standart 
44780 Routinen testen kann meine ich, daß das Timing auch Standart sein 
sollte .Da ein neues 44780 kompatibles Display eingesetzt die erste 
Zeile richtig darstellt ,müßte auch die Datenstruktur und die 
Adressierung dem einzeiligem Standart entsprechen.

von Klaus2 (Gast)


Lesenswert?

genau, stimmt ja! dann wird es recht einfach und du musst nur die 
adressierung der zweiten zeile "zur laufzeit" ändern - kann aber sein, 
dass das komfortabler als mit dem "virtuellen display" geht.

Klaus.

von Wolfgang Seiler (Gast)


Lesenswert?

Das heißt also, Daten rein und Adressen vergleichen und ab einem 
bestimmten Wert der der 2. Reihe beim alten Display entspricht den 
Betrag dazu addieren, der dem  Wert der 2. Reihe auf dem neuen 
entspricht.
Ich glaube ich muß mir nochmal detailiert die LCD Ansteuerung ansehen.

von Benedikt K. (benedikt)


Lesenswert?

Theoretisch geht das ganze. Je nachdem wie das LCD angesteuert wird (mit 
Busy, feste Wartezeiten usw.) kann es aber relativ viel Hardwareaufwand 
bedeuten. Da die Zeit in der die Daten anstehen relativ gering ist, ist 
dazu ein Latch erforderlich, das die Daten/Befehle zwischenspeichert, 
Busy signalisiert (falls notwendig) und den µC informiert, dass neue 
Daten empfangen wurden. Der µC verarbeitet dann die Daten, sendet die 
Daten umgewandelt an das neue LCD weiter und gibt dann Busy wieder frei.
Noch komplizierter ist es, wenn die Software auch Daten aus dem LCD 
zurückliest. Dann kommen etliche HCMOS ICs für die Steuerlogik zusammen.

von Wolfgang Seiler (Gast)


Lesenswert?

Ich ahne schon daß das so nicht geht. Zu allem Überfluß ist der Bus auch 
noch mit einer Tastaturmatrix gemultiplext. Eigentlich wollte ich die 
Daten mit einem parallel/seriell Wandler (74HC165) abgreifen der dann 
sein enable bekommt wenn der Controller das write zum display (alt) 
sendet.So müßten nur die anliegenden 8 Bit reinkommen oder ?

von Klaus2 (Gast)


Lesenswert?

...naja, ist es denn so ein problem für einen prozessor, die daten 
schnell genug verarbeiten und weitergeben zu können, ohne was zu 
"verlieren"? einlesen und speichern geht ja recht fix, umrechnen und 
ausgeben halt "wenn zeit ist". mit dem "write" des alten signals einen 
interrupt auslösen.

Klaus.

von Benedikt K. (benedikt)


Lesenswert?

Beim Daten Einlesen muss man 2 Sachen unterscheiden:
Die Zeit zwischen 2 Datenpaketen und die Zeit wie lange das Enable 
Signal ansteht.
Die Zeit zwischen 2 Daten liegt bei etwa 37µs, denn solange braucht der 
44780 zum Verarbeiten der Daten. Das sollte eigentlich reichen.
Viel kritischer ist erstmal das Speichern der Daten:
Das Enable Signale muss mindestens 230ns lang sein. Es ist also durchaus 
möglich, dass die Daten nur für <500ns anstehen, nachdem Enable aktiv 
wurde.
Sagen wir mal der µC braucht 5 Takte um die Daten einzulesen, dann darf 
ein Takt nicht länger als 100ns dauern. Das wäre bei einem PIC eine 
Taktfrequenz von mindestens 40MHz, also ziemlich knapp.
Daher würde ich die Daten in ein Latch schreiben, danach hat man die 
vollen 37µs Zeit um die Daten aus diesem zu lesen und zu verarbeiten.
Wenn das LCD im 4bit Modus läuft, wird das ganze natürlich nochmal viel 
komplizierter, da 2 Packete direkt hintereinander gesendet werden.

von Wolfgang Seiler (Gast)


Lesenswert?

Das leuchtet ein. Ist also die Idee mit dem 74HC165 gar nicht so dumm. 
Das alte Display läuft im 8Bit Modus.

von Wolfgang Seiler (Gast)


Lesenswert?

Nach längerem Lesen habe ich erstmal verstanden , warum ein Latch her 
muß.
Der PIC braucht also länger zum Einlesen der 8 Bit als das Enable 
anliegt.
Das Latch speichert also die anliegenden Signale zwischen und ich habe 
die 37µs Zeit bis zum nächstan Zeichen um die Daten zu erfassen.
Also eher ein 74HC589 oder ? Ich muß doch aber nach Ablauf des enable 
auf open Collector stellen, weil in der Zeit in der der PIC erfasst , 
vorn schon wieder die Tastaturabfrage läuft . Dann müßte es aber machbar 
sein , rein vom timing. Ich weiß alles Anfängerfragen...
Dann habe ich nochmal mich mit der Adressierung der Displays befasst.
Bei meinem alten endet die erste Reihe mit 0Fh und geht nahtlos in der 
zweiten Reihe weiter also mit 10h ?
Die neuen Standart 16x2 fangen in der 2. Reihe mit 40h an.
Ich denke immer noch darüber nach , ob es nicht machbar ist, die 
empfangenen Daten nur dahingehend auszuwerten, welche Zeichen ab 40h 
angesteuert werden und dann die Differenz bis 10h abzuziehen .
Oder läuft die Ansteuerung nicht so einfach wie ich mir das vorstelle?

von Roland P. (pram)


Lesenswert?

Bau ein 4x16 ein, dann sollte der Text in der 1. und 3. Zeile stehen.

Gruß
Roland

von Wolfgang Seiler (Gast)


Lesenswert?

Leider ist dafür kein Platz. Wäre ja auch zu einfach...
Aber interessant zu wissen , heißt also , daß das dann eigentlich auch 
nur 2 Reihen mit je 32 Zeichen sind...

von Benedikt K. (benedikt)


Lesenswert?

Wolfgang Seiler wrote:
> Das Latch speichert also die anliegenden Signale zwischen und ich habe
> die 37µs Zeit bis zum nächstan Zeichen um die Daten zu erfassen.
> Also eher ein 74HC589 oder

Ja. Vorausgesetzt, der Programmierer hat es sich einfach gemacht und 
benutzt nicht das Busy (daran zu erkennen, dass RW fest auf Masse 
liegt).
Wenn nicht, sind die 37µs variabel, da der Controller auf das Busy 
wartet.

> Ich muß doch aber nach Ablauf des enable
> auf open Collector stellen, weil in der Zeit in der der PIC erfasst ,
> vorn schon wieder die Tastaturabfrage läuft .

Enable ist für dich immer ein Eingang, (genauso wie Enable für das LCD 
auch ein Eingang ist). Enable sollte aber mit der Tastaturabfrage wenig 
zu tun haben.

> Dann habe ich nochmal mich mit der Adressierung der Displays befasst.
> Bei meinem alten endet die erste Reihe mit 0Fh und geht nahtlos in der
> zweiten Reihe weiter also mit 10h ?
> Die neuen Standart 16x2 fangen in der 2. Reihe mit 40h an.
> Ich denke immer noch darüber nach , ob es nicht machbar ist, die
> empfangenen Daten nur dahingehend auszuwerten, welche Zeichen ab 40h
> angesteuert werden und dann die Differenz bis 10h abzuziehen .

Eigentlich ist das ganz einfach:
Der 44780 kann 2 Zeilen mit je 40 Zeichen ansteuern. Die erste Zeile 
beginnt daher bei 0, die zweite bei 64 (=0x40).
Dein Display ist als 1x32 organisiert, normale 2x16 als 2x16.
4x20 sind von der Ansteuerung und vom Speicher her gesehen 2x40.

von *.* (Gast)


Lesenswert?

Nur das Glasteil auswechseln geht nicht?

von Benedikt K. (benedikt)


Lesenswert?

Nein. Glas+Platine muss getauscht werden, da beim 32x1 doppelt soviele 
Spaltentreiber vorhanden sind.

von Wolfgang Seiler (Gast)


Lesenswert?

Das mit dem enable ist schon klar ,ich meinte das ich das Latch nur so 
kurz mit der Datenübernahme beschäftige wie der Originalcontroller 
(80C515)das alte Display beschreiben würde. Danach muß ich die 
Datenleitungen wieder freigeben , damit das Tastaturmultiplexing 
funktioniert. Das Auslesen des Latch ist dann nicht mehr an dieses 
Timing gebunden und kann innerhalb der 37µs "in Ruhe" erfolgen. Deshalb 
auch eines mit Tristate Ausgängen.
RW ist nicht auf Masse .Ich gebe das Busy dann mit dem PIC zurück und 
der 80C515 wartet bis ich die neuen Daten verarbeitet habe und das Latch 
wieder frei ist . Ich muß mich mal für die Gedult , die unglaublich 
schnelle Antwortzeit und Sachkenntnis bedanken.

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.