Forum: Mikrocontroller und Digitale Elektronik Mega32 + u8glib: Funktioniert nur direkt nach dem Flashen


von Martin S. (tungl)


Lesenswert?

Hallo zusammen,

habe hier gerade folgende Konstellation vor mir: ATMega32, an dem ein 
kleines OLED-SPI-Display mit SSD1306-Controller haengt (CLK an PB7, MOSI 
an PB5, CS an PB4, D/C an PB1). Habe mir mangels Lust, tiefer in das 
Datenblatt einzusteigen, die u8glib runtergeladen. Das funktioniert 
auch... zumindest zeigt das Display nach dem Flashen des Programms was 
an. Aber auch nur direkt nach dem Flashen. War dann einmal der Strom 
weg, bleibt das Display dunkel (Programm laeuft aber, LED blinkt).

Code sieht folgendermassen aus:
1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
#include "u8g.h"
4
u8g_t u8g;
5
6
void draw(void)
7
{
8
  u8g_SetFont(&u8g, u8g_font_6x10);
9
  u8g_DrawStr(&u8g, 0, 15, "Hallo Welt!");
10
  u8g_DrawStr(&u8g, 0, 40, "Hallo Welt!");
11
12
}
13
14
15
int main(void)
16
{
17
    DDRB = 0b11111111;
18
    
19
    u8g_InitSPI(&u8g, &u8g_dev_ssd1306_128x64_hw_spi, PN(1, 7), PN(1, 5), PN(1, 4), PN(1, 1), U8G_PIN_NONE);
20
21
    for(;;)
22
    {
23
        u8g_FirstPage(&u8g);
24
        do
25
        {
26
            draw();
27
        } while ( u8g_NextPage(&u8g) );
28
        u8g_Delay(100);
29
        PORTB ^= ( 1 << PB2 ); // Blinke-LED
30
    }
31
    return 0;
32
}

Habt ihr irgendwelche Ideen, woran das liegen koennte?

Vielen Dank schonmal!

von Thomas D. (t0mmy)


Lesenswert?

Vielleicht versucht du nach dem Power-Up zu schnell auf das Display 
zuzugreifen? Nach dem Flashen ist das Display ja schon lange 
"hochgefahren".

von Martin S. (tungl)


Lesenswert?

Thomas Decker schrieb:
> Vielleicht versucht du nach dem Power-Up zu schnell auf das Display
> zuzugreifen? Nach dem Flashen ist das Display ja schon lange
> "hochgefahren".

... autsch. Ja, das war's. Das Display braucht tatsaechlich eine Weile. 
Danke!

von Martin S. (tungl)


Angehängte Dateien:

Lesenswert?

Ich nochmal... leider funktioniert es noch nicht hundertprozentig. Die 
Uebertragung scheint sehr fehlerbehaftet zu sein, bei jedem Neuaufbau 
des Bildes kommt etwas anderes an (siehe Video).

Hat jemand eine Idee bzw. Erfahrungen mit der u8glib (Hardware-SPI)?
Die SPI-Routinen habe ich fuer den Mega32 (hoffentlich) entsprechend 
angepasst (siehe Anhang).

: Bearbeitet durch User
von Test (Gast)


Lesenswert?

Hast du mal probiert die SPI Frequenz zu verringern ? Evtl ist es zu 
schnell fürs Display oder deine Leitungsführung ist nicht optimal

von Martin S. (tungl)


Lesenswert?

Ja, ganz vergessen, das dazuzuschreiben. Habe testweise mal SPR0 bzw. 
SPR1 auf 1 gesetzt, um die Frequenz zu verringern. Dann funktioniert es 
allerdings gar nicht mehr.

von U8glib (Gast)


Lesenswert?

Funktioniert es mit SW SPI besser? (_hw_spi durch _sw_spi ersetzen)

Oliver

von Martin S. (tungl)


Lesenswert?

Mit Software-SPI geht es auch leider gar nicht.

von Martin S. (tungl)


Lesenswert?

Nachtrag: Mit Software-SPI laeuft es mittlerweile, keine Ahnung, warum 
das gestern Abend nicht ging. Mit HW-SPI leider immernoch das gleiche 
Bild. Hat da jemand noch 'ne Idee?

von Heinz F. (Gast)


Lesenswert?

Hatte ein ähnliches Verhalten beim dogs102 am attiny, wollte den Pin für 
RST sparen. Mit RST angeschlossen und bei Init angegeben lief es dann 
zuverlässig.

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.