Arduinoは便利だ、でも本当に簡単なことをやらせるにはオーバースペックだし、高コストです。数を増やしたい時や装置を小さくしたいときにも不便です。じゃあPICでもAVRでもちゃんと勉強しろよ、という話が聞こえてきそうですが、もうちょっとゆとりにもやさしい方法をやります。
こんなのです。ちっちゃなATtiny 85(えーてぃーたいにー、と呼ぶ)という小さいAVRでLEDをチカチカさせています。これをArduino UNOだけで実現できます。元ネタはこちらですが、ほぼ同じことを情報整理しつつ書いていきます。
How-To: Shrinkify Your Arduino Projects
ATtinyはスペックも可愛いです。
ATtiny 45 : Flash mem 4KB, RAM 256 Byte ATtiny 85 : Flash mem 8KB, RAM 512 Byte ATMega328P : Flash mem 32KB, RAM 2048 Byte // UNOで使われてるもの
準備
用意するのはこれだけです。AVRライタとか特別なものはいらないよ。
- Arduino UNO (duemilanoveでも多分大丈夫)
- コンデンサ 10μF
- ATtiny 85
- ジャンプワイヤ
- LED(動作確認用)1本
- LED用の適当な抵抗1本
ATtiny用のライブラリを手に入れる。
1. 下記のサイトよりATtiny master.zipを落とす。
Arduino ISPをUNOに焼く
Arduino ISPというものを使い、UNOをブートローダの書き込み器として利用できます。かなり便利です。
前回の記事でも書きましたが、同じです。
0. ArduinoにはUSB以外に何も繋がないようにしておく。念のため。
ATtiny85にプログラムを書き込む
まずはATtiny85の割り当てを動画から見てみます。かなり単純ですね。AVRのピン番号と使えるピン(Arduinoのスケッチ側から指定するピン番号)は違うので混乱しないようにする。ATtiny 85のマイコンボードは3種類ありましたが、[internal 8MHz clock]を選択しました。
サンプルとして、スケッチの例にあるBlinkをアップロードしたいと思います。配線はこんなかんじです。LEDと抵抗はBlinkスケッチのために利用します。この例ではBlinkで光らせるLEDは4番です。上の図と比較するとPIN 4のところに抵抗とLEDがたしかにつながっています。
焼き込み時のエラーがこんな感じで発生しましたが、1行目は通常出る警告のようですが、下のやつは見たことがないです。。ATtiny85をちゃんと認識していないのかな。とりあえずアップロードは成功していたようなので無視しました。(え)
コンパイル後のスケッチのサイズ:844バイト(最大容量8,192バイト) avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85 avrdude: Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check.
うまくいけばLEDがBlinkするはずです。ただ内部クロックが短いようなのでdelay(100)など短い時間にしてアップしました。スケッチがアップロード済みになれば余計な配線を覗いてこんな感じで単独で動くようになります。
ATtin85を内部クロック8MHzにする
やはり内部クロックが違うのでdelayの時間が8倍かかっていたようです(1MHzで動作)。下記サイト様の「ATtiny2313を内部クロック8MHzにする」を参考にブートローダーを焼きましょう。[ツール]->[マイコンボード]で8MHzのATtinyを選んでおきます。
Arduino IDEで ATtiny/ATmega 開発環境を作る
使える命令
SoftwareSerialとかはシリアルがないので便利そうですね。8MHzに内部クロックをあげとく必要がありそうですが。
pinMode() digitalWrite() digitalRead() analogRead() analogWrite() shiftOut() pulseIn() millis() micros() delay() delayMicroseconds() SoftwareSerial (has been updated in Arduino 1.0)