日々の生活を好き勝手につづったブログ(My blog is written by inoshita.jp)
全てのピンは初期状態でデジタル入力になっている
ADCやコンパレータを利用する場合は,DIDR0を操作(ビットをセット)してピンをデジタル入出力から切り離す
(DIDR0:デジタル入力禁止レジスタ0)
※)使用しないピンをデジタル入出力から切り離すことでデジタル入力緩衝部を禁止でき消費電力を軽減できる
コンパレータは非反転入力AIN0D(PB0)ピンと反転入力AIN1D(PB1)ピンの入力値を比較し「非反転(AIN0Dピンの電圧) > 反転(AIN1Dピンの電圧)」の時にACSRのアナログ比較器出力(ACO)ビットがセットされる
また,独立した割り込みを比較器出力の上昇端・下降端またはその両方で発生できる
(ACSR:制御/状態レジスタ)
・bit7(ACD):コンパレータ無効
ACDをセットするとアナログ比較器への電力がOFFとなる
設定する前にACIEビットをリセットし割り込み禁止にしておかないと割り込みが発生する
OFFにすると通常動作やアイドル動作で電力消費を削減される
・bit6(ACBG):基準電圧選択
ACBGがセットされると内部基準電圧(公称1.1V)がコンパレータの非反転入力に置き換わる
リセットでAIN0Dがコンパレータの非反転入力となる
内部基準電圧を非反転入力として使用する時は電圧の安定に一定時間を必要とするため安定するまで待機すること
・bit5(ACO):コンパレータ出力
比較条件が満たされるとセットされる(1~2クロックの遅延がある)
・bit4(ACI):割り込み要求フラグ
比較条件が満たされ割込みが発生するとセットされる
対応する割り込み処理ベクタを実行するとACIはハードウェアによって解除される
代わりにACIをセットしてもACIは解除される
・bit3(ACIE):割り込み許可
ACIEのセットでコンパレータ割込み許可となりリセットで割り込み禁止
・bit2(Res):予約
予約されており常に0なる
・bit1, 0(ACIS1, 0):割り込み条件
割込みの発生条件を設定する
設定する前にACIEビットをリセットし割り込み禁止にしておかないと割り込みが発生する
反転入力はAIN1D以外にADC3~0のどれかを選択することができる
ピンの変更にはA/D変換ピンが使用されるためA/D変換部がOFFでなければならない
ADCSRBのアナログ比較器多重器許可(ACME)ビットがセット,A/D変換部がOFF(ADCSRAのADENビットがリセット)で,ADMUXのチャネル選択(MUX1,0)ビットにて入力ピンを選択する
ACMEがリセットまたはADENがセットされるとAIN1Dが反転入力となる
(A/D多重器選択レジスタ)
・bit6(REFS0):基準電圧選択
0:基準電圧としてVCCを使用
1:内部1.1V基準電圧
・bit1,0:A/Dチャネル選択
0 0:ADC0 (PB5)
0 1:ADC1 (PB2)
1 0:ADC2 (PB4)
1 1:ADC3 (PB3)
(ADCSRA:A/D変換制御/状態レジスタA)
・bit7(ADEN):A/D許可
このビットに1を書くことでA/D変換を許可し0で変換部は電源がOFFされる
変換進行中にA/D変換部をOFFにすると変換を途中で終了する
・bit6(ADSC):A/D変換開始
・bit4(ADIF):A/D変換完了割り込み要求フラグ
A/D変換が完了し、A/Dデータレジスタが更新されると設定(1)される
(例)loop_until_bit_is_set(ADCSRA, ADIF); などで確認
ステータスレジスタ(SREG)の全割り込み許可とA/D変換完了割り込み許可(ADIE)されていればA/D変換完了割り込みが実行
・bit2,1,0(ADPS):A/D変換クロック選択
(ADCSRB:A/D変換制御/状態レジスタB)
とりあえず参考を
参考:https://blog.goo.ne.jp/paramako/e/aaea8ec6c7618ca6e083c95776c551d1