はじめに
Arduino IDEで作ったスケッチをブートローダを持たないATtinyやATmegaに書き込むことができる開発環境を作ります。 Arduino IDE +AVRISPmkII でATmega,ATtinyの開発環境を作ることができます。
2013.08.17 現在,ここで紹介する開発環境が対応しているデバイスは次のとおりです。 ATtiny 13/45/85/44/84/2313 ATmega 88P/168P/328P/644P/1284P (ATmega64a) Atmega64についてはタイマー割込を使ったプログラムは動きません。タイマーレジスタの設定未完です。
用意するもの・ハードウェア関連
- AVRISPmkII および,その互換機(AVRISPmk2-clone等)
- ATtiny2313等 + ブレッドボード
用意するもの・ソフトウェア関連
- Arduino IDE 1.0.xシリーズのver.1.0.5 以降のものを用います。
- ATmega/ATtiny記述ファイルアーカイブ hardware.zip(2015.03.19版) … こちらからダウンロード
- Windows利用の場合はlibusb-win32のlibusb-win32-bin-1.2.?.?.zipをダウンロードします。汎用USBドライバです。Aruduino IDEがAVRISPmkIIにアクセスするため必要です。(AVR Studio 付属のドライバでは動きません)
開発環境を整える
Arduino 1.0.xをインストールします。 ダウンロードしたhardware.zipを展開します。展開生成されたhardwareフォルダを自分のスケッチが保存されるフォルダ(Windows であればマイドキュメント\Arduinoなど)の配下に移動します。スケッチ保存フォルダが不明な場合はArduino IDEを起動し[ファイル]->[環境設定] (Macの場合は[Arduino]->[環境設定] )の「スケッチブックの保存場所」を見ます。(図1)

図1
インストールの確認
Arduino IDEを再起動します。 Arduino IDEのメニュー[ツール]->[マイコンボード]を開きます。 一覧にATtiny2313他の表示があればインストールは正しく行われています。(図2)

図2
libusbのインストール
Windows利用の場合 libusb-win32ドライバをインストールします。インストールには,libusb-win32-bin-*\binフォルダ配下のinf-wizard.exeを用います。libusb-win32をインストールするとAVR StduioからAVTISPmkIIを操作することができなくなります。
Linux(ubuntu)利用の場合 apt-getを使ってlibusb-dev,libusbをインストールします。 root権限で /etc/udev/rules.d/99-avrispmkii.rules のファイルを作り,作成したファイルに BUS==”usb”,ACTION==”add”,SYSFS{product}==”AVRISP mkII”,MODE=”066″,SYMLINK+=”avrdev”
と記述します。
Macの場合 libusbドライバ等のインストールは不要です。
動作テスト
ATtiny2313を例に説明します。(ATtiny2313 には新品か,ヒューズビットが初期値 LoFuse=64,HiFuse=DF の内部クロック1MHzで動作するものを想定しています)
Boardの選択 Arduino IDEのメニュー[ツール]->[マイコンボード]を開き Board 一覧表から ATtiny2313 を選択します。
書込み装置の選択 Arduino IDEのメニュー[ツール]->[書込装置]を開き 一覧表から AVRISP mkII を選択します。
(図2-2)

図2-2
配線接続 図3のようにLED点滅回路を組み,AVRISPコネクタとATtiny2313を接続します。 AVRISPmkIIのVCCは電源供給ではなく電源電圧検出用なので,別ラインでブレッドボードに電源(+5V/GND)を接続します。
ATtiny2313 (DO->LED)
図3
表1のスケッチをアップロードします。 LEDが1秒点灯1秒消灯を繰り返せば開発環境のハードとソフトは正しく動いています。
void setup( ) {
pinMode(0, OUTPUT);
}
void loop( ) {
digitalWrite(0, HIGH);
delay(125);
digitalWrite(0, LOW);
delay(125);
}
表1
ATtiny2313を内部クロック8MHzにする
初期状態のATtiny2313は内部クロック1MHzと遅いのでヒューズビットを書き換えて内部クロック8MHzで動作させます。 (LoFuse=E4,HiFuse=DFに変更)Arduino IDEのメニュー[ツール]->[ブートローダを書込む]と選択します。 この操作でチップの消去とヒューズビットの設定が行われます。 表2のスケッチをアップロードしてLEDが1秒点灯1秒消灯を繰り返せば内部クロック8MHzで動作しています。
void setup( ) {
pinMode(0, OUTPUT);
}
void loop( ) {
digitalWrite(0, HIGH);
delay(1000);
digitalWrite(0, LOW);
delay(1000);
}
ATtiny用のヒューズビットの値は,インストールしたhardwareフォルダのattiny配下にあるboards.txtに記述してあります。
ピン割付表

図6-1

図6-2

図6-3
AE-ATmega(秋月ATMEGA168/328用IOボード)の利用
図8のようにAE-ATmegaとAVRISPmkIIを接続すればIOボード上のATmegaデバイスにスケッチを書込むことができます。IOボード上のデバイスにはブートローダを書込んでおく必要はありません。(IOボードには外部から電源を供給しておきます)

図8
- スケッチをアップロードすると警告表示されることがありますがアップロードは正しく行われています。
- ATtiny45,85,44,84についてはHigh-Low Tech - Programming an ATtiny w/ Arduino 1.0 から attiny-master.zipをダウンロードし使用しました。 hardware/attiny/boards.txtのあまり使用しないと思われる記述をコメントアウトしました。 hardware/attiny/boards.txtにattiny13,attiny2313を追加記述しました。
- ATtiny13についてはProgramming ATtiny13 using Arduino ISP を参照し hardware/attiny/core/arduino/wiring.cを修正しました。
- ATtiny2313については100円マイコンATtiny2313でArduinoを参照し hardware/attiny/variants/attiny2313/pins_arduino.hを作成しました。
- ATmega644P/1284Pについてはsanguinoから Sanguino-0101r1.zipをダウンロードし使用しました。 hardware/sanguino/boards.txtにatmega644p,1284Pを追加記述しました。 hardware/sanguino/variants/standard/pins_arduino.h を修正しました。
- ATmega64については詳しく動作検証していません。 hardware/atmega64/variants/atmega64/pins_arduino.h を作成。 hardware/atmega64/cores/arduino/wiring.c wiring_analog.h wiring_private.hを修正
- ATtiny13A-PU(秋月電子)
- ATtiny2313-20PU(秋月電子)
- ATmega64A-AU(秋月電子)
- ATmega644P-20PU(秋月電子)(在庫無し 2013.08.10)
- ATmmega1284P-PU(秋月電子)(在庫無し 2013.08.10)
- ATtiny85-20PU(千石電商)
- ATMEGA168/328用IOボード(秋月電子)
- AVRISPmkII(Atmel)
- AVRISPmkII(秋月電子)
お願い この開発環境のテストは簡単なLED点消灯のプログラムでしか動作検証していません。 お使いになって不具合の発見や不具合の修正等をされた場合は,ご連絡ください。本webページに修正記事を載せ,みなさんで知識を共有したいと思います。 email もしくは twitterアカウント @kimio_kosaka まで。
update 2014.09.05 hardware.zipのattinyの記述変更
update 2013.08.24 記述誤りを訂正
update 2013.08.17 hardware.zipにAtmega64用ファイル群を追加
update 2013.08.15 Atmega644,1284用pins_arduino.hとwiring_analog.c改編
update 2013.08.15 Attiny2313用pins_arduino.h改編 / LED Matrixの例を削除
update 2013.08.10 Arduinio 1.0.5に対応
update 2012.10.17
upload 2011.10.15
