monman53のぶろぐ

いろいろ載せるよ

Ubuntu17.10でAVR開発環境の構築

ATtiny13AでLチカさせてみます. 次のブログを参考にさせていただきました.

invalid-log.blogspot.com

こんな感じのやつを前に作業しました. f:id:monman53:20181121024126j:plain

準備

つかうもの一覧

  • ATtiny13A (DIP)
  • AVRISP mk2 (ライタ)
  • 3V電源
  • Ubuntu17.10がインストールされたPC
  • ブレットボートとかジャンパ線とか

環境構築(ハードウェア)

AVRISP mk2 のピン配置

f:id:monman53:20181120231513p:plain

ATtiny13A のピン配置

秋月電子のデータシート f:id:monman53:20181120233332p:plain

いざ配線

PB4の先にLEDをつけておく.ブレッドボード後ろの方に3Vの三端子レギュレータがあります.

f:id:monman53:20181121024126j:plain

環境構築(ソフトウェア)

avrdudeのインストール

これを使ってマイコンに書き込みを行う.

# apt-get install avrdude

ライタをPCに接続して次のように実行してみる.(avrdudeの実行には権限が必要だろう.)

# avrdude -c avrisp2 -p t13

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9007 (probably t13)

avrdude: safemode: Fuses OK (E:FF, H:FF, L:6A)

avrdude done.  Thank you.

うまく行けばライタが少し光って上のように表示されるはず.-cでライタを指定(今回はAVRISP mk2なのでavrisp2),-pマイコンの型番を指定(t13しかなかった)(指定しないと型番一覧が表示される).

-vオプションをつけると,より詳細な状態が表示されるようだ.

コンパイラ・ライブラリのインストール

コンパイラとライブラリをインストールする

# apt-get install gcc-avr binutils-avr avr-libc

これらのドキュメントは次を参照されたい https://www.nongnu.org/avr-libc/user-manual/index.html

Lチカさせてみる

プログラムの作成

$ cat led.c
#include <avr/io.h>
#include <util/delay.h>

int main() {
    DDRB  = _BV(PB4);   // PB4だけ出力
    PORTB = ~_BV(PB4);  // PB4以外内部プルアップ 
    while(1) {
        PORTB ^= _BV(PB4);   // 点滅
        _delay_ms(1000);     // 1秒待つ
    }
    return 0;
}

マクロとかは次のサイトを参考にした. IOポート、Cのマクロ | 始めるAVR

また,レジスタとかの詳しい情報はこれがわかりやすい.

コンパイル・転送

コンパイル

$ avr-gcc -mmcu=attiny13 -O -DF_CPU=1000000UL led.c -o led.out

ATtiny13は初期状態で内部クロックが1MHzであるらしいので,それをコンパイラに伝える(delayとかに必要).

そして転送する.

# avrdude -c avrisp2 -p t13 -U flash:w:led.out:e

これでATtiny13AのFlashメモリにプログラムが書き込まれたことになり,めでたくPB4に接続したLEDが点滅するはずです!

電源を入れ直しても点滅するよ.

動作周波数を変えてみる

今まで初期状態の1MHz(8MHzの8分周)内蔵オシレータを使っていたが,より省電力にするために128KHzにしてみる.

ヒューズlfuseの値を変えることで周波数を変えることができる.

# avrdude -e -c avrisp2 -p t13 -U lfuse:w:0x7B:m

遅くした後はライタの周波数が相対的に速くなってしまいうまく書き込めないので,avrdude-Bオプションをつけて適切な速度になるように調整する. 128KHzだと-B 100でうまく行った.大きい値にしすぎると転送に時間がかかってしまう.

ヒューズの値などの詳細は先の資料に詳しい.

おわりに

CLI前提で環境構築してみました.もっと強い環境もあると思うので,いろいろ調べていきたい.