EEPROMで失敗した話(続)
2025.02.09
電源電圧低下の対策も最初から設計に織り込んであるし、これからは安心してバッテリーバックアップSRAMやEEPROMが使えると思ったら、まだ安心するのは早い。

落とし穴は意外と有る。
言われてみればそうだねと思うけど、言われないとなかなか最初気づかないこともある。

たとえばEEPROMに設定値を入れておく。端末番号とか、通信パラメータとか、IPアドレス等いろいろあるだろう。よくある使い方だ。

ところが・・・デバッグに使っていた試作機は正しく動くのに、量産で作った物に書き込んだら正常に動かない。なぜ?

そこで、EEPROMやバックアップRAMの初期値について考えたか?

EEPROMの話に絞って書くと、まっさらの新品のEEPROM、マイコンに内蔵されているEEPROMも、たいていは全番地FFhだと思う。

一方、設定値は例えば0~4の範囲だとする。もし初期化ルーチンでFFhを読み込んでプログラムが走ったらどうなる? 想定外の値でどうなるやら。

まあ分かっている人には当たり前なんだが、まずEEPROMの値を読み込んで範囲チェックをする。このパラメータについては0~4の範囲で、FFhは有り得ないから異常と判断する。日付だとしたら、0月とか13月とか32日は無いから、異常となる。
そこでデフォルト値に書き換えてやるといった処理が必要になる。

バックアップSRAMも、いまの保存データが本当に正しいものか、整合性をチェックしてから利用するという手順は欠かせない。
製作されて一度も動かしておらず、バックアップ処理をしたことのない状態のSRAMの内容をそのまま飲み込むわけにはいかない。初期化が必要だ。

色々な事態を想定するとややこしくなってくるが、たとえば同じデータを離れた番地にも置いて二重化するとか、それを読み込み時に照合して一致したら採用するとか。

もし特定の番地が書き込めなくなったらどうする、代替処理をするとしても、その処理の中で使っている番地が書き換えられなくなったり化けてしまったら・・・なんてところまで考えると心配で夜も眠れないが・・・

そういえば修理の仕事の中でもEEPROMの初期値について考慮されていなかった製品があり、他社さんが部品を交換しても何をどうやっても動かなかったものがあった。
自分もなかなか最初わからなかったが、ひょっとして?と思って、確か中古か借用した別の個体からEEPROMを差し替えてみると動いたので、確信した。

だからデータが異常かどうかをチェックして、自分でデフォルト値に書き換えるようなプログラムにしておけば、こんなふうに使えなくなることもなかったのに。
この時は正常な個体のデータを書き込み、さらにキャリブレーションが必要だったので手順を確認しながら実行して、正常な状態へ持っていった。
さらに、やはりリセット回路がモロに手抜きだったので、電圧検出ICを組み込んだ回路を追加して化け対策をした。
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にしないとだめだったと気づく。
ハンダ吸取機のフィルター
2025.02.09
ハンダ吸取機のフィルターは、ハンダを受け止める部分にひとつ、本体側にひとつ有ります。
消耗品ですが、これをケチるにはどうしたものかと昔から考えていました。

溶剤で洗えば再利用できます。(今まで再利用してきました)
要するにフラックスで目詰まりしているのですから、フラックス用の溶剤(アルコールやフラックスリムーバー等)を使ってフラックスを洗い流します。
キムワイプを敷いて、その上にフィルターの汚れ面を下に向け、溶剤を吹きかけます。そうすると汚れが溶けて、キムワイプに流れ落ちるわけです。あとは乾かすだけ。

これは本体側のフィルター(Before / After)


洗浄前は見てハッキリわかる汚れ方をしています。
洗浄後は見る限り真っ白です。
但し顕微鏡レベルでは観察していないので、そのレベルで目詰まりがあるのかどうかは知りません。

ハンダを受け止める部分のフィルターも昔から洗浄しながら再利用してきました。

吸い込みが悪くなったと思ったら、ハンダ詰まりでなければフィルターの目詰まりです。これもフラックスが原因です。
吸い込みが悪くなると、余計にノズルが詰まりやすくなり、悪循環です。
フィルターをはずしてみると、フラックスで固まってカチカチになっており、道理で吸わないわけだ、と納得します。
そこでフィルターを交換しますけれど、意外と高いフィルターを使い捨てにするのはもったいないです。

そのフィルターだって、半分の厚みに割って使えば2個分使えるでしょう。しかも薄いから吸い込みの調子も良い。

洗浄の仕方は、
ティッシュやキムワイプを敷いて、その上にフィルターを置き、アルコールをたっぷり染み込ませて、少し揉むように(壊さない程度に)洗います。じわっと絞るような感じかな。文章で書くのは難しい。溶剤を含ませて、しぼって、また含ませて、を繰り返すと汚れが落ちてきます。その溶け出した汚れをティッシュに吸わせます。

- CafeLog -