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



mbedで、FFTライブラリがそこそこの速度で動いたし、
アナログ入力は20kspsでもそれなりに動きそうな
こともわかったので、次はやっぱLCDだろうと思って、
以前Arduino用に作った、5110のLCDライブラリを
移植してみることに。


どっちもC言語系だし、方言のある命令だけを変更
すれば、さくっと動くとばかり思ってたんだけど、
いろいろ手間取った。かなり手間取った。

変更点がいろいろ有っただけでなく、どうやら、
バグが潜んでいるらしい。しかも、なんでそんな
結果になるの?っていう、おかしなバグが。(後述)




とりあえず、動くようにはなったので、結果の写真。

まずは、文字列の表示(上側の「Hello World!」)
と、下側の、1文字1文字ばらばらに表示したとき
の、カーソル移動の機能確認(下側の「HELLO =」)
の表示結果。



フォントも、Arduino版と同じ8×5ドットのフォントを
そのまま。横は1ドット単位、縦は8ドット単位で位置を
設定できる仕組み。


全文字表示の確認。半角スペース、「!」、「"」…と、
ASCII文字全部を一律表示してみた結果。



画面右下まで書いても収まらないので、数文字は
左上に戻ってから続きを表示。…「x」「y」「z」
「{」「|」|}」まで。




グラフィック機能。いわゆるLINE表示機能を使って、
ランダム座標を結ぶ直線を、「PSET」と「PRESET」の
それぞれの条件で表示してみた。



最初、SPI通信の速度が速すぎておかしいのかな?
とか思って、パルス1個ごとのオンオフするときに
1usずつwaitを入れてみたんだけど、ちょっと時間
かかりすぎる。
5110は4MHzまで入力できるんだけど、1usだと最大でも
オンとオフで2us食うので、0.5MHz以下。
入力できるスピードの1/8くらいに制限してしまって
いる計算。


ひとまずはその速度で我慢しつつ、あれこれ動作が
おかしかったところを手直ししていくことに。

なんか原因がわかんないんだけど、カーソル位置
(x、y座標)を設定しなおす処理が、なぜか上手く
動かないところが出てくる。何でだろう?って
思って、ライブラリの処理内容とか、ヘッダファイル
とかもきっちりと見直しして、どうしても原因が
見当たらない。

そもそも、冒頭でx、y座標を設定しているところでは、
ちゃんと上手く動いているとこもある。その差が
まるで判らない。なんだろうなぁ?と思って、
いろいろソースやライブラリを弄りまくって、
ようやく、ひとつの傾向が見えてきた。



テストパターンとテストパターンの間に、時間稼ぎ
のために「wait_ms(2000);」って入れて、2000ミリ秒
(2秒)の間隔を空けてるんだけど、どうやら、この
wait_ms命令の「次の命令(関数呼び出し)」が無効
になっているらしい。

なんで無効になるのかはよく判らないんだけど、
そう仮定して、その前提で、無効にされちゃってる
命令を、同じもの2行続けて書いてみると…ちゃんと
動くようになった。

うん、やっぱりそうみたい。さらに、カーソル移動
の関数呼び出しだけじゃなく、画面消去の命令も、
このパターンに填まっていると、やっぱり命令が
無視されている。2個続けて書くと、ちゃんと動く。


wait_ms()メソッドにバグがあるのかな?と思って、
ここをすべて「wait(2);」という風に書き換えてみる。

…全部まともに動くようになった。なんだよぅ…
コンパイラのバグっぽい気がするけどな。



ちなみに、「wait_ms(100);」と、短めの時間稼ぎ
だと、そういうことは起こってないみたい。1秒を
こえる待ちを「wait_ms」つかって行うとだめとか
そういうことなのかな?

原因は良くわかんないけど、とりあえず「wait_ms」
を避けると上手く動くことが判った。


さて、じゃぁ、SPI通信のパルスは原因じゃない
ってことなのかな?と思って、1usのwaitを取り
除いて動かしてみる。

…動いた。しかもそれなりに速い。

本当にスペック的に大丈夫なのかがいまいち判って
ないんだけど、ひとまず動く。48MHzの11U24って、
ポーリングでパルスをオンオフすると、どのくらい
の速度で出てるんだろう?Arduinoみたいに、
端子番号からポート+端子番号に変換(1ピンだけ
オン/オフする処理)するのに、多少の時間がか
かっていると考えると、4MHzは下回っている可能性
高いと思うんだけど…

あとで計ってみないといかんかな。




さて、大丈夫と仮定して、描画速度。

文字表示とかはあまり速度を気にする必要もないと
おもうんだけど、グラフィック処理、特にドット
単位で描画する、LINE描画処理とかは、速度が
肝なので、速度を計測しておく。

ランダムの2座標を結ぶLINE描画の処理を10000回
表示してみて、17秒だった。(実測値)

ってことは、平均して、線1本描画するのに、
およそ1.7ミリ秒。500本描いても1秒以下って
かんじ。



本当は、ソフトウェアでポーリングじゃなく、
SPIライブラリ通して、ハード処理しちゃえば、
通信速度を設定できて安心なんだけど、ピンが
固定になっちゃうの、やなんだよな。

wait_usよりも細かい待ち時間設定できる機能が
あるとうれしいんだけどな。


とりあえず、「wait_ms」を2000ミリ秒に設定して
動かすと、次の命令(関数呼び出し)が機能しない
バグがありそう、ってことが判ったので、これを
どうするか…コミュニティーに報告してみるか…

…正直、まだ、発生する条件とか、その境目とかが
判ってないんだよな。Seeeduino Arch以外でも発生
するのかなぁ?

やっぱ、デバッガでステップ実行したいよな。






https://twitter.com/jironosuke99/status/772237592536330240

おぉ。エイリアンと検非違使。






http://www.cnn.co.jp/fringe/35088544.html

カカオの代替になる植物なんてあるのか…。へぇ。
味はどうなんだろう?

やっぱり、カカオ豆みたいに、収穫して、発酵させて、
焙煎して作るのかな。







http://www.aitendo.com/product/14331

ん、なんか缶入りのかっちょいいトランジスタ。200円。






http://sorae.jp/10/2016_09_02_an225.html

あのでかい輸送機(An-225)、中国で生産?






http://www.yomiuri.co.jp/world/20160905-OYT1T50043.html

香港が中国から独立?






http://sorae.jp/030201/2016_09_01_mrj.html

MRJ、異常があったのは、センサ?




コメント ( 0 )