3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

StudentAdvent Calendar 2016

Day 17

私がAVRマイコンをいじるまで

Posted at

うちの大学の情報工学専攻は...楽すぎる...

まず、今期は月曜日が全休です。金曜日も全休です。
あと火曜日、水曜日、木曜日が基本的に午後休です。
そのおかげで、冬休みが実質2倍に伸びました。

また、レポートはほとんどありません。
コーディングは月に1度程度です。
中間テストもありませんでした。

...将来、大丈夫かな。

このままでは、高校時代の方がコーディングしてる

というわけで、プログラミングができるサークルに入りました。
ロボコンサークルです。
ロボコンの公式サイトは以下のリンクから。
NHK学生ロボコン http://www.official-robocon.com/

ロボット製作ではプログラミングできました。

ちなみにロボットにプログラムを組み込む際には、
マイコンという小さなデバイスにプログラムを書き込み、それを載せます。
マイコンは電圧によって入力・出力を行い、回路を制御しています。
基本的には入力はセンサからの値で、出力はアクチュエータの動作です。
また通信も可能で、回路を作成すればPCと無線通信をすることも可能です。

 
 
ここまでが、昨年までの話です。
今年からは後輩の教育係で、後輩が主にコーディングをしてます。

でも、だんだんと教えることが細かすぎるものになってきました。
細かすぎて伝わらないアレです。

...何か後輩に教えられることを新しく勉強しなければ。

よし、AVRやろう。

AVRは安価に入手できるマイコンです。
AVRの中にも種類がありますが、安いものでは秋月で50円ほどで手に入ります。

話はズレますが、秋月電子は電子部品を取り扱っているサイトです。
配達もしていますので、電子工作に興味があれば覗いてみてください。
電子工作と言わずに、今でいえばIoTというやつですかね。
秋月電子 http://akizukidenshi.com/

話を戻して、AVRのATtiny13A。小さくて可愛い。
大きさは10×10×10くらいですかね。これが50円です。
ATtiny13A

ロボコンとか電子工作とか全く縁のなかった人は、
この子に何ができるか分からないと思います。

でも、違うんです。
この子だけでも、回路があれば大抵のことができます。
皆さんが何をさせるのかが大事だと私は主張したい。特に後輩に。

この子に書き込んだプログラムを以下に紹介します。
至って普通のC言語であることを感じていただければ幸いです。

adc_sample_main.c
int main(void)
{
	int result;
	
	//出力ポートを設定
	set_bit(DDRB, DDB2, 1);
	set_bit(PORTB, PORTB2, 1);
	
	//A/D変換のチャネルを選択 ADC3(PB3)
	set_bit(ADMUX, MUX1, 1);
	set_bit(ADMUX, MUX0, 1);
	
	//基準電圧を選択(Vcc)
	set_bit(ADMUX, REFS0, 0);
	
	//結果を右揃えに
	set_bit(ADMUX, ADLAR, 0);
	
	//ADTS2-0 = 000(連続変換動作)
	set_bit(ADCSRB, ADTS2, 0);
	set_bit(ADCSRB, ADTS1, 0);
	set_bit(ADCSRB, ADTS0, 0);
	
	//システムクロックの分周値 1/8 -> 150kHz
	//ADPS2-0 = 011
	set_bit(ADCSRA, ADPS2, 0);
	set_bit(ADCSRA, ADPS1, 1);
	set_bit(ADCSRA, ADPS0, 1);
	
	//A/D変換自動起動許可
	set_bit(ADCSRA, ADATE, 1);
	
	//A/D許可
	set_bit(ADCSRA, ADEN, 1);
	
	//A/D変換開始
	set_bit(ADCSRA, ADSC, 1);
		
	while (1) 
	{
		//変換結果を取得
		result = ADCL + (ADCH << 8);
		
		if(result > 614){	// 614 -> 3.0V
			set_bit(PORTB, PORTB2, 1);
		}else{
			set_bit(PORTB, PORTB2, 0);
		}
		
		_delay_ms(10);
	}
}

簡単に上のプログラムを説明すると、これはAVRでAD変換を行っているプログラムです。
AD変換とはアナログ電圧値をデジタル数値に変換する機能です。
入力された電圧が3.0Vより大きいならLEDを点灯し、それ以下なら消灯するものです。

教育用のサンプルなので使い道については...触れるな...

まとめ

講習用資料のまとめもいつも数行なので、数行にまとめます。

電子工作たのしい。
マイコン使うと何でもできる。
みんなやるんだ。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?