Hallo zusammen, ich probiere nun schon eine Weile herum und versuche mein DOGM128 heller zu bekommen. Wenn man auf eine Anzeige senkrecht drauf schaut sieht man nur einen schwarzen Bildschirm. Schaut man seitlich darauf sieht man den Text ganz leicht. Ich hab zwar keinen BG LED aber das sollte ja auch erstmal ohne besser funktionieren. Habe mit dem Kontrast schon rumgespielt jedoch nicht viel erreicht. An einer Stelle geht sogar ein schwarzer Streifen von oben bis unten.. wie kann das sein?? Meine Init Parameter: 0x40,0xA1,0xC0,0xA7,0xA2,0x2F,0xF8,0x00,0x27,0x81,0x25,0xAC,0x00,0xAF Hoffe jemand kann mir da weiterhelfen.. Mfg Tobi
Tobi schrieb: > Ich hab zwar keinen BG LED aber das sollte ja auch > erstmal ohne besser funktionieren. Nicht unbedingt. Nur bei 128W-6 und 128L-6 kann man ohne Beleuchtung etwas sehen... Hört sich ganz so an, als hättest Du ein anderes ;)
Hallo, danke für eure Antworten. Ich habe das 128W! Allerdings habe ich auch Polyester kondensatoren und keine Elkos wie es jemand hier im Forum schon geschrieben hat. Allerdings emitnen die dann auch das es daran nicht gelegen haben kann. -> Beitrag "DOG LCD 128x64 Initialisierung ATmega8 (Assembler)" leider hilft dieser Beitrag dann auch ned weiter. Ich denke ich kann eine Beschädigung ausschließen, da andere dieses Problem auch schon hatten. Siehe auch: Beitrag "Re: EA DOGM128 128x64 Grafik Display" Leider steht dort dann auch keine Lösung. ... Jedoch kann das mit den Elkos doch ned sein da im Datenblatt auch keine verwendet werden?!?!
Achja, komisch ist auch, dass der Bildschrim sowohl bei einer Kontrasteinstellung von 0 als auch 64 dunkel bleibt .. lediglich bei 25 oder 16.. (also ein Wert dazwischen) ganz leicht etwas zu sehen ist. Bei mir tritt auch das selbe Problem auf wie jemand schon schrieb in einem meiner genannten Links, dass bei einem Reset für bruchteile einer Sekunde der Text sehr gut zu lesen ist. Jedoch dann verschwindet wegen des Resets. Komisch ist auch dass es vorkommen kann, wenn ich einen Text anzeige dass dann auf magische weise ein Reset meines ATMegas passiert wenn er sich eigentlich nur in der while(1); schleife am Ende befindet und das Display noch einen String anzeigt. Dieses Verhalten tritt allerdings erst auf seit ich das Display dazugebaut habe. Ich habe die Schaltung schon mehrmals überprüft und kann eine Fehlvertratung somit ausschließen. Ich habe die Schaltung mit den 9 Kondensatoren am Display aus dem Datenblatt aufgebaut und wenn ich sie gegen Masse messe habe ich so zwischen 13,6 und 3 Volt. Man kann grob sagen von Pin 21 bis 25 an denen sich die ersten 5 Kondesatoren befinden wird die Spannung immer etwas weniger .. Hoffe das hilft irgendwie weiter bei der Fehlerlokalisation. Mfg Tobi
Servus, Tobi schrieb: > Kontrasteinstellung von 0 als auch 64 dunkel bleibt .. lediglich bei 25 > > oder 16.. im Datenblatt steht eindeutig 16. Beim DOGM132 steht 1F! Dass sich dieser Wert (16) nicht ändern lässt, ist richtig. Hier meine Initialisierung: 0x40, // Display Start Line 0 0xA1, // Display Normal / reverse A0 0xC0, // Display Normal / reverse C8 0xA6, 0xA2, // Set Bias 0x2F, // Power Control set 0xF8, // Booster Ratio set 0x00, // "" 0x27, // Contrast set 0x81, 0x16, 0xAC, // Static Indicator set 0x00, // "" 0xAF // Display on/off Gruß XMEGA
Beim DOGL habe ich 1206 SMD Keramikkondensatoren 1µF ungepolt verwendet und nach leichtem verändern des letzten Kontrastwertes ein ordentliches Bild erhalten. Holger
XMEGA: stimmt das steht im Datenblatt. Ist aber ja nur ein Beispielwert. 0x81 sagt das ich mit dem folgenden Befehl den Kontarstwert übergeben möchte. dieser kann zwischen 1 und 64 betragen... also so hab ichs zumindest verstanden :) Holger: Hattest du ein ähnliches Problem? Zumindest nutzt du auch keine gepolten Kondensatoren. Weist du noch was du geändert hast? Ich werde mal noch ein paar Kontrastwerte versuchen vielleicht bringts ja was. Hast du die Init sonst wie im Datenblatt übergeben?
Achja, das Display ist von Beginn an komplett schwarz und wenn ich einen Text ausgebe ist dieser nicht zu sehen. Erst wenn ich mein Handy drunter lege ist ganz schwer etwas zu erkennen. Wenn ich diesen Kontrast mit dem Kontrast vergleiche der bei Display an/aus herrscht ist das ein himmelweiter Unterschied. Genau diesen Kontrast müsste man doch auch haben wenn alles korrekt funktioniert?!?
Hatte es in einem anderen Thread schon angegeben, meine Init sieht jetzt so aus: 0x40,0xa1,0xc0,0xa6,0xa2,0x2f,0xf8,0x00,0x27,0x81, 0x13 <-- diesen Wert habe ich von 0x10 auf 0x13 geändert. 0xac,0x00,0xaf Ich hatte ganz wenig Kontrast und hellere Sreifen abhängig vom Inhalt der oberen Zeilen. Jetzt läuft es. Holger
Hallo Holger, danke für deine Antwort. Leider bringt diese Einstellugn bei mir keinen Erfolg :( Ansonsten habe ich deine beschriebenen Effekte mit den Streifen auch. Ich bekomme es auch nicht hin, dass das Display am Anfang alles hell ist anstatt dunkel. Sobald ich das Display initialisiere wird alles schwarz. Müsste ja A6/A7 sein um das umzustellen. Passiert aber nicht viel. Leider
Komplett schwarz sollte es am Anfang nicht sein, nach der Init wird bei mir zufälliger Inhalt angezeigt, also verstreute Pixel. Vielleicht ist noch ein Fehler bei deiner Ansteuerung. Mit welcher Taktfrequenz steuerst du es an ? Ich habe PIC 18F mit "handgemachter" SPI mit 16 MHz. Die Pins sind mit Widerständen auf 3,3V angepasst. Holger
hab am ATMega 11,0592 MHerz. ein Lipo versorgt das ganze ohne widerstände.. also alle shat ein wenig mehr Spannung als es soll. Dürfte aber nichts ausmachen. SPI Takt ist gerade auf 1/16. Habe aber gerade noc heine andere Erkenntnis gewonnen. Und zwar habe ich im laufenden Betrieb knallhart die Kondensatoren nacheinander rausgezogen. Plötzlich war ein Bild da als ich alle Kondensatoren die auf Masse liegen entfernt hatt Oo. Hab dann in zufälliger Reihenfolge die Kondensatoren wieder reingebaut. Mal wurde es besser mal schlechter .. aber wenn alle drin sind ist es wieder schwarz. Hab auch unterschiedliche Kontraste in der Schrift.
Tobi schrieb: > ein Lipo versorgt das ganze ohne widerstände.. also alle shat ein wenig > mehr Spannung als es soll. Dürfte aber nichts ausmachen. Also volle 4,2 Volt am LCD? ->Außerhalb der Specs?
Also der Lipo liefert nur 3,7 Volt. Komischerweise macht der Kondensator am VOut das Display komplett schwarz und der erste an Pin 21 auch... hm..
Dann wird wohl der interne Booster eine zu hohe Spannung erzeugen. Ich würde die Spannung mal reduzieren oder Boosterratio verändern. Holger
Tobi schrieb: > Also der Lipo liefert nur 3,7 Volt. Das steht wohl auf dem Akku drauf? Schon mal gemessen, was wirklich rauskommt? Was meinste wohl, warum der Hersteller der Displays einen Spannungsbereich angibt, in dem das LCD arbeitet? Aus Jux? Oder weil er Langeweile hat?
hab die 3,7 gemessen... aber gut hab nen Spannungsbegrenzer eingebaut und hab nun glatte 3,3 Volt (gemessen :) ... immer noch das gleiche... werde das mit dem Booster noch probieren... hab ausserdm einen senkrechten Streifen der nie verschwindet.. egal was ich mache.. er wirkt irgendwie bläulich... komisch... vermute das zumindest an der Stelle das Display nen Fehler hat..
witzig... wenn ich die Masse ziehe blebt genau dieser evtl. kaputte Streifen im Display stehen. Hat dafür jemand ne erklärung?
so nach stundenlangen Versuchen hab ich nun endlich ein Bild. Allerdings verhält sich das ganze jetzt etwas komisch. Ich habe im ersten Schritt sichergestellt, dass auch alle 9 Kondesatoren wirklich Kontakt haben (Baue das ganze auf einem Steckbrett als Versuch auf) und dann ging es ohne Streifen. Allerdings war der Kontrast noch sehr wenig. Gerade habe ich dann mal die Masse, welche zum Display läuft, herausgezoegn und was passiert? Ich habe ein einwandfreies Bild?!?!?!??!?! Ich verstehe die Welt nicht mehr woher der nun seine Masse zieht. Habe alle anderen Stromzweige mal abgetrennt, 5V Wandler, und Netzwerkchip. Somit habe ich nur noch den ATMega32 und das Display angeschlossen. Was kann man da groß falsch machen? Jemand ne Ahnung??
So hab das nun auch hinbekommen. Das mit der Kontrasteinstellung ist ja ein riesen Mist. Ich hab jetzt mal in einer Schleife im 0,5 Sec. Takt alle Kontraste durchlaufen lassen wärend ein Text sichtbar war. Der Kontrast wechselte ca. 10 mal von schlecht nach gut. Schaltete ich die Masse wieder dran, verhielt es sich genau andersrum. Somit konnte ich die Masse wieder anschließen und fand dann den besten Wert für den Kontrast heraus. Die Spec ist echt schlecht dokumentiert da man dort eindeutig versteht, dass der Kontrast von 0 bis max eizustellen ist und nicht so ein auf und ab! Wobei ich noch nicht ganz durchsteige ist das beschreiben der Pixel. Wenn ich (wie aus einem Tutorial) die Initialisierung mache und danach : $00, $7F, $09, $09, $76 an daten sende soll angeblich ein "R" herauskommen. Im Tut kann ichs nachvollziehen allerdings kommt bei mir eine 8 Pixel hohe komplett schwarze Zeile heraus?!?! Oo In dieser Zeile findet man nur irgendwo eine 0x09 wieder sonst nichts. Kann das jemand von euch verstehen? Mfg Tobi
hm, habe noch ein Problem beim Display beschreiben. Und zwar wenn ich ein Byte irgendwo auf das Display schreibt funktioniert das auch jedoch wird der Rest der Zeile dann schwarz. Ist das normal? Finde dazu nichts in der Spec. Mfg Tobi
Hab mal ein Bild angehägt wie das rauskommt.. Jemand ne Idee? Bin so langsam ratlos..
Ohne die Ansteuerung zu kennen wird das wohl schwer. Mein DOGL tut ... Holger
sag was du brauchst und du bekommst es :) was machst du z.b. vom Start bis zum senden des ersten Zeichens im Code alles? Start - SPI init - displ. init - zeichen senden... könntest du mir mal bitte nen codeschnippsel hier reinwerfen? Zum Vergleich....
achso du hast nen DOGL ich hab nen M ... weis jetzt ned ob das nen riesen Unterschied macht.. Hier mal bissl was ich so mache: ----------- SPI -------- uint8_t init_spi(){ // Set SPI PIN Configuration SPI_IO = SPI_IO_CONF; LCD_IO = LCD_IO_CONF; LCD_CS_PORT |= LCD_CS_PIN; // CS auf 1 = LCD Disable // SPI Master aktivieren SPCR = SPI_CONF; //double speed SPSR |= 0x01; return 1; } void enable_LCD(){ LCD_CS_PORT &= ~(LCD_CS_PIN); // CS auf 0 = LCD Enable for (int a = 0;a<100;a++){ SPDR = 0xFF; loop_until_bit_is_set(SPSR,SPIF); } } void disable_All(){ LCD_CS_PORT |= LCD_CS_PIN; // CS auf 1 = LCD Disable for (int a = 0;a<100;a++){ SPDR = 0xFF; loop_until_bit_is_set(SPSR,SPIF); } } -------- DISPLAY Functions ----------- volatile unsigned char char_x=0,char_y=1,char_height_mul=1,char_width_mul=1; uint8_t init_display(){ //Reset the Display Controller LCD_PORT_RST &= ~(LCD_PIN_RST); _delay_ms(100); LCD_PORT_RST |= (LCD_PIN_RST); asm("nop"); display_write_byte(LCD_CMD,DISPLAY_START_LINE); display_write_byte(LCD_CMD,LCD_TOPVIEW); display_write_byte(LCD_CMD,LCD_SCAN_DIR_NORMAL); display_write_byte(LCD_CMD,LCD_NORMAL); display_write_byte(LCD_CMD,LCD_BIAS_1_9); display_write_byte(LCD_CMD,LCD_POWER_LOW_POWER); display_write_byte(LCD_CMD,LCD_BOOSTER_SET); display_write_byte(LCD_CMD,LCD_BOOSTER_6); display_write_byte(LCD_CMD,LCD_VOLTAGE_MAX); display_write_byte(LCD_CMD,LCD_VOLUME_MODE_SET); display_write_byte(LCD_CMD,LCD_VOLUME_MODE_REG_MIN+0x24); display_write_byte(LCD_CMD,LCD_INDICATOR_OFF); display_write_byte(LCD_CMD,LCD_INDICATOR_MODE_OFF); display_write_byte(LCD_CMD,LCD_ON); //display_clear(); return 1; } void display_write_byte(uint8_t isCommand, unsigned char data) { enable_LCD(); if(isCommand == 0) LCD_PORT_A0 &= ~(LCD_PIN_A0); else LCD_PORT_A0 |= LCD_PIN_A0; SPDR = data; while(!(SPSR & (1<<SPIF))); disable_All(); } void display_clear(){ unsigned char row, col; for(row=0;row<8;row++) { //display_goto_Point(1,row); for (col=0;col<132;col++) { display_goto_Point(col,row); display_write_byte(LCD_DATA,0x00); } } } void display_goto_Point(unsigned char x, unsigned char y){ display_write_byte(LCD_CMD,LCD_PAGE_ADDRESS | ((y) & 0x0F)); display_write_byte(LCD_CMD,LCD_COL_ADDRESS_MSB | ((x>>4) & 0x0F)); display_write_byte(LCD_CMD,LCD_COL_ADDRESS_LSB | ((x) & 0x0F)); } -------------- MAIN ---------- // SPI Init uint8_t ret = init_spi(); LED_PORT_GREEN |= LED_PIN_GREEN; // Turn on green LED // Display Init //display_clear(); ret = init_display(); //char_x=0;//0-128 //char_y=1; //0-8 //display_write_str("DASistEINtestGANZ"); //char_x=0; //char_y=2; //display_goto_Point(0,1); display_write_byte(LCD_DATA,0xF7); // display_goto_Point(1,1); display_write_byte(LCD_DATA,0x09); // display_goto_Point(2,1); display_write_byte(LCD_DATA,0x09); // display_goto_Point(3,1); display_write_byte(LCD_DATA,0x66); while(1);
DOGL unterscheidet sich vom DOGM ... Also ich nutze einen PIC 18F2520, 16MHz Quarz, alles in Assembler. Initialisierung, danach Ausgabe in Pages, dann (im Bild) Ausgabe über eigenen Pixelroutinen. Waits zwischen den Ausgaben gibt es keine, nicht mal ein NOP. Prinzipiell scheint es ja bei dir zu funktionieren, ich vermute mal du sendest zu viele Zeichen. Du hast den (vermutlich) fehlerhaften Code, poste doch mal. Mit C oder Atmel Assembler kann ich dir aber leider nicht viel helfen. Holger Edit: ok hat sich überschnitten, ich schau mal ... Edit2: nee sorry da muss ich passen ... da möchte ich nicht mal wissen was das tut: LCD_PORT_A0 &= ~(LCD_PIN_A0);
klar... es sieht so aus als würde ich zu viele Zeichen senden.. allerdings wenn ich mal nicht einen character sende mit der entsprechenden umfangreicheren Funktion... sondern nur ein Byte sende... also wie man oben im Code ja sieht, passiert da nicht viel mehr als 4 Byte senden fertig... Was auch komisch ist, wenn ich ein clear mache dann läuft die obere Funktion durch und auf dem Display wir jede Zeile erstmal schwarz.. also jede Page bevor sie dann von links nach rechts hell wird.. das Ganze dauert komischerweise auch knapp 2 Sek. .. zu lange?!?!? Ich habe einen ATMega32 .. an dem hängt nen Quarz mit 11,0952 MHz und SPI ist auf 1/2 Takt gestellt..
LCD_PORT_A0 &= ~(LCD_PIN_A0); schaltet den Port an dem A0 hängt aus LCD_PORT_A0 |= LCD_PIN_A0; schaltet ihn an... das funktioniert... habs sogar gemessen :) .. zeichen kommen ja auch an..
Da muss ich mich jetzt ausklinken, lese aber weiter mit, wenn mir noch was auffällt meld ich mich wieder. Ich setz mein Pin mit einem ordinärem BSF LCD_PIN_A0 Viel Erfolg Holger
Hier mal wie es bei mir funktioniert: DOGM128-W6, Schaltung ist die 3.0/3.3V Single Supply aus dem Datenblatt, Spi-Takt 12 MHz, Spi-Mode = 3, Kondensatoren sind keramische X7R, 1 uF, 25V, 0603. Was allerdings Probleme bereiten kann (das Teil ist hier auch gesteckt, damit es richtig im Gehäuse sitzt), ist eben diese Verbindung d.h. kein richtiger Kontakt -> kein Kontrast und/oder Streifen, wackeln hilft dann hin und wieder. Die Lösung war ein billiger, aufgetrennter IC-Sockel mit Federkontakten. U.U. kann es auch am Reset liegen
1 | void LCDInit() { |
2 | DOGM128SELECT(); |
3 | DOGM128A0HIGH(); |
4 | DOGM128RSTHIGH(); |
5 | |
6 | DOGM128RSTLOW(); |
7 | // wait 500 us
|
8 | Wait(100); |
9 | Wait(100); |
10 | Wait(100); |
11 | Wait(100); |
12 | Wait(100); |
13 | DOGM128RSTHIGH(); |
14 | |
15 | DOGM128A0LOW(); |
16 | |
17 | // init see datasheet
|
18 | DOGM128Send(0x40); |
19 | DOGM128Send(0xa1); |
20 | DOGM128Send(0xc0); |
21 | DOGM128Send(0xa6); |
22 | DOGM128Send(0xa2); |
23 | DOGM128Send(0x2f); |
24 | DOGM128Send(0xf8); |
25 | DOGM128Send(0x00); |
26 | DOGM128Send(0x27); |
27 | DOGM128Send(0x81); |
28 | DOGM128Send(0x16); |
29 | DOGM128Send(0xac); |
30 | DOGM128Send(0x00); |
31 | DOGM128Send(0xaf); |
32 | |
33 | DOGM128DESELECT(); |
34 | }
|
Hi, mal eine Frage:
1 | void display_write_byte(uint8_t isCommand, unsigned char data) |
2 | {
|
3 | enable_LCD(); |
4 | |
5 | if(isCommand == 0) |
6 | LCD_PORT_A0 &= ~(LCD_PIN_A0); |
7 | else
|
8 | LCD_PORT_A0 |= LCD_PIN_A0; |
9 | |
10 | SPDR = data; |
11 | while(!(SPSR & (1<<SPIF))); |
12 | |
13 | disable_All(); // <---- |
14 | }
|
Die Funktion sieht grob gesagt ok aus, aber disable_All ???? WAS SOLL DAS???
1 | void disable_All(){ |
2 | LCD_CS_PORT |= LCD_CS_PIN; // CS auf 1 = LCD Disable |
3 | for (int a = 0;a<100;a++){ // <--- |
4 | SPDR = 0xFF; // <--- |
5 | loop_until_bit_is_set(SPSR,SPIF); |
6 | }
|
7 | }
|
was soll das bewirken??? hiermit sendest du die schwarzen Balken!!!! mfg Stephan
oh man du hast recht... wie kann man denn so daneben sein :) Das ist ein übernommenes Codestück aus einem anderen Projekt mit eienr SD Karte bei der das gesendet werden soll... ich hab das jetzt unetrbewusst wie ein Delay betrachtet und hab mit meinem eingefahrenen Blick da immer drüber weggeschaut!!! Heiei... Vielen Dank Stephan!!!
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.