ArduinoISPでATtinyへスケッチを書き込む


UNO+ArduinoISPを使ってATtinyにプログラムを書き込む方法は、こちらこ ちらなどで紹介されていますが、
Arduino IDE 1.6.4から大幅に仕様が変わって、ATtinyの様な非標準のマイコンを使う場合、
「built-in boards manager」を使うようになったようです。
(古いバージョンのIDEを使ったことがないのでそれ以前のことは分かりません)

以下のページに詳細が記載されていますが、日本語のページがなかったので紹介します。
http://highlowtech.org/?p=1695

以下のページからATtinyFemtoCowのURLをクリップボードにコピーします。
https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls#list-of-3rd-party-boards-support-urls

ATtiny
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json
以下のATtinyをサポートしていますが、他のコアライブラリの方が対応チップが多いので、個人的にはほとんど使っていません。
ATtiny 24/44/84, 25/45/85

ATtinyCore Universal
http://drazzy.com/package_drazzy.com_index.json
以下のATtinyをサポートしています。
2023年現在も開発が続いていて、Arduino IDEの1.8.xxで問題なく動きます。
ATtiny 1634, 2313/4313, 24/44/84, 441/841, 25/45/85, 261/461/861, 87/167, 48/88, 43, 26 and 828.

FemtoCow ATTinyCore
https://github.com/FemtoCow/ATTinyCore/raw/master/Downloads/package_femtocow_attiny_index.json
以下のATtinyをサポートしています。
但し、2017年2月から更新が止まっています。
ATtiny 24/44/84, 25/45/85, 861, 87/167, 2313, 88
Arduino IDEを1.8.xxに更新したら「ツール」→「書き込み装置」でArduino as ISPが選べなくなってしまいました。


「ファイル」→「環境設定」で「Additional Boards Manager URLs」の項目にクリップボードからURLをペーストします。
複数のCore Libraryを使う場合は、丸印のボタンを押すと複数のCore Libraryを指定することができます。
ATtinyCore Universal と FemtoCow ATTinyCore の両方を指定し ておけば、ほとんどのATtinyを使うことができます。





「ツール」→「ボード」→「Boards Manager..」で追加したCore LibraryをInstallします。
インストールが完了すると以下の表示となります。


色々いじっていたら、「pakage_index.jsonの認証に失敗しました」のメッセージが出るようになりました。
こちらに 解決方法がありました。
インストールしたCore Libraryは以下のフォルダーに保存されます。
C:\Users\ユーザ名\AppData\Local\Arduino15
このフォルダーを削除すると、追加パッケージの情報は初期化されます。



「ツール」→「ボード」でArduino UNOを選びます。
「ファイル」→「スケッチの例」でArduinoISPを選んでUNOに書き込みます。
「ツール」→「書き込み装置」でArduino as ISPを選びます。(ArduinoISPではないので注意)
これでUNOが書き込み装置として動くようになります。

ここで、書き込み装置となったUNOと、書き込み先のATtinyを接続します。
UNOとATtiny2313/13/45/85の結線は以下のページに紹介されています。
http://make.kosakalab.com/make/electronic-work/arduino-ide/test_arduinoisp/

これ以外のATtinyも以下の結線でUNOと接続します。
ピンの場所はATtinyのモデルにより異なります。
ATtinyのPin Outは多数公開されていますが、ATtiny44/45/84/85のPin Outはこ ちらに公開されています。
ATtiny UNO
SCK Pin IO13
MISO Pin IO12
MOSI Pin IO11
RESET Pin IO10
VCC Pin VCC
GND Pin GND

ATtiny用のスケッチを準備して書き込みます。
ATtiny2313/4313/44/84/45/85/461などは、内部に8MHzのRC発信機を持っていて、工場出荷時に1MHzクロッ クにプリセットされています。
RC発信機なので精度は低いです。
クロックを8MHz(Internal)にするためには、こ ちらで紹介されているように、
ダミーのブートローダ書き込みでATtinyのヒューズビットを書き換える必要が有ります。
XTALを外部接続することで、16MHz(External)や20MHz(External)で動作させることができますが、やはりヒューズ ビットを書き換える必要が有ります。
XTALを付けただけでは、XTALは有効になりません。


以下のスケッチはPin#3をON/OFFするスケッチです。
クロックに1MHz(Internal)を指定してコンパイルした時は、ほぼ2秒毎に点滅します。
Arduino環境を使って、ATtinyで時間を正確に刻むのは結構難易度が高いです。
/*
 * ATtiny Blink
 */
#define OUTPIN 3
#define INTERVAL 1000

unsigned long etime;
int flag = 0;

void setup() {
  pinMode(OUTPIN,OUTPUT);
  digitalWrite(OUTPIN,flag);
  etime = millis() + INTERVAL;
}

void loop() {
  unsigned long now = millis();
  if (now > etime) { // 1秒経過
    flag = !flag;
    digitalWrite(OUTPIN,flag);
    etime = millis() + INTERVAL;
  }
}

ATtinyCoreを使ってATtinyにスケッチを書き込む場合、[No bootloader][Optiboot][Micronucleus/Digispark]という3つのオプションを選ぶことができます。
[Optiboot][Micronucleus/Digispark]と言うのはブートローダーの種類で、ブートローダーを書き込んでおくと、 UARTやUSB経由でスケッチを書き込むことができます。
[Optiboot]はUART経由でスケッチをスケッチを書き込むことができます。必要なのはコンデンサー1個という手軽さです。
[Micronucleus/Digispark]はUSB経由でスケッチを書き込むことができますが、周辺回路が必要になります。
[Micronucleus/Digispark]については、こ ちらで紹介しています。

こ ちらにATtinyにOptibootブートローダーを書き込む手順が公開されています。
Optibootブートローダーを書き込むと、これ以降、UARTを使ってスケッチを書き込むことができます。
但し、Flashの一部をブートローダーが使用するので、スケッチが使用できるFlashサイズが少しだけ減ります。

続く....