昨日の、F12864G25412P1701液晶用のmbedライブラリ。
結局、ソースコードを1文字1文字見直していって、
ようやく原因判明。
ドットの表示位置がおかしかったのは、なぜだか、
コピペしただけのはずなのに、途中の定数の1箇所が
0xB0から0xE0に書き換わってて、正常なY軸指定の
コマンドになってなかった。なんだこれ?
弄った記憶はないし、5110液晶用ライブラリとはここは
異なる部分だから流用してないし、やっぱ原因不明。
まぁ、直してみたらちゃんとドットが描けた。
あと、大量のランダムラインを描くのが上手くいって
なかったのは、ライブラリ側じゃなくて、呼び出し元
のデモプログラム側だった。これは例によって、char
型のゴニョゴニョした辺りでバグってたみたい。
mbedって、なんでchar型だけ、内部がunsigned char
なんだろう?intとかlongとかはsignedなのに。
まぁ、そう言っても、もともとちゃんとunsigned型と
思って計算式書いてたはずんだけど、128で割った余り
の計算が上手く行ってなかったみたい。よくわからん。
0~255なんだから、128で割った余りを求めれば、
上手くいくはず、と思っていたのに。
で、まぁ、結果。まずは文字列描画。
これは、Y軸は8ドット単位、X軸は1ドット単位で
座標指定可能。フォントが5ドット単位で、VRAMの
横幅(128ドット)とそろわないので、ドット単位
で位置指定できるようにしてある。
1文字単位でも、文字列指定でも、どっちでも扱える。
(1文字用の関数を、文字列用関数が呼び出す)
ただし、文字列表示の途中で画面右端に掛かると、
現状は自動で改行してくれない。自動で改行する
ロジックにしちゃった方が便利だよなぁ…
1文字表示終わったところで、X軸が一定以上なら
改行を自動挿入する、みたいな。
次。ランダムドット。
5000個描いて、ほんの一瞬。Arduinoだと、こんなに
速くない気がしたなぁ。
次。ランダムライン。
1000本描いて、1.5秒くらいかな。この写真は、
描画途中を狙ってパチリと撮ったので、一部の線
は濃く、一部が薄く出てる。
psetで1000本、presetで1000本かいて、あわせて
3秒くらい。やっぱり、Arduinoよりはるかに速い
気がするな。
そもそも、Arduinoと5110液晶で最初に作った当初の
ライブラリでは、ArduinoのdigitalWriteをそのまま
使ったせいで、毎秒30~40本くらいしか描けなかった
んだよな。それを、ポート直接叩くように書き換えて、
それなりの速度になった。
でもmbeedは色々な機種で使いまわししたいから、
ポート直接叩くようなことしてないんだけど、
毎秒1000本近く描けるっていうのは、もう十分な
速度だな。Seeeduino Archで5110にライブラリ
移植したときも思ったけど、やっぱ32ビットは
速いな。
UC1701ができちゃえば、SSD1306のOLEDとかも、
初期化コードだけ書き換えれば動くはず。
とりあえず、mbedで5110もUC1701も動くように
なったので、C言語様式じゃなく、C++のクラス定義
にリファクタリングしておきたいんだよな。
特に、Arduinoとちがって、ポート直接叩くわけ
じゃないから、ポート指定してインスタンス作る
ように直したい。
それより、なんといっても、3.3V電源にあわせて
オシロの計算ロジックを見直すのが先かな。定数を
数箇所直すだけで、計算は対応できるようにして
あったと思うんだけど、色々ちょっと自信ない。
その辺ができたら、あとはシールド形状でオシロの
回路詰め込むのだ。
オシロ回路の電源周りと、アナログ周りで使う
オペアンプの選定で色々悩ましいんだよな。
馬鹿正直に回路組むと、パーツがいっぱいに
なっちゃって、面積的に厳しい。プローブ用
のBNC端子も結構デカイしな。
SMDのアンプとかDC/DCとか使う方向に流れるかな…
|