電子工作の人気部品で、
SSD1306という、0.96インチの表示器があります。
明るい表示、小型・軽量・省電力。I2C接続だと信号線は2本だけ。
しかし、Adafruit等の既存ライブラリは多機能な分
なんだか動作が遅かったり、ちらついたり、桁がズレたり、フォントが読みにくかったり、
微妙なものが多かったです。
「こっちは手っ取り早く文字が表示できりゃいいんだよ!」 ←本音
というわけで、ムダを省いて軽さを追及した、SSD1306表示プログラムを自作しました。
・Wire.hのみ使用
・英数字+記号、白黒反転表示
・横16×縦4文字限定
・差分表示で高速化
差分表示とは。「前回の表示との差だけ、書き換える」というやり方で、
昔のゲームで描画の遅さを補うために使われていた手法です。
文字はAtariをベースにしたフリーフォントを、自分が見やすいようにドット修正しました。
SSD1306の制御は、以下の記事を参考にさせて頂きました。
ArduinoでOLEDをライブラリ無しで表示してみる – imo Lab. (garchiving.com)
結果は以下の通り。
I2Cのクロック周波数=400kHzと800kHzで、以下を試しました。
①全画面書き換え ②差分で16文字程度(25%)書き換え ③差分で3文字程度(5%)書き換え
計測時間は誤差があるので目安程度で(右下の数値表示にかかる時間を含むため)
1フレーム(1画面)の表示にかかる時間は
400kHzで ①約65ミリ秒 ②約19ミリ秒 ③約4ミリ秒
800kHzで ①約41ミリ秒 ②約12ミリ秒 ③約2ミリ秒
最大負荷の全画面書き換えでも、15~24フレーム/秒で表示できるようです。
画面の変化が数文字程度ならば、200フレーム/秒以上の速度が期待できそうです。
もっさり遅いイメージだったI2C版 SSD1306で、機能をしぼって軽く速い表示ができました。
これでセンサの値やログを表示するのが楽になりそうです。