SVG電子工作ブログやってます。ATmega328PのリソースIOピンの割り当てビルド&プログラミングユーザーからの入力を処理するモデルを考えるステートマシンシステムの初期化処理システムの駆動アプリケーションソースコードIR-control-ampソフトウェアこのソフトウェア一式はGitHubで公開しています。IR-control-ampソフトウェア電源ONからOFFまでの動作を動画にしてみましたこの機能はスリープからの復帰(ON)とスリープへの移行(OFF)で実現している。選んだ)HELLO...の時に、抵抗でコンデンサの突入電流を抑えている。この後に抵抗をMOSFETで短絡する。電源が入っている状態でエンコーダの長押しで設定モードに入る。1年半使って、電源断が400回とシステムダウンが12回発生。電源断はハードウェアの設計が悪いせい(LME49600のBWは切っておいた方が良かった。システムダウンはどうもWDTの時間が短いようで。0x12(電源ボタン)に設定する様子。この設定はATmega328P内蔵のEEPROMに書き込むので本当に電源が切れても記憶した設定は消えない。リンクを見に行ってください。ソースコードにある文章をスクロールしながら表示しているのがわかるこの設計したハードウエアとこの後に作ったソフトウェアを組み込んで完成したアンプの動作です。2kBytesに詰め込みます。7でビルドしています。mkIIを使っています。7の設定F_CPU=8000000ULつまり8MHzクロックの設定です。Fullプログラムメモリは余裕がありますがデータメモリは余裕があるように見えても実行中のスタック領域を残さないといけないのでほぼリソースを使い切ったと考えています。入力スイッチ赤外線リモコン信号これだけでアプリケーションの全ての機能を使えるようにする。内部状態無しで入力と出力が1対1の対応をしようとするとボタンだらけになるので,入力に対する出力の対応はアプリケーションの内部状態に応じて作動するモデルを作る。ステートマシンのことおおざっぱにモデルを作ってみた状態を取り出して整理するステートマシン取り出した状態を実行する状態機械(ステートマシン)はこれで設計します。//赤外線リモコン割り込み発生時のみここに来る。常に一定時間間隔で動くので,時間待ちが必要なときにはそれぞれの関数で呼び出し回数を数えて待ち時間を調整します。retval;}ロータリーエンコーダ入力の読み込みスイッチにはチャッタリングがあるのですが,このアプリケーションではチャッタリング継続時間より遅く読み込むことでチャッタリングの対処とします。タイマ1割り込み毎にロータリーエンコーダのA相とB相の位相の変化を元に時計回り,反時計回りを検出します。早く回されると読み込みが追いつかなくなって変化を検出できなくなる問題にはエンコーダーつまみを大きくすることで角速度を下げる方法で対処とします。//反時計回りで減少}入力スイッチの読み込み検出しなければならないのは押して戻された長押しして戻された長押しタイマ1割り込みによって一定時間間隔で取り込んだ入力スイッチの状態の数を数えて時間を検出し,3種類を区別して検出します。