SSD1306 I2C 128x64 Graphic OLED. Based on SSD1308_128x64_I2C library.

Dependencies:   SSD1308_128x64_I2C

Dependents:   lcd-ssd1306-test DisplayOled1 DisplayOled1 DisplayOledi2c ... more

This is 128x64 Graphic OLED library. It was to ensure that it works in the mbed LPC1768 and STM32 Nucleo-L476RG.

このOLEDはSSD1306というのを使っているらしいです。mbedで公開されている SSD1306のライブラリではI2C信号線の他にRST信号線を使うようになっていますが、このモジュールにはRSTはありません。SSD1308用のライブラリではRSTは使っていなかったので、これを利用してみました。

SSD1306と1308の違いはチャージポンプの有無だけらしいので、class SSD1308を継承してコンストラクタでチャージポンプをONにするようにしました。他は一切いじっていませんので、使い方は SSD1308のメンバ関数の説明やサンプルを参照してください。

mbed LPC1768での動作を確認しています。
Nucleo-L476RG - では何故か動きません。現在調査中です。 - での動作も確認しています。
最初のバージョンで動かなかったのは I2C::start() を使っていたためでした。ST-Nucleoでは、これはうまく動かないらしいです。

/media/uploads/jk1lot/oled.jpg

Committer:
jk1lot
Date:
Sat Aug 06 07:23:40 2016 +0000
Revision:
0:5a8d4b7cb1f5
Child:
1:acebf73682c6
1st published version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jk1lot 0:5a8d4b7cb1f5 1 #ifndef SSD1306_H
jk1lot 0:5a8d4b7cb1f5 2 #define SSD1306_H
jk1lot 0:5a8d4b7cb1f5 3
jk1lot 0:5a8d4b7cb1f5 4 #include "SSD1308.h"
jk1lot 0:5a8d4b7cb1f5 5
jk1lot 0:5a8d4b7cb1f5 6 class SSD1306 : public SSD1308 {
jk1lot 0:5a8d4b7cb1f5 7 public:
jk1lot 0:5a8d4b7cb1f5 8 SSD1306(I2C &i, uint8_t add) : SSD1308(i,add),_i2c(i),address(add) {
jk1lot 0:5a8d4b7cb1f5 9 _i2c.start();
jk1lot 0:5a8d4b7cb1f5 10 _i2c.write(address);
jk1lot 0:5a8d4b7cb1f5 11 _i2c.write(COMMAND_MODE); _i2c.write(0x8d); //charge pump enable
jk1lot 0:5a8d4b7cb1f5 12 _i2c.stop();
jk1lot 0:5a8d4b7cb1f5 13 _i2c.start();
jk1lot 0:5a8d4b7cb1f5 14 _i2c.write(address);
jk1lot 0:5a8d4b7cb1f5 15 _i2c.write(COMMAND_MODE); _i2c.write(0x14); //charge pump ON
jk1lot 0:5a8d4b7cb1f5 16 _i2c.stop();
jk1lot 0:5a8d4b7cb1f5 17 setDisplayFlip(false, false);
jk1lot 0:5a8d4b7cb1f5 18 }
jk1lot 0:5a8d4b7cb1f5 19 private:
jk1lot 0:5a8d4b7cb1f5 20 I2C& _i2c;
jk1lot 0:5a8d4b7cb1f5 21 uint8_t address;
jk1lot 0:5a8d4b7cb1f5 22 };
jk1lot 0:5a8d4b7cb1f5 23 #endif