[ASM] SSD1306 Grafik Library für OLED Displays

OP #6515047
Lesenswert?
• ▲
▼
Ich hab es ja schon in einem anderen Thread vorgestellt. Nun dachte ich 
trenne ich es mal von der Text Library zum ssd1306 ab.
Denn hier geht es jetzt um Grafik!

Leider benötigt Grafik einiges an Ressourcen auf einem AVR, aber auch 
anderswo. Vor allem RAM!

Mindestanforderung an RAM des AVR's sind 2kB für diese kleinen 
128x64 Pixel OLED Displays.

Angefangen habe ich mit den Grafik Grundfunktionen wie Pixel setzen, 
Linie zeichnen. Inzwischen gibt es noch einige andere Funktionen mit 
zugehörigen Macros.

In der Grafik SSD1306_GFX.inc stehen folgende Funktionen zur Verfügung:
- oled_set_pixel
- oled_draw_hline
- oled_draw_vline
- oled_draw_line
- oled_draw_rect
- oled_draw_fill_rect
- oled_draw_round_rect
- oled_draw_round_fill_rect
- oled_draw_circle
- oled_draw_fill_circle

NEU dazugekommen:
- oled_draw_Gauge

 auf den
kleinen OLED Displays möglich. Ich habe dazu auch eine Library
geschrieben. Alles in ASM!

Text mit unterschiedlichen Fonts in unterschiedlichen Größen und eben
ein wenig Grafik wie Rechtecke, Linien, Kreise und abgerundete
Rechtecke.

In der Grafik SSD1306_GFX.inc stehen folgende Funktionen zur Verfügung:
- oled_set_pixel
- oled_draw_hline
- oled_draw_vline
- oled_draw_line
- oled_draw_rect
- oled_draw_fill_rect
- oled_draw_round_rect
- oled_draw_round_fill_rect
- oled_draw_circle
- oled_draw_fill_circle

Ach ja, wenn man das T-Flag vor Aufruf der Funktion setzt, dann wird
nicht gezeichnet, sondern das Objekt gelöscht. Und es existieren
auch MAKROS um die Funktionen einfacher aufzurufen, zumindest wenn man
mit festen Werten (Konstanten) für Koordinaten und Längen arbeitet.
Somit kann man dann zum Beispiel eine Linie mit
1
ldi    XL,0   ; Startpunkt X
2
ldi    YL,3   ; Startpunkt Y
3
ldi    XH,10  ; Endpunkt X
4
ldi    YH,20  ; Endpunkt Y
5
rcall  oled_draw_line
oder mit MACRO
1
draw_line   0,3,10,20    ; (Xstart,Ystart,Xende,Yende)
eine Linie zeichnen. Möchte man allerdings eine Linie (oder welches
Objekt auch immer) löschen, setzt man einfach vor dem Funktionsaufruf
das T-Flag.
Beispiel: Löschen eines eines gefüllten Rechtecks mit abgerundeten Ecken
1
set                          ; setze T-Flag
2
draw_rfrect  10,10,30,14,4   ; (Xstart,Ystart,Xweite,Yhoehe,radius)
3
clt                          ; lösche T-Flag wieder
als MACRO

Ausprobieren erwünscht!

Als nächstes soll noch eine Analog Uhr kommen. Und dann geht es an die 
Umsetzung mit SSD1351.

Gruß AVRSteffen
Angehängte Dateien:
OP #6516447
Lesenswert?
• ▲
▼
Ich hab jetzt mal einen ATmega4809 genommen. Der hat mehr RAM, 6k sogar. 
Dadurch konnte ich noch 2 Layer im RAM hinzufügen und diese nur für 
Grafik verwenden. So gibt es jetzt 2 Grafiklayer und einen Textlayer. 
Durch die beiden Grafiklayer konnt ich das Rundinstrument beschriften 
ohne das mir der Zeiger die Beschriftung löscht und ich die jedes mal 
erneut schreiben muss.

Das Prinzip ist einfach. Ich hab es oben mal dargestellt. So hatte ich 
das vor Jahren auch schon bei der Anzeige meines Eigenbau Speicher 
Oszilloskops gelöst.

Um in Text in den zweiten Grafiklayer zu schreiben muss man vorher 
wieder einmal das T-Flag setzen, um der Funktion "sendChar" die Auswahl 
des Speicherbereichs (Layer) im RAM zu ändern. Somit wird nicht in den 
Textlayer geschrieben.

Steffen
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.