いろいろがんばりたいブログ

情報科学科の人がいろいろ書きます。

ArchLinuxでAVRを開発しようとしてみるメモ

ArchLinuxでAVR(ここではATMEGA328P)で遊ぶメモ たぶんUbuntuとかも同様にいけるんじゃないかなー

ハードウェア

とりあえず書きこみに自分が使っているものは以下

f:id:tomoki_imai:20140616133034j:plain

f:id:tomoki_imai:20140615232937j:plain

ソフトウェア

パッケージ

ArchLinuxでは全て公式レポジトリから手に入る

udev

もしかしたら必要ないのかもしれない。 /etc/udev/rules.d に以下のファイルを 60-avrisp.rules としてコピーする。

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

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

LABEL="avrisp_end"

一応再起動する。

繋げる

以下を参考にして繋げる。

http://allaboutee.com/2011/05/11/how-to-program-an-avr-microcontroller/

はやい話がATMEGA328P側のピンとAVRISP mkIIのピンを一緒のとこにすれば良い。 あと、AVRISP mkIIは電源を供給してくれないので、外部の電源を用意する。これもVCC,GNDに(並列に)つなければ良い。 自分の場合はmini USBから取れるようにした。

AVRISP mkIIを"最後に"回路、もしくはUSBにつなげること。mini USBを後にやるとオレンジが点滅した。

書きこみ

どうやらelfを出力した後に何かをやらなきゃいけないらしい。

main.cは以下のもので試してみた

#include <avr/io.h>

int main(){
    while(1){
    }
    return 0;
}
$ avr-gcc -mmcu=atmega328p main.c
$ avr-objcopy -O ihex a.out a.hex
$ sudo avrdude -c avrispmkII -p m328p -P usb -U flash:w:a.hex:a

Permission deniedとかいわれたらsudoをつけてみる。 avr-objcopyに-R .eepromとかしたほうがちいさくなってよいのかも?