Forum: Mikrocontroller und Digitale Elektronik Loses Matrix-LCD mit Atmega48 ASM


von Fritzl W. (friz)


Angehängte Dateien:

Lesenswert?

Hallo.

Ich habe mich auf ein LCD mit Symbolen und 7-14Segment-Ziffern 
eingelassen.
Diese Segmente sind in einer Matrix untereinander verbunden und an 4Com- 
und 11Segment-pins anzusteuern (=44 Segmente), also 15 Pins am Display.

Ich habe schon des öfteren mit Led-Matrixen getrixt was auch immer 
ohneProbleme funktioniert hat. Aber ein LCD ist kein Led-Matrix.

Ich habe zwei Fotos vom LCD angehängt falls jemand das Orginal 
betrachten will, aber mein Problem lässt sich sehr einfach darstellen:

  1  2  3  4  5  6  7  8  9  10 11

A +  +  +  +  +  +  +  +  +  +  +

B +  +  +  +  +  #  +  +  +  +  +

C +  +  +  +  +  +  +  +  +  +  +

D +  +  +  +  +  +  +  +  +  +  +

Bei LED wäre die Lösung B-/6+ mehr als einfach.
Aber auf einem LCD fällt mir rein gar keine lösung ein.
Mein einziger Erfolg ist es das ganze Display anzusteuern.
Ganz primitiv in ASM programmiert zum testen:
disp:
A-D:  Port tief
1-11: Port hoch
delay
A-D:  Port hoch
1-11: Port tief
delay
rjmp disp

Da es definitiv kein Datenblatt gibt habe ich irgendeine Frequenz 
angenommen die funktionierte. In meiner Verzweiflung habe ich auch schon 
einige Experimente mit Gleichstrom gemacht, auch ohne Erfolg.

von Crazy Harry (crazy_h)


Lesenswert?

Schau mal ob du einen PCF8566 auftreiben kannst. Ansteuerung I2C. 4 
Backplanes mit je 24 Segmenten.

von Fritzl W. (friz)


Lesenswert?

JA, das wäre mir auch am liebsten! Einfach ein anderes!

Hatte vor kurzem das DOGM18x64 ( 
http://www.lcd-module.de/pdf/grafik/dogm128.pdf ) in ASM schon sehr gut 
unter kontrolle. Wollte gleich das verwendet aber jetzt musses genau das 
aus meinem vorherigen Beitrag sein.

Mittlerweile frage ich mich ob das überhaupt auf diese weise anspielbar 
ist?!?

von Crazy Harry (crazy_h)


Lesenswert?

Der PCF8566 ist kein anderes Display sondern ein Ansteuerbaustein für 
dein Display.

von google (Gast)


Lesenswert?


von MaWin (Gast)


Lesenswert?

friedrich werdnik schrieb:
> Mittlerweile frage ich mich ob das überhaupt auf diese weise anspielbar
> ist

Nein, schau dir die Spannungspegel des PCF8566 an, der produziert nicht 
nur + und -, sondern 3 oder 4 Stufen.

Das kann man natürlich auch mit einem uC machen, in dem je 2 Ausgänge 
die Spannung der jeweiligen Backplane per Spannungsteiler bestimmen, 
braucht aber auf Grund der Querströme in den Spannungsteilern etwas mehr 
Strom als der PCF8566.

Atmel zeigt in seinem Datenblatt noch eine Version mit nur 1 Pin pro COM 
die SEHR VIEL Strom benötigt.

Aber Achtung: Für korrekte Kontrasteinstellung kann es notwendig sein, 
die Betriebsspannung des uC zu verändern, z.B. von 3V bis 6V.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ein gemultiplextes LCD braucht mehrere Spannungspegel. Da die Segmente 
eine Mindestspannung zum Einschalten haben, werden diese Pegel so 
gewählt, dass nicht benötigte Segmente zu wenig Spannung erhalten.

Der AtMega 169 hat als einziger AVR so eine Mux-Möglichkeit eingebaut.
http://www.atmel.com/devices/atmega169.aspx
"not recommended for new designs" "4 x 25 Segment LCD Driver"
den gibts auch mit Platine als "AVR Butterfly"

von Fritzl W. (friz)


Lesenswert?

4 Stunden lesen und Testen später hab ich es nun geschafft einzelne 
Segmente anzeigenzulassen.

Messungen mit dem Oszi haben gezeigt das bei 5 Volt Prozessorspannung 
zwischen Com und Segment eine Rechteckspannung von 10V entstehen. Ich 
brauche aber nur 3,5V-AC oder mehr um die Segmente anzeigen zu lassen.
Prozessorspannung auf 1,8V und passenden Condensator am Prozessor und 
schon werden nur die gewünschten Segmente angezeigt. :-)
Jetz hänge ich noch beim Multiplexen (Geisterleuchten), aber ich glaube 
das wird die vorrübergehende Lösung fürs erste sein.

Vielen Dank fürs erste für die Hilfe.

War sehr wichtig:
google schrieb:
> direct drive of LCD: http://www.atmel.com/images/doc8103.pdf
Habe ich alleine nicht gefunden.

Christoph Kessler (db1uq) schrieb:
> Ein gemultiplextes LCD braucht mehrere Spannungspegel. Da die Segmente
> eine Mindestspannung zum Einschalten haben, werden diese Pegel so
> gewählt, dass nicht benötigte Segmente zu wenig Spannung erhalten.
Versteh ich noch nicht, aber warhscheinlich liegt genau da noch mein 
Problem.

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

friedrich werdnik schrieb:
> 4 Stunden lesen und Testen später hab ich es nun geschafft einzelne
> Segmente anzeigenzulassen.
>
> Messungen mit dem Oszi haben gezeigt das bei 5 Volt Prozessorspannung
> zwischen Com und Segment eine Rechteckspannung von 10V entstehen.

Wow. Das mußtest du messen? Du konntest nicht 5V und 5V addieren?

> Christoph Kessler (db1uq) schrieb:
>> Ein gemultiplextes LCD braucht mehrere Spannungspegel. Da die Segmente
>> eine Mindestspannung zum Einschalten haben, werden diese Pegel so
>> gewählt, dass nicht benötigte Segmente zu wenig Spannung erhalten.

> Versteh ich noch nicht, aber warhscheinlich liegt genau da noch mein
> Problem.

Du bist beim Verständnis jetzt bei LCD mit einer einzelnen Backplane und 
sogenanntem static driving. Wo du hin willst, ist aber noch einiges 
komplizierter. Multiplex-Ansteuerung mit 4 Backplanes. Dafür brauchst du 
einen Treiber der mindestens 4 Pegel erzeugen kann, typischerweise in 
Abstufungen 0V, 1/3 Vdd, 2/3 Vdd, Vdd. Wegen der Drittelstufen wird das 
"1/3 Bias" genannt. Und weil du 4 Backplanes hast, brauchst du "1/4 
Multiplex". Soviel an Stichworten zum Googlen.

Hier: http://awawa.hariko.com/avr_lcd_drive_en.html wird gezeigt, wie 
man eine 1/3 Bias Ansteuerung mit GPIOs bauen kann. Und es werden die 
Kurvenformen für 1/3 Multiplex gezeigt.

Für 1/4 Multiplex wird es nochmal komplizierter. Man kann auch das mit 
GPIOs machen, einfacher wird es aber mit einem dezidierten LCD 
Controller/Treiber. In dessen Datenblatt findest du auch die notwendigen 
Kurvenformen. Beispiel: PCF85162

von google (Gast)


Lesenswert?

Die richtigen Suchbegriffe kennst Du jetzt: lcd direct drive multiplex

Der PIC1947 könnte ebenfalls behilflich sein. Gab es noch vor kurzem bei 
Reichelt für wenig Geld.

von google (Gast)


Lesenswert?

Sorry, Tippfehler: PIC16F1947

von Christoph db1uq K. (christoph_kessler)


Lesenswert?


: Bearbeitet durch User
von Fritzl W. (friz)


Angehängte Dateien:

Lesenswert?

AVR-APP-Note: http://www.atmel.com/images/doc8103.pdf
awawas lab:   http://awawa.hariko.com/avr_lcd_drive_en.html

Ich habe nach den Links oben mit 2k2 Spannungsteilern an den 
4COM-Anschlüssen das Display mit 1/2Bias halbwegs zum laufen bekommen.
Ich weiss nicht in wie weit es egal ist ob ich ein LCD im 1/2- oder 
1/3-Bias betreibe. Hoffentlich geht nix kaputt auf die dauer. Der 
Hardwareaufwand ist bei 1/2 weit geringer und ich glaube auch der 
programmieraufwand. Die Betriebsspannung musste ich auf 2,5V 
heruntersetzen. Ansonsten ist alles klar zu erkennen keine 
Geisterlichter. Einzig der Kontrast lässt etwas zu wünschen übrig.
Sind LCD´s immer so abhängig von der Betriebsspannung? Brauchbar isses 
nur zwischen 2,2V und 2,7V. Spannungsregler nachrüsten und fertig 
Arbeit. Jetzt noch USART-Eingabe auswerten und ausgeben.

Vorerst DANKE nochmal an ALLE!

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

friedrich werdnik schrieb:
> Ich weiss nicht in wie weit es egal ist ob ich ein LCD im 1/2- oder
> 1/3-Bias betreibe

Es hängt von der threshold-Spannung deines LCD ab und deiner 
Versorgungsspannung des uC.

Wenn deine Versorgung bei deinem LCD bei 1/2 einen schlechten Kontrast 
ergibt, kann 1/3 die Lösung sein. Hat sie jedoch bei 1/3 schlechten 
Kontrast, kann 1/2 sinnvoll sein. Oder eben man hat vorgegebene 1/2 doer 
1/3 und passt die Versorgungsspannung an bis der Kontrast stimmt. 
Besonders blöd wird es, wenn man die Schaltung mit Batterien versorgt, 
was bei LCD ja nicht unüblich ist. Da muss man guten Kontrast im ganzen 
Spannungsbereich haben.

Die Atmel-Lösung mit 2k2 braucht viel Strom.

Besser ist es:

   COM 1  2  3  4
       |  |  |  |
Pin1 --+--(--(--(--47k--+
          |  |  |       |
Pin2 -----+--(--(--47k--+
             |  |       |
Pin3 --------+--(--47k--+
                |       |
Pin4 -----------+--47k--+
                        |
                      100nF
                        |
                       GND


Die 47k zu 2.5V ergeben niedrigere Ströme, und trotzdem ist
die Spannung exakter bei VCC/2, das LCD also Gleichspannungsfrei.

von Nosnibor (Gast)


Lesenswert?

Da geht nichts kaputt. Wichtig ist bei LCDs nur, daß sie auf Dauer 
gleichspannungsfrei angesteuert werden, also die beiden Phasen des 
Wechselspannungssignals gleich lang sind (max. 1% Unterschied, IIRC), 
aber das ist ja nicht schwer.

Der Unterschied zwischen 1/2- und 1/3-Bias liegt nur im Verhältnis der 
Spannungen, die ein LCD-Segment abbekommt. Ein ausgeschaltetes Segment 
sieht ja beim Multiplexen immernoch eine Wechselspannung, nur ist die 
eben geringer als beim eingeschalteten Segment. Das Verhältnis beträgt 
bei der einfachen Schaltung 1:2, und bei 1/3-Bias eben 1:3.

Die Abhängigkeit von der Betriebsspannung ist leicht erklärt: der 
Kontrast eines aktiven Segments zum Hintergrund hängt von der Spannung 
ab, mit der es angesteuert wird. Logisch: bei 0V sieht man gar nichts, 
und bei irgendeiner Spannung ist es richtig schwarz. In einem Datenblatt 
zum Display (also nur das Glas mit der Chemie drin, ohne Elektronik 
dran) steht dann auch eine untere und eine obere Spannungsschwelle: 
unterhalb der unteren sieht man noch nichts, und alles über der oberen 
Schwelle gibts schwarz. Beim Multiplexen muß man also mit der 
niedrigeren Spannung (für ausgeschaltete Segmente) unterhalb der unteren 
Schwelle bleiben, und mit der Spannung für eingeschaltete Segmente die 
obere Schwelle übertreffen, um den bestmöglichen Kontrast zu erreichen. 
Es ist klar, daß das mit 1/3-Bias leichter fällt (bei manchen Displays 
liegen die beiden Schwellen so weit auseinander, daß es mit 1/2-Bias 
nicht geht).

Außerdem hängen die Spannungsschwellen von der Temperatur ab. Deshalb 
haben LCD-Controllerchips einen Eingang, mit dem man die 
Display-Betriebsspannung ("Kontrastspannung") steuern kann; 
normalerweise gehört da ein passend dimensionierter Spannungsteiler mit 
Thermistor ran. Aber wenn der Entwickler das Datenblatt zum Glas nicht 
hat und daher die richtige Betriebsspannung und ihre 
Temperaturabhängigkeit nicht kennt, tut's auch 'n Poti; der Benutzer 
wird schon so lange drehen, bis er was sieht.

von Fritzl W. (friz)


Angehängte Dateien:

Lesenswert?

Es ist vollbracht!

120 Stunden später ist es endlich vollbracht.
Das Display zeigt alles klar an was über USART empfangen wird und sendet 
auch brav seine Bytes nach Tasten-druck und Tasten-loslassen.
Durch einen 2,5V Spannungsregler ist der Kontrast auch sehr gut.

Danke an alle. Ohne eure Hilfe hätte ich warscheinlich aufgegeben.

Im Anhang Teile meines Codes falls es jemanden interessiert wie ich das 
gelöst habe in ASM.

Ich habe alles in den Interrupt-Routinen gelöst. Mein Kollega 
(C-Programmierer) meint das man das nicht machen sollte. Ich glaube das 
diese eine Schleife überbewertet wird. Naja, ich habs halt nicht in 
einer Schule gelernt sonder zu einem guten Teil hier. Danke nochmal an 
alle. Ohne eure Hilfe hätte ich warscheinlich aufgegeben.

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.