PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 128x32 SSD1306 O-LED Display am ATMEGA 328P - nun läuft es!



wkrug
03.01.2021, 10:20
Hallo,

Ich hab mir bei AMAZON diese OLED Displays 128x32 Pixel (https://www.amazon.de/gp/product/B07BDFXFRK/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1) für ein Projekt ( RDS Decoder + Frequenzanzeige )besorgt.
Da nur Text dargestellt werden sollte, hab Ich die lib von Ulrich Radig (https://www.ulrichradig.de/home/index.php/avr/oled-display-ssd1306) benutzt.

Das Ergebnis war, das bei der Schriftgröße 0 nur 4 Pixel einer Zeile angesteuert wurden.
Bei Schriftgröße 1 sah der Text normal aus.

Des Rätsels Lösung:
Bei diesem Display werden nur die Bits 1,3,5,7 angesteuert.
Ulrich hat hier einen Trick angewandt und die Pixelgröße bei Schriftgröße 1 einfach verdoppelt - Dadurch sah es dann auf dem Display wieder "normal" aus.
( Super Trick, man braucht so nur einen Zeichensatz )!

Ich hab dann an der lib folgende Änderungen gemacht:

1. Ein neuer Zeichensatz wurde generiert ( ASCII 0...127 ) mit 9x16 Pixeln und eine dazu passende Ausgaberoutine. Der bestehende Zeichensatz wurde aber weiter verwendet.

2. In der Original lib sind für die X Koordinate nur vielfache von 8 möglich - Hier wurde einfach die Multiplikation x*8 auf x geändert. Dadurch sind nun im Prinzip beliebig breite Zeichensätze verwendbar. Man kann jetzt zusätzlich an jeder beliebigen Stelle mit Text beginnen oled_gotoxy(x,y); x=0...119 .

3. Die Original lib kann nun auch für eine Anzeige auf 4 Zeilen verwendet werden und sieht dann aus wie eine Fett Schrift.

Die lib braucht jetzt allerdings auch gut 8 kByte Speicher, hauptsächlich wegen des neuen Zeichensatzes - Aber das war mir schon von Haus aus klar, darum hab Ich auch gleich nen ATMEGA 328P genommen.

Da die Änderungen relativ gering sind kann man die auch gleich in der Original lib vornehmen.

Zum generieren von Zeichensätzen für AVR Microcontroller verwende Ich das kostenlose Tool von microELECTRONICA.
Das hat allerdings den Schönheitsfehler ( Vorteil ? ), das hier an der ersten Stelle in der Tabelle die Buchstabenbreite angegeben wird.
Das muss man bei der Text Ausgabe Routine berücksichtigen.
Also erst ab Speicherplatz 1 ausgeben.
Hätte allerdings auch den Vorteil, das man damit Proportionalschriften nutzen kann, wenn die Ausgaberoutine angepasst wird.
Außerdem muss vor der Verwendung mit AVR GCC ( oder Studio 7 ) die Initialisierung des Speichers angepasst werden.

Mir hat die Spielerei hier so um die 7 Stunden gekostet bis Ich den Fehler fand.
Ich hoffe dieser Beitrag kann hier jemanden vie Zeit und Frust sparen.

Nun meine Frage hierzu:
Ist das mit den 4 Bit bei allen 128x32 OLED Displays mit SSD1306 Controllern so gelöst?