Forum: Mikrocontroller und Digitale Elektronik LC-Display verhällt sich komisch


von Yalpsid (Gast)


Lesenswert?

Hallo,

ich habe dieses Display:
http://www.reichelt.de/LCD-Module-DIP-Anschluss/EA-DIP203G-4/3/index.html?&ACTION=3&LA=446&ARTICLE=129611&GROUPID=3009&artnr=EA+DIP203G-4

An einem Atmega32 mit Peter Fleury LIB.

Zum programmieren habe ich meine Schaltung an einem Netzteil 
angeschlossen. 24V --> 5V per DC-DC Wandler für HG-Beleuchtung über 
Widerstand --> 3,3V Linear-Regler für Atmega+Display

Ich habe den Mega32 programmiert und einige Tests gemacht, es hat soweit 
geklappt.
Die lcd.h habe ich laut Datenblatt angepasst:
1
#define LCD_LINES           4     /**< number of visible lines of the display */
2
#define LCD_DISP_LENGTH    20     /**< visibles characters per line of the display */
3
#define LCD_LINE_LENGTH  0x13     /**< internal line length of the display    */
4
#define LCD_START_LINE1  0x00     /**< DDRAM address of first char of line 1 */
5
#define LCD_START_LINE2  0x20     /**< DDRAM address of first char of line 2 */
6
#define LCD_START_LINE3  0x40     /**< DDRAM address of first char of line 3 */
7
#define LCD_START_LINE4  0x60     /**< DDRAM address of first char of line 4 */
8
#define LCD_WRAP_LINES      0     /**< 0: no wrap, 1: wrap at end of visibile line */

Dann habe ich meine Schaltung an einem regelbarem Netzteil angeschlossen 
und langsam die Spannung aufgedreht, als ich dann bei 24V war zeigte das 
Display die Zeilen verschoben. Das konnte ich nur beheben indem ich 
erneut die lcd.h angepasst habe. Werte durch Versuche ermittelt.

1
#define LCD_LINES           4     /**< number of visible lines of the display */
2
#define LCD_DISP_LENGTH    20     /**< visibles characters per line of the display */
3
#define LCD_LINE_LENGTH  0x13     /**< internal line length of the display    */
4
#define LCD_START_LINE1  0x00     /**< DDRAM address of first char of line 1 */
5
#define LCD_START_LINE2  0x14     /**< DDRAM address of first char of line 2 */
6
#define LCD_START_LINE3  0x28     /**< DDRAM address of first char of line 3 */
7
#define LCD_START_LINE4  0x54     /**< DDRAM address of first char of line 4 */
8
#define LCD_WRAP_LINES      0     /**< 0: no wrap, 1: wrap at end of visibile line */

Wie kann das passieren? Kann durch "kaputte" Datensätze das Display 
"umprogrammiert" werden?
Was passiert wenn in das Display an undokumentierte Stellen geschrieben 
wird?

von Verschobener (Gast)


Lesenswert?

wenn ich das Display wär, hät ich mich bei 24V auch verschoben...

von Dietrich L. (dietrichl)


Lesenswert?

Yalpsid schrieb:
> Dann habe ich meine Schaltung an einem regelbarem Netzteil angeschlossen
> und langsam die Spannung aufgedreht, als ich dann bei 24V war zeigte das
> Display die Zeilen verschoben.

Hast Du die 3,3V (und ggf. die 5V) gemessen, am besten mit Oszi? 
Vielleicht schwingt der/die Regler.
Haben die Kondensatoren vor und hinter den Reglern die richtigen Werte? 
Zeigt mal die Schaltung + Layout.

Gruß Dietrich

von isnah (Gast)


Lesenswert?

Hast du das Datenblatt vom ATmega32, bezüglich der Betriebsspannung, 
studiert?

von Karl H. (kbuchegg)


Lesenswert?

Yalpsid schrieb:

> Wie kann das passieren?

Dieses Display hat eben eine etwas andere Adressaufteilung.
Und? Macht, ja nichts.
Das wird dir noch öfter passieren. Je nach Anzahl der Zeilen und Anzahl 
der Spalten ist das etwas anders.

Der HD_dinsgbums Controller ist so aufgebaut, dass er eigentlich eine 
Zeile mit 80 Spalten 'verwaltet'. Jetzt ist es aber so, dass ein 
2-zeiliges LCD mit leidglich zb 16 sichtbaren Spalten natürlich diese 80 
logischen Spalten überhaupt nicht ausnutzt.
Also legt man die 2.te Zeile zb genau in die Mitte rein und tut so, als 
ob das LCD nur 1-zeilig wäre, wobei von dieser einen Zeile nur die 
Bereich 0 bis 16 und 40 bis 56 angezeigt werden. Und sinnigerweise macht 
man das dann auch noch so, dass diese beiden angezeigten Bereich 
physikalisch übereinander aufs Glas gemalt werden.
Der COntroller denkt, er hätte nach wie vor nur 1 Zeile (die 80 Spalten 
breit ist), dein menschlicher Benutzer sieht aber 2 übereinanderliegende 
Zeilen. Das das für den Controller ein und dieselbe Zeile ist, aus der 
er 2 Ausschnitte an verschiedenen Stellen des LCD sieht, das weiß der 
Mensch ja nicht.

von Yalpsid (Gast)


Lesenswert?

Dietrich L. schrieb:
> Hast Du die 3,3V (und ggf. die 5V) gemessen, am besten mit Oszi?
> Vielleicht schwingt der/die Regler.
> Haben die Kondensatoren vor und hinter den Reglern die richtigen Werte?
> Zeigt mal die Schaltung + Layout.
>
> Gruß Dietrich

Ja hab ich da war der Prozessor noch unprogrammiert. Die Beschaltung ist 
wie in den Datenblättern angegeben. Am DCDC sind Tantal, am Linear 3,3V 
Elkos, der Mega hat an jeder VDD VSS Pärchen einen 100n nach an den 
Pins.

von Yalpsid (Gast)


Lesenswert?

Yalpsid schrieb im Beitrag #3352679:
> Was ist ein Datenblatt?

Bitte löschen war nicht von mir!

von Yalpsid (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Dieses Display hat eben eine etwas andere Adressaufteilung.
> Und? Macht, ja nichts.
> Das wird dir noch öfter passieren. Je nach Anzahl der Zeilen und Anzahl
> der Spalten ist das etwas anders.
>
> Der HD_dinsgbums Controller ist so aufgebaut, dass er eigentlich eine
> Zeile mit 80 Spalten 'verwaltet'. Jetzt ist es aber so, dass ein
> 2-zeiliges LCD mit leidglich zb 16 sichtbaren Spalten natürlich diese 80
> logischen Spalten überhaupt nicht ausnutzt.
> Also legt man die 2.te Zeile zb genau in die Mitte rein und tut so, als
> ob das LCD nur 1-zeilig wäre, wobei von dieser einen Zeile nur die
> Bereich 0 bis 16 und 40 bis 56 angezeigt werden. Und sinnigerweise macht
> man das dann auch noch so, dass diese beiden angezeigten Bereich
> physikalisch übereinander aufs Glas gemalt werden.
> Der COntroller denkt, er hätte nach wie vor nur 1 Zeile (die 80 Spalten
> breit ist), dein menschlicher Benutzer sieht aber 2 übereinanderliegende
> Zeilen. Das das für den Controller ein und dieselbe Zeile ist, aus der
> er 2 Ausschnitte an verschiedenen Stellen des LCD sieht, das weiß der
> Mensch ja nicht.

Ja das ist ja alles ok.

Aber im Datenblatt steht es anders, und es hat ja am Anfang so 
funktioniert wie es im Datenblatt stand, das ist ja das seltsame.

von spess53 (Gast)


Lesenswert?

Hi

>An einem Atmega32 mit Peter Fleury LIB.

Bist du sicher, das die Lib mit den Extended Function Registern umgehen 
kann?

Wie sieht die Initialisierung des Displays aus? Auf jeden Fall würde ich 
alle Shiftoperationen disablen.

Das langsame Hochdrehen der Spannung würde ich unterlassen da dadurch 
Controller und Display zu verschiedenen Zeiten starten können.

MfG Spess

von Erafim (Gast)


Lesenswert?

spess53 schrieb:
> Bist du sicher, das die Lib mit den Extended Function Registern umgehen
> kann?

Ok danke das schaue ich mir an.


> Wie sieht die Initialisierung des Displays aus? Auf jeden Fall würde ich
> alle Shiftoperationen disablen.

Ok, schaue ich mir auch an

> Das langsame Hochdrehen der Spannung würde ich unterlassen da dadurch
> Controller und Display zu verschiedenen Zeiten starten können.

Was kann dadurch passieren?

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.