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...
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)
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.
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.
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.
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.
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 ?
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.
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.
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.
...daten loggen, umrechnen neu ausgeben. quasi mit einem uC "dazwischen"
oder einem "virtuellen 1x32 display marke eigenbau" - wenn sich das
lohnt.
Klaus.
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...
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.
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.
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.
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.
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.
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 ?
...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.
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.
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?
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...
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.
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.