今日の作業 ― FX SW ソフト
今日の作業 ― FX SW ソフト
またまたちょっくら作業。
- 電源断検出をポーリングから割り込みにする (そして終了処理して"Power-down"モードでSLEEP)
これの対処をしたプログラムを作成した。
最後のプログラム番号を覚えておいて、Power-down で sleep して super cap の電力で寝かせておいて、次の再立ち上げで最後の状態を restore しようという考え。
しかし再立ち上げ時に最終状態値からコロっと±1で値が動く。これはロータリエンコーダの最終状態に依存するように見えるのだが、しかし加えて、リセットボタンで復帰したときと電源断から再立ち上げしたときで微妙に振る舞いが違う。さて…
まずは sleep 直前の終了処理をきちんと見直すことにしよう。
しかしネタとしては ecraftsグループ的な記事が続く…
追記
ロータリエンコーダの処理を替えるという手もある。http://elm-chan.org/docs/te/te04.html
追記2
替えてみた。リセットボタン操作時に値が動くことは対処されたが、電源off-on ではまだ現象が出る。原因はわかったのでハードウェア改修で対応可能。
しかし…
Power-down sleep で寝かしておくってのは、電源断直前のプログラム値を次の電源投入時に保全してほしいという仕様のためにやっている。テスト時やループのエディット時はともかく、ライブなどの実使用時には使われることはないだろう。そもそも super cap の容量を使い切って一晩ももたなかったりしたら泣ける…
ま、技術的興味ということで。
追記3
一晩も持たないみたい。く~。
追記4
Reset during EEPROM Write のバグ、すなわち「書き込み中にリセットがかかったときに0x00番地にデータが書き込まれてしまう」に、スーパー cap で対応できるぞ!と思っていたのdが、AT90S8535 の errata にはこの項目が書かれていないようだ。この不具合はないということ?
http://www.atmel.com/dyn/products/datasheets.asp?family_id=607