ArduinoとDSPラジオモジュール(M6955)とLCDを使って、デジタル表示付きのラジオを作りたい。
ソフトはプログラミングがとても苦手なので、対話型AIに頼ったり、先人の知恵(コード)を多分に拝借して作っていく。
前回、ハードウェアと仕様をなんとなく決めたので、ソフトを書いていく。
と、言ってもおじさんの能力では1から書くのは難しいので、こちらのコードをベースに、自分の回路図と仕様に従って改変しながら進めていくことにした。
最初は、生成AIの力を借りてコードを作ってもらおうと考えていたが、残念ながらおじさんのお願いの仕方が悪いせいか、ちゃんとしたコードを書いてくれない。最後は自分でやるしかないとあきらめて、自力で何とかする。
が、かなり難航した。
以降は「プロジェクトX」のナレーターになったつもりで読んでほしい。
「まさに、この作業は難航を極めた。不慣れな男は見よう見まねでコードをを書くが、一向に作業が進まない。ようやくできたコードをコンパイルするが、すさまじい数のエラーが出る。男はくじけそうになっりながら、一つ一つ原因を調べては修正していった・・・。
やがて、ようやくエラーが出なくなり、動作させてみるが、ラジオモジュールがなかなか上手く動いてくれない。男は頭を抱えるのであった・・・・」
まぁ、そんなこんなで、いろいろ原因を調べていくと、2つ原因が有った。
①DSPラジオモジュールの起動時間が、arduinoより長い。
arduinoの初期設定プログラムで、DSPラジオモジュールの初期設定をしようとしても、DSPラジオモジュールがまだ起動できていないので、コケる。
こちらは、arduino初期設定プログラムで、DSPラジオモジュールのI2Cアドレスが応答するまで待ってから、DSPラジオモジュールを初期化するようにした。
②I2Cのプルアップ抵抗が低い
I2Cのプルアップ抵抗が低いと、DSPラジオモジュールのACKがLOWに落ち切らずに、arduinoがACKを認識できない場合がある。
最初はI2Cのプルアップを3.9Kを付けていたのだが、DSPモジュールのACK電圧がおよそ1.7Vくらいまでしか下がっていない。
arduino側で、Ackとして認識できなくても不思議ではない。
I2Cのプルアップ抵抗を10Kに変更すると、ACK電圧は0.8Vくらいまで下がるようになり、動作が安定するようになった。
2万円弱の格安中華オシロでも、有ると無いとでは、不具合調査効率に雲泥の差がある。
電子工作を始めようと思う方は、是非ご検討を。
で、修正後の回路図がこちら
この他にもいろいろと苦労したのだが、こまごまと修正して何とか動くようになった。
メモリーモードもちゃんと動く。
メモリーモードはロータリーエンコーダーを回すだけで、瞬時に放送局が切り替えが出来る。
非常に便利なのである。予想より小気味よく動いてくれて気持ちが良い。
消費電流も測ってみる。
今回は1Ω抵抗を5V電源に挟んで計測。(誤差はそれなりに有る)
消費電流は全体で60mAくらい。思ったよりは少ない感じ。
ああ、プログラミングが苦手なおじさんは頭から湯気が出そうなくらい苦労した。
でもまだ、改善できそうな気もするので、もう少しいじってみる。
あと、このままだとあれなので、何かに固定してちゃんと使えるようにしたい。
現在のソースコードは、このリンク先(Google Drive)に入れておいたので、参考までに。
(trial_2.ino arduino IDEファイル)
「ふ~ん、まぁ良かったんじゃないのかニャ」