Micro:bit mit OLED 128×64

von Rainer R.     
           
Elektronik-Labor   Projekte   Microbit 



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:BitOLEDProgramm
GND GND
Pin 0 VCC p3
Pin 1 SDAp2
Pin 2  SCLp1


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.




Hier sieht man wie die Verzeichnisstruktur aussehen muss



Die Grafikfunktion ist noch im Module Adafruit_GFX_Config.h durch Entfernung des Kommentarzeichens zu aktivieren.



Im Verzeichnis Classes  kann man sich die weiteren Möglichkeiten der Library in der Class Referenz ansehen.



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