title_parttitle_parttitle_part
静岡県浜松市であれこれソフトを開発している A.K.I Software のブログです。日々の開発日記やサーバー・セキュリティ関連の話題なども掲載。
<< 2024/04 >>123456789101112131415161718192021222324252627282930
《《《 ネットワーク機器の購入は Amazon で! 》》》
Powered by BLOM 電圧ロギング&スイッチャー その4
小さくも大きくも閉じたりもしません
12/03/11 23:55 / 電子工作

ロードテストも終わったと思ったのですが、時々フリーズしてしまいます。
原因を探っていたのですが、テストの為に安定化電源をログ端子に接続していたのですが、どうも基板側を動作させたまま安定化電源をいきなり切るとフリーズします。

もしかしてサージ??と思って回路の方を見直していたのですが、問題なさそう。
ファームの方がおかしいのかな?と色々と出力させてデバッグしていたのですが、悩むこと数時間。ようやく原因が判明。

PIC で AD変換を行う場合、

BSF ADCON0,GO

こんな感じで ADCON0 の [Go]/Done の Bit を立てて
Go/[Done] が 0 に戻ったら(BTFSCとかで判定)変換
完了という仕組みになっています。

んで

BSF ADCON0,GO
Loop1
BTFSC ADCON0,GO
GOTO Loop1

こんな感じにポーリングさせていたんですね。
少し基礎的な話になるのですが、PIC の AD変換は、GO した後に内部のコンデンサに充電してから変換を行うということです。
入力端子にかかる抵抗によって充電時間(アクイジション時間と言います)が変わるので、計算するのが面倒だからポーリングさせていたのですが、ここに落とし穴がありました。

充電時間は非常に短い(数十マイクロ秒)のですが0ではありません。つまり「充電している途中」という状態がある訳です。(A/D変換をしていない場合は 0 のままなのでそのままループしないで普通に動くというのも、落とし穴でした)

そして、この充電している途中に入力電源が切れると、どうやらいつまでも充電が完了しないので(GO/Done bit が 0 に戻らない)ここで永久ループに落ち込むようなのです。

アクイジション時間をきちんと計算して・・・は面倒だったので、充分なウェイトを置いてウェイトから抜けても Go/Done bit が 1 だったらタイムアウトするような処理に変更をしたら、きちんと動くようになりました。
(測定頻度が低いのでOKな方法です。測定頻度を高くする場合は、ギリギリまでウェイトを短くしないと Count/Sec を稼げません)

アセンブラだからと言って安易にポーリングしていました。
大いに反省です。

これでほぼ回路側は完成しましたので、後は Windows 用のサービスアプリを作るだけです。(GUIアプリは完成しているので、サービスアプリに移植するだけですが)

あと、ソーラーパネルの変化などによって色々なパターンを作りたいと思います。(12.5V を切ったらリレーを off にするのが基本ですが、晴天の日でも、冬場に厚い雲で一時的に大きく下がったりすることもあるので、11.5V を切ったら問答無用で OFF、11.5V 〜 12.5V の間が1分続いたら OFFとか。発電効率を上げるというのも重要なのですが、バッテリー運用も効率よく出来たら良いと思いますので)

[更新日付:2012/03/12 01:46:22]
トラックバックを見る(0)
Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+7eef839577107b73b93d6451a1a4e4713f877091]
TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+7eef839577107b73b93d6451a1a4e4713f877091]

記事へのコメント

コメントはありません

名前
コメントキー
 
コメントする時はキーを正確に入力して下さい
コメント
アドレスを含んだコメントはできません
© 2008-10 A.K.I Software all rights reserved.