Hallo,
ich nutze die ug8lib zur Ausgabe auf ein 128x64 Oled mit software-spi.
Momentan muss ich auch bei der soft-spi bleiben. Die Displayausgabe im
vorgeschlagenen picture loop dauert bei mir ca. 250 - 300 ms.
in der Doku vorgeschlagener Picture Loop:
1 | u8g_FirstPage(&u8g);
|
2 | do
|
3 | {
|
4 | draw();
|
5 | } while ( u8g_NextPage(&u8g);
|
Um den picture loop zeitlich etwas zu entzerren, würde ich den
Framebuffer gerne verteilt schreiben und zwischenzeitlich in meine
Hauptschleife zurückkehren.
In etwa so:
1 | for(;;)
|
2 | {
|
3 |
|
4 | //...mache etwas anderes
|
5 |
|
6 | if (lcd_update == 1){ //aufruf jede Sekunde
|
7 | lcd_update = 2;
|
8 | u8g_FirstPage(&u8g);
|
9 | draw_static(); //schreiben des statischen Anteils
|
10 | }
|
11 | else if (lcd_update == 2){
|
12 | lcd_update = 0;
|
13 | draw_dynamic(); //schreiben des dynamischen Anteils
|
14 | }
|
15 |
|
16 |
|
17 |
|
18 | }
|
Kurz vorweg:
So wie ich die Doku der lib verstehe, wird beim ersten Aufruf der obere
Teil des Displays geschrieben und im zweiten Aufruf der untere. Ich
zähle in meiner do Schleife allerdings 3 Aufrufe bis u8g_NextPage(&u8g)
"false" wird.
Nun die Frage, wie ich meine draw() Funktionen am günstigsten aufteile?
oben-unten oder dynamisch-statisch?
Am angenehmsten wäre mir dynamisch-statisch, da sich der dynamische Teil
in meiner Hauptschleife permanent ändert und mir ohne vorherigen
framebuffer-reset (u8g_FirstPage(&u8g);) Pixelgewirr entsteht.