itsukichang

フロントエンドが得意なエンジニア.ダーツと旅行とギターが好き

AVR入門 -Mac環境構築

前回Windowsでの環境構築方法(AVR入門 -Win環境構築 - いつきの技的日記)を書きましたが,Arduinoユーザの方にはMac使いの方も多いはず.
わざわざbootcampとかしないで,MacでAVR開発したい!っていう人向けの記事です.
※ちなみに僕の環境は,OS10.6でXcodeはVer3です. Xcode4の場合はあまり変わらない気もしますが,新しいMacを手に入れ次第追記しますね><

必要なもの

今回は単純にAVRだけに注目して書きますね.

  • ハードウェア
  • AVRマイコン: 今回はATtiny2313で.
  • AVRライタ: 純正のAVRISPmk2が使えます.しかもUSB接続するだけです.普通に使えます.
  • 部品と電源

ハードウェアはwindowsの場合と同じものが使えます.便利ですね.

  • ソフトウェア
  • Xcode: なんとXcodeが使えます!便利!
  • CrossPack for AVR: 今回の肝心要です.MacでAVR-GCC(コンパイラ)やavrdude(書き込みツール)を使えるようにしてくれる便利な環境です.

CrossPack - A Development Environment for Atmel’s AVR Microcontrollers

とりあえずCrossPack for AVRをダウンロード&インストールしましょう.

準備

テンプレートの用意

CrossPack for AVRのインストールが完了したら,usr/local/ に[CrossPack-AVR]と[CrossPack-AVR-(date)]というディレクトリが出来ています.
このディレクトリ内にXcodeでAVRプログラミングを行うためのテンプレートがあります.
それをXcodeのProject Templatesにコピーしましょう.
以下にリンクファイルを作るコマンドを記述しておきます.この通り実行すればokです.

$ cd /Developer/Library/Xcode/Project\ Templates/
$ mkdir AVR
$ cd AVR
$ ln -s /usr/local/CrossPack-AVR/etc/templates/TemplateProject Firmware
Xcode起動

上記コマンドが無事実行できたら,Xcodeを起動してみましょう.
新規プロジェクトのテンプレート選択画面に先ほど作成した[AVR]という項目があるので,それを選択しましょう.
プロジェクトが作成されたら,ファイル構成は以下のようになっていると思います.

main.cにコードを書きます.
もうひとつのMakefileにはコンパイルの手順や対象ファイルの設定などが記述されていますが,とりあえず必要な変更点があります.
Makefileの20行目ほどのところに,DEVICE, CLOCK, PROGRAMMER, OBJECTS, FUSES という記述があります.
これはそれぞれ,使用するAVRマイコンの種類,クロックの種類,AVRライタ(プログラマ)の種類...などを設定するものです.ひとつずつ見ていきましょう.

makefileの設定
  • DEVICE

今回はATtiny2313を使用しているので,DEVICE = attiny2313 に変更しましょう.

  • CLOCK

動作クロックです.ATtiny2313は内部クロックが8MHzなので,8000000に設定しましょう. CLOCK = 8000000 です.

  • PROGRAMMER

今回は純正のAVRISPmk2を使っているので, PROGRAMMER = -c avrispmkII -P usb と記述しましょう.

  • OBJECTS

これは一連のコンパイルの流れで使用するオブジェクトファイルの指定です.
ここはとりあえずデフォルトのままでokです. OBJECTS = main.o

  • FUSES

fuseはAVRのチップの動作を設定するパラメータのことです.
書き込みの際にはプログラムデータとは別にこのfuseの設定を行う必要があります.
fuseにはビットによってそれぞれ様々な役割があるのですが,慣れないうちはデフォルトの設定を推奨します.(このfuseの設定を誤るとAVRへの書き込みができなくなったりするので...)
そのデフォルトのfuse設定は以下のサイトで調べる事ができます.
Engbedded AVR Fuse Calculator
まずAVRの種類を選びます.

selectボタンを押せば,とりあえずデフォルトのfuse設定が画面下部に出るのでそれをチェックしましょう.

画像の赤で囲まれた部分が今回必要になる設定です.
そのままコピペして,FUSES = -U lfuse:w:0xe4:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m と変更しましょう.

  • まとめ

ここまでの変更でmakefileの20行目付近は以下のようになっていると思います.

DEVICE = attiny2313
CLOCK = 8000000
PROGRAMMER = -c avrispmkII -P usb
OBJECTS = main.o
FUSES = -U lfuse:w:0xe4:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

これはattiny2313を対象にavrispmk2を使った時の設定ですので,マイコンやライタを変更した場合はその都度編集しましょう.
CLOCKはマイコンのデータシートで,FUSESは先ほどのサイトで確認することができます.

ビルド

main.cに適当なコードを書き,とりあえずビルドしてみましょう.ビルドできなかった場合はコードやmakefileを見直してみてください.
ビルドが成功する事が確認できたら,xcodeの[ターゲット]にある[firmware]をダブルクリックしてターゲットの設定を行いましょう.
カスタムビルドコマンドの引数にを一旦削除し,flash と書き,再びビルドしてみましょう.
AVRに対してプログラムが書き込まれるはずです.

失敗したら

main.cのコードを見直す.
makefileを見直す.
マイコンとライタの接続が正しいか見直す(前回の記事の「ATtiny2313とAVRISPmk2の仕様」を参考).
Xcodeのバージョン...?
OSのバージョン...?