mikrocontroller.net

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


Autor: Christian Sowada (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
test mal ADC reverse aus.

Autor: Christian Sowada (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Befehl: Common Output Mode Select.

MfG Spess

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Sowada (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Sowada (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Sowada (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
SPCR = 0 << SPIE | 1 << SPE | 0 << DORD | 1 << MSTR | 1 << CPOL | 1 << CPHA | 0 << SPR1 | 0 << SPR0;
SPSR = 1 << SPI2X;
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)

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian Sowada schrieb:
> Hier die Initialisierung, ist die aus deinem Bsp.
>
> SPCR = 0 << SPIE | 1 << SPE | 0 << DORD | 1 << MSTR | 1 << CPOL | 1 <<
> CPHA | 0 << SPR1 | 0 << SPR0;
> SPSR = 1 << SPI2X;
> SPDR = 0;
> 
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.

Autor: Christian Sowada (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ghd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: ghd (Gast)
Datum:

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

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ghd (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Christian Sowada (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Juuunngggsss, danke, dnake danke.

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

Also
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 ;-))

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.