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