2016-02-18 15:16 | カテゴリ:1/8モデル
電子回路の基板作成の仕上げと、プログラム作成を検討しています。

実は、また、はまってしまいました。
昨日までちゃんと動作していたプログラムに、カラーLED点滅を追加すべく、プログラムの整理をしました。
そのとたん、音声が出ない状態に。

また、はまりました。
一体なのがどう悪さしているのか見当もつきません。
昨日までのハードにソフトを見やすく整理しただけです。

ハードの半田付け不良は無いか?
ICがソケットにちゃんと入っているか?
2時間掛けて調べました。
問題ありません。

後はソフト。もう一度じっくり見たら、問題ありました。
リセット後に、コマンドを送る前に、最初に音声モジュールにダミーのコマンドを送ることを前提でプログラムしていましたが、それを忘れて、ダミーのコマンド送信部分を消去していました。
その部分に説明を記述していなかったので、不要コマンドと勝手に考えていました。

ダミー

で、今日は、フライデーが喋ると、音声モジュールの信号を検知して、LEDを細かく点滅させる部分を製作しました。
まずは、ロジックが上手くいくか、モニター用のLEDを変わりに点滅させてみました。
今後はこれをカラーLEDで、しかも、話す内容に合わせてカラーを変化させるようにしたいと思います。

と、書いた後で、諸問題が発生しました。

PIC-16F877に先日、カラーLEDを駆動させて成功したプログラム(C言語とアセンブラ)を組み入れて、コンパイルしましたが、うまくありません。
エラーメッセージが多く出て、よく理解できないのですが、要するに、このクラスのPICではメモリーをバンク切り替えで使用しているのですが、その境界を超えてデータのやり取りをしている、と言っているようです。
アセンブラにC言語からパラメータを渡し、それを処理するのですが、今回は、渡すパラメータを、配列の色指定から、LED駆動の配列に移しているところが悪さしているようです。
はっきり分かりません。

いろいろプログラムの場所やメモリー領域の位置を調整しても、コンパイルできません。
もっとも原因がはっきり理解できていませんので(汗)

何か解決策は無いかと考えましたが、唯一、思いついたのは、もう一つPICを搭載して、それにカラーLEDの制御をさせればよいのでは?
と言う考えです。

早速、一番標準のPIC-16F84Aをブレッドボードにセットして、先日のカラーLEDを駆動したプログラムをセットし、電源オン!
当たり前ですが、ちゃんと動きました。
あとは、ここに、メインのPIC基板から、何色にカラーLEDを発色させるかのデータを3か4ビットで入力して、喋っている時に光らせればOKです。

で、ふとXC8の画面を見るとリソース(データメモリーとプログラムメモリー)が90%使用中となっています。
なんとXC8では、16F84Aのメモリーはあっという間に消費してしまうようです。

memory.jpg


仕方が無いので、16F873というメモリーに余裕があるPICを使用することにしました。

先は見えてきました。

早速、PICを用意して回路をブレッドボード上に組んでテスト。
ちゃんとフルカラーLEDも点灯します。よしよし。

次に、メイン基板から送られる色指定の番号に従って、カラーLEDの色を変化させます。
まずは、ブレッドボード上で、指定したポートBの0-2番の3ビットで、7色の色を指定するようにプログラム。
ところが、これがビット指定とは無関係に色が変化します。
プログラムも確認し、ブレッドボード上に組んだ回路も、ちゃんとポートB0-2に繋がっています。
そこで、ポートBではなく、ぽーとCのビット0-2につなぎかえることにしました。
すると今度はちゃんと正しく色が点灯します。

あれーっ!
と言うことは、ポートBが壊れたか?
もう一度回路を戻して、新しいPICに交換してみました。
やっぱり、動作が変です。

ポートCではちゃんと動くのにポートBではだめ。
ここではまりました。
一日悩んで、考えて、一晩寝て。
そして、今朝、なんの気なしにPICのピン配列を見ていると、気づきました。
「大ボケ」でした!
ポートBのピン配列をRB0-7と思っていたのが、RB7-0の逆でした。
これでは、ビット0-2に与えた電圧の色信号が読み取れるわけはありません。

もー、イヤになります。

ようやく、サブ基板が出来ました。

17-1.jpg

17-2.jpg


これをメイン基板と接続してテスト。
結果は上々。

17-3.jpg


ちょっと気分が良いので、胴体部分に仮セットして、光らせてみました。
ご笑覧ください。
なかなか雰囲気が出ているのではないかと、自画自賛です(笑)








管理者のみに表示する