micro:bit中級者編(4)〜I2CでLCDを制御する
前回まででJavaScriptで自由自在にI2C制御ができるようになったはず、です。これからI2Cの制御をガンガン書こうと思っているのですが、micro:bitは標準出力がLED25個しかなくデバッグがしにくいのでまずはLCDディスプレイを繋ごうと思いました。参考にした書籍のリンクを張っておきます。
ここで扱っているLCDもリンクを張っておきます。
ところがどっこい。書籍に出ている物品そのままでソースもそのままだと動きません。早速出版社経由で著者に連絡を取ってもらったのですが、コマンドを出すタイミングの問題だろうとのこと。アドバイスに従って少しいじると無事動きました。
// データ出力 : 0x40に続けて0x41(ASCIIコードのA)を出力
buf = pins.createBufferFromArray([0x40, 0x41]);
pins.i2cWriteBuffer(0x3e, buf);
だと何も出力されず、
// データ出力 : 0x40に続けて0x41(ASCIIコードのA)を出力
buf = pins.createBufferFromArray([0x40, 0x41]);
pins.i2cWriteBuffer(0x3e, buf);
buf = pins.createBufferFromArray([0x40, 0x41]);
pins.i2cWriteBuffer(0x3e, buf);
とすると書籍で紹介されている通り"A"が出力されました。なんじゃそれ。
(※あなたの持っている同じものでも同じやり方でうまく行くとは限りませんので念のため)
===
ここで少し「組込みファームウェア」(ソフトウェアとは言わない)について一言。
LCDの仕様書にはコマンドを出すタイミングが書かれているのですが、ファームウェアを書く人が自分の出そうとしている正確なタイミングを知らないのも困りものです。
ファームウェアのプロの設計者がデバイスを動かそうとした場合、(1) まずそのデバイスのタイミング規定を把握した上で、(2) ファームウェアをそれに従って正確に記述できるスキルを持っていることが大前提で、(3) 意図した動作をしないときに調べる方法を(回路もファームウェアも)知っていることが必要です(今回はデジアナなどの測定器を使わず著者に聞くズルをしました)。仮にこれがそのまま動いたとしてもそれは運が良かっただけで「設計」とは呼べないものです。
お遊び、学習だからと言って、規定の理解とタイミングの正確な記述を疎かにして良いものではないと思っています。
ファームウェア設計の実務を知らず、製品設計をして市場投入したことがない人(Windowsやスマホのアプリケーションなどしか書いたことがない人)は得てしてこのことを理解していない場合が多いと思われるので敢えて苦言を呈しました。
ここまで
サポートを頂けると望外の喜び。コンテンツ制作の励みになります。よろしくお願いします。