Arduino 1.6でATTiny85やATTiny44を開発できるようにしてみる

Arduino 1.6が出ました。

これまでATTinyの開発にはArduino 1.0.x系を使ってたのですが、1.6が正式版としてリリースされたことですので、移行を検討してみたいと思います。

Arduino 1.6では1.0.xから`hardware`フォルダの構成が変わっています。
また、`board.txt`の書き方も結構変わっています。

まじかー！と途方に暮れていたところ、Arduinoの達人、@@maris_HYさんより

<blockquote class="twitter-tweet" lang="en"><p>お、「Arduino Hardware Cores migration guide from 1.0 to 1.6」 <a href="https://t.co/Apn8Uuxvco">https://t.co/Apn8Uuxvco</a> なんてページを発見(^^)</p>&mdash; まりす (@maris_HY) <a href="https://twitter.com/maris_HY/status/565132517296971776">February 10, 2015</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

と教えていただきましたので、やってみました。

# 前提

## 環境について。

Arduino 1.0.5か1.0.6と[kosakalabさんで配布している hardware.zip(2014.09.04版)](http://make.kosakalab.com/make/electronic-work/arduino-ide-arduinoisp/)を利用してATTinyの開発環境が構築できていることを前提としています。

> ただし。
>
> kosakalabさんが配布されているhardware.zip(2014.09.04版)はArduino 1.0.5での利用を想定したものです。
> 1.6がリリースされる前のものですので、その点ご理解のうえ、自己責任でご利用をお願いします。

## やってみたことはLチカまでです。

Lチカまでしかやってませんので、各種関数が使えるか等の検証はできていませんので、この点もご理解をお願いします。

# 共通：① `hardware/attiny/*` を`hardware/attiny/avr/*`に変更しておく

[Arduino Hardware Cores migration guide from 1.0 to 1.6](https://github.com/arduino/Arduino/wiki/Arduino-Hardware-Cores-migration-guide-from-1.0-to-1.6)の

> Step 1: Move core files into a vendor/architecture folder structure.

の項を見ると、フォルダ構成を変更しろ、と書いてあります。

`hardware/attiny/` の下にあるフォルダ・ファイルをすべて `hardware/attiny/avr/`に移動させておきます。

# 共通：② `hardware/arduino/avr/platform.txt` を`hardware/attiny/avr/platform.txt`にコピー

これやっとかないとエラーが出ます。

> 追記。

<blockquote class="twitter-tweet" lang="en"><p><a href="https://twitter.com/tadfmac">@tadfmac</a> <a href="https://twitter.com/morecat_lab">@morecat_lab</a> platform.txtのtools.avrdude.erase.pattern=〜とtools.avrdude.bootloader.pattern=〜にunlock_bitsとlock_bitsが出てるので該当箇所を削ったら良さげw</p>&mdash; まりす (@maris_HY) <a href="https://twitter.com/maris_HY/status/566225274765717504">February 13, 2015</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

と、またまた教えていただきました！ので、
修正してみたら、うまくいきました。

`platform.txt`の修正箇所を書いておきます。コピー後、下記を修正してください。

**修正前**

```platform.txt
tools.avrdude.erase.pattern="{cmd.path}" "-C{config.path}" {erase.verbose} -p{build.mcu} -c{protocol} {program.extra_params} -e -Ulock:w:{bootloader.unlock_bits}:m -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m

:

tools.avrdude.bootloader.pattern="{cmd.path}" "-C{config.path}" {bootloader.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{runtime.platform.path}/bootloaders/{bootloader.file}:i" -Ulock:w:{bootloader.lock_bits}:m
```

上記2行から、`-Ulock:w:{bootloader.lock_bits}:m`の部分を削除します。

**修正後**

```platform.txt
tools.avrdude.erase.pattern="{cmd.path}" "-C{config.path}" {erase.verbose} -p{build.mcu} -c{protocol} {program.extra_params} -e -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m

:

tools.avrdude.bootloader.pattern="{cmd.path}" "-C{config.path}" {bootloader.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{runtime.platform.path}/bootloaders/{bootloader.file}:i"
```

上記修正を行うと、`②hardware/tools/avr/etc/avrdude.confの修正` に記載した修正は不要になります。
また、`board.txt`の`unlock_bits`と`lock_bits`の定義も不要になります。

# ATTiny85 内部発振16.5Mhzの設定方法

## ①hardware/attiny/avr/board.txtの修正

ATTiny85ではboard.txtを下記のように修正します。

**修正前（Arduino 1.0.x用のboard.txt記述例）**

```board.txt
attiny85-16.name=ATtiny85 (internal 16.5 MHz clock)
attiny85-16.bootloader.low_fuses=0xe1
attiny85-16.bootloader.high_fuses=0xdf
attiny85-16.bootloader.extended_fuses=0xff
attiny85-16.upload.maximum_size=8192
attiny85-16.bootloader.path=dummy
attiny85-16.bootloader.file=dummy.hex
attiny85-16.build.mcu=attiny85
attiny85-16.build.f_cpu=16500000L
attiny85-16.build.core=arduino
attiny85-16.build.variant=tiny8
```

**修正後（Arduino 1.6用のboard.txt記述例）**

```board.txt
attiny85-16.name=ATtiny85 (internal 16.5 MHz clock)
attiny85-16.bootloader.low_fuses=0xe1
attiny85-16.bootloader.high_fuses=0xdf
attiny85-16.bootloader.extended_fuses=0xff
attiny85-16.upload.maximum_size=8192
# attiny85-16.bootloader.path=dummy
# attiny85-16.bootloader.file=dummy.hex
attiny85-16.build.mcu=attiny85
attiny85-16.build.f_cpu=16500000L
attiny85-16.build.core=arduino
attiny85-16.build.variant=tiny8

attiny85-16.bootloader.tool=avrdude
attiny85-16.bootloader.file=dummy/dummy.hex
# attiny85-16.bootloader.unlock_bits=0xff
# attiny85-16.bootloader.lock_bits=0xff
attiny85-16.upload.maximum_data_size=512
attiny85-16.build.board=AVR_ATTINY85_16
attiny85-16.upload.tool=arduino:avrdude
```

とりあえず、これでプログラムを書き込めるようになります。
ただし、Arduino ISPでブートローダーを書き込もうとするとエラーになります。
なので、以下の`avrdude.conf`の修正も必要です。

## ②hardware/tools/avr/etc/avrdude.confの修正

> ※以下avrdude.confの修正は、`platform.txt`を修正していない場合のみ必要です。

上記①だけの状態ですと、ATTiny85にブートローダーを書き込もうとすると、エラーが出ます。
これは、どうやらバグのようです。

下記サイトを参考にavrdude.confを修正します。

[avrdude.confの修正方法](http://magicalworldofdata.com/post/17912779757/attiny85-programming-using-an-arduino)

> `ATtiny85`のパートの、`memory "lock"`の`read`の定義がぽっかり抜けているので、上記サイトの通りコピペしてください。

これで、ブートローダーも書き込めるようになります。

# ATTiny44 外部クリスタル16Mhzの設定方法

ATTiny44でも試してみましたので、こちらの修正方法も書いておきます。

## hardware/attiny/avr/board.txtの修正

ATTiny44ではATTiny85のような不具合が無いみたいですので、board.txtだけ修正すればブートローダーも書き込めました。

**修正前（Arduino 1.0.x用のboard.txt記述例）**

```board.txt
attiny44-16.name=ATtiny44 (external 16 MHz clock)
attiny44-16.bootloader.low_fuses=0xfe
attiny44-16.bootloader.high_fuses=0xdf
attiny44-16.bootloader.extended_fuses=0xff
attiny44-16.upload.maximum_size=4096
attiny44-16.build.mcu=attiny44
attiny44-16.build.f_cpu=16000000L
attiny44-16.build.core=arduino
attiny44-16.build.variant=tiny14
```

**修正後（Arduino 1.6用のboard.txt記述例）**

```board.txt
attiny44-16.name=ATtiny44 (external 16 MHz clock)
attiny44-16.bootloader.low_fuses=0xfe
attiny44-16.bootloader.high_fuses=0xdf
attiny44-16.bootloader.extended_fuses=0xff
attiny44-16.upload.maximum_size=4096
attiny44-16.build.mcu=attiny44
attiny44-16.build.f_cpu=16000000L
attiny44-16.build.core=arduino
attiny44-16.build.variant=tiny14

attiny44-16.bootloader.tool=avrdude
attiny44-16.bootloader.file=dummy/dummy.hex
# attiny44-16.bootloader.unlock_bits=0xff
# attiny44-16.bootloader.lock_bits=0xff
attiny44-16.upload.maximum_data_size=256
attiny44-16.build.board=AVR_ATTINY44_16
attiny44-16.upload.tool=arduino:avrdude
```
# まだ1.0.6使ってた方がいいかも。。。。

これから少しづつ触っていきたいと思いますが、まだちょっと不安定ですね。。。1.6。。。。よく固まる。