MIPS陣営がRISC-Vに引っ越ししてしまったことで、 今後はRISC-Vでなければならないのだろうかと気になるこの頃です。 しかしMicrochip社が今すぐRISC-V (32bitの手頃な奴)の製品を出すようには思われません。 中国メーカがいくつかデバイスを出していますが公式にはtoolsetがWindows onlyであり、 まだまだ時期尚早な感じが否めません。
注記: Microchipは2024年末頃にRISC-V 64bit製品を発表しました。
ATtiny44a/84aは14ピン構成であり、見た目にかわいいデバイスです。 電源とリセットで3ピン除いたら11ピンしか残りません。 たとえばロータリエンコーダの入力で2ピン使えば、残りは9ピンです。 9ピンでLEDディスプレイを駆動するには足がちょっと不足します。 外付けデバイスが欲しくなります。 LEDディスプレイ駆動用に74HC595でも外付けしましょうか……。 I2Cで液晶パネルあたりを制御するのであれば2ピンの消費で済みますか。 ATtiny44a/84aは足が少なすぎて使いどころが難しいデバイスですね。
Microchip社のポリシーによればPICはEOLにはなりません。 顧客企業が欲しがる限り供給される、ということになっています。 しかしながら、商社は必ずしもそうではありません。 販売が細くなれば在庫を持たなくなり、取り扱いが打ち切られます。 部品の価格が際限なく上がってしまうことを考えると、 一般の我々はEOLと無縁ではありません。 たとえば秋月はPIC32MX210をEOLにする方針のようです。 思ったようには売れなかったんでしょうか。
AVRにはNRNDとEOLがあります。 AT90S2313は秋月に流通在庫がありますが、表向きはEOLということになっています。 ATmega328Pなど、今のところ、多くのデバイスで供給が続いているように見えます。 それでもNRNDは意識しておく必要があります。 供給が細くなればなるほど、部品の値段が上がってしまうからです。 今はもうATmega328PですらNRNDであり、企業内設計者にとって新規採用は勧められません。 ここからが長いのかも知れませんけれども。 Microchipをはじめとしてデバイスに細々とDIPの供給があるのは企業系の需要があるからだと考えますが、 どこが欲しがっているのかはちょっと不思議なところがあります。 製品のコスパを考えたらDIPは採用しないだろうからです。
LPC1114はあっさり消えて不経済になってしまいましたし、 ARM系のマイコンはAVR以上に世知辛いですね。 RISC-V系がそれを追わなければ良いのですが。 どうなることやら。
フラッシュメモリ仕様は10,000回消去で記憶保持期間が20年。 20年というのはちょっと心もとない感じもしますが、 プログラムを書き直せる状態を維持できるなら実用上の問題はないでしょう。
CH32V203ではプログラミングに使うべきプロトコルが仕様化されていません。 第三者の解析によればI2Cに似せたdebug protocolを使うようです。 avrdudeのような定番ツールが登場すれば状況は変わると思いますが、 今のところは、 採用するに不安が残るデバイスであると言えます。 必要なのはドキュメントであって作り込まれたサンプルではありません。 サンプルがまったく役に立たない訳ではないのですが。
RISC-Vに興味はありますが、取り扱いが面倒くさそう、といったところです。
PIC16/18系の場合、Microchip社提供のIDEぐらいしか無償で使える開発環境がありませんし、 基本が有償版なので最適化効率が良くありません。 一方、AVRは自由なコンパイラが揃っており、最適化の効いたコードを得ることができます。 この差は小さいようで大きいです。 PICで自由なコンパイラを求めるならMIPSコアを持つPIC32ぐらいしか選択肢がありません。 資金を投じる覚悟がないのであればPIC16/18系を使う理由はないと言って良いでしょう。 なおここで言う「PIC16/18には自由なコンパイラがない」というのは、 jalv2のような代替の言語ではなく、組み込み屋が求めてやまないC言語のことを指しています。
PICに自由な(C言語の)コンパイラがないのはバンク切り替えを多用する 変態的な設計が行われているところが大きいと思われます。 コンパイラが自由であればLinuxや*BSDをはじめ多様な環境で開発作業ができます。 コンパイラが自由でなければWindowsでの作業を強いられるなど、状況によってはかなり不便です。 もっとも、Microchip社はLinux版を用意しているのでLinuxについては救いがあるのですが。 それでも自由度という観点からは圧倒的にAVRが有利であり、 PICは檻の中にあるとしか言いようがありません。
デバイスについては個性があり、どちらが良いというものはありません。 AVRは周辺回路の品揃えが少ないので普通のことしかできません。 PICには個性的な品種があります。 たとえばUSBを扱いたいとなったらPICの選択になるでしょう。 AVRでUSBを扱うには品種が限られSMDしかないこともあり、苦労するはずです。 USBを使いたいなら仕方なくPICを選びます。 普通のことがやりたいならAVRを使えば良いでしょう。
デバイスのエラッタについてはAVRに勝ちがあります。 AVRの場合、データシートに書かれていればその機能はだいたい使えます。 一方、PICはエラッタシートを慎重に解読しなければなりません。 もっとも、これはデバイスの差異というよりメーカの差異なので、 ATMELがMicrochipに吸収された今となっては、 たとえAVRであってもMicrochipの流儀に沿って データシートとエラッタシートを慎重に読まねばならないでしょう。
消費電力や演算速度などのパフォーマンスはプロセスルールで決まってしまうような雰囲気があり、 時代が進めば改善される傾向にあります。 PICでないとだめとかAVRでないとだめとか、 ISAでの比較対象になるものではありません。 AVRで20MHz出せるところにPICであれば80MHz出さないと勝負にならないとはいえ、 PICでは相応に高クロックなデバイスが提供されています。 それに組み込みでは必要最小限のクロックで動かすのが基本ですから、 最速でどちらが勝つかを比較することにあまり意味があるような気はしません。 パフォーマンスで選びたいなら、データシートを丹念に読んで比較するしか無いでしょう。
国内での入手性はPICのほうが有利だとされていますが、 それは秋月の存在が大きいです。 デジキー等の海外通販を選択肢に入れて良いならPICでもAVRでも現行メニューはほぼ手に入ります。 秋月が使えることのメリットは、在庫がある場合の納期と、デバイスの価格ぐらいだと思います。 秋月で買えるからAVRよりもPICを選ぶかというと、そういう考え方はしないのではないでしょうか。
PIC本のほうがAVR本より多いという事実関係はありますので、そこを切り口にPICを勧める人がいます。 しかし、市販の本を読まねばならないような水準の人はPICであるとかAVRであるとか以前の問題なのであって、 多少乱暴な物言いですが最初はラズパイもしくはarduinoでも使っておけば良いのでは、と思います。 PICの本を買っても「Windowsとそこで動く市販のコンパイラを買いましょう」から始まってしまいます。 たいてい、そのような本には市販のコンパイラでしか通用しない知識しか書かれていません。 安くないライセンス費用を投じることができるでしょうか?
AVRに関してはarduinoでカバーしてしまえという流派が大きいらしく、 市販本どころかネット記事もほとんどありません。 arduinoが出回るよりも昔はAVRに関する本が若干刊行されていたのですが、今はありません。 AVRを扱う人のほとんどはarduinoで始まってarduinoで終わってしまうんだもの。 本があってもarduinoの本しか出てこない、というわけです。
AVR Dxは1.8V電源でフラッシュメモリのプログラムを行うことができません。 電源電圧幅としては、事実上、2.5V以上での設計を想定しなければなりません。 まあ、通常、FPGAでも触らない限り3.3V未満を扱うことはないので、問題ないでしょう。
POSIX and/or Linuxでマイコンと通信を試みる場合、 通常のシリアルポートをそのまま使ったのではカーネルによってデータが加工されてしまいます。 特にプログラムを準備しないそのままの状態でバイナリデータを受け渡すことはできません。 gdbプロトコル等ではそのあたりを考慮して工夫が行われています。 しかしマイコンの規模によってはそれではファームウェア側の負担が大きく、 可読文字列をベースとしたのではプロトコルを実装しきれない場合があります。 バイナリをそのままやり取りしたいと考えることのほうが多いはずです。
POSIX and/or Linuxでシリアルポートのプログラムを行うには termiosと呼ばれるライブラリルーチンを使用します。 termiosを用いたシリアルポートのプログラミングを行う方法を解説した文書はほとんどありません。 では実際のところ、バイナリデータを透過的に扱うにはどうしたら良いのでしょうか。 termiosのフラグはデータを加工するフラグビットの集まりであるということに気がつくことができれば、 答えは意外と簡単なところにあります。 termios構造体をゼロクリアしたうえで必要な追加設定を行えばよいのです。 CS8, CLOCAL, CREADあたりのフラグを立てておけば十分でしょう。
完成版のプログラムでは状態の保存と復帰を行ったほうが親切です。 しかしそれは必須ではありません。
UARTを搭載し3.3Vで使うことを考えた著名なデバイスについてデータシートを調べてみます。
90SシリーズでないATmega8以降の世代については ATmega8だけが3.3V動作が規定されないほどに古いデバイスである、ということになります。 L添字が用意されたデバイスはL添字で2.7Vに対応し、標準品で4.5Vに対応します。 L添字のかわりにV添字が付くようになったシリーズはV添字で1.8Vに対応し、 標準品で2.7Vに対応するものと考えて良いのでしょう。 さらに時代が進むとV添字をなくしており、 標準品で1.8Vに対応するようになっています。 AVR DDの世代ではオンチップで電圧レギュレータを搭載し1.8V以下でCPUコアが動作するので、 全範囲で24MHzに対応するということになっています。
さて、このように見てみますと、 ATmega8が3.3Vロジックにはお勧めできないということとなります。 ATmega88/168系統は今となっては品薄なのであまり乗り気がしません。 多少の高値に目をつぶってATmega328Pを採用するか、 あるいはATtiny2313を続投することが良い選択ということになりそうです。 メモリが足りるかどうかがちょっと心配ですね。
どこでAVR DDを使うのかと考えれば、 そのエリアはATmega8やATmega328と被ります。 AVR DDにおいて特徴的な機能はMVIOにあります。 5V電源において部分的に3.3Vロジックを駆動したいときは良い適応だと思います。 3.3V電源でも速度が落ちない点も良い適応ですね。 もっとも、旧来のmegaAVR, tinyAVRの対象領域である8MHzで不満が出る応用回路はそれほどない、 という気もします。
AVR DDの隠れた利点は入手性です。 多少割高ですが海外の小売業者から調達することができます。 これは海外に向けた記事では意味を持ってくるでしょう。 費用対効果を考えるに、ATmega8が使えるのは今はもう日本国内限定の話となりました。 ATtiny2313やATmega328Pについても状況は似たようなものです。 なので、グローバルに読める記事にしたい場合はAVR DDを採用するほうが有利かも知れません。 しかしながらデバイス単価300円前後掛かるのは高価であるのも事実なので、 当面はATmega8でお茶を濁すことになるのかな、とも思います。
注意すべきエラッタ。
予想にあまり違わず、AVR64DD28とAVR32DD28とAVR16DD28はエラッタの内容がほぼ同じようです。 ソフトウェアは共通に設計するでしょうし、だいたい同じものと考えて良いのだろうと思います。 UPDI+RESETピンをどこかに転用することはあまり考えておらず、 フラッシュメモリについてもチップ消去がメインでしょう。 となれば、気にかけておくべきはタイマー回路、TWI回路、USART回路です。