Micro:bit mit OLED 128×64
von Rainer R.
An
den Micro:Bit kann man auch komplexere Komponenten anbinden. Wenn man
ihn mit der ARM mbed-Plattform programmiert stehen für viele
Erweiterungen schon Beispiele oder Bibliotheken zur Verfügung die
direkt eingesetzt werden können. Sicherlich muss noch etwas angepaßt
werden, aber oft kann man sich viel Arbeit sparen. Eine solche
Komponente ist auch ein OLED-Display welche es in den
unterschiedlichsten Varianten gibt. Wichtig ist hier der auf dem
Display verwendete Treiberbaustein, denn danach richtet sich die
Ansteuerung.
Verbreitet ist u.a der Treiber SSD1306 der auch bei
den beliebten 128×64 OLEDs verbaut wird. Diese Display gibt es in
unterschiedlichen Farben, und Ausführungen. Manche werden über I2C- und
manche über SPI-Bus angesteuert. Dieses Display wird auch mit anderen
Mikrocontrollern wie z.B dem Arduino oft verwendet. Von ADAfruit werden
hierfür Bibliotheken zur Ansteuerung und Grafiksteuerung zur
Verfügung gestellt; auch kann man dort zahlreiche Display kaufen. Die
auf der ARM mbed-Plattform bereitgestellten angepassten Bibliotheken
beruhen auf dieser Basis.
Hier wird ein Modul mit Ansteuerung
über einem I2C-Bus gewählt. Es sind nur vier Leitungen zu verdrahten
VCC, GND und die Steuerungsleitungen SDA und SCL. Die I2c Basis
Addresse ist hier 0x78 und kann auf der Rückseite des Displays
abgelesen / eingestellt werden.
Die Micro:Bit Platine und das OLED-Display werden wie folgt verbunden:
Micro:Bit | OLED | Programm |
GND | GND | |
Pin 0 | VCC | p3 |
Pin 1 | SDA | p2 |
Pin 2 | SCL | p1 |
Wie
man in der Tabelle sieht, ist im Programm die andere Namensgebung der
anzusteuernden GPIOs zu berücksichtigen. Über Pin 0 wird die
Betriebsspannung des OLED-Moduls geschaltet um ein zuverlässiges RESET
der Anzeige zu erreichen.
Bleibt noch die durch „Import library“
hinzuzufügende Bibliothek. Es wird in dem Beispiel die von Neil Norman
angepasste Adafruit_GFX Library genutzt.
Und hier das Beispielprogramm main.cpp:
#include "mbed.h"
#include "Adafruit_SSD1306.h"
//
// Beispiel Ansteuerung OLED 128x64, I2C mit BBC Micro:Bit
//
class I2CPreInit : public I2C
{
public:
I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl)
{
frequency(100000);
start();
};
};
//----------------------------------------------------------
// Beispiel OLED 128x64, I2C, an Micro:Bit
//
// Achtung: unterschiedliche GPIO Bezeichnungen beachten
// PIN0 --> p3 --> VCC
// PIN1 --> p2 --> SCL
// Pin2 --> p1 --> SCA
//
// 0x78 --> I2C Address
//----------------------------------------------------------
DigitalOut P0(p3);
I2CPreInit myI2C(p2,p1);
Adafruit_SSD1306_I2c myOled(myI2C,p3,0x78,64,128);
int main()
{
P0 = 1;
uint16_t x=0;
myOled.begin();
//---------- Display löschen -------------------------------
myOled.clearDisplay();
myOled.display();
wait(0.1);
//---------- Ring zeichnen ---------------------------------
myOled.fillCircle(64, 42, 10, 1);
myOled.display();
wait(1);
myOled.fillCircle(64, 42, 5, 0);
myOled.display();
wait(1);
//---------- Display löschen -------------------------------
myOled.clearDisplay();
myOled.display();
wait(0.1);
//---------- Text und Zahlen schreiben --------------------
myOled.printf("\r\n OLED %ux%u \r\n\r\n Hello World\r\n\n", myOled.width(), myOled.height());
//---------- Rechteck zeichnen --------------------------
myOled.drawRect(0, 0, 128, 64,1);
myOled.display();
wait(0.5);
while(1)
{
myOled.printf("%u\r ",x);
//---------- Rechteck zeichnen ---------------------------------
myOled.drawRect(0, 0, 128, 64,1);
myOled.display();
x = x + 1;
wait(0.01);
}
}
Elektronik-Labor Projekte Microbit