リセット回路
PICを正常に、暴走、誤動作から守るためにはリセット回路が必要です。最初は車両に取り付けたLoggingSystemが正常に動作しなかたり、悩みました。秋月電子のpic18f8720モジュール基板にはCRによる単純なリセット回路が入ってますので、このまま使用はできます。できるなら、ダイオードを追加して、安定化を図るのがベターかもしれません。
一番良いのは、リセットICによるリセットと、PUT,BROWNOUTの併用が確実です。
#fuses H4,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP
と設定すればよいだけです。
CR+ダイオード回路によるリセット+PUT,BROWNOUTの併用が次にいいかもしれません。

秋月電子Nモジュールは以下のようになってます。

このままの回路でも問題って言えば問題ないのですが、若干不安定になります。(ダイオードは電源断時に急速放電を行うために必要)ダイオードの追加は必要かもしれません。(あくまで主観ですので保障はできません)
真夏の車内は80度以上にもなります。レギュレータ類は動作保障温度を超えることもあるでしょう。なので、クーリングファンを入れておくことは必須ですし、放熱対策も必要です。特に問題となるのは、温度が下がるまで外付けEEPROMの場合、読み込み、書込みが正しく出来なくなる可能性ががあります。
製作当初は、設定値・保存値読み込みエラーによる、誤動作が頻発しました。外付けEEPROMにはリアルタイムに保存・読み込みが必要な計測値を書き込まないようにしたほうがいいみたいです。(燃費データとかリアルタイムに保存する必要がないものが適しています)
データは全てPIC内部EEPROMを使用し、起動時にデータの妥当性のチェック、書込みテスト、遅延起動を行えばある程度のデータ破壊、読み込みエラーは防げるようになります。最終手段は常時通電・バックアップバッテリーが一番ですが、コストとか信頼性、暗電流によるバッテリー上がりを考えると私は簡易リセットによる方法で現在評価を行ってます。
main()
{
delay_ms(1000);//エンジン始動時電源不安定によるDATA破壊防止:
delay_ms(1000);//エンジン始動時電源不安定によるDATA破壊防止:
//eeprom読み書きの安定性チェック 3回トライし、エラーならPICリセット
//WRITE_float_PIC_EEPROMは浮動小数点書込み関数(ccs-cの参考ディレクトリに雛形あります)
//READ_float_PIC_EEPROMは浮動小数点読み込み関数(ccs-cの参考ディレクトリに雛形あります)
WRITE_float_PIC_EEPROM(336,1);
if(READ_float_PIC_EEPROM(336)!=1)
{
reset_cpu();
}
delay_ms(100);
WRITE_float_PIC_EEPROM(336,1);//アドレス0X336に1を書き込む
if(READ_float_PIC_EEPROM(336)!=1)
{
reset_cpu();
}
delay_ms(100);
WRITE_float_PIC_EEPROM(336,1);
if(READ_float_PIC_EEPROM(336)!=1)
{
reset_cpu();
}
delay_ms(100);
・
・
・
//ここで変数初期化
・
・
・
// ここでA/D初期設定
// ここでVLD初期設定
delay_ms(1000);//エンジン始動時電源不安定によるDATA破壊防止:
read_f=0;//設定エラーフラグクリア
read_d=0;//データエラーフラグクリア
read_s=0;//初期設定エラーフラグクリア
eeprom_load();//設定データ、計測データ読み込み
delay_ms(500);
//エラーなら3回データ読み込みリトライ
if(read_f==1||read_d==1)
{
read_f=0;
read_d=0;
eeprom_load();
delay_ms(500);
}
if(read_f==1||read_d==1)
{
read_f=0;
read_d=0;
eeprom_load();
delay_ms(500);
}
if(read_f==1||read_d==1)
{
read_f=0;
read_d=0;
eeprom_load();
delay_ms(500);
}
//ここでエラーに対する処理を記述
//キー入力で初期化するか、スルーするか、設定値をクリアするとかを記述
・
・
・
}
まとめ
ケースにはクーリングファンを設置する。
空気に流れを考えて、空気導入口は不必要に空けない。
設置場所は直射日光があたらないようにする。
暖房の空気が直接あたらないようにする。
レギュレータは確実に放熱処理を行う。(データシートで必要な放熱量を見積もる)
リセット回路を必ず組み込む
PUT,BROWNOUTを必ず使用する。
リアルタイムに保存するデータはPIC内部EEPROMを使用する。(外付けEEPROMは書込みが遅い)
起動したらEEPROMに書込みテストシーケンスを入れる
書込みエラーの場合はソフトリセットを行う
遅延起動、リセットを繰り返して行っているうちにクーリングファンで内部が冷却されるようにする。
レギュレータは必ず、短絡・温度保護回路が内蔵されたものを使用する。