2010/11/18(木)aitendoのOLEDモジュールと戦う

今回は、徒然な感じの日記になりました。(文体ぐちゃぐちゃはご愛嬌)
「です」「ます」じゃない日記になったw



ずいぶん前に購入し、少しずつ弄ってきたaitendoさんのOLEDモジュールがある。最近は、ベースボードが青色になって再登場、なんだか人気があるようだ。
このモジュールには、色々特徴があって
  1. 有機ELなので発色がすごく綺麗(65000色)
  2. モジュール本体がコンパクト(切手1枚分で画面、もう1枚分で内蔵コントローラ)
  3. 内蔵RAM搭載で低速マイコンでもSPI通信でらくらく動作
  4. コントローラはsolomon systechのSSD1332
な感じ。電子工作好きで小さく何かを作りたいと思っている人はうってつけのような表示モジュールだと思う。
で、aitendoの資料を参考にすると、画面の好きな位置に色(ドット)を打つことができた。マイコンのSPI通信を弄ったことがある人なら非常に簡単だと思う。コードを打ちながら勉強しつつですぐできた。そして、コレは非常に発色が綺麗だしカラーなので面白い。折角ならば関数として四角を描画するRectangle命令、ラインを引くLine命令などを実装しガッツリ使い込む感じにしたいと思い作業をするめる。これも順調にいけたが描画関数のマイコン側の負荷が大きくどうしても描画に時間が掛かる・・・。特にLine描画の計算にforループと乗算、除算を使用したため、使っているマイコンのAtmel AVR ATmega644P@8MHzでは、画面の中心を始点としてぐるりと一周描くのに5秒くらい要している。(64*2+96*2本=Line320回)
 これじゃあ他の処理してる余裕が減るからどうしようかと悩む。そんな時いろいろ調べているうちにどうやらSSD1332にはRectとLineとclearの描画命令があることがわかった。これは調べないとと思ったが、そもそもaitendoにおいてあるデータシートに描画コマンドの説明がない。どういうことだ・・・フルデータシートはどこだ、と探しているうちに発見する。(Googleにて「SSD1332 solomon」で出ました)

 本題はここからで、描画命令版実装してその描画速度の速さに感激していた。Rect命令が自分の実装に比べて特に速かった。
これはすばらしい、とLine命令も試したところ・・・アレ?
なんか右肩上がりの描画だけずれる・・・
OLED_001.jpg


画面の4つの端からクロスをLine描画命令を実行した状態だ。

右肩上がりのLineだけ左方向に数十ドットスクロールしたようにずれている・・・。なんだこれは、と2日間仕事終わりと休日をぶっ通しでチェック、何度やっても、どこを調べても間違いない。UARTデバッグでSPI通信も調べた、そもそも他の命令は全て所望の通信をしている。

もう万策尽きたところ、そういえばあのTimpyで有名なちあきさんも似たような(NKKのスイッチの分解モノだが)の使用していたなと思い出しサイトを調べまくった。Timpy のRev8.0とRev9.0で酷似OLEDを使用している。情報もある、ちあきさんのヤツのコントローラはSSD1331、こちらはスクロール機能もある高機能な感じだ。もうお尋ねしてヘルプするしかないと思い相談させれもらった。

・・・・・・

結果、ズレに関する似たような症状をちあきさんも経験していたのだが、私のとは違う症状という結論にいたった。で、結局「がんばる」という結論になったorz
 ちあきさんのは、液晶が64x48、コントローラが96x48という誤差を埋める必要があった症状だったらしい。

結局、このままではどうしようもないので、自分のなかでは「どうせならこのバグのような症状を埋めれるファームウェアの工夫」を頑張ってみようかと思っている。折角ちあきさんにも色々調べていただいたわけだし、ある意味それが恩返しにもなるのではと思っている。

以前もちあきさんにお世話になりましたが、今回もまたお世話になりました。この場を借りて改めて御礼申し上げます。