Atmel AVRについて


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アーキテクチャの特徴と各デバイスの概要を簡単に説明します。

AVRアーキテクチャの特徴

8ビットRISCアーキテクチャ

命令コードは16ビット固定で、ほとんどの演算を1クロックサイクルで実行します。RISCという割には命令数がかなり多く、ニモニックで 118(実際のコードは 79)もあります(90Sシリーズ)。

豊富な汎用レジスタ

RISCらしく汎用レジスタ(8ビット)が32本もあります。ちょっとした制御ならレジスタだけで十分済んでしまいますし、大規模なプログラムでもレジスタ変数をうまく使うことによりプログラムを高速に実行することができます。

ロード/ストアアーキテクチャ

これもRISCの特徴ですが、演算命令はレジスタ-レジスタ(即値)間のみを対象としています。AVRアーキテクチャは最大64KBのリニアなデータメモリ空間を持ち、ロード/ストア命令で直接・間接アドレッシングが可能です。間接アドレッシングでは、一部の汎用レジスタのペア(3ペアある)をポインタとして使用し、ディスプレースメント付きやポストインクリメント、プリデクリメントなど豊富なアドレッシングモードが使えます。

全デバイスでフラッシュメモリ内蔵

AVRはプログラムメモリとしてフラッシュメモリを内蔵しています。このため、プログラムを何度でも書き換えて使用することができます。少量多品種生産やアマチュア用途ではうれしい仕様ですね。また、一部デバイスを除きデータEEPROMも内蔵しています。プログラム方式にはライタを使って高速に書き込むパラレル方式と、基板に実装したまま書き込むISP方式があります(後者が主流)。

現在までに発表されているデバイス

DevicePackageROM
[word]
RAM
[byte]
EEP
[byte]
PIOT/CPWMSIOADC
10bit
CompNote
90S1200DIP20,SOP20,SSOP20512-64151---1Int.Osc
90S2313DIP20,SOP201K1281281521UART-1-
tiny2313DIP20,SSOP20,MLF321K1281281824USART,USI,SPI-1BOD,Int.Osc
tiny26DIP20,SOP20,MLF321K1281281622USI111BOD,Int.Osc
tiny261/461/861DIP20,SOP20,MLF321K/2K/4K128/256/512128/256/5121625USI111BOD,Int.Osc
90S2333/4433DIP28,TQFP321K/2K128128/2562021UART,SPI61BOD
mega8DIP28,TQFP32,MLF324K1K5122333USART,IIC,SPI61BOD,RTC,Int.Osc
mega48/88/168DIP28,TQFP32,MLF322k/4K/8K512/1K/1K256/512/5122336USART,IIC,SPI61BOD,RTC,Int.Osc
tiny28DIP28,TQFP32,MLF321K--201---1Int.Osc
90S2323DIP8,SOP81K12812831-----
90S2343DIP8,SOP81K12812851----Int.Osc
tiny10/11DIP8,SOP8512--61---1-
tiny12DIP8,SOP8512-6461---1BOD,Int.Osc
tiny22DIP8,SOP81K12812851-----
tiny13DIP8,SOP8,MLF205126464611-41BOD,Int.Osc
tiny15DIP8,SOP8512-64621-41BOD,Int.Osc
tiny25/45/85DIP8,SOP8,MLF201K/2K/4K128/256/512128/256/512623IIC41BOD,Int.Osc
tiny24/44/84DIP14,SOP14,MLF201K/2K/4K128/256/512128/256/5121224USI81BOD,Int.Osc
90S4414/8515DIP40,TQFP44,PLCC442K/4K256/512256/5123222UART,SPI-18051pin-out,Ext.Mem
mega8515DIP40,TQFP44,MLF444K5125123533USART,SPI-1BOD,Int.Osc,8051pin-out,Ext.Mem
mega161DIP40,TQFP44,PLCC448K1K51235332UART,SPI-1BOD,Int.Osc,8051pin-out,Ext.Mem
mega162DIP40,TQFP44,MLF448K1K51235462USART,SPI-1BOD,Int.Osc,8051pin-out,Ext.Mem,JTAG
90C8534TQFP484K25651272--6--
90S4434/8535DIP40,TQFP44,PLCC44,MLF442K/4K256/512256/5123232UART,SPI81RTC
mega8535DIP40,TQFP44,PLCC44,MLF444K5125123233USART,IIC,SPI81BOD,RTC,Int.Osc
mega163DIP40,TQFP448K1K5123233UART,IIC,SPI81BOD,RTC,Int.Osc
mega323DIP40,TQFP4416K2K1K3233USART,IIC,SPI81BOD,RTC,Int.Osc,JTAG
mega16/32DIP40,TQFP44,MLF448K/16K1K/2K512/1K3234USART,IIC,SPI81BOD,RTC,Int.Osc,JTAG
mega644DIP40,TQFP44,MLF4432K4K2K3236USART,IIC,SPI81BOD,RTC,Int.Osc,JTAG
mega164P/324P/644PDIP40,TQFP44,MLF448K/16K/32K1K/2K/4K512/1K/2K32362USART,IIC,SPI81BOD,RTC,Int.Osc,JTAG
mega603/103TQFP6432K/64K4K2K/4K4834UART,SPI81RTC,Ext.Mem
mega64/128TQFP64,MLF6432K/64K4K2K/4K53482USART,IIC,SPI81BOD,RTC,Int.Osc,Ext.Mem,JTAG
mega165/325/645TQFP64,MLF648K/16K/32K1K/2K/4K512/1K/2K5334USART,IIC,SPI81BOD,RTC,Int.Osc
mega169/329/649TQFP64,MLF648K/16K/32K1K/2K/4K512/1K/2K5334USART,IIC,SPI81LCD,BOD,RTC,Int.Osc,JTAG
mega3250/6450TQFP10016K/32K2K/4K1K/2K6934USART,IIC,SPI81BOD,RTC,Int.Osc
mega3290/6490TQFP10016K/32K2K/4K1K/2K6934USART,IIC,SPI81LCD,BOD,RTC,Int.Osc
この表示で示されるものはディスコンまたは新規採用不可です。

ピン機能別分類
8pin14pin20pin
(1200系)
20pin
(26系)
28pin40pin
(8515系)
40pin
(8535系)
64pin100pin
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ファミリの概要

AVRファミリは規模によって大きく3つのシリーズに分類されます。ただ、PICマイコンのように基本アーキテクチャが変わるものではなく、コアプロセッサはローエンド品からハイエンド品まで全て共通です。これは、AVRアーキテクチャの柔軟性の高さを示すものといえます。

最近は、同じような機能のデバイスが相次いで発表されていて、何がなんだか分からない状態になってきました。ピン配置や機能の似たものをまとめてみると、上のテーブルのようになります。

90Sシリーズ

AVRファミリの中核をなすシリーズで、多くのAVRチップの基本的存在です。現在は、これらのデバイスを元にしてmega化が進んでいますので、このシリーズは今後消えていくと思われます。

megaシリーズ

メモリ容量の拡大や内蔵ペリフェラルを拡張したシリーズです。乗算命令(6種)や自己プログラミング機能を持ちます。特に新プロセスのチップは第二世代megaで、内蔵ペリフェラルが飛躍的に高機能になり、非常に完成度の高いマイコンになっています。

tinyシリーズ

megaシリーズとは逆に、I/O数削減、SRAM削除など、小規模・ローパワー化に対応したシリーズです。

各デバイスの特徴 (カッコ内はDIP品のピン数)

90S1200 (20pin)

マイコンチップとして最初に発表されたAVR。SRAMを持たないので複雑な制御にはちょっと使いにくい。現在の分類ではtinyシリーズに属するといえる。→tiny2313

90S2313 (20pin)

90S1200とピンコンパチで、SRAMや周辺を追加したもの。20ピンクラスではかなり高機能でとても使いやすい。→tiny2313

90S8515 (40pin)

業界標準であるi8051のリプレースを狙ったもの。ほぼピンコンパチなのでハード的に差し替えが可能。64Kバイトの外部データメモリ空間をサポートするなど、大量のデータ処理にも適している。40ピンクラスではこの類が一番手頃。→mega8515

90S8535 (40pin)

90S8515に10bitADCを追加したようなタイプ(ピンコンパチではない)。その他の周辺機能も充実していて90Sシリーズではもっとも高機能。これを元にしたmegaデバイスが多い。→mega8535

90S4433 (28pin)

10bit ADC内蔵で、90S8535の規模をそのまま縮小したような存在。→mega8

90C8534 (48pin(TQFP))

ピン数が多い割に、I/Oが7ビットしかなかったりする、使えそうにないデバイス。DIP品は無し。何かのカスタム品らしい。

90S2323/2343 (8pin)

2323は外付け発振子専用で8pinのメリットが無い。そのためI/Oも3pinしかなく、あまり使い道が無い(その割には結構見かけたりするが)。2343は内蔵OSC使用時はI/Oが5pin使える。また、2343はtiny22と同じ(このためtiny22は廃止されたようだ)。

tiny11/12 (8pin)

1.8V動作など、tinyシリーズらしい特徴を持ったデバイス。電源ピン以外の最大6ピンをI/Oとして使用可能。tiny11にはISP機能が無く、非常に安価(@\50)。→tiny13

tiny13 (8pin)

tiny12にADCとわずかなRAMを追加したもの。20MHz動作。

tiny15 (8pin)

10bit ADCや高速PWMを内蔵するなど、8ピン中では最も高機能だった。→tiny25/45/85

tiny25/45/85 (8pin)

tiny15のROM容量増加とRAM追加、周辺機能の強化。20MHz動作。

tiny28 (28pin)

赤外線リモコンへの組み込み用として特化されている。1.8V動作で、ISP機能は無し。非常に安価。

mega103 (64pin(TQFP))

64Kワードのプログラムメモリ、4KバイトのSRAM、48bitのI/Oポート、外部データメモリ空間のサポートなど、当時最大規模のAVRチップ。megaシリーズ最初のデバイスで、唯一乗算命令を持たない。既にディスコン。→mega64/128

mega64/128 (64pin(TQFP))

mega603/103のリプレース品。周辺機能のさらなる強化と新プロセス。AVRファミリ中最強。16MHz動作。

mega161 (40pin)

90S8515のメモリや周辺機能を強化したもの。→mega162

mega162 (40pin)

mega161のリプレース品。16MHz動作。

mega8515 (40pin)

90S8515の周辺機能を強化したもの。16MHz動作。

mega163 (40pin)

90S8535のメモリや周辺機能を拡張したもの。→mega16

mega323 (40pin)

mega163のメモリや周辺機能をさらに拡張したもの。→mega32

mega8 (28pin)

90S4433のメモリや周辺機能を拡張したもの。16MHz動作。

mega48/88/168 (28pin)

mega8の動作電源電圧範囲や速度、メモリバリエーションを拡張したもの。mega8系は人気があるようだ。20MHz動作。

mega16 (40pin)

mega163の周辺を拡張したリプレース品。16MHz動作。

mega32 (40pin)

mega323の周辺を拡張したリプレース品。16MHz動作。

tiny2313 (20pin)

90S2313の周辺機能を拡張したもの。20MHz動作。

tiny26 (20pin)

mega8のサブセットといった感じ。ブリッジ駆動用PWMや11チャネルADCを内蔵しているので、サーボ制御などに適している。16MHz動作。→tiny261/461/861

tiny261/461/861 (20pin)

tiny26の周辺機能を拡張したもの。20MHz動作。

mega169 (64pin(TQFP))

ポータブル機器向けとして AVRファミリでは初めてLCDドライバを内蔵。16MHz動作。

mega165 (64pin(TQFP))

↑からLCDドライバを取ったもの。16MHz動作。

mega325/645/3250/6450 (64/100pin(TQFP))

mega16/32のI/O数だけを増やしたような感じ。16MHz動作。

mega329/649/3290/6490 (64/100pin(TQFP))

↑にLCDドライバを追加したもの。16MHz動作。