The jonki

呼ばれて飛び出てじょじょじょじょーんき

【Arduino】ATtinyをArduinoで開発する

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
    • 千石電商秋葉原店舗で見つけましたが、秋月でこの型番はありませんでした。
    • ATtiny45でも大丈夫だけど同じ8ピンでRAMなど多い85の方が良いかと。
  • ジャンプワイヤ
  • LED(動作確認用)1本
  • LED用の適当な抵抗1本

ATtiny用のライブラリを手に入れる。

1. 下記のサイトよりATtiny master.zipを落とす。

Programming an ATtiny w/ Arduino 1.0

2. .zip を展開してArduinoフォルダのhardwareフォルダの下に置く。

hardwareフォルダはなければ作成してください。
C:\Program Files (x86)\Arduino\hardware\attiny

3. Arduino IDEを再起動して[ツール]->[マイコンボード]->ATtiny...が読み込まれることを確認。

Arduino ISPをUNOに焼く

Arduino ISPというものを使い、UNOをブートローダの書き込み器として利用できます。かなり便利です。
前回の記事でも書きましたが、同じです。

0. ArduinoにはUSB以外に何も繋がないようにしておく。念のため。
1. [ツール]->[マイコンボード]->[Arduino UNO]にセット。(ISPだからATTinyじゃないよ)
1. [ファイル]->[スケッチの例]->[Arduino ISP]を読み込み、UNOにそのスケッチをアップ。

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)