EEPROMで失敗した話(昔)
2025.02.09
はるか昔、慣れない頃は失敗もありました。
とある装置、
RS-485でバス接続された端末がたくさんあって、1台ずつに端末番号を割り当てていました。
各々を区別するのはその端末番号というわけです。
その端末番号はEEPROMに記憶される仕組みで、番号を打ち込む装置を作り、現場設置のときに一台ずつ設定していきました。
よし、これで設定が終わった。通信テストしてみると、1番、2番、・・・ちゃんとできてるね、よかったね。
ところが後日、「動かない」とクレーム。
持ち帰って調べると、確かに動かない。通信に反応しない。
おかしいなあ、なんでだろう。プログラムのバグか? さんざん調べたけどバグではなさそう。
番号設定に入るには起動時に特殊な操作が必要だから、通常のプログラムのループからその書き換え操作へ入るような道はプログラム全体を見直しても、他になかった。
色々試して気づいたのは電源のON/OFFを繰り返した後に通信に反応しなくなる事でした。どうやら番号が化けてしまっているようだ。
つまり、こういうことです。電源が落ちる時にマイコンが暴走している。電圧が不安定な状態だから、動作は保証されないのは当たり前。意外と見過ごしている。
この経験をするまでは、リセット回路なんか抵抗とコンデンサとダイオードで(よくある回路)済むものだとばかり思っていました。
なぜ暴走しているか、暴走しているというならどうやって確かめるか、などと難しく考えてはいけない。知識と経験とカンで、おそらくそれだろうと、それしか考えられない。
そういえば駆け出しの頃、(その前の勤務先の)当時の上司がその有名な?回路について何やらゴニョゴニョ言っていた事を思い出したのです。
もろにオタクで、何かを聞きに行くと何でも答えるし、しかも5分では終わらない。色々話してくれるが、結局こちらの頭では受け流すばかりで何も残らない。
そう、あのゴニョゴニョが・・・なんて言ってたっけ?
瞬間停電だったらどうする?
電圧が徐々に下がっていったらリセットはちゃんと効くか?
短時間に電源をON/OFFした時にちゃんとリセットはかかるか?
これらを解決するには、
要するにリセットICを入れれば良い。電圧検出のICがある。こいつは昔から存在は知っていたが、何に使うのかいまいちピンと来ていなかった。その時までは。
ただそれだけのこと、と言ってしまえば終わりですが・・・
当時はPST518とかPST600Cが有りました。PST518は廃止になったので600Cにしたっけ。これらは現在どちらも廃止になって久しいけど、代わりの物は各社色々ある。
TO-92形で一般的なトランジスタと同じ形状だから、リードを曲げて既存の基板にくっつけるのが容易だった。次の基板改版からは基板の中に表面実装タイプを組み込んだ。
それから、電源ON/OFFを自動的に繰り返すテスト装置をPICマイコンで作り、十分に耐久試験をして念には念を入れた。もちろんデータが化けることはなかった。
電源OFFで電圧はいきなりゼロにならない。人間には一瞬で消えたように見えても、特にマイコンの速度から見れば、とてもスローモーションに見えているだろう。
電源OFFで電圧が落ちる途中、マイコンの動作保証電圧を下回る前にリセットを押さえてくれるので、暴走しないわけだ。
これはファミコンのデータセーブと同じことで、なぜリセットボタンを押しながら電源スイッチをOFFにするのか、つまりこういうことだったのだ。この操作をリセットICは自動的にやってくれる。逆にいうと、ファミコンは簡易リセット回路だから面倒な操作が必要だった。
ファミコンの場合はバッテリーバックアップのSRAMだけど、電源が落ちる時の暴走で書き換わる可能性については共通点がある。
あー疲れた、よし今日はこれくらいにしようとゲームを終わってスイッチをバチンと切ってしまってから、あっしまった、リセットを押しながらOFFにしないとだめだったと気づく。
とある装置、
RS-485でバス接続された端末がたくさんあって、1台ずつに端末番号を割り当てていました。
各々を区別するのはその端末番号というわけです。
その端末番号はEEPROMに記憶される仕組みで、番号を打ち込む装置を作り、現場設置のときに一台ずつ設定していきました。
よし、これで設定が終わった。通信テストしてみると、1番、2番、・・・ちゃんとできてるね、よかったね。
ところが後日、「動かない」とクレーム。
持ち帰って調べると、確かに動かない。通信に反応しない。
おかしいなあ、なんでだろう。プログラムのバグか? さんざん調べたけどバグではなさそう。
番号設定に入るには起動時に特殊な操作が必要だから、通常のプログラムのループからその書き換え操作へ入るような道はプログラム全体を見直しても、他になかった。
色々試して気づいたのは電源のON/OFFを繰り返した後に通信に反応しなくなる事でした。どうやら番号が化けてしまっているようだ。
つまり、こういうことです。電源が落ちる時にマイコンが暴走している。電圧が不安定な状態だから、動作は保証されないのは当たり前。意外と見過ごしている。
この経験をするまでは、リセット回路なんか抵抗とコンデンサとダイオードで(よくある回路)済むものだとばかり思っていました。
なぜ暴走しているか、暴走しているというならどうやって確かめるか、などと難しく考えてはいけない。知識と経験とカンで、おそらくそれだろうと、それしか考えられない。
そういえば駆け出しの頃、(その前の勤務先の)当時の上司がその有名な?回路について何やらゴニョゴニョ言っていた事を思い出したのです。
もろにオタクで、何かを聞きに行くと何でも答えるし、しかも5分では終わらない。色々話してくれるが、結局こちらの頭では受け流すばかりで何も残らない。
そう、あのゴニョゴニョが・・・なんて言ってたっけ?
瞬間停電だったらどうする?
電圧が徐々に下がっていったらリセットはちゃんと効くか?
短時間に電源をON/OFFした時にちゃんとリセットはかかるか?
これらを解決するには、
要するにリセットICを入れれば良い。電圧検出のICがある。こいつは昔から存在は知っていたが、何に使うのかいまいちピンと来ていなかった。その時までは。
ただそれだけのこと、と言ってしまえば終わりですが・・・
当時はPST518とかPST600Cが有りました。PST518は廃止になったので600Cにしたっけ。これらは現在どちらも廃止になって久しいけど、代わりの物は各社色々ある。
TO-92形で一般的なトランジスタと同じ形状だから、リードを曲げて既存の基板にくっつけるのが容易だった。次の基板改版からは基板の中に表面実装タイプを組み込んだ。
それから、電源ON/OFFを自動的に繰り返すテスト装置をPICマイコンで作り、十分に耐久試験をして念には念を入れた。もちろんデータが化けることはなかった。
電源OFFで電圧はいきなりゼロにならない。人間には一瞬で消えたように見えても、特にマイコンの速度から見れば、とてもスローモーションに見えているだろう。
電源OFFで電圧が落ちる途中、マイコンの動作保証電圧を下回る前にリセットを押さえてくれるので、暴走しないわけだ。
これはファミコンのデータセーブと同じことで、なぜリセットボタンを押しながら電源スイッチをOFFにするのか、つまりこういうことだったのだ。この操作をリセットICは自動的にやってくれる。逆にいうと、ファミコンは簡易リセット回路だから面倒な操作が必要だった。
ファミコンの場合はバッテリーバックアップのSRAMだけど、電源が落ちる時の暴走で書き換わる可能性については共通点がある。
あー疲れた、よし今日はこれくらいにしようとゲームを終わってスイッチをバチンと切ってしまってから、あっしまった、リセットを押しながらOFFにしないとだめだったと気づく。
トラックバックURL
トラックバック一覧
コメント一覧
コメント投稿