opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

ArchLinuxでAVRマイコンを使う

以前にMacで使う方法を書いたが、Archでも同じようなことをやってみた。

パッケージをインストールする

必要なパッケージをインストールする。

$ (sudo) pacman -S avr-gcc avrdude avr-gdb avr-binutils

プログラマを設定する

例によって、AVRISPmk2を使うのでudevにruleを作る。
/etc/udev/rules.d/45-atmel.rulesなど適当な名前をつけて、以下の内容を書き込む。

SUBSYSTEM!="usb_device", ACTION!="add", GOTO="avrisp_end"

# Atmel Corp. JTAG ICE mkII
ATTR{idVendor}=="03eb", SYSFS{idProduct}=="2103", MODE="660", GROUP="dialout"
# Atmel Corp. AVRISP mkII
ATTR{idVendor}=="03eb", SYSFS{idProduct}=="2104", MODE="660", GROUP="dialout"
# Atmel Corp. Dragon
ATTR{idVendor}=="03eb", SYSFS{idProduct}=="2107", MODE="660", GROUP="dialout"

LABEL="avrisp_end"

また、この設定は以下のURLから入手しました。

http://stackoverflow.com/questions/5412727/avrisp-mkii-doesnt-work-with-avrdude-in-linux

適当にプログラムを作る

例によって適当なプログラムを書く。
とはいえ、今回は最後に記載した、参照URLより引用させていただきました。

/* main.c */
#include <avr/io.h>
#include <util/delay.h>

#define BBLED 3

int main(void)
{
    DDRB  = _BV(BBLED);

    for(;;){
        PORTB ^= _BV(BBLED);
        _delay_ms(250);
    }
}

今回使用したマイコンは、ATmega168なので次のようなコマンドを打ってコンパイルした。
後々はMakeなどを使ってビルドできるようにしておきたいが、とりあえずまずは直打ち。

$ avr-gcc -O2 -mmcu=atmega168 -DF_CPU=1000000UL -I/usr/avr/include main.c -o main  

Archのavr-gccは、標準ではavr/io.hなどを探せないようである。ので、include directoryを直接Iオプションで指定してみたらうまくいった。

$ avr-objcopy -j .text -j .data -O ihex main main.hex  

として、hexファイルを生成した。
これらのコマンドも、最後の参照URLのものをほとんどそのまま使っている。詳しいオプションの解説なども乗っているので、詳細は最後の参照URL参考ということで。

無事、main.hexファイルを生成したら、最後にavrdudeで書き込みを行う。

$ (sudo) avrdude -c avrispmkII -P usb -p atmega168 -F -U flash:w:main.hex

pオプションの値は、自分の使っているAVRマイコンの型に置き換える必要がある。
エラーが出ずに無事書き込みができたら終わり。
エラーが出る場合は、avrispmk2が正しく接続できているかを確認すると良い。
ピン配置などは

http://elec-studio.eco.coocan.jp/tool_soft01.html

を参考にすると良い。

参照URL

以下のURLを参考にさせていただきました。ありがとうございます。

usb - AVRISP MKII doesn't work with avrdude in linux - Stack Overflow

http://d.hatena.ne.jp/over80/20100506/avr_build

http://elec-studio.eco.coocan.jp/tool_soft01.html

終わり

前回のMacで同じようなことをしたのが一年くらい前の話ですね。
結局あれから、あんまり電子工作的なことはできていませんでした。今年の後期こそは本当に頑張りたいところです。
とりあえず、いいところに温度センサーがあったので、まずは温度計とか作ってみようかと思いましたが、AVRマイコンが2つしかなく両方ATmegaなので、温度センサー読み取って7セグに表示するだけにしては少々もったいない気もしますがしょうが無いですね。

Firefox ブラウザ無料ダウンロード