Update: 2007. 3. 18
AVRとは、アトメルの 8ビットRISCアーキテクチャのことです。汎用マイクロコントローラのほか、同社製FPGAのコアプロセッサにもなっています。AVRシリーズは最初の発表が1996年頃でしたから、業界標準の8051や流行りのPICと比べるとかなり後発のマイコンといえます。
AVRは何といっても使いやすいのが最大の特徴と言えます。とても素直で洗練されたアーキテクチャなので、使い始めのハードルは極めて低いです。わたしがPICを理解するには数時間を要しましたが、AVRは3.5秒で理解できました。まぁ、マイコン初心者にとってはどっちも難解でしょうが、他のマイコンを使いこなしてきたなら、違いがはっきり分かります。
開発環境は全て無料で揃います。AtmelのAVR StudioとWinAVR(gcc)の連携でCソースレベルデバッグができます。また、使用開始に先立ってデバイスプログラマを用意する必要さえありません。簡単なISPケーブルを作るか各社FPGA用のJTAGケーブルの流用で十分だからです(関連ページ)。
以下にAVRアーキテクチャの特徴と各デバイスの概要を簡単に説明します。
命令コードは16ビット固定で、ほとんどの演算を1クロックサイクルで実行します。RISCという割には命令数がかなり多く、ニモニックで 118(実際のコードは 79)もあります(90Sシリーズ)。
RISCらしく汎用レジスタ(8ビット)が32本もあります。ちょっとした制御ならレジスタだけで十分済んでしまいますし、大規模なプログラムでもレジスタ変数をうまく使うことによりプログラムを高速に実行することができます。
これもRISCの特徴ですが、演算命令はレジスタ-レジスタ(即値)間のみを対象としています。AVRアーキテクチャは最大64KBのリニアなデータメモリ空間を持ち、ロード/ストア命令で直接・間接アドレッシングが可能です。間接アドレッシングでは、一部の汎用レジスタのペア(3ペアある)をポインタとして使用し、ディスプレースメント付きやポストインクリメント、プリデクリメントなど豊富なアドレッシングモードが使えます。
AVRはプログラムメモリとしてフラッシュメモリを内蔵しています。このため、プログラムを何度でも書き換えて使用することができます。少量多品種生産やアマチュア用途ではうれしい仕様ですね。また、一部デバイスを除きデータEEPROMも内蔵しています。プログラム方式にはライタを使って高速に書き込むパラレル方式と、基板に実装したまま書き込むISP方式があります(後者が主流)。
Device | Package | ROM [word] | RAM [byte] | EEP [byte] | PIO | T/C | PWM | SIO | ADC 10bit | Comp | Note |
---|---|---|---|---|---|---|---|---|---|---|---|
90S1200 | DIP20,SOP20,SSOP20 | 512 | - | 64 | 15 | 1 | - | - | - | 1 | Int.Osc |
90S2313 | DIP20,SOP20 | 1K | 128 | 128 | 15 | 2 | 1 | UART | - | 1 | - |
tiny2313 | DIP20,SSOP20,MLF32 | 1K | 128 | 128 | 18 | 2 | 4 | USART,USI,SPI | - | 1 | BOD,Int.Osc |
tiny26 | DIP20,SOP20,MLF32 | 1K | 128 | 128 | 16 | 2 | 2 | USI | 11 | 1 | BOD,Int.Osc |
tiny261/461/861 | DIP20,SOP20,MLF32 | 1K/2K/4K | 128/256/512 | 128/256/512 | 16 | 2 | 5 | USI | 11 | 1 | BOD,Int.Osc |
90S2333/4433 | DIP28,TQFP32 | 1K/2K | 128 | 128/256 | 20 | 2 | 1 | UART,SPI | 6 | 1 | BOD |
mega8 | DIP28,TQFP32,MLF32 | 4K | 1K | 512 | 23 | 3 | 3 | USART,IIC,SPI | 6 | 1 | BOD,RTC,Int.Osc |
mega48/88/168 | DIP28,TQFP32,MLF32 | 2k/4K/8K | 512/1K/1K | 256/512/512 | 23 | 3 | 6 | USART,IIC,SPI | 6 | 1 | BOD,RTC,Int.Osc |
tiny28 | DIP28,TQFP32,MLF32 | 1K | - | - | 20 | 1 | - | - | - | 1 | Int.Osc |
90S2323 | DIP8,SOP8 | 1K | 128 | 128 | 3 | 1 | - | - | - | - | - |
90S2343 | DIP8,SOP8 | 1K | 128 | 128 | 5 | 1 | - | - | - | - | Int.Osc |
tiny10/11 | DIP8,SOP8 | 512 | - | - | 6 | 1 | - | - | - | 1 | - |
tiny12 | DIP8,SOP8 | 512 | - | 64 | 6 | 1 | - | - | - | 1 | BOD,Int.Osc |
tiny22 | DIP8,SOP8 | 1K | 128 | 128 | 5 | 1 | - | - | - | - | - |
tiny13 | DIP8,SOP8,MLF20 | 512 | 64 | 64 | 6 | 1 | 1 | - | 4 | 1 | BOD,Int.Osc |
tiny15 | DIP8,SOP8 | 512 | - | 64 | 6 | 2 | 1 | - | 4 | 1 | BOD,Int.Osc |
tiny25/45/85 | DIP8,SOP8,MLF20 | 1K/2K/4K | 128/256/512 | 128/256/512 | 6 | 2 | 3 | IIC | 4 | 1 | BOD,Int.Osc |
tiny24/44/84 | DIP14,SOP14,MLF20 | 1K/2K/4K | 128/256/512 | 128/256/512 | 12 | 2 | 4 | USI | 8 | 1 | BOD,Int.Osc |
90S4414/8515 | DIP40,TQFP44,PLCC44 | 2K/4K | 256/512 | 256/512 | 32 | 2 | 2 | UART,SPI | - | 1 | 8051pin-out,Ext.Mem |
mega8515 | DIP40,TQFP44,MLF44 | 4K | 512 | 512 | 35 | 3 | 3 | USART,SPI | - | 1 | BOD,Int.Osc,8051pin-out,Ext.Mem |
mega161 | DIP40,TQFP44,PLCC44 | 8K | 1K | 512 | 35 | 3 | 3 | 2UART,SPI | - | 1 | BOD,Int.Osc,8051pin-out,Ext.Mem |
mega162 | DIP40,TQFP44,MLF44 | 8K | 1K | 512 | 35 | 4 | 6 | 2USART,SPI | - | 1 | BOD,Int.Osc,8051pin-out,Ext.Mem,JTAG |
90C8534 | TQFP48 | 4K | 256 | 512 | 7 | 2 | - | - | 6 | - | - |
90S4434/8535 | DIP40,TQFP44,PLCC44,MLF44 | 2K/4K | 256/512 | 256/512 | 32 | 3 | 2 | UART,SPI | 8 | 1 | RTC |
mega8535 | DIP40,TQFP44,PLCC44,MLF44 | 4K | 512 | 512 | 32 | 3 | 3 | USART,IIC,SPI | 8 | 1 | BOD,RTC,Int.Osc |
mega163 | DIP40,TQFP44 | 8K | 1K | 512 | 32 | 3 | 3 | UART,IIC,SPI | 8 | 1 | BOD,RTC,Int.Osc |
mega323 | DIP40,TQFP44 | 16K | 2K | 1K | 32 | 3 | 3 | USART,IIC,SPI | 8 | 1 | BOD,RTC,Int.Osc,JTAG |
mega16/32 | DIP40,TQFP44,MLF44 | 8K/16K | 1K/2K | 512/1K | 32 | 3 | 4 | USART,IIC,SPI | 8 | 1 | BOD,RTC,Int.Osc,JTAG |
mega644 | DIP40,TQFP44,MLF44 | 32K | 4K | 2K | 32 | 3 | 6 | USART,IIC,SPI | 8 | 1 | BOD,RTC,Int.Osc,JTAG |
mega164P/324P/644P | DIP40,TQFP44,MLF44 | 8K/16K/32K | 1K/2K/4K | 512/1K/2K | 32 | 3 | 6 | 2USART,IIC,SPI | 8 | 1 | BOD,RTC,Int.Osc,JTAG |
mega603/103 | TQFP64 | 32K/64K | 4K | 2K/4K | 48 | 3 | 4 | UART,SPI | 8 | 1 | RTC,Ext.Mem |
mega64/128 | TQFP64,MLF64 | 32K/64K | 4K | 2K/4K | 53 | 4 | 8 | 2USART,IIC,SPI | 8 | 1 | BOD,RTC,Int.Osc,Ext.Mem,JTAG |
mega165/325/645 | TQFP64,MLF64 | 8K/16K/32K | 1K/2K/4K | 512/1K/2K | 53 | 3 | 4 | USART,IIC,SPI | 8 | 1 | BOD,RTC,Int.Osc |
mega169/329/649 | TQFP64,MLF64 | 8K/16K/32K | 1K/2K/4K | 512/1K/2K | 53 | 3 | 4 | USART,IIC,SPI | 8 | 1 | LCD,BOD,RTC,Int.Osc,JTAG |
mega3250/6450 | TQFP100 | 16K/32K | 2K/4K | 1K/2K | 69 | 3 | 4 | USART,IIC,SPI | 8 | 1 | BOD,RTC,Int.Osc |
mega3290/6490 | TQFP100 | 16K/32K | 2K/4K | 1K/2K | 69 | 3 | 4 | USART,IIC,SPI | 8 | 1 | LCD,BOD,RTC,Int.Osc |
8pin | 14pin | 20pin (1200系) | 20pin (26系) | 28pin | 40pin (8515系) | 40pin (8535系) | 64pin | 100pin |
---|---|---|---|---|---|---|---|---|
90S2323 90S2343 tiny11 tiny12 tiny22 tiny15 tiny13 tiny25 tiny45 tiny85 |
tiny24 tiny44 tiny84 |
90S1200 90S2313 tiny2313 tiny4313 |
tiny26 tiny261 tiny461 tiny861 |
90S2333 90S4433 mega8 mega48 mega88 mega168 mega328 tiny28 |
90S4414 90S8515 mega161 mega8515 mega162 |
90S4434 90S8535 mega163 mega323 mega8535 mega16 mega32 mega644 mega164P mega324P mega644P mega1284 |
mega603 mega103 mega165 mega169 mega64 mega128 mega1281 mega2561 mega325 mega645 mega329 mega649 |
mega640 mega1280 mega2560 mega3250 mega6450 mega3290 mega6490 |
AVRファミリは規模によって大きく3つのシリーズに分類されます。ただ、PICマイコンのように基本アーキテクチャが変わるものではなく、コアプロセッサはローエンド品からハイエンド品まで全て共通です。これは、AVRアーキテクチャの柔軟性の高さを示すものといえます。
最近は、同じような機能のデバイスが相次いで発表されていて、何がなんだか分からない状態になってきました。ピン配置や機能の似たものをまとめてみると、上のテーブルのようになります。
AVRファミリの中核をなすシリーズで、多くのAVRチップの基本的存在です。現在は、これらのデバイスを元にしてmega化が進んでいますので、このシリーズは今後消えていくと思われます。
メモリ容量の拡大や内蔵ペリフェラルを拡張したシリーズです。乗算命令(6種)や自己プログラミング機能を持ちます。特に新プロセスのチップは第二世代megaで、内蔵ペリフェラルが飛躍的に高機能になり、非常に完成度の高いマイコンになっています。
megaシリーズとは逆に、I/O数削減、SRAM削除など、小規模・ローパワー化に対応したシリーズです。
マイコンチップとして最初に発表されたAVR。SRAMを持たないので複雑な制御にはちょっと使いにくい。現在の分類ではtinyシリーズに属するといえる。→tiny2313
90S1200とピンコンパチで、SRAMや周辺を追加したもの。20ピンクラスではかなり高機能でとても使いやすい。→tiny2313
業界標準であるi8051のリプレースを狙ったもの。ほぼピンコンパチなのでハード的に差し替えが可能。64Kバイトの外部データメモリ空間をサポートするなど、大量のデータ処理にも適している。40ピンクラスではこの類が一番手頃。→mega8515
90S8515に10bitADCを追加したようなタイプ(ピンコンパチではない)。その他の周辺機能も充実していて90Sシリーズではもっとも高機能。これを元にしたmegaデバイスが多い。→mega8535
10bit ADC内蔵で、90S8535の規模をそのまま縮小したような存在。→mega8
ピン数が多い割に、I/Oが7ビットしかなかったりする、使えそうにないデバイス。DIP品は無し。何かのカスタム品らしい。
2323は外付け発振子専用で8pinのメリットが無い。そのためI/Oも3pinしかなく、あまり使い道が無い(その割には結構見かけたりするが)。2343は内蔵OSC使用時はI/Oが5pin使える。また、2343はtiny22と同じ(このためtiny22は廃止されたようだ)。
1.8V動作など、tinyシリーズらしい特徴を持ったデバイス。電源ピン以外の最大6ピンをI/Oとして使用可能。tiny11にはISP機能が無く、非常に安価(@\50)。→tiny13
tiny12にADCとわずかなRAMを追加したもの。20MHz動作。
10bit ADCや高速PWMを内蔵するなど、8ピン中では最も高機能だった。→tiny25/45/85
tiny15のROM容量増加とRAM追加、周辺機能の強化。20MHz動作。
赤外線リモコンへの組み込み用として特化されている。1.8V動作で、ISP機能は無し。非常に安価。
64Kワードのプログラムメモリ、4KバイトのSRAM、48bitのI/Oポート、外部データメモリ空間のサポートなど、当時最大規模のAVRチップ。megaシリーズ最初のデバイスで、唯一乗算命令を持たない。既にディスコン。→mega64/128
mega603/103のリプレース品。周辺機能のさらなる強化と新プロセス。AVRファミリ中最強。16MHz動作。
90S8515のメモリや周辺機能を強化したもの。→mega162
mega161のリプレース品。16MHz動作。
90S8515の周辺機能を強化したもの。16MHz動作。
90S8535のメモリや周辺機能を拡張したもの。→mega16
mega163のメモリや周辺機能をさらに拡張したもの。→mega32
90S4433のメモリや周辺機能を拡張したもの。16MHz動作。
mega8の動作電源電圧範囲や速度、メモリバリエーションを拡張したもの。mega8系は人気があるようだ。20MHz動作。
mega163の周辺を拡張したリプレース品。16MHz動作。
mega323の周辺を拡張したリプレース品。16MHz動作。
90S2313の周辺機能を拡張したもの。20MHz動作。
mega8のサブセットといった感じ。ブリッジ駆動用PWMや11チャネルADCを内蔵しているので、サーボ制御などに適している。16MHz動作。→tiny261/461/861
tiny26の周辺機能を拡張したもの。20MHz動作。
ポータブル機器向けとして AVRファミリでは初めてLCDドライバを内蔵。16MHz動作。
↑からLCDドライバを取ったもの。16MHz動作。
mega16/32のI/O数だけを増やしたような感じ。16MHz動作。
↑にLCDドライバを追加したもの。16MHz動作。