How to make

Arduino IDEでATtiny他の開発(Arduino-ISP編)

Arduino IDEで作ったスケッチをブートローダを持たないATtinyやATmegaに書き込むことができる開発環境を作ります。

はじめに

Arduino IDE + Arduino Diecimila/Duemilanove/Uno + ArduinoISP でATmega,ATtinyの開発環境を作ることができます。ArduinoISPはDiecimila/Duemilanove/UnoなどをAVRライタに変身させるスケッチで最近のArduino IDEには標準装備されています。 ArduinoISPはArduino IDEと連携してターゲットのATmegaやATtinyに直接スケッチを書き込むことができます。したがって,ターゲットのATmegaやATtinyにはブートローダを必要としません。 また,Arduino IDE + AVRISPmkII を用いるとATmega,ATtinyの開発環境をより簡単に作ることができます。 2013.08.17 現在,ここで紹介する開発環境が対応しているデバイスは次のとおりです。 ATtiny 13/45/85/44/84/2313 ATmega 88P/168P/328P/644P/1284P/(ATmega64a) ATmega64a についてはタイマー割込を使ったプログラムは動きません。タイマーレジスタの設定未完です。

用意するもの・ハードウェア関連

Arduino Diecimila / Duemilanove / Uno ATtiny2313等 + ブレッドボード

用意するもの・ソフト関連

Arduino IDE 1.0.xシリーズのver.1.0.5 以降のものを用います。
Arduino の挙動に関すること。 ArduinoISP を書込んだ Diecimila / Duemilanove/UNO がうまく動作しないときは, こちらの方法で Diecimila / Duemilanove/UNO のオートリセット機能を止めると正しく動作するようになります。
ATmega/ATtiny記述ファイルアーカイブ hardware.zip(2015.03.19版) … こちらからダウンロード

開発環境を整える

hardware.zipの展開とインストール

ダウンロードしたhardware.zipを展開します。 展開生成されたhardwareフォルダを自分のスケッチが保存されるフォルダ(Windows であればマイドキュメント\Arduinoなど)の配下に移動します。 スケッチ保存フォルダが不明な場合はArduino IDEを起動し[ファイル]->[環境設定] (Macの場合は[Arduino]->[環境設定] )の「スケッチブックの保存場所」を見ます。(図1)

図1
インストールの確認

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

図2
動作テスト

ATtiny2313を例に説明します。(ATtiny2313 には新品か,ヒューズビットが初期値 LoFuse=64,HiFuse=DF の内部クロック1MHzで動作するものを想定しています) Diecimila/Duemilanove/UnoにスケッチArduinoISPをアップロード。 Arduino IDEの[開く]ボタンをクリックしてを選択します。(図3) [アップロード]ボタンをクリックしてスケッチを書込みます。

図3
Boardの選択

Arduino IDEのメニュー[ツール]->[マイコンボード]を開き 一覧表から ATtiny2313 を選択します。

シリアルポートの選択

Arduino IDEのメニュー[ツール]->[シリアルポート]を開き 一覧表から使用するポートを選択します。

書込み装置の選択

Arduino IDEのメニュー[ツール]->[書込装置]を開き 一覧表から Arduino as ISP を選択します。(図3-2)

図3-2
配線接続

図4-1のようにLED点滅回路を組みDiecimila/Duemilanove/(Uno)と接続します。後述の図6-1参照 DuemilanoveのD13「->SCK」とデバイスの「SCK->」,D12「->MISO」とデバイスの「MISO->」のように接続。 MOSI,RESETについても同様。

ATtiny2313 (DO->LED)図4-1 ATtiny13,45,85 (D3->LED)図4-2
ATtiny88P/168P/328P (DO->LED)図4-3 ATmega644P/1284P図4-4

※注意:図4-2のATtiny13,45,85のLED点滅回路はLEDをデジタルピン D3 に接続しています。 表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);
}
表2

ATtiny用のヒューズビットの値は,インストールしたhardwareフォルダのattiny配下にあるboards.txtに記述してあります。

ピン割付表
図6-1
図6-2
図6-3
応用事例
AE-ATmega(秋月ATMEGA168/328用IOボード)との接続図9のようにAE-ATmegaと接続しArduinoISPを使用すればIOボード上のATmegaデバイスにスケッチを書込むことができます。IOボード上のデバイスにはブートローダを書込んでおく必要はありません。

図9

情報色々

  1. スケッチをアップロードすると警告表示されることがありますがアップロードは正しく行われています。
  2. 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を追加記述しました。
  3. ATtiny13についてはProgramming ATtiny13 using Arduino ISP を参照し
    hardware/attiny/core/arduino/wiring.cを修正しました。
  4. ATtiny2313については100円マイコンATtiny2313でArduinoを参照し
    hardware/attiny/variants/attiny2313/pins_arduino.hを作成しました。
  5. ATmega644P/1284Pについてはsanguinoから
    Sanguino-0101r1.zipをダウンロードし使用しました。
    hardware/sanguino/boards.txtにatmega644p,1284Pを追加記述しました。
    hardware/sanguino/variants/standard/pins_arduino.h を修正しました。
  6. ATmega64については詳しく動作検証していません。
    hardware/atmega64/variants/atmega64/pins_arduino.h を作成。
    hardware/atmega64/cores/arduino/wiring.c wiring_analog.h wiring_private.hを修正
  7. ATtiny13A-PU(秋月電子)
  8. ATtiny2313-20PU(秋月電子)
  9. ATmega64A-AU(秋月電子)
  10. ATmega644P-20PU(秋月電子)(在庫無し 2013.08.10)
  11. ATmmega1284P-PU(秋月電子)(在庫無し 2013.08.10)
  12. ATtiny85-20PU(千石電商)
  13. ATMEGA168/328用IOボード(秋月電子)
  14. AVRISPmkII(Atmel)
  15. AVRISPmkII(秋月電子)
ATmega64Aで40個のLEDを制御

お願い
この開発環境のテストは簡単な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

記事の引用について

この記事にはクリエイティブ・コモンズ・ライセンス を設定しております。
cc-by-nc-sa

 

Make

Make

Copyright © kosakalab All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.