LoginSignup
4

More than 5 years have passed since last update.

posted at

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

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

まず、今期は月曜日が全休です。金曜日も全休です。
あと火曜日、水曜日、木曜日が基本的に午後休です。
そのおかげで、冬休みが実質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を点灯し、それ以下なら消灯するものです。

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

まとめ

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

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

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
What you can do with signing up
4