読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

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

MacでAVRマイコン使ってみた

AVR 電子工作 OSX

この前出かけた帰りに部品屋さんがあってAVRISPmk2が買えたのでついでにAVRマイコン(ATMEGA48-20PU)も買ってMacでAVRを試してみた。

コンパイラ一式は基本的に有名なCrossPackを利用する。
http://www.obdev.at/products/crosspack/index.html

avrdudeを調達する

avrdude(書き込み用のツール)に関しては上記CrossPack-AVRに入ってるものはUSB対応してないとかいうよくわからないことになっているので、以下のいずれかの手順で自分で用意する。

  1. ソースコードから野良ビルドする
  2. MacPortsから入れる
  3. どこかからもってくる

MacPortsが入っているなら2が一番速いだろうけど、1は依存ライブラリlibuseなども調達してビルドする必要がある。
3は具体的にはここで配布するのでそれを使う。ただしいくつか制約がある。

ソースからコンパイルしたい場合は以下のURLからソースをとってきてビルドする。
avrdude official page

コンパイル済みのものはこちら
compiled avrdude binary

コンパイル済みのパッケージはMacPortsでインストールしたものを取り出している。そのため"/opt/local/etc"以下にavrdude.confファイルを配置する必要がある。
avrdude.confも取り出したものをおいておく -> こちら

最後の通ってなければPATHを通してCrossPackのavrdudeよりも先に呼ばれるようにしておけば大丈夫。

プロジェクトを作る

$ avr-project test1

などとコマンドを打つとプロジェクトを作れる。
XCodeで使えるそうだが、正直IDEはあんまり使いたくないしXCodeは使ったことなくて逆に作業効率が下がるので使わない(使えない)。

なので、xcodeprojファイルは無視して中にできるfirmwareディレクトリのみを使う。

Makefileを編集する

Makefileも修正が必要らしい。これに関しては以下の記事を参考にするとわかりやすかった。

http://d.hatena.ne.jp/itsuki_kosen/20130107/1357564626

今回はATMEGA48-20PUを使ったので...

DEVICE     = atmega48
CLOCK      = 20000000
PROGRAMMER = -c avrisp2 -P usb -p t2313
OBJECTS    = main.o
FUSES      = -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

多分こんな感じ。(詳しくないのでもし問題がありそうならご指摘くださいorz)

ちなみに...

AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)

という行に

AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE) -v

と、vオプションを加えるとverbosモードになるので詳細な情報が見れる。

適当にソースコードを編集する

適当に2つのLEDを光らせるプログラムを書いてみた...

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRD = 0b11111111; //ポートを出力用にする
    PORTD = 0b00000000; //最初は全部0 (正直書かなくてもいい)
    for(;;){//メインループでひたすら点滅させる
        PORTD = 0b00000000; 
        _delay_ms(50);
        PORTD = 0b00000001;
        _delay_ms(50);
        PORTD = 0b00000010;
        _delay_ms(50);
        PORTD = 0b00000011;
        _delay_ms(50);
    }
    return 0;   /* never reached */

コンパイル、そして書き込む

Compile it!

$ make

でおk。続いて書き込む。ライターをUSBでつないできちんと配線が正しいのを確認してから

$ make flash

する。
そして最後に

$ make fuse

する。正直最後のmake fuseはよくわかってない。が、なんかflashの後に一回すればいいのかな?


なんかfuseしたら質問されるけど"y"にするとものすごい待たされて結局1時間放置しても終わらなかった... ので"n"と答えるといいのかな?
fuseはAVRのプログラム本体とは別にAVRにいろいろ設定を施せる機能のようだが、下手をすると完全にマイコンをダメにしてしまったりするおそれもあるらしいので注意。

結果

f:id:opamp_sando:20130930194605j:plain

という具合にちゃんと動いたよ。

動作を変えたいときは、コードを訂正してmakeしてmake flashしてmake fuseからの質問は"n"と答えればおkな感じ。
fuse周りに関してはしばらく調べて何かわかったらまたメモるかもしれない。

参考

配線のつなぎ方などは、ニコニコ動画のほうにある「零からの電子工作」を参考にさせて頂きました。

夏休み\(^o^)/

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