2013年1月28日月曜日

ATtiny85で水晶発振子を使う

ATtiny85で絶望的に使い道の狭い(※)、水晶振動子=クリスタルを使った高速処理をする方法でも書いておく。主にマイコン経験のない人向けの内容である。
「ArduinoからAVRマイコンに興味が湧いてきたよ!」という人がクリスタル使いたいけどどうすれば良いの?という方向け。(私が以前一度悩んだので…)

ATtiny85を基準に書くが、他のAVRマイコンやPICなどでも使えるように、簡易的にいろいろ説明しておく。

※ATtiny85はプログラマブル用途に使えるピンが5つ(最大6つ)しか使えない為、使用可能なピンが減って用途がかなり限られてしまう。



とりあえずATtiny85で20MHz駆動させてみることを想定。一応ここでは、前回の「LeonardoでAttiny85にスケッチを書き込んでみた」の続編的な扱いとし、Arduino ISPとArduino IDE 1.0.2以上を使った書き込みを前提で書く。

必要なものは、AVRマイコン(ATtiny85)とクリスタル(MEC製20MHz)。括弧内は私が今回使った物である。

写真だと面倒なので、前回使ったATtiny85のピン配置図を再利用する。下図の「A13/D3」と「A12/D4」がATtiny85でのクリスタルの対応になる。


なぜこれがクリスタルの配線になるかというと、「ATtiny85ではそういう仕様」なのである。ではどうやってそれが分かるかというと、ATMEL社が公式に出している仕様書を見ると分かる。仕様書は検索するとPDFの仕様書が大体上位に出てくる。例えば、私が今回使うATtiny85の場合は、「Ateml社 ATtiny25/45/85 仕様書」を見る。

必ずとは言えないが、大抵は目次の後に書いてある図(ここでは2ページ目のFigure 1-1)にピンの役割名が略称で書いてある。ATtiny85-20PUの場合は図の上の方で、ピン2と3(PB3とPB4)の括弧内を見ると、「XTAL1」と「XTAL2」と書いてある。これがクリスタルの配線先となる。(一般的なクリスタルであれば向きは無いと思われる…)

当然であるが、クリスタルを繋ぐとその分のピン2つが使えなくなる。つまりATtiny85だと「ピン3つ(※)」しかプログラマブルな用途に使えない。アナログ入力に限っては1つに絞られてしまう。代わりに安定かつ高速なクロックを得られるわけだが…。
※RESETのピンも本来は使えるが、セルフプログラミングと呼ばれる通常の書き込みが出来なくなるため、ここでは安全上取り扱わない。

さて、クリスタルの配線先が先程の通りD3とD4(PB3とPB4)のところと分かったので繋ぐが、安全上クリスタルを繋ぐところはLOWに落とす(もしくは非出力ポート化する)プログラムを書き込んでおくべきである。(特に出力ポート指定してあるなら尚更)

繋いだら、AVRライタなりArduinoISPなりでヒューズビットを書き込むわけだが、今回はArduinoユーザーを想定する。前回の記事のことがひと通り理解している前提とする。

Arduino IDEの「ツール→マイコンボード→ATtiny85 (external 20MHz clock)」を選ぶ。この状態で「ブートローダを書き込み」で外部クロック(クリスタル)を使ってくれる。スケッチの書き込みなどは、また別の機会に書く。

最後に注意点であるが、外部クロックを使うように設定すると、クリスタルなどの外部発振器を付けない状態でスケッチやヒューズビットの書き込みが行えないので、必要がなければinternal(内部CR発振回路)に切り替えて(ブートローダの書き込み)おくことをおすすめする。私はそのままにしてるが…。
あと、動作中(電源付与中)にクリスタル変えたり外したりすると、正常な動作が保証されてない。マイコンが暴走する可能性もあるので試さないように。(何が起きるかわからない)

以上。図が少ないので分かりづらいかも…。(時間があまりないのである)
クリスタルの安定化方法などは、またの機会に…。

0 件のコメント:

コメントを投稿