AVRマイコンの自分への覚書的な何か part.3 ?
どうも,かなり時間を無駄にしている気がします.ryou.です.
今回はいきなりA/D変換です.
サクサクやって行きましょう.
ちなみにデータシート見たほうが早いと思います.
プログラムの方法も書いてありますしね.
レジスタ関連の説明は全部そこに書いてあるので省略します.
配線としてはPC0(ADC0)に可変抵抗を繋いでPORTD全部にLEDを付ける感じです.
AVCCとAREFにも電源電圧を入れるのをお忘れなく.
ではサクサク行きましょう.
ソースは続きでどうぞ,
今回はいきなりA/D変換です.
サクサクやって行きましょう.
ちなみにデータシート見たほうが早いと思います.
プログラムの方法も書いてありますしね.
レジスタ関連の説明は全部そこに書いてあるので省略します.
配線としてはPC0(ADC0)に可変抵抗を繋いでPORTD全部にLEDを付ける感じです.
AVCCとAREFにも電源電圧を入れるのをお忘れなく.
ではサクサク行きましょう.
ソースは続きでどうぞ,
続きです.
# define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
void config(void){
//基本設定の関数
//基本設定
DDRD = 0b11111111 ; //PORTD全出力
PORTD = 0b00000000 ; //PORTD初期化
DDRC = 0b11111110 ; //PC0が入力
PORTC = 0b00000000 ; //PORTC初期化
//A/Dコンバータの設定
ADCSRA= 0b10000001 ; //AD変換を許可 分周比2
ADMUX = 0b00000000 ; //ADC0を使う,左揃えでAREFが基準電圧
_delay_ms (5) ;
}
int AD_DONE(void){
//A/D変換の関数
ADCSRA = ADCSRA | 0b01000000 ; //A/D変換開始(ADSCを1にする)
while (bit_is_set(ADCSRA,ADSC)) ; //A/D変換が終わるまで待つ
return ADC ;
}
int main(void){
config() ; //基本設定の関数
int AD_LED ;
while(1){
AD_LED = AD_DONE() ; //A/D変換の関数
PORTD = (AD_LED>>2) ; //PORTDにA/Dの結果を出力
}
return 0 ;
}
解説は文の横のコメント文です.
流れとしては
1,基本設定をする
2,ADCSRAレジスタの6bit目のADSCを1にしてA/D変換開始
3,ADSCはA/D変換が終わると0になるので1になっている間は待機
4,0になったらADC(A/D変換の結果が入っている変数)を返す
5,PORTDにAD_LED(A/D変換の結果入り変数)を出力する
6,2に戻って以下無限ループ
AD_LED>>2は右に2個シフトする(結果は10bitなので8bitに揃える.4で割っても結果は同じはず)ということです.
思ったより簡単ですね(?)
では今回はこの辺で.
See you next time .
# define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
void config(void){
//基本設定の関数
//基本設定
DDRD = 0b11111111 ; //PORTD全出力
PORTD = 0b00000000 ; //PORTD初期化
DDRC = 0b11111110 ; //PC0が入力
PORTC = 0b00000000 ; //PORTC初期化
//A/Dコンバータの設定
ADCSRA= 0b10000001 ; //AD変換を許可 分周比2
ADMUX = 0b00000000 ; //ADC0を使う,左揃えでAREFが基準電圧
_delay_ms (5) ;
}
int AD_DONE(void){
//A/D変換の関数
ADCSRA = ADCSRA | 0b01000000 ; //A/D変換開始(ADSCを1にする)
while (bit_is_set(ADCSRA,ADSC)) ; //A/D変換が終わるまで待つ
return ADC ;
}
int main(void){
config() ; //基本設定の関数
int AD_LED ;
while(1){
AD_LED = AD_DONE() ; //A/D変換の関数
PORTD = (AD_LED>>2) ; //PORTDにA/Dの結果を出力
}
return 0 ;
}
解説は文の横のコメント文です.
流れとしては
1,基本設定をする
2,ADCSRAレジスタの6bit目のADSCを1にしてA/D変換開始
3,ADSCはA/D変換が終わると0になるので1になっている間は待機
4,0になったらADC(A/D変換の結果が入っている変数)を返す
5,PORTDにAD_LED(A/D変換の結果入り変数)を出力する
6,2に戻って以下無限ループ
AD_LED>>2は右に2個シフトする(結果は10bitなので8bitに揃える.4で割っても結果は同じはず)ということです.
思ったより簡単ですね(?)
では今回はこの辺で.
See you next time .
スポンサーサイト