今朝は朝一から格闘。
全くイメージ通りに上手くいかなくて・・・思いっ切りハマりました。。。
PIC に HEX データさえ書き込めればあとは簡単と、高をくくってました。
発注した PCB にミスは無かったんですが、RasPi の GPIO とのインタフェースや、Python スクリプトが期待通りに動いてくれなくて・・・ホント苦労しました。
最初、Bergrans Electronics に載っている Python スクリプトを何も手を加えずそのまま(GPIO のピン番号も変更しない)使ってみたのですがイメージ通りに動作してくれません。
ちなみに、このコントール基板に期待する動作なんですが、
(RasPi の起動)
(1) RasPi 電源コントール基板のスイッチを ON(LED 点滅)
(2) RasPi に電源が供給されて、RasPi が起動(LED 点灯)
(3) 起動直後に上記の Python スクリプトをバックグランドで実行(/etc/rc.local)
(RasPi のシャットダウン)
(4) RasPi 電源コントール基板のスイッチを ON(LED 点滅)
(5) シャットダウン開始
(6) シャットダウン完了後にコントール基板のリレーが OFF して、完全に電源断
となるのが正常動作で、こうなることを期待したのですが、
今回は、上記の (1) から (6) の全ての行程でトラブルに遭遇しました。
まず、(1) と (2) の RasPi が立ち上がらないトラブル。
LED が点滅して RasPi に電源は供給されるが、すぐに終了動作に入り電源が落ちてしまう。
→ RasPi の GPIO ピンの初期値(H 又は L)を調査してピン番号を修正しました。
$ gpio readall コマンドで GPIO の状態を確認しながら、適切な GPIO ピンに変更しました。
GPIO pin 11 ---------------> GPIO pin 7 に変更
GPIO pin 13 ---------------> GPIO pin 13 のまま
(3) はトラブルじゃないですね。
RasPi の /etc/rc.local に、自動起動するファイル名を書くだけなので。
Bergrans Electronics の記事の通りに記述すれば OK です。
(4) と (5) のシャットダウン動作を開始しないトラブル
Bergrans Electronics のスクリプトでは割込みを使ってスイッチ ON の状態を検知してますが、この割込み処理の中で Halt 命令がどうも上手く走ってくれない。(管理者権限とかセキュリティ上の問題があったり。)
まぁ、一般ユーザで Root コマンドが使えるように設定はできるけど、今回は CPU 負荷は多少大きくなりますが While loop 方式に変更して、"halt" 命令じゃなく、"sudo shutdown -h now" でシャットダウンするようにスクリプトを変更しました。
(6) のメイン電源が落ちない、というトラブル。このトラブル対策が一番やっかいでした。トラブルに要した大方の時間がこの対策に費やされました。
RasPi ってシャットダウンしても完全に電源断にはならずフローティング状態になっています。
このコントール基板を使う一番のメリットは、この (6) の主電源を切断することなので。
この機能が使えなかったら何のためにコントール基板を作ったのか分からなくなってしまうので・・・
最後の最後で、フローティング状態から完全に電源を落とすことができなくて、ほとほと疲れ果てました。
GPIO pin 7 はシャットダウンしたら High から Low になって、数秒後にコントール基板のリレーが OFF して電源が落ちる・・・と、こうなるのが正常なのですが、こうならなくて。。。
何気に、この Low になった時の電圧調べて見たら 1.5V 近くもあるし。。。
この中途半端な電圧のせいで完全に Low になり切れずに動作が安定しないことが判明しました。
あとの対策はもう簡単です。完全に Low になるように抵抗で分圧するだけです。
で、抵抗2個(10K と 4.7K)を使って Low 電圧を下げてやったところ、これ以降は全ての動作で期待どおりとなりました。
(ブレッドボードで試験終了後に PCB を発注してたら、この分圧回路も一緒に入れていたのですが。。。今回は回路的に試験はしなくても大丈夫だろうと省略してしまいました。)
とまぁ、この H、L 問題にもっと早く気付いていたら、こんなに苦労することはなかったのですが、「Python スクリプトや PIC のプログラムにでもバグでもあるのか」、「それとも回路的にミスでもあるのか」など、様々なことが頭をよぎり過ぎて・・・あれこれと構い過ぎてしまいました。
RasPi って ARMプロセッサの種類(バージョン)によって GPIO のデフォルトピンの High や Low の電圧なんかが違ってたりするので、その都度調べて手を加えないといけないようです。
それにしても、
届いた PCB 基板にちゃちゃっとパーツ取り付けて、サクッと終わるはずだったのに・・・すっかり振り回されてしまいました。
とまぁ、こういった苦難を乗り越えることができたので、これからは快適な RasPi 生活が送れそうです。
コントール基板。ハンダ付けしてみたら結構スカスカ。。。
次回があるとしたら、表面実装にしてもっと小さくしたいですね。
ここまでの全体像。ジャンパ線のとりまわし・・・汚な。
ポテンショメータ(POT)は小さな基板にまとめて、基板化したいし。
それと、Twin-T 発振回路も別基板にして、CW オシレータとして汎用性を持たせたいし。
ハード周りがひと通り片付いたら、今度は本チャンの Python スクリプトを充実させないと。
・・・って、今のところ、何も思いつかないけど。。。