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?
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?
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
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.
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
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.
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.
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.
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)
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.
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?
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.
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..
Ach ja, zur Geschwindigkeit. Im Datenblatt steht das der SPI bis zu 33MHz mitmacht. Von daher ist ein Geschwindigkeitsprob. eher unwahrscheinlich.
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.
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....
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 ;-))
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.