u8glib device schreiben / framebuffer füllen für LED Matrix

Grüße,
ich habe eine 144x36 LED Matrix die ich via Multiplexing ansprechen muss. Das Multiplexing habe ich soweit gelöst. Ich habe jetzt einen 648 Byte großen Framebuffer den ich via timer interrupt aufs display multiplexe, das klappt problemlos, schnell und ohne flackern. Der RAM reicht theoretisch auch für einen double framebuffer, aber das ist eher Nebensache.

Wichtig ist mir jetzt, ich will diesen Framebuffer per u8glib (oder guter alternative? nehm gerne Vorschläge entgegen) mit Inhalt füllen.
Soweit ich das verstehe kann die u8glib intern nicht mit einem kompletten Framebuffer arbeiten, sondern rendert immer nur einen kleineren Bildausschnitt und führt dann eine Geräteabhängige Funktion aus die diesen Bildausschnitt in den Display-Framebuffer schreibt um Ram zu sparen.

Wie bekomme ich nun die u8glib möglichst effizient dazu, meinen kompletten Framebuffer mit Inhalt zu füllen? (Effizient heisst vermutlich mit wenigst möglich Picture-Loops?)
Vermutlich werde ich ein eigenes “device” für die Bibliothek schreiben müssen… Ich habe mir das Flipdisc-Beispiel angesehen, aber so wirklich gut dokumentiert ist da ja leider nichts. Hat da jemand eine bessere Doku?

Prinzipiell sehe ich zwei Möglichkeiten:

  1. die u8glib macht intern ihr Ding mit kleinen Bildausschnitten und die Funktion die sonst auf das Gerät schreiben würde, schreibt dann eben in meinen Framebuffer
  2. ich schaffe es dass die u8glib das Display nur in einen Bildausschnitt teilt und greife dann irgendwie auf den internen Buffer der Bibliothek zu um ihn auszulesen, statt ihn unnötig in meinen eigenen Framebuffer zu kopieren

Hat jemand schonmal so ein Framebuffer-Device geschrieben? Oder hat jemand eine Ahnung wie man das macht? So schwer kann es ja nicht sein (wenn man die u8glib intern etwas kennt ;)). Leider weiss ich garnicht wo ich ansetzen soll…

Mein interner Framebuffer ist übrigens horizontal angelegt (siehe Anhang). Ich kann das Display MSB first oder LSB first befüttern, das soll also erstmal egal sein.

Bin für Hinweise dankbar :slight_smile:

Wichtig ist mir jetzt, ich will diesen Framebuffer per u8glib (oder guter alternative? nehm gerne Vorschläge entgegen) mit Inhalt füllen.

Wenn Du einfach nur "füllen" willst, dann nimm doch memset.

Falls es um Text, Linien, Kreise usw. geht, müsstest Du mal spezifizieren, was genau gemacht werden soll.

Hier wurde mal besprochen, wie man den Buffer einer Graphiklib benutzen kann.

Ich würde mir auf die Schnelle eine funktionierede LCD / OLED / LED Lib nehmen, die interessanten Stellen rauskopieren und am Ende auf den gewünschten Buffer + gewünschte Farbtiefe umrechnen.

Gruss,

Helmuth

Äh ja, stimmt, was ich zeichnen möchte hab ich nicht gesagt :wink:
Primitive wie Rechteck, Ellipse, Linien und vor allem Text sollten drin sein. Text am besten mit variabler Zeichenbreite. Hohe Framerate (>5fps) brauchts nicht (ok, scrollender Text wäre nett, muss aber nicht).
An sich, denke ich, bietet die u8glib schonmal das was ich brauche. Nur scheint das Framebuffer konzept nicht ganz zu passen :confused:

Für Fonts und variable Zeichenhöhe ist u8glib eine gern genommene Lösung.

Wenn Du die nehmen willst, wird es wohl darauf hinauslaufen

A) deren Buffer vor jedem Frame auszulesen, umzusortieren und in Deinen Buffer zu schreiben, oder

B) die interessanten Funktionen rauszukopieren und anzupassen, damit sie gleich in Deinen Buffer schreiben.

Du brauchst also ein x/y Mapping für Deinen Buffer und musst das Mapping des u8glib Buffers verstehen.

Von letzterem habe ich keine Ahnung, aber falls es irgendwo eine getPixel Funktion gibt, steht da alles nötige drin.

Grüße,

Helmuth