Awazaru's Blog

筆者の覚え書きです。内容は電子工作とかその他いろいろ。

AVRでAD変換を行った。(前編)

こんにちは。
使えたらいろいろ便利そうなAD変換、シリアル通信をAVRでやってみました。
使用マイコンはatmega328pです。
今回行ったことは「半固定抵抗の値を読んで(厳密には違う)LEDをつけたり消したりする。同時にその値をシリアル通信でPC側に表示させる」です。
自分の資料探し力が不足している、ということもあるかもしれませんが実際に用いる回路というのがよくわからず手間取ってしまいました。
AD変換はADCxピン(xには数字が入ります)での分圧の値を基準値と比べることで値を決めています。

実際に用いた回路は

(今度からは回路図エディタで書いた図をあげます...)
今度はソースコードですがまず参考までに私の設定を

void adc_ini(){
  //ADコンバーター設定
  ADMUX =  0b00100001;
//AREF基準,値左揃え,ADC1ピン
  ADCSRA = 0b10100101;
//ADC許可,ADC停止,自動変換,割込み許可,32分周 ビット6を1にすることでAD変換開始
}

とりあえずこれくらい書けば動くんだなくらいに考えてください。
また、AD変換を行うピンはDIDRレジスタというものでデジタル入力を禁止にすることを忘れないで下さい。
設定のところに書いてあるようにADCSRAのビット6に1を立てて上げるとAD変換が開始されます。
変換が終了すると値はADCH,ADCLというレジスタに保存されます。
AD変換で得られる値は10bitありますが今回の設定では値は左揃えとなっていますのでADCHに上位8bit、ADCLに下位2bitが保存されることになります。大体はADCHを適当な変数に読み込んでやれば値として比較等に使用できますが精密性が求められる場合にはその限りではありません。

AD変換については以上です。ツッコミどころも多いかと思いますがご容赦ください。
次回はシリアル通信について書きたいと思います。