User manual

75 76
10. OLED
10.1 Aufbau einer graschen Anzeige
Die 7-Segment-Anzeigen werden normalerweise nur für Ziffern verwendet und ganz eingeschränkt auch für
Buchstaben. Mit 14- und 16-Segment-Anzeigen lassen sich auch Buchstaben brauchbar darstellen. Danach
gab es dann die ersten Rasteranzeigen, mit einer Matrix von 5x7 Punkten konnte man die Schriften schon viel
besser darstellen, aber auch erste graphische Symbole waren hiermit möglich. Die Anzeigen basierten zunächst
auf LEDs, dann kamen LCDs (Liquid Crystal Displays) auf den Markt und neuerdings auch OLEDs (Organic Light-
Emitting Diode), diese sind wieder den LEDs ähnlicher, da sie selbst leuchten können. Unser Set enthält ein
monochromes OLED Display mit 64x48 Pixeln. Damit lassen sich nicht nur einzelne Zeichen sondern auch ganzer
Text und einfache Graken darstellen. Damit man Zeichen in dieser Weise auf dem Display darstellen kann, be-
nötigt man einen Zeichengenerator, bzw. Tabelle, so ähnlich wie die 7-Segmenttabelle. Der numerischen Code
wird für die Segmente in den Zustand an und aus gesetzt. Der Zeichengenerator oder die Zeichensatztabelle
benötigt ungleich mehr Speicher. Der Wert hängt von der Zahl der Pixel ab. Bei den kleinsten mit ca. 5x7 Pixel,
werden etwa 5 Bytes pro Zeichen benötigt. Wenn man damit den ganzen ASCII-Satz (128 Zeichen inkl. Lücken)
darstellen möchte, braucht man 128 x 5 Bytes = 640 Bytes. Für den Nano-Brick haben wir eine solche Zeichen-
tabelle vorbereitet, die noch etwas anders aufgebaut ist. Damit wird es möglich auch Unicode Sonderzeichen,
die nicht im ASCII-Satz enthalten sind, darzustellen. Um eine bessere Lesbarkeit zu erreichen, ist der Font etwas
größer und der Schriftabstand variabel (Proportionalschrift). Zu Erzeugung wurde der BitFontCreator PO v3.0
verwendet, mit dem sich unterschiedliche Schriften in Raster für Mikrocontroller und damit auch den NANO
generieren lassen.
Unser Brick belegt eine I2C Adresse, die entweder 0x78 oder 0x7A ist, je nach Schalterstellung von SW1 auf der
Rückseite der Platine. Der innere Schalter bestimmt die Adresse, normalerweise trägt er die Beschriftung „1“.
Die OLED wird über I2C programmiert und hat einen eigenen Controller an Board.
In unserer kleinen Bibliothek gibt es Aufrufe, mit denen man Zeichen, Texte, Linien usw. leicht anzeigen kann,
was die folgenden Beispiele noch verdeutlichen.
C OLED 64x48
SCL
SDA
SCL
SDA
+9V
Adr:8x,Xx
+9V
Adresse 78 oder 7A
Schalter auf ON dann
78
// Auszug aus unserem CODE:
// Einzelne Zeichen codiert
const unsigned char fontArial14h_data_tablep[] PROGMEM =
{
/* character 0x0020 (‚ ‚): [width=3, offset= 0x0000 (0) ] */
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* character 0x0021 (‚!‘): [width=2, offset= 0x000E (14) ] */
0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x00, 0x80, 0x00, 0x00, 0x00,
...
};
// Tabelle mit offsets in die Zeichentabelle
const unsigned int fontArial14h_offset_tablep[] PROGMEM =
{
/* offset offsetHex - char hexcode decimal */
/* ======= ========= - ==== ======= ======= */
0, /* 0 - 0020 32 */
14, /* E - ! 0021 33 */
28, /* 1C - „ 0022 34 */
...
1876, /* 754 - extra address: the end of the last character‘s
imagebits data */
};
// Breitentabelle
const unsigned short fontArial14h_width_tablep[] PROGMEM =
{
/* width char hexcode decimal */
/* ===== ==== ======= ======= */
3, /* 0020 32 */
2, /* ! 0021 33 */
4, /* „ 0022 34 */
...
8, /* ? 2642 9794 */
8, /* ? 266B 9835 */
};