Arduino und Grafikdisplay

Hallo,

ich spiele gerade etwas mit einem Grafikdisplay (ST7920), der u8glib und einem Uno.

soweit ich das bis jetzt verstanden hab, ist das eine ganz andere Welt, als die bisher verwendeten LCD-Displays2004...? Einzelne (Text-)Zeichen auf den Display ausgeben, ohne den Rest der Anzeige zu löschen geht offensichtlich nicht??,

wenn ich an der Anzeige etwas ändern will, muss ich immer den kompletten Displayinhalt übertragen,

die Übertragung muss in einer Schleife erfolgen welche mit u8g.firstpage beginnt, die Schleife wird solang durchlaufen, bis sie durch u8g.nextpage abgebrochen wird. Dann ist der gesamte Displayinhalt übertragen.

Ich kann also, für jeden Displayinhalt den ich ausgeben möchte, eine eigene "Funktion" erstellen, in der alle benötigten Befehle für die Anzeige drinstehen erstellen. Wenn sich Variablen (Werte) geändert haben, rufe ich die entsprechende Funktion auf und das Display wird wieder aktualisiert.

Ist das so richtig, oder gibt es eine einfachere Möglichkeit???

Gibt es zu der LIB und der verwendeten Befehle evtl. auch irgendwo eine deutsche Beschreibung? Ich hab nur die Englische, aber die geht zur Not auch....

Danke Gruß Stefan

..und natürlich einen Guten Rutsch in neuen Jahr!

Hallo,

da ich gerade auch mit zwei verschiedenen 128x64 Grafikdisplays spiele, versuche ich mal ein paar Erklärungen.

Ja, bei diesen Displays mit SPI- oder Parallelanschluss hast du immer den ganzen Displayinhalt als Kopie im Speicher des Controllers, zeichhnest dort hinein und schickst immer das ganze Bild an das Display.

Das heisst aber auch, alles was da an Text- oder Grafikfunktionen geht, ist reine Software auf dem Arduino. Wenn deine Lib was nicht kann, musst du sie halt erweitern, oder eine andere suchen. Ich habe mir die u8glib noch nicht angesehen, würde bei meinem SPI-Display wohl auch gehen. Ich bin dabei mir die beim Display mitgelieferten Beispiele an meine Bedürfnisse anzupassen.

Alles ist manchmal anders bei Displays mit eingebautem Controller. Mein zweites Display hier hat einen eingebauten Mikrocontroller (ATSAM21D, entspricht Arduino Zero). Da läuft die Lib quasi im Display, der eingebaute Controller kümmert sich um die Darstellung, die Kommunikation mit dem Arduino läuft über Textbefehle, in meinem Fall über Serial1 auf dem Teensy.

Ich wünsche auch einen guten Rutsch !

StefanB79: ich spiele gerade etwas mit einem Grafikdisplay (ST7920), der u8glib und einem Uno. ...

Ich kenne das Display nicht, aber wenn es ein Monochrom-Display mit 128x64 Pixeln ist, passt der Bildschirminhalt vollständig in 1 kB (128 x 64 / 8 = 1024). Ein kB ist zwar die Hälfte des RAMs eines ATmega328, aber man muss normalerweise nicht allzu geschickt programmieren, um auch mit dem einen kB Rest-RAM zurecht zu kommen.

Als ich begonnen habe, mit so einem Display zu spielen (Bildchen hier), war mir zunächst wichtig, ein Pixel setzen/löschen zu können. Dann habe ich mir einen einfachen Zeichensatz gestrickt und eine Funktion programmiert, die ein einzelnes Zeichen auf das Display brachte. Dann ...

Es ist viel „zu Fuß Programmiererei“, die ich angestellt habe. Vorteil ist aber, dass ich eine selbstgeschriebene Bibliothek habe, die ich in- und auswendig kenne, die ziemlich klein ist (das u8glib-Ding ist im Vergleich ein Monster) und die entsprechend schnell läuft.

Ich habe nicht alle Postings in diesem Thread gelesen und weiß nicht, was Du am Ende mit dem Display anstellen möchtest. Wenn Du jedoch vorhast, diese Art von Display immer wieder zu verwenden und Dich ein bisschen intensiver mit der Programmiererei beschäftigen möchtest, solltest Du IMO unbedingt versuchen, ohne eine fremde Bibliothek auszukommen. Das ist zwar am Anfang reichlich Arbeit bei Wasser und Brot aber sie lohnt sich, finde ich.

Gruß

Gregor

gregorss: das u8glib-Ding ist im Vergleich ein Monster

Ja, ich habe auch gestaunt, als ich mir die Lib wegen der Frage mal angesehen habe. Die Lib von meinem LCD Display umfasst drei Dateien, davon eine mit einem Font.

Mit Displays dieser Größe kommt der Uno in der Tat noch gut zurecht. Der Teensy ist da manchmal sogar zu schnell, da kommen die Pixel gar nicht hinterher ...

ArduFE: Ja, ich habe auch gestaunt, als ich mir die Lib wegen der Frage mal angesehen habe. Die Lib von meinem LCD Display umfasst drei Dateien, davon eine mit einem Font.

Ich habe meine Bibliothek mal ins Netz gestellt:

http://test.szaktilla.de/gSSD1306.h http://test.szaktilla.de/gSSD1306.cpp http://test.szaktilla.de/keywords.txt

Die ist für ein Display mit dem SSD1306, das via I²C angesteuert wird. In der Headerdatei sind mein Zeichensatz und ein paar für den OP vermutlich nicht brauchbare Bildchen („moin“, „Tach“, „namd“ und „muell“) drin. Ich hatte das mal für eine Art Uhr benutzt, die abwechselnd die Uhrzeit und einen passenden Gruß gezeigt hat. Mittwochs kam statt der Grüße die Erinnerung, dass der Müll an die Straße gestellt werden muss. Mein Zeichensatz ist sehr einfach (AFAIR 7x9 Pixel) und kann bei der Ausgabe nur in ganzzahligen Schritten skaliert werden.

Wie gesagt ist meine Bibliothek ziemlich klein und vergleichsweise einfach, aber dafür gut überschau- und nachvollziehbar.

Gruß

Gregor

Nachtrag: Ich habe gerade gesehen, dass da nicht nur noch meine Bildchen drin sind, sondern auch Dinge, die ich nicht mehr oder nicht fertig programmiert habe. Evtl. bereinige ich meine Bibliothek mal und stelle sie mit Doku online. Mol gugge, gell ...