「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



こないだうまく表示できなかった、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年くらいだから、いまさら
そこまで手を加える価値も無いんだよな。




コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする