戻る(back)
Last modified: Thu Mar 6 22:53:26 JST 2003 人目

ATMEL AVRで遊ぶ - PICを捨ててAVRを使おう

AVR PICと同様な8bitの1チップマイコンです。 コードとデータ領域が完全に別になっているハーバードアー キテクチャで、メモリにアクセスするのは(基本的には)ロードストア命令のみに なってます。

AVRに関するドキュメント

AVR命令セット(英語PDF)
AT90S1200仕様書(英語PDF)
AT90S2313仕様書(英語PDF)
AT90S2323(英語PDF) (日本語PDF)
上記資料の日本語版
PICNICに対抗してAVRNIC? eAVR Project
AVRに関する日本語の本やドキュメントはまだ少ないです。
書籍: マイクロコントローラAVR入門
リンク: AVRで遊ぶ ATMEL AVRだ Nの電子講座 AVRマイコン編 TAP-AVR chanさんによるAVRの紹介はとても参考になります。

特徴

AVRの特徴、それは安い、速い、プログラミングしやすい、 プログラムを焼く時に高電圧をかけなくても良い という点です。

安い

AVRの AT90S1200-12は、PICの PIC16F84A-20/Pよりも安いです。 残念ながらAT90S2313-10はPIC16F84A-20/Pとあまり値段が変わらなく なってしまいました。 ちょっと前まではPICは¥800位したのですが…。
AVRは後述するSPIを用いればVdd(通常+5V)とは別にVpp(+12V)を用意する必要が ないので、Chanさんの所にあるように Writerが楽に作れます

速い

1命令4サイクルかかるPICと違い、AVRは(大部分の命令が)1命令1サイクルです。 なのでAVRは同クロックのPICの4倍速いことになります。でも最近は、50MHzで動く高速PIC 互換チッ プ も出てきたので、価格に糸目をつけなければ速度に対するメリットは そんなにないかもしれません。

プログラミングしやすい

PICでの演算は必ずwレジスタを介して行います。 w以外のレジスタファイル(SRAM)同士での演算はできません。
fをレジスタファイルとすると、w=f+wまたはf=f+wという形になります。
AVRでは、32本ある任意の8bitレジスタ間同士で演算ができます(即値を取る命 令を除く)。
引き算命令は、PICでは アセンブラでの表記が subwf r なのに演算が w=r-w と普通とは引く方と引かれる方が逆になっているのに対し、
AVRでは アセンブラでの表記が sub r1,r2 で演算が r1=r1-r2 と素直になっています。
個人的にはこれらの事が一番気に入ってます。 コンピュータアーキテクチャを研究している身から言っても、 ISA(Instruction Set Architecture)が綺麗なのは素晴らしいと思います。
インタプリタやコンパイラを使わずにアセンブラでプログラミングしてい る場合、この良さを体験すればPICは捨てたくなるでしょう。
世の 中にはPIC の入門書は一杯あるのにAVRの入門書は 一冊しか私は知りません。
やっと流行りはじめたという感じですね。

プログラムを焼く時に高電圧をかけなくても良い

AVRでSPI(Serial Programming Interface)を用いてプログラミングする場合は、 PICと違って高電圧(Vpp=12V程度)をかける必要がありません。そのため基板に つけたまま焼く時でもVddを供給するだけで済みます。これは非常に便利です。
もちろん、基板から石を外してAVRライタやPICライタに挿すことでも焼くこと はできます。この場合には両者ともVppが必要となります。

全種類FLASH ROM搭載

PICにはプログラムが一度しか書き込みができないROM(WO-ROM)をもつものが あります。
AVRは全種類FLASH ROMを搭載しているので、1000回程度まで プログラムが書き換えできます。

I/Oポートとの違い

以下、PICはPIC16F84A-20を、AVRはAT90S1200-12を示すとします。

内部RC発信回路

AT90S1200には、型番の最後にAが付いているAT90S1200Aと、そうでない AT90S1200があります。秋月価格ではA付きはA無しより高いです。Aが付いているもの は、最初から内蔵RC発信回路(約1MHz)が有効になっていて、外部クロックを供 給しなくても動作します。内蔵RC発信回路はパラレル接続タイプのライタか、 aPonyさんの 内部RC発信回路有効化ボードを作って使えば後で有効/無効にできます。
秋月では 負荷コンデンサ付セラミック発信子が¥40で売っているので、どうしても 部品数を削減したいというのでなければA付きを買うのはあまり意味がないで しょう。

ライタ

簡単なAVRライタの製作法が chanさんの所で紹介されています。特にシリアル形式のライタは部品数も 少なく、しかも基板につけたままSPI を使ってプログラミングでき、そのまま シリアル通信にも使えるのでとっても便利です。
ただし RS232Cの規格に違反しているので若干注意は必要です。 私が試した所では、chanさんと同様全く問題は生じていませんが。

その他

メモリ付AVRではgccがコンパイラとして使える。
Debian GNU/Linux では apt-get install gcc-avr すれば使えるようになる。
AVRとPICの比較
AT90S1200-12PCAT90S2313-10PCAT90S2323-10PCPIC16F84A-20/P
FLASH512word(1kB)1024word(2kB)1024word(2kB)896word(1792B)
EEPROM64B128B128B64B
RAM なし128B128B68B
Register3232321
Stack3RAMを使用RAMを使用8
MaxClock12MHz10MHz10MHz20MHz
MaxMIPS1210105
Pin数/IO数20pin/15bit20pin/15bit8pin/3bit18pin/13bit
秋月価格¥200¥370¥380¥380

注意点

ライタ プログラミング アセンブラ(avrasm32.exe)
Written by IIZUKA Daisuke (飯塚 大介)