Hallo, ich versuche seit mittlerweile über einer Woche das Grafikdisplay DOGM128W-6 mithilfe eines Atmega32L 8PU zum Laufen zu bringen. Ich habe die letzten Tage mit meinem Team auch intensiv das Internet und das Forum hier durchforstet, bisher aber ohne Erfolg. Da wir komplette Neulinge im Bereich Mikrocontroller sind, bitte ich euch unsere dummen Anfängerfehler zu verzeihen. Das Display verhält sich so, als ob keine Spannung angeschlossen wäre, es bleibt dunkel. Es blinkt kein einziger Pixel auf. Ich verwende folgende Bauteile: • Atmega32L 8PU • DOGM128W-6 • mySmartUSB MK2 (USB Programmer den es beim MyAVR Board dazu gab) Der USB Programmer wird nach dem Programmieren entfernt, um den als Fehlerquelle auszuschließen. Hier die Pinbelegung: Display ----- Atmega32(PIN) SI MOSI (B5) CS CS (B4) A0 A0 (C2) SCL SCK (B7) Reset ist dauerhaft auf HIGH, da man das Display nicht auslesen kann und nur Daten gesendet werden. Das Display wird in +3,3V Single Supply ohne Hintergrundbeleuchtung betrieben. Die Schaltung ist so aufgebaut, wie beim oberen Schaltbild in dem Datenblatt des Displays auf Seite 4. http://www.lcd-module.de/eng/pdf/grafik/dogm128e.pdf Es werden Kerkos verwendet und ein IC, der die Spannung des MC (5V) auf die des Displays (3,3V) senkt. Im Anhang befindet sich mein verwendeter Code in C, mit dem ich versuche das Display zu Initialisieren. Den hab ich aus dem Initialisierungsbeispiel von der Herstellerseite. http://www.lcd-module.de/deu/disk/development%20service/DOGM128%20ST7565/INIT_DOG_Grafik_7565.c Ich Programmiere den Mikrocontroller mit dem Programm MyAvr. Was ich noch hinzugefügt habe, ist ein simpler Befehl, der irgendwelche Daten ans Display schickt, damit ich weiß, ob das Display richtig initialisiert hat, und ein Taster, mit dem ich die Initialisierung starte. Was ich bisher versucht habe: - mit dem Oszilloskop die am Display ankommenden Signale betrachtet - jeden Ausgang einzeln angesteuert und am Display die Spannung gemessen Rein elektronisch sieht also alles gut aus. Daher würde ich mal vermuten, dass die Programmierung nicht stimmt. Wär schön, wenn jemand eine Idee hätte was ich falsch machen könnte. Ich bin für jede Hilfe dankbar.
>dogSPIout(0xF0);dogSPIout(0xF0);dogSPIout(0xF0);dogSPIout(0xF0);dogSPIo ut >(0xF0);dogSPIout(0xF0); Wenn das die Datenausgabe ist, erreicht ihr damit gar nichts. Seite 5 im Datenblatt: 1. Pageaddress, A0 == 0 2. Column High Nibble, A0 == 0 3. Column Address Low Nibble, A0 == 0 4. Datenbyte, A0 == 1 mfg.
Wow, hab nicht mit einer so schnellen Antwort gerechnet. Ich hab mir die Datenausgabe nochmal angeguckt und zum testen erstmal ganz rausgenommen. Stattdessen hab ich folgene Programmzeile eingefügt #define DISPAN 0xA5 //Alle Pixel an und direkt am Ende der Initialisierung dogSPIout(DISPAN); Laut Datenblatt sollte das alle Pixel anmachen. Es tut sich aber immernoch nix. Es sind uns beim rumspielen allerdings einige Dinge aufgefallen. Ist es möglich, dass der interne Quarz des Atmega32 zu ungenau ist für das Display? Ich meine nein, aber mein Kollege meint, dass es definitiv daran liegt. Ist es zwingend notwendig den Reset auf LOW und dann wieder auf HIGH zu setzen? Wir haben ihn im Augenblick dauerhaft auf HIGH um Pins zu sparen, aber die Hälfte der Beispiele die man findet, beinhalten diesen Reset.
Hi >Ist es möglich, dass der interne Quarz des Atmega32 zu ungenau ist für >das Display? Ich meine nein, aber mein Kollege meint, dass es definitiv >daran liegt. Sag deinem Kollegen, das er Unsinn redet. 1. Wie sieht denn die Beschaltung aus? 2. Was für Kondensatoren habt du benutzt. 3. Spannung an Pin32 nach der Initialisierung? >Stattdessen hab ich folgene Programmzeile eingefügt >#define DISPAN 0xA5 //Alle Pixel an >und direkt am Ende der Initialisierung >dogSPIout(DISPAN); Wozu? Mach einfach ein Programm, das nur alle notwendigen Initialisierungen incl. DOG enthält. Nach erfolgreicher Initialisierung sind auf dem Display zufällige Pixel zu sehen. MfG Spess
Das Display wird in +3,3V Single Supply ohne Hintergrundbeleuchtung betrieben. Die Schaltung ist so aufgebaut, wie beim oberen Schaltbild in dem Datenblatt des Displays auf Seite 4. http://www.lcd-module.de/eng/pdf/grafik/dogm128e.pdf Als Kondensatoren haben wir 1µF Kerkos genommen, wie im Schaltplan. Die Spannung kann ich leider morgen erst messen, da ich das Display nicht bei mir habe. Und der Grund warum wir alle Pixel ansteuern wollen, ist der, falls wir durch Zufall oder so den Ram gelöscht haben. Sonst probieren wir rum und merken noch nichtmal, dass das Display schon geht.
Hi
>Als Kondensatoren haben wir 1µF Kerkos genommen, wie im Schaltplan.
Das ist in Ordnung.
Aber deine Initialisierung ist falsch. 'Voltage Regulator Set' fehlt.
'Electronic volume mode set' und 'Static indicator set' sind 2 Byte
Befehle. Da fehlt jeweils das 2. Byte.
Lass einfach mal den ganzen Firlefanz weg und initialisiere das Display
wie im Datenblatt.
MfG Spess
Ich bin nochmal die Initialisierung Zeile für Zeile durchgegangen, und da steht alles genau so wie im Datenblatt. Das ist übrigens auch das Initialisierungsbeispiel von der Herstellerseite. Hab aber den ganzen anderen Müll mal rausgelöscht. Morgen hab ich das Display wieder, dann probier ich das mal alles aus.
Hi >Ich bin nochmal die Initialisierung Zeile für Zeile durchgegangen, und >da steht alles genau so wie im Datenblatt. Das ist übrigens auch das >Initialisierungsbeispiel von der Herstellerseite. Entschuldige, ich hatte den 2.Befehl in den Zeilen übersehen. Aber 'contrast' ist $FF zugewiesen. Der Wert kann max. $3F sein. Gängige Werte liegen bei $1x. MfG Spess
Spess53 schrieb: > Entschuldige, ich hatte den 2.Befehl in den Zeilen übersehen. Aber > 'contrast' ist $FF zugewiesen. Der Wert kann max. $3F sein. Gängige > Werte liegen bei $1x. Danke für die Info! Ich hoffe ich hab mir das Display damit nicht zerschossen. Wenn sonst alles ok ist bei der Initialisierung, können wir die Fehlersuche wenigstens auf die Elektronik beschränken.
Hi >Danke für die Info! Ich hoffe ich hab mir das Display damit nicht >zerschossen. Unwahrscheinlich. MfG Spess
Ok, wir haben das Display heute nochmal getestet. Dabei ist herausgekommen, dass offenbar ein Fehler in folgender Programmschleife stecken muss. void dogSPIout(char out) { char msk; msk = 0x80; do { ClrBit(DOGSCLPORT, DOGSCL); if(out & msk) SetBit(DOGSIPORT, DOGSI); else ClrBit(DOGSIPORT, DOGSI); SetBit(DOGSCLPORT, DOGSCL); msk >>= 1; } while(msk > 0); } Das Problem ist das, dass er nur das erste Bit überträgt und dann aus der Schleife rausspringt. Das haben wir herausgefunden, indem wir 1 sec delay nach jedem Befehl eingefügt haben und uns die LCD Pins mit Dioden anzeigen lassen haben. Danach bin ich auf die Idee gekommen, eine Variable bis 8 hochzählen zu lassen, sodass er auf jeden Fall 8 Durchgänge lang in der Schleife bleibt. Anschließend hab ich noch 8 verschiedene Masken machen müssen. Aber dafür scheint er jetzt die Daten so zu übertragen, wie er es machen sollte. Den Code hab ich mal in den Anhang gepackt, auch wenn der langsam unübersichtlich wird. Trotzdem zeigt das Display noch nichts an. Kann es sein, dass mein Compiler Probleme hat mit ">>=", oder woran könnte das liegen, dass der das nicht gemacht hat?
Spess53 schrieb: > Und die Spannung an Vout nachgemessen? Sorry, hab ich vergessen zu erwähnen. Die Spannung beträgt 2,8V. Wobei bei der ersten Messung mit dem Multimeter fing die Spannung bei 5V an und ist innerhalb von ca. 5 sec auf 2,8 gefallen. Jetzt ist sie immer 2,8V
Hi
>Sorry, hab ich vergessen zu erwähnen. Die Spannung beträgt 2,8V.
Ohne funktionierende Initialisierung ist das normal. Danach sollten >10V
anliegen.
MfG Spess
Thx für die Hilfe. Jetzt weiss ich wenigstens in etwa wo ich den Fehler suchen muss.
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.