いますぐPICをやめてAVRに移行すべき10の理由
電子工作用のお手軽なワンチップマイコンと言えば、AVRとPICである。数年前、国内ではPICのほうが日本語での情報が多く、国内での入手性が良かったのでPICばかりが普及した。PIC本で有名な後閑さんの功績も大きいだろう。
だが、いまから始めるなら間違いなくPICではなくAVRにするべきだろう。値段的にもPICと大差ないし、国内でもAVRマイコンをある程度調達できるようになってきた。
では、いまPICをやっている人はAVRに移るべきか?
迷っている人のために、「いますぐPICをやめてAVRに移行すべき10の理由」というのを書いてみる。
1) AVRなら、ほとんどのモデルでCで開発することができる。もちろん、フリーの環境。(AVRStudio + WinAVR)
PICの上位モデル限定のくせに60日すぎたら最適化レベルが下がるどっかの体験版(?)のCとは大違い。
2) AVRのアセンブラはPICほど変態なアーキテクチャじゃない。
AVRはレジスタが多いし直交性にも優れている。
3) AVRのライタは100円ぐらいで作れる。*1 ほとんどのAVRに書き込み可能。
新しいデバイスにライタが対応してるか心配しながら石を選ばなくてはいけないPICとは大違い。書き込むときにPICのように高電圧(12V)をかけなくて良いのが大きい。
4) AVRライタの完成品を買うとしてもデジットでUSB接続のが2100円。電源不要。
新しいデバイスに全く対応しないくせに外部電源が必要でUSBで書き込もうとすると別途USB-シリアル変換器の必要な秋月の腐ったPICライタとは大違い。
5) 秋月にATmega88 , ATmega164 , ATmega644のDIPが入荷された。
ATmega644は64KBと余裕の大容量。40pin(I/O 32pin) 550円。
AVRは近年、共立電子などでも扱うようになってきた。
6) AVRは1クロックで1命令実行される
PICはたいてい4クロックで1命令しか実行できない。おまけにレジスタに直交性がないのでCで生成されるコードは効率の悪いものになっている。同一クロックで動作するPICとAVRとを比較すると、5〜8倍ぐらい処理速度が違う。
7) AVRはI/Oに対して完全な read - modify - writeが出来る。
AVRにはI/Oの特定のビットだけをset / resetする命令がある。PICではそれが出来ない。
PICは出力レジスタの状態はピンから読むように作られている。
例えば、PICで、RA4にLEDをぶら下げてLEDを点灯させることを考える。RA4はオープンドレインである。LEDの消費電力を抑えるため1.5Vの電源をLEDのアノードに抵抗を介して接続してあるとする。
いま、LEDをOFF(RA4に'1'を書き出す)にしたあと、RA0ポートを'0'にすることを考える。ポートの内容を読み込み、そのデータに修正を加えてポートに書き出すのだが、RA4ポートはLEDの電源が低い(1.5V)ので読み込むと'0'になる。
このため、RA0の変更のためにRAポートまるごと読み込み、RA0のbitだけ書き換えてRAポートに書き出すと、RA4の内容まで変更してしまう。PICのBCF/BSTはそういう動作になっている。(参考 : AVRマイコン・リファレンス・ブック―AVRのCPUアーキテクチャ、豊富な内蔵周辺機能を詳細解説 (マイコン活用シリーズ))
このように、read - modify - write命令が用意されていないPICはプログラミングが何かと面倒である。*2
8) AVRも日本語の資料が充実してきた
このようにAVRのほうが優れていることは疑いようのない事実だが、日本語の資料が不足していることが長らく問題であった。 近年、データシートを日本語に翻訳している人*3が現れたし、AVRを扱った書籍も出てきた。AVRの日本語wiki*4も充実してきた。 |
9) 海外ではAVRのほうが勢いがある
海外ではPICよりAVRのほうが(趣味の電子工作などには)よく使われている。その分、海外ではAVRのほうが情報が多い。
10) JTAGICE mkII の cloneが安い
id:yaneurao:20080226で書いたようにAVRのJTAGICE mkIIのcloneが$49.95で買える。
Cで書いたプログラムをICEでデバッグというようなことがAVRならわずかな出費だけで可能だ。JTAGICE mkIIは、PICのICD2より強力で迅速なデバッグが出来ると評判だ。
■ 関連記事
PICを叩き壊してやりたいほど憎らしい17の理由
http://d.hatena.ne.jp/yaneurao/20080723
*1:http://elm-chan.org/works/avrx/report.html
*2:PIC18F以降はLATxレジスタがあるから、この問題は起きない。