Skip to content

Instantly share code, notes, and snippets.

@tinytintoy
Last active September 20, 2017 14:18
Show Gist options
  • Save tinytintoy/51ed73b7afae9cabcb9fb1a6890b6f94 to your computer and use it in GitHub Desktop.
Save tinytintoy/51ed73b7afae9cabcb9fb1a6890b6f94 to your computer and use it in GitHub Desktop.
ATtiny85 で I2C 接続の OLED を制御する

SSD1306 を使用した 0.96 インチの OLED を、ATtiny85 で I2C 接続で制御したい。

ATTiny85 での動作確認は、ソフトウェアの書き込みが手間なので開発は Arduino pro mini 3.3V を使う。

Arduino pro mini ではハードウェア I2C が使用できるが、Arduino 化した ATtiny85 ではできない。 そこでソフトウェアで I2C 通信ができる TinyWireM ライブラリを使用する。

開発用 Arduino pro mini では 0.96 OLED の制御を OzOLED で Wire ライブラリ経由で行う。 ATtiny85 では、TinyOzOLED でTinyWireM ライブラリ経由で行う。

接続するピン

Arduino

  • SDA => A4
  • SCL => A5

ATtiny85

  • SDA => 5
  • SCL => 7

使用するライブラリ

Arduino

  • Wire
  • OzOLED

ATtiny85

  • TinyWireM
  • TinyOzOLED

環境によってコードを書き換えなくていいように、マクロでインクルードするファイルを切り分け。

#if defined(__AVR_ATtiny85__)
#include <TinyWireM.h>
#include <TinyOzOLED.h>
#else 
#include <Wire.h>
#include <OzOLED.h>
#endif

OzOLED.cpp の init() に

sendCommand(0x8d); //Charge Pump
sendCommand(0x14);

上下が反転するのを防ぐために OzOLED.cpp と TinyOzOLED.cpp の init() に

sendCommand(0xA0 | 0x1);//SEGREMAP 0xA0/0xA1
sendCommand(0xC8);//COMSCANDEC 0xC0/0xC8	

を追加。

備考

  • Big Number font 、TinyOzOLED で2つ追加されている(?)のでどちらかに合わせたほうが良い
  • ATtiny85 では I2C を 400KHz にはできない?CPUの差?
  • ATtiny85 を 16mhz で動作させるために Arduino 化する時、Bootloader を書き込む
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment