まあ、日本では 8bit MCU は PIC の方が人気なようで、
私のウェブ・ページでももらう質問は PIC のものばかりでちょっと悲しい。
ホビーで使うなら、AVR のほうが圧倒的に使いやすいと思います。
8bit の AVR と PIC について、個人的な感想を少し書いておきます。
#大学や高専のレポートに使ってもかまいませんが、事前にコメント欄から連絡すること。
☆PIC の欠点
・ペリフェラルがだめ。
ローエンドのMCUの周辺機能はだいたい単機能で、
ちょっと凝った応用を考えると破綻する。
また、1つの品種の周辺機能を覚えたところで、
他の品種の周辺機能は全然構成が異なるので、
また1から覚えなおし。
AVR はローエンドからハイエンドまで、
ほぼ同じモジュールが組み込まれており、開発がとても楽。
また、それぞれのペリフェラルはよくできていて、
いろいろな用途に対応できる。
汎用 I/O ひとつ取ってみても、PIC では、
やれこのピンはプルアップが使えないだの、
このピンはシュミットトリガじゃないだのと、しばしば問題にあたりますが、AVR ではそのようなことはまずありません。
・データシートが見づらい。
レジスタ確認するために、あっちこっちのページを見なきゃいけない。
開発に時間がかかるひとつの要因。
・MPLAB X がだめ。
動作遅い、メモリ大食い。
・Cコンパイラの最適化オプションが有料。
AVR は GCC が使えてよいです。
最適化が使えないってことは、AVR の ROM 1kワード は
PIC の ROM 1.8kワード に匹敵するってことですからね!
これを考慮してコスト・パフォーマンスを議論すべき。
・無駄に多品種。
PIC の多品種っぷりを誇る人がいますが、これはナンセンス。
1つの品種でカバーできる範囲が狭いってことだからね。
☆AVR の欠点
・ISP がクロック依存。
クロックを与えなければ In-circuit のプログラミングができない。
慣れていないと、ヒューズビットでクロックソース設定を間違えて、
プログラミングができなくなってしまうことも。
・入手性が悪い。
SOP の AVR だったり、USB 対応品を手に入れようと思っても、
秋葉原にはほとんどありません。
・内蔵発振器の周波数が低い。
だいたいの AVR では、内蔵発振器は最高でも 8MHz です。これは PIC の 32MHz 相当とはいえ、あと 2倍ほしいケースも。
・ペリフェラルの種類が少ない。
DAC とか USB とか PGA とか、凝った周辺機能をもつ品種は多くありません。
まあ大抵の場合、汎用の周辺機能が強力なので、
あとはプログラマの ”工夫” で何とかなるのですが。
☆アーキテクチャについて
Cなどの高級言語を使う限りは、アーキテクチャはそれほど議論の対象にならないと思います。
確かに PIC では、たとえば汎用レジスタが少なかったり、
レジスタ・RAM アクセスにバンク操作が必要だったりして、
その理解は実に面倒ですが、これらはむしろ些細な問題といえます。
アーキテクチャを議論する上でのポイントは 3 つ。
(1)命令サイクル / クロック周波数
PIC も AVR も、アーキテクチャとしては同じ 2段パイプライン動作です。
AVR はクロック周波数をそのまま内部クロックとして与えられるため、
クロック周波数はそのまま命令サイクルとなります。
いっぽう PIC は前置分周器で 4 分周しているため、
命令サイクルは クロック周波数 ÷ 4 になります。
以前どこかの雑誌で、クロック周波数が 32kHz のときの消費電流の比較をもって、
PIC と AVR の消費電力を比較していたのを見たことがあります。
これではナンセンスどころか、全く誤った比較です。
(2)スタックの扱い
サブルーチン呼び出しや割り込みのときに、プログラムカウンタ(PC)や
データを保持する機構がスタックです。
PIC ではスタックは PC スタックのみで、
段数固定のハードウェアによるインプリメンテーションです。
これはハードウェアの規模は少なくて済むのですが、ちょっと原始的ですね。
POP も PUSH もありません。
一方 AVR では、たとえ 8ピンの ATtiny13A のようなローエンドであっても、
スタックポインタによるスタック呼び出しや POP/PUSH をサポートしています。
(90S1200 を除く)
(3)割り込みの扱い
ローエンド PIC ではそもそも割り込みの概念がなかったり、
割り込みルーチンは 1 つか 2 つで、ソフトウェアによる条件分岐と
手動での割り込みフラグ解除が必要です。
PIC では、割り込みは必要最小限のハードウェアになっています。
一方 AVR では、たとえ 8ピンの ATtiny13A のようなローエンドであっても、
割り込みベクタやフラグ自動解除機構は当たり前にサポートしており、
多重割り込みも簡単に実現できます。
しかし、AVR では優先度付き割り込みをサポートしていないので、
(PIC の一部では簡単ながらサポート)
場合によっては問題となるかもしれません。
☆まとめ
量産で設計するならいざしらず、しろうとの趣味程度の数では、
20-30 円高くても AVR を使った方が 数時間、場合によっては数十時間も
開発の苦労が減らせると思います。