AVR関連の情報.
PICより高性能,1クロックで1命令を実行できる.PICに比べ分かりやすいアーキテクチャを持つ.
GCCを使ってCによる開発もできる.
megaシリーズだと外部メモリを接続して16ビット分の空間を使えるものがあるのが強みか.
低電圧(1.8V)から動作できるものもあり、すべては5Vで動作可能。 プログラミング環境であるAVRstudioにはデバック機能が備えつけられており、書いたソフトを1ステップごとに動作を確認できるため、基本的なデバッグが容易。
パラレルポートが使えるならデジットのドングル基板が便利.(STK200互換にするためにジャンパが1つ必要)
シリアルポート/USBなら,ELMの回路図が便利であろう.
デジット製のUSBライターも専用のライティングソフト付きで2100円で売られている。電源なしで書き込み可能。 信頼性は割と高いが、teratermなどで通信するためには別にUSBシリアル変換が必要。 ついでに、安くなってからとその前とではピンの向きが逆になっている。逆ざしして壊れることはないと思うけれど。
ft232rlというUSB-TTL変換チップのモジュールを使うと、Bit BangによってUSBライターとして動作させることができる。Aliexpressから買うと2ドルほどであり秋月でも1000円しない程度で済む。
1 MISO | 2 Vcc |
3 SCK | 4 MOSI |
5 RST(負論理) | 6 GND |
ELMからDLできるもので十分かと思われる.
ft232rlをライターとして使う場合はAVRdudeを使う。現状windows用のまともな公式ビルドはないので、windowsユーザーはここのを使うとよい。 http://suz-avr.sblo.jp/category/780472-1.html
チップ | pin数 | flush memory | I/O数 | 8bitタイマ(PWM) | 16bitタイマ(PWM) | AD変換(ビット数) | その他 | コメント |
ATtiny15 | 8pin | 1K bytes | 6 | 2(1) | - | 4(10bit) | - | - |
ATtiny25,45,85 | 8pin | 2,4,8K bytes | 6 | 2(4) | - | 4(10bit) | デッドタイムジェネレータ | サーボ制御向き? |
ATtiny26 | 20pin | 2K bytes | 16 | 1(2) | - | 10(10bit) | アナログ比較器 | - |
ATtiny2313 | 20pin | 2K bytes | 18 | 1(2) | 1(2) | - | USART有りでパソコンとの通信が容易 | 秋月だと120円 |
ATmega48,88,168 | 28pin | 4,8,16K bytes | 23 | 2(4) | 1(2) | 6(10bit)(DIPの場合) | アナログ比較器, USART | 168はマルツで525円 |
ATmega128 | TQFP 64pin | 128K bytes | 53 | 2(2) | 2 | 8(10bit) | 6つの1〜16bitPWM, USART2つ | 秋月で850円 |
ATmega328P | DIP 28pin | 32K bytes | 23 | 2(4) | 1(2) | 6(10bit) | USART,SPI,I2C | Arduino UNOのコア |
ウォッチドッグタイマ機能はデフォルトでオンにされており、特に設定をしない場合一定時間でリセットがかかる。これではまってしまうこともあるらしいので心の隅に留めておくとよいかと。
変数が定数の場合にはROM上に配置することでマイコンの限られたRAMを節約することができ、H8等では、
const char buff[256];
と書けば変数は自動的にROM上に配置されるが、AVRではRAM上に配置されてしまう。
#include <avr/pgmspace.h> prog_char buff[256];
と書くことで変数がROM上に配置される。
変数の扱いに関していろいろ制約はあるかも。(imai)
測ってみた。(imai)
実行ステート数は100回実行したときのステート数
1演算当たりのステート数は、空関数を実行したときの値を引いて100で割った結果(小数点以下切り捨て)
テスト関数 | 実行ステート数 | 内容 | 1演算当たりのステート数 |
test_func0 | 1903 | 空関数 | 0 |
test_func1 | 2011 | int型足し算 | 1 |
test_func2 | 12175 | float型足し算 | 102 |
test_func3 | 36239 | float型乗算 | 343 |
test_func4 | 60375 | float型除算 | 584 |
test_func5 | 2511 | long型足し算 | 6 |
test_func6 | 8611 | long型乗算 | 67 |
test_func7 | 64835 | long型除算 | 629 |
乗算・除算はソフトウェアで反復処理を行っていて、引数によってステート数が代わり得るが、long型の除算が異様に遅い。
1 / 1 という演算がfloat型の測定に有利だったかも。
測定用コード
日本語データシートのサイトは404が発生しています。2010年に翻訳者がサイトを閉鎖させています。
AVRwikiも2011/4/6現在404のようです。生きてる情報系サイトなんてあるんかしら。もりけん
AVRWikiの方は復活したようです。ついでにリンク修正。このページ自体も古くなってきたので修正したいなぁ。(d.sakai 2011/6/18)
翻訳している人はっけーん。(もりけん 11/08/30)
データシートの日本語訳はAVR.jpというサイトに移したようです(y.yamaguchi 2011/10/9)
AVR Wiki | http://avrwiki.jpn.ph/wiki.cgi |
日本語データシート | http://reef.path.ne.jp/~hero/hero.htm (リンク切れ), http://www.avr.jp/ |
awawa's report(AVRデータシートを翻訳中の人) | http://awawa.mamagoto.com/ |