2009年3月13日金曜日

arduino-13 と atmega88


秋月電子ではatmega88というチップを格安で売っている。このAtmega88は 168のメモリ容量が半分になったもので、海外ではあまり値段もかわらないことから arduinoの中でこれを使っているものはないようだ。しかし、日本ではチップが安いことから、これを使うためのハックがいくつかなされてきていたが、arduino-13が2月にリリースされたのでもう一度ハックをしなおす必要がある。そこでarduino-12 行ったのと同様の変更をしようとおもったら、案外簡単に対応できるように内部がかわっていたのでそれについて書いておこう。

まず、最初に私の手元で使っているライターはSTK500なのでそちらを使えるようにするところからはじめてみた。programmers.txt に以下の3行を追加すると、stk500を利用できるようになる。

##############################################################
stk500.name=STK500
stk500.communication=serial
stk500.protocol=stk500v2
##############################################################

そして、atmega88対応の本番は以下のとおりである。まず、ブートローダを用意する。これは自分で作ると大変なので kosakaさんが公開しているものを利用した。

このブートローダをarduinoのフォルダの中の hardware/bootloaders のフォルダの中に、 lilypad88 というフォルダをつくり LilyPadBOOT_88.hex という名前で保存する。
これでブートローダの準備はできあがった。

次に実際のコンパイルのパラメータになる boards.txt の変更が必要だ。lilypad をベースにAtmega 88対応したものなので、lilypad88 という名前で登録することとした。boards.txt への追加部分は以下のとおりになる。

arduino-12 までは cores の中のコードにあった ifdef を書き直す必要があったが、coresのコードが大幅に書き換えられたようで、現状では以下の部分だけで問題なくバイナリを作ることが出来るようだ。あまり話題になっていないが、coresを書き換えずにこれだけの手間で新しいチップがサポートできるようになっているのは、 arduino-13のもっとも変わった部分かもしれない。

##############################################################
lilypad88.name=LilyPad Arduino w/ ATmega88
lilypad88.upload.protocol=stk500
lilypad88.upload.maximum_size=7168
lilypad88.upload.speed=19200

lilypad88.bootloader.low_fuses=0xe2
lilypad88.bootloader.high_fuses=0xdd
lilypad88.bootloader.extended_fuses=0x00
lilypad88.bootloader.path=lilypad88
lilypad88.bootloader.file=LilyPadBOOT_88.hex
lilypad88.bootloader.unlock_bits=0x3F
lilypad88.bootloader.lock_bits=0x0F

lilypad88.build.mcu=atmega88
lilypad88.build.f_cpu=8000000L
lilypad88.build.core=arduino
##############################################################

これで、arduino-13  でも問題なく Atmega88が使えるようになったはずだ。
ちなみに最近の秋月電子でのAtmega88は Atmega88P というピコパワー対応のものにかわっている。こちらでの動作が同様に行えるかはまだ未確認なので、また報告しようとおもう。