Ich habe ein merkwürdiges Problem mit einem DOGM-128 Grafik-Display. Die Initialisierung klappt, Controller ist ein 90CAN32 auf 16 MHz, der SPI läuft auf 4 MHz, der Controller auf 5V, das Display auf 3V. Optimiert ist auf -O2. /CS und /Reset werden über Transistoren angesteuert mit Pullup-Widerständen - also invertiert in der Software, SI, SCLK und A0 sind über Spannungs-Teiler angeschlossen. Hier mal der aufs Minimum reduzierte Test-Code. --- while(1) { PORTA |= (1<<PORTA0); // select display for(display_page = 0; display_page < 8; display_page++) { PORTA &= ~(1<<PORTA2); // Command, A0 Low SPDR = (0xB0 | display_page); // Set page address to <page> while(!(SPSR & (1<<SPIF))); // Wait for transmission complete SPDR = 0x10; // Set column address to 0 (4 MSBs) while(!(SPSR & (1<<SPIF))); // Wait for transmission complete SPDR = 0x00; // Set column address to 0 (4 LSBs) while(!(SPSR & (1<<SPIF))); // Wait for transmission complete display_var = (uint16_t)display_page * 128; PORTA |= (1<<PORTA2); // Write Data, A0 High for(display_counter = 0; display_counter < 128; display_counter++) { SPDR = display_ram[display_var | display_counter]; while(!(SPSR & (1<<SPIF))); // Wait for transmission complete } } PORTA &= ~(1<<PORTA0); // de-select display _delay_us(10); } --- Pro Durchlauf wird der Inhalt eines 1KB grossen Puffers an das Display gesendet, dieser Puffer wurde vorher mit einem Bild gefüllt. So wie das da steht läuft das gerade seit etwa >10 Minuten ohne Absturz, ab und zu flackert mal eine Spalte des Displays. Jetzt das "Problem". Wenn ich das "_delay_us(10)" rausnehme oder gar das Display dauerhaft aktiviere, stürzt das Display nach wenigen Sekunden ab. Quasi unmittelbar beginnt eine der Spalten zu flackern und kurze Zeit später geht das Display ganz aus. Zugegeben, der Code macht so keinen Sinn, eigentlich habe ich das Problem auch überhaupt nicht, da ich das Display in 32 Byte Häpchen bediene. Nur bin ich aber neugierig und wüsste schon gerne, woran das liegen könnte. Das Datenblatt von dem Display ist ja nun denkbar dünn. **** Und in dem Datenblatt von dem Display-Controller habe ich auf dieses Verhalten auch keinerlei Hinweis gefunden. Da steht nur drin das empfohlen wird das Setup in regelmässigen Abständen zu wiederholen für den Fall, dass das Teil durch eine verrauschte Umgebung gestört werden könnte. Aber über das Timing eines einzelnen Zugriffs hinaus gibt es ja keinerlei Angaben. **** Habe ich was übersehen? Braucht das Display Zeit um sein DRAM zu refreshen? Oder spinnt das Ding einfach nur? Ach so, ein zweiter identischer Aufbau hat das Problem auch. Edit: Hinweis auf Datenblatt vom Display-Controller hervorgehoben...
Hi Hol dir doch einfach mal das Datenblatt vom Controller (lcd-module.de). Da sollte mehr dirn stehen. MfG Spess
Hi >for(display_page = 0; display_page < 8; display_page++) Das Display hat aber nur Page0...Page7. >for(display_counter = 0; display_counter < 128; display_counter++) Und auch nur Column0...Column127. Falls ich das mangelnder C-Kenntnisse falsch interprtiert habe, Entschuldigung. MfG Spess
Hallo, naja, selbst ohne C ist < 8 max. 7 und < 128 max. 127... ;-)) Gruß aus Berlin Michael
>Das Display hat aber nur Page0...Page7.
Die for-Schleife bricht nach 7 ab. Also kein Problem.
spess53 wrote: >>for(display_page = 0; display_page < 8; display_page++) > > Das Display hat aber nur Page0...Page7. > >>for(display_counter = 0; display_counter < 128; display_counter++) > > Und auch nur Column0...Column127. > > Falls ich das mangelnder C-Kenntnisse falsch interprtiert habe, > Entschuldigung. Es läuft solange wie der Wert kleiner ist, das stimmt schon so. Und das Display hat eine Seite 8 für Symbole, die Spalten gehen intern bis 132, ein Überlauf würde also nur zu einer falschen Anzeige führen. Das würde ich wiederrum sofort an dem Bild sehen. Es läuft jetzt bald eine Stunde so wie oben, die kleine Pause wird gebraucht, nur warum möchte ich wissen.
Ich hab auch nen komischen Effekt. Beim Schreiben eines bestimmten Pixels besteht die Chance, dass sich das Display verabschiedet (wird weiß), und sich auch nicht wieder durch Initialisierung zum Leben erwecken lässt Dazu kommt, dass der Booster spinnt... Dadurch, dass das Ding bereits mit ner Beleuchtung verlötet ist, kann ich mir einen Umtausch wohl auch schenken -.-
Ok, Fehlinformation. Er scheint das nur zu machen, wenn ich SPI mit 10 MHz bzw. f/2 betreibe. Im Datenblatt steht, dass 20 MHz möglich wären...
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.