初期値の話
2025.09.19
EEPROMやバックアップRAMに、設定内容などを書き込んでおき、起動時に読み込む事で初期設定に反映する、といった使い方は良くあります。
この時、読み込んだ値が正常な範囲か、妥当な値であるかを必ずチェックして、もし問題があれば適切に処理することが重要です。
ふ~ん、という感じですが、一度失敗すると良くわかります。
EEPROMやバックアップRAMの内容は、何らかの原因で化けることがあります。
そして、EEPROMは新品の状態で0xFFになっています。
これらの事実を前提にして、そういった異常値で誤作動しないよう、プログラムに対策を組み込みます。
EEPROMの初期値問題は、ずっとデバッグに使っていた試作機だと気づかないことです。初めて製品版の基板を動かす時に、アレッとつまずくのです。新品のEEPROMは0xFFだから。
たとえば、ある設定内容は1~10の範囲を前提としているのに、0xFFが来たらおかしなことになります。
ただ単にEEPROMを読み込んで、その値をそのまま使ってはいけないのです。値が規定範囲に有るか、もし外れていたら初期値に戻すといった処理が必要です。
意外と市販の製品でも考慮されていない物があるようです。
自分の修理仕事の経験でも、回路的には正常なのにどうしても動かないものがありました。他社さんが修理をギブアップして、うちに回ってきました。
結局それはEEPROMの内容が化けていて、起動時に読み込んだ異常値で暴走していたことがわかってきました。
幸いなことに正常な個体が有り、そこからEEPROMの内容を複写してやると、正常に動くようになりました。
原因はリセット回路がいい加減で、特に電源を切った時のゆっくりした電圧低下で暴走し、その時にEEPROMを誤って書き換えていたようです。対策として、電圧検出ICを追加し、ある電圧より下がったらマイコンが動かないように止めるようにしました。
普段操作しない場所に押しボタンを隠しておき、あるいはディップスイッチの空いている所を利用するか、とにかくそれをONにしたまま電源を入れると、EEPROMがクリアされてデフォルト値が書き込まれるようにする仕掛けをするのも良いでしょう。
この時、読み込んだ値が正常な範囲か、妥当な値であるかを必ずチェックして、もし問題があれば適切に処理することが重要です。
ふ~ん、という感じですが、一度失敗すると良くわかります。
EEPROMやバックアップRAMの内容は、何らかの原因で化けることがあります。
そして、EEPROMは新品の状態で0xFFになっています。
これらの事実を前提にして、そういった異常値で誤作動しないよう、プログラムに対策を組み込みます。
EEPROMの初期値問題は、ずっとデバッグに使っていた試作機だと気づかないことです。初めて製品版の基板を動かす時に、アレッとつまずくのです。新品のEEPROMは0xFFだから。
たとえば、ある設定内容は1~10の範囲を前提としているのに、0xFFが来たらおかしなことになります。
ただ単にEEPROMを読み込んで、その値をそのまま使ってはいけないのです。値が規定範囲に有るか、もし外れていたら初期値に戻すといった処理が必要です。
意外と市販の製品でも考慮されていない物があるようです。
自分の修理仕事の経験でも、回路的には正常なのにどうしても動かないものがありました。他社さんが修理をギブアップして、うちに回ってきました。
結局それはEEPROMの内容が化けていて、起動時に読み込んだ異常値で暴走していたことがわかってきました。
幸いなことに正常な個体が有り、そこからEEPROMの内容を複写してやると、正常に動くようになりました。
原因はリセット回路がいい加減で、特に電源を切った時のゆっくりした電圧低下で暴走し、その時にEEPROMを誤って書き換えていたようです。対策として、電圧検出ICを追加し、ある電圧より下がったらマイコンが動かないように止めるようにしました。
普段操作しない場所に押しボタンを隠しておき、あるいはディップスイッチの空いている所を利用するか、とにかくそれをONにしたまま電源を入れると、EEPROMがクリアされてデフォルト値が書き込まれるようにする仕掛けをするのも良いでしょう。