Forum: Mikrocontroller und Digitale Elektronik DOGM132 - Text horizontal gespiegelt.


von Christian Sowada (Gast)


Lesenswert?

Hallo,

ich habe gerade meinen DOGM132 an laufen bekommen. Ich habe die Lib von 
"Jan Michel" verwendet. Leider wird mit der normalen Initialisierung der 
gesamte Text horizontal gespiegelt. Wenn ich das Display auf dem Kopf 
(12 Uhr) betreibe ist alle in Ordnung. Dazu verwende ich:

"LCD_ORIENTATION_UPSIDEDOWN();" -> lcd_command(0xC8);

Weitere Angaben:

AVR168 per SPI an DOGM132
AVR 5V -> DOG 3V

Ich habe die Konfiguration mittlerweise von "Low Power" auf "Wide Range" 
geändert. Keine Änderung

Hat da jemand eine Idee?

von Flo (Gast)


Lesenswert?

test mal ADC reverse aus.

von Christian Sowada (Gast)


Lesenswert?

Das bringt gar keine veränderung. An dem Parameter hab ich auch schon 
rumgespielt. Eigentlich solle damit das Display um 180° gedreht werden. 
Passiert aber nichts. Nur mit dem Parameter C0/C8 kann ich das Display 
um 180° drehen. Nur das bei 6 Uhr alles spiegelverkehrt ist.

Merkwürdig?

von spess53 (Gast)


Lesenswert?

Hi

Befehl: Common Output Mode Select.

MfG Spess

von Flo (Gast)


Lesenswert?

Also laut DB muss bei der 6 Uhr Posi
- ADC auf reverse (0xA1)
- Common View auf Normal (0xC0)

falls das auch nicht hilft, poste mal deine Initialisierung

von Christian Sowada (Gast)


Lesenswert?

Wie gesagt, ich verwende die LIB von Jan M. Hier mal der Link.

Beitrag "Re: Library für EA-DOGM Grafikdisplays inkl. Font-Generator"

Hab dort auch die Initialisierung beibehalten. Ich habe das auch mit der 
Std. Initialisierung verglichen, passt.

Was ich aber merkwürdig ist, ab und zu wird die Anzeige nach einem 
Neustart
auf 6 Uhr spiegelverkehrt anstatt 12 Uhr angezeigt. Strom ab/an, dann 
ist es wieder richtig.

von spess53 (Gast)


Lesenswert?

Hi

>Was ich aber merkwürdig ist, ab und zu wird die Anzeige nach einem
>Neustart
>auf 6 Uhr spiegelverkehrt anstatt 12 Uhr angezeigt. Strom ab/an, dann
>ist es wieder richtig.

Dann hast du entweder ein Timing- oder ein Hardwareproblem. Welches 
Interface benutzt du?

MfG Spess

von P. S. (Gast)


Lesenswert?

Faellt mir aber gerade in Bezug auf die DOGM-Displays ein: Mein 128er 
resettet sich, wenn man es anblitzt. Bei schlechter Spannungsversorgung 
duerfte das auch schnell passieren.

von Christian Sowada (Gast)


Lesenswert?

Ok, ich steuere mein Display per SPI an.
Als Spannungsversorgung verwende ich einen Festspannungsregler, +3,0V, 
0,16A, TO-92 (Reichelt: LP 2950 CZ3,0) und die 
Vielschicht-Keramikkondensator 1,0µ (Reichelt: Z5U-5 1,0µ).

Mein AVR wird mit 5V betrieben und alle Leitungen per Treiber 74HC 4050 
auf 3V reduziert. Ich stelle heute Abend mal einen Schaltplan rein.

von Jan M. (mueschel)


Lesenswert?

Christian Sowada schrieb:
> "LCD_ORIENTATION_UPSIDEDOWN();" -> lcd_command(0xC8);

Zusaetzlich muss auch noch das gemacht werden:
LCD_SET_BOTTOM_VIEW(); -> lcd_command(0xA1);

Der eine Befehl spiegelt das Display horizontal, der andere vertikal.


>Was ich aber merkwürdig ist, ab und zu wird die Anzeige nach einem
>Neustart
>auf 6 Uhr spiegelverkehrt anstatt 12 Uhr angezeigt. Strom ab/an, dann
>ist es wieder richtig.

Dazu solltest du neben dem Schaltplan auch noch die Initialisierung der 
SPI-Schnittstelle zeigen - das klingt definitiv nach einem Timing 
Problem.

von Christian Sowada (Gast)


Lesenswert?

Genau dieser Befehl hat bei mir gar keine Wirkung. Es ist also egal ob 
ich LCD_SET_BOTTOM_VIEW() oder LCD_SET_TOP_VIEW() verwende.

Aber ich finde es echt Klasse, das man hier so viel Hilfe bekommt.
Und Jan, dein Script ist ansonsten echt Perfekt für mich. Danke.

Hier die Initialisierung, ist die aus deinem Bsp.
1
SPCR = 0 << SPIE | 1 << SPE | 0 << DORD | 1 << MSTR | 1 << CPOL | 1 << CPHA | 0 << SPR1 | 0 << SPR0;
2
SPSR = 1 << SPI2X;
3
SPDR = 0;

Mein AVR läuft mit 8Mhz internen Takt.

Was mir gerade auffällt, ich habe SPI Interrupt an. Hab aber keinen 
definiert. Das würde bei der Einstellung für 4Mhz SPI Takt passen.

Das ist ja der erste Befehl der per SPI verschickt wird. Kann es sein, 
das da das Signal noch nicht richtig im Takt ist?

Was ich gerade gesehen hab, fehlt in der Initialisierung nicht der 
Befehl Nr. 2 an erster Stelle? (Display start line 0 -> 0x40)

von Jan M. (mueschel)


Lesenswert?

Christian Sowada schrieb:
> Hier die Initialisierung, ist die aus deinem Bsp.
>
1
> SPCR = 0 << SPIE | 1 << SPE | 0 << DORD | 1 << MSTR | 1 << CPOL | 1 <<
2
> CPHA | 0 << SPR1 | 0 << SPR0;
3
> SPSR = 1 << SPI2X;
4
> SPDR = 0;
5
>
Ich würde SPDR hier mit LCD_NOP laden, "0" ist ja kein gültiger Befehl.

> Mein AVR läuft mit 8Mhz internen Takt.
Das heißt, SPI läuft mit 4 MHz - sollte eigentlich noch funktionieren, 
aber setze die Geschwindigkeit doch probehalber etwas herunter.

> Was mir gerade auffällt, ich habe SPI Interrupt an. Hab aber keinen
> definiert. Das würde bei der Einstellung für 4Mhz SPI Takt passen.
SPIE ist doch 0?

> Das ist ja der erste Befehl der per SPI verschickt wird. Kann es sein,
> das da das Signal noch nicht richtig im Takt ist?
Der erste Befehl der verschickt wird, ist die 0, die du in SPDR 
schreibst. Eventuell hilft auch ein kurzes Delay nach LCD_RESET(); bei 
der Initialisierung.

> Was ich gerade gesehen hab, fehlt in der Initialisierung nicht der
> Befehl Nr. 2 an erster Stelle? (Display start line 0 -> 0x40)
Das steht bei mir als letztes in der Initialisierungsroutine, sollte 
aber keinen Unterschied machen, die Displays sind da sehr flexibel.

von Christian Sowada (Gast)


Lesenswert?

Hui, du bist aber schnell.

Ich werde deine Anregung heute Abend mal umsetzen. Meine Schaltung liegt 
natürlich Zuhause.

Jetzt ist mir auch ein Licht aufgegangen, warum dein Code UART 
verwendet. Denn nutzt du im SPI Modus, richtig? Hat das spezielle 
Gründe/Vorteile?

von Jan M. (mueschel)


Lesenswert?

Der Grund, dass ich die USART im SPI-Modus verwende ist ganz einfach: 
Die richtige SPI-Schnittstelle ist schneller (F_CPU/2 maximal) und 
deswegen schon mit einem RFM12-Modul belegt. Die USART war noch frei und 
mit F_CPU/8 für das Display noch bei weitem schnell genug.

von ghd (Gast)


Lesenswert?

Wenn das Display im normalen Modus (also nicht gespiegelt) beschrieben
wird, und danach um 180° gedreht wird ist das ganze spiegelverkehrt weil
die Adressen der Pixel im gedrehten Modus anders sind. Schau mal im 
Datenblatt.
Zu deinem Fehler (Display wird um 180° gedreht). Ich vermute mal
das die Routinen Fehlerhaft sind. Hatte genau das gleiche Prob..

von ghd (Gast)


Lesenswert?

Ach ja, zur Geschwindigkeit. Im Datenblatt steht das der SPI bis zu 
33MHz
mitmacht. Von daher ist ein Geschwindigkeitsprob. eher unwahrscheinlich.

von Jan M. (mueschel)


Lesenswert?

ghd schrieb:
> Ach ja, zur Geschwindigkeit. Im Datenblatt steht das der SPI bis zu
> 33MHz mitmacht.

Der Controller kann bei 3.3V 20MHz, bei 2.7V 10MHz und bei 1.8V 5MHz 
laut Datenblatt.
Das schliesst aber Christians Level-Converter nicht mit ein - dieser ist 
bei 10 MHz bei 3.0V auch schon an seiner Grenze.


> Wenn das Display im normalen Modus (also nicht gespiegelt) beschrieben
> wird, und danach um 180° gedreht wird ist das ganze spiegelverkehrt weil
> die Adressen der Pixel im gedrehten Modus anders sind. Schau mal im
> Datenblatt.

Die Adressen ändern sich nur unwesentlich, die Schreibroutinen können 
unverändert bleiben. Nur: Die Spalten sind nicht mehr von 0 bis 127 
durchnummeriert, sondern von 4 bis 131. D.h. die Daten sind um vier 
Pixel nach links verschoben.

von ghd (Gast)


Lesenswert?

Ich habe auch nur geschrieben das der SPI des Displays bis zu 33MHz
mitmacht.
Er betreibt das Disp. mit 4MHz. Also ist das sicherlich nicht
das Prob..

Ja, stimmt schon, aber nicht wenn das Display mit Inhalt beschrieben
ist und dann gedreht wird. Dann ist alles Spiegelverkehrt.

Zuerst LESEN dann DENKEN und dann SCHREIBEN.
Es wäre sinnvoller sich um das Problem zu kümmern als zu Klugsch....

von Christian Sowada (Gast)


Lesenswert?

Juuunngggsss, danke, dnake danke.

Es war ganz allein das 0 Byte was ich vor der initialisierung übertragen 
hab!

Also
1
SPDR = 0;
 vor der Initialisierung ist BÖSE !!!

Aber ich muß euch allen sehr danken, Ihr bemüht euch echt sehr.

(Ich freu mich wie ein Schneekönig ;-))

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Witzig, genau das Problem hatte ich vor 2 Stunden, habe unbewußt vor der 
Init eine "0" gesendet und alles war gespiegelt. Sachen gibt´s...

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.