Forum: Mikrocontroller und Digitale Elektronik dogm128 stürzt ab


von Rudolph R. (rudolph)


Lesenswert?

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...

von spess53 (Gast)


Lesenswert?

Hi

Hol dir doch einfach mal das Datenblatt vom Controller (lcd-module.de).
Da sollte mehr dirn stehen.

MfG Spess

von Rudolph R. (rudolph)


Lesenswert?

Das st7565r.pdf lässt sich über das Verhalten nicht aus.

von spess53 (Gast)


Lesenswert?

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

von Michael U. (amiga)


Lesenswert?

Hallo,

naja, selbst ohne C ist < 8 max. 7 und < 128 max. 127... ;-))

Gruß aus Berlin
Michael

von Jörg S. (joerg-s)


Lesenswert?

>Das Display hat aber nur Page0...Page7.
Die for-Schleife bricht nach 7 ab. Also kein Problem.

von Rudolph R. (rudolph)


Lesenswert?

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.

von Tobias B. (roxxity)


Lesenswert?

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 -.-

von Tobias B. (roxxity)


Lesenswert?

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
Noch kein Account? Hier anmelden.