ATtiny85のRESET(PB5)ピンをヒューズを書き換えずに入力ピンとして使う場合、リセットがかからないような電圧範囲にてADCによる電圧判定を行う方法が一般的ではあるがADCはその変換時間のために比較的低速な入力用途にしか使えないしなんとなく煩雑な気もしてしまう。なので、もっと別の良い方法があるのではないかと以前から気になってはいたので、今回は、アナログコンパレータを利用する方法を試して見た。
上図は、PB0(非反転入力)とPB5(反転入力)をアナログコンパレータの入力として使う方法である。基準電圧としてPB0を抵抗分圧によりVDDより0.5Vほど低い電圧にしておいて、PB5を同じように抵抗分圧により、VDD~4.0V程度まで変化させる方法である。
この方法の利点は、高速な入力に加え入力変化割り込みが使えることと、コンパレータのACDビットだけで入力状態が判定できることである。
欠点としては、ADCの多重器出力を使うためADCとは排他的にしか使えないこととPB0を利用していること。ピン数の不足を補うためにRESETピンを利用しようとしているのに他のピンを使ってしまうというのは本末転倒な感じがしないわけでもないが、PB0を排他的に利用できるなら、スイッチ、オープンコレクタ、オープンドレイン回路などへのプルアップ入力ピンとして共有することは可能である。
ええっ PB5 はヒューズを書き換えなくても RESET 以外に使えるんですか。それは思いつきませんでした。ヒューズを書き換えると ISP で書き込みができなくなってしまうので不便だと思っていました。特にピン数の少ない ATTiny85 では貴重なテクニックですね。
コメント頂きありがとうございます。本当にATtiny85のピン数の少なさにはいつも悩まされますね...
PB5についてはヒューズ書き換えなしではデジタル入出力としては使えませんがアナログ入力としてなら使えます。但し、約2V付近まで電圧を下げてしまうと本来のリセット機能が動作してしまうため出来るだけ電圧の高いほうの狭い領域で利用するのが安心です。