こないだうまく表示できなかった、I2C接続のSSD1306
OLED。表示がおかしかった理由がわかった。
ちょこっとスケッチを直したら、うまく表示できた。
文字表示。
pset条件、preset条件で、ドットや線描画。
混ぜ混ぜして色々表示したイメージ。
動かなかった理由は、単に、「Control/Data」を
切り替えるコードを送るときに、その制御コードの
フォーマットをちゃんと意識してなかった点。
SPIだと、0ならコントロールコード、1ならデータ
という具に、digitalWrite使って制御するんだけど、
その値をそのまま出力していたせい。
ただしくは、この様に、6ビットシフトしておく
必要があった。(詳しくはデータシート参照)
というわけで、そこを直したら動いた。
(ちゃんとデータシート読め、というお話)
初期化の制御コードなんかも、SPIとまったく一緒で
ちゃんと動いた。
で、表示内容はokなんだけど、問題は速度。やっぱり、
くそ遅い。1ドットずつ左上から右下にドット単位で
埋めて画面フィル(消去)する処理が、ものすごい遅い。
まぁ、想像通りといえば想像通りなんだけど、SPIと
比較にならない遅さ。画面1面ドットでフィルすると、
何秒もかかっちゃう。
(SPIだと、ほとんど一瞬で描画が終わる)
SPI用と、メイン処理もライブラリも、処理を共用させて
いるので、非効率な処理をしているのは重々承知で、
これを直せばもう少しくらいは速く動くんだけど、あまり
共用してる部分を直したくない。
本当は、コントロールコードにしても、データにしても、
1回の通信でまとめて送信できるんだけど(※)、最大32
バイトまで、みたいな条件があったりするので、そこまで
考えて処理組むと、面倒になるのは避けられないので、
とりあえず互換性を重視してみた。
現状は、1バイトのコントロールコード/データを送る
のに、I2Cのスタートコンディションからストップ
コンディションまでの、一式(数バイト)を送っている
ので、そりゃ無駄が多いというしだい。
(※:Coに1を立てる(0b10000000)ことで、連続して
コントロールコード/データを連続して送れるから、
これを使えば、数倍程度には出来るはず)
あと、ちょっと困っちゃったのは、2個買っておいた
I2Cモジュール2つのタイプ(両方ともSSD1306チップ)
のうち、もう1個も同じように動くだろうと思って
付け替えて動かしてみたら…
こんな状態。どうやら、ビットイメージデータを連続して
送ると、こんな風に自動では次の行(=page)に移動
してくれなくて、こんな風に同じ行に上書きをしてしまう
っぽい。
adafruitのデモプログラムがちゃんと動かなかったのも、
多分同じところが原因だろうな。
まぁ、これまで作ってたSPI用のライブラリと、メイン側
はまったく同じプログラムで動くっていう状態に出来た
ので、速度の点を除けば色々応用できるようになって、
しめしめ。
あとで、SPIもI2Cも、ライブラリ化したあたりの情報を、
もう少しちゃんと整理した状態で、サイトのほうに載せて
おきたいところなんだけど、やっぱc++のクラス化したり
しないとなぁ…って思ってるところ。C++でクラス書いたり
するの、面倒なんだよな。
http://www.aitendo.com/product/16799
aitendoで真空管。
オイラ、真空管は使い方よくわかんないんだよな。
でも、真空管自体にはロマンを感じるんだよな。
https://twitter.com/num_kadoma/status/784563485652971522
おぉ、なんじゃこれは!!
ただ、オイラ、ポケコンはカシオじゃないんだよな。
ポケコンについては、シャープ原理主義者なんだ
よな。
それにしても、ポケコンのカセットインターフェース
って、すでに外付け機器自体がほぼ絶滅状態だから、
PCとの橋渡しを使うっていう方向性はとてもいい感じ。
https://twitter.com/koba200x1/status/974143115341656064
TX-1って、こんな画面だったっけ?
あと、ほかの問題もぜんぜん解らなかった。
こないだAliexでみつけた、ブギーボードみたいな筆記具。
あれを入手したいなぁと思って以来、そういえば、やっぱ
Wi-Fi内蔵のコンパクトデジカメ欲しいなぁ…と思って、
ヤフオクで安そうなWi-Fiデジカメを物色中。
USBケーブルで転送するの、面倒だし、USBコネクタが劣化
するんだよな。
こないだ、3.5インチベイに取り付けるUSBポート、せっかく
交換したばかりなのに、もう劣化し始めているっぽい。
なんか、接触悪いのか、USBシリアル変換ケーブルの調子が
よくないポートがある。
この際だから、USB3.0のカードも入れて、3.0用の端子を
フロントに生やしておくのもいいよなぁ、と思っている
んだけど、Windows7自体があと2年くらいだから、いまさら
そこまで手を加える価値も無いんだよな。
|