AVRの新シリーズとPICKIT4
- 2022/02/09 13:36
- カテゴリー:make:
先日,SRAMとEEPROMを相互に読み書きする治具をAVR(ATmega88V)で作ったわけですが,実はブレッドボードで作りました。ブレッドボードはこれまで何かと窮屈ですし,綺麗に作る事が出来ない上に,苦労して作ったのにすぐに壊してしまうと言うはかなさが残念で,あまり積極的に使ってこなかったのです。
まあ,結局の所ハンダ付けが好きだったという事に尽きるのですが・・・
ですが,今年の冬の寒さは厳しくて,屋外並みに寒い作業部屋では耐えられず,暖かいリビングで作業をするために,ブレッドボードを使って見たところ,これがめっぽう面白いのです。
DS1742Wの読み書きを行うプロジェクトは終わってしまいましたが,ちょっとさみしかったので,気になっていたAVR関係の宿題をやってみることにしました。
私のAVRの開発環境は10年以上更新されておらず,IDEはAVR Studio4.19,コンパイラはWinAVR,ライタはデジットのAVRWRT2という,ミニマムかつ古くさいものです。そう,AtmelがMicrochipに買収されるだなんて,夢にも思わなかった時代のままです。
ですが,tiny2313とかtiny13を使っている分にはこれでもう十分で,むしろ変に更新してしまうと,リビルドしたときにギリギリまで使い切ったメモリに入りきらないという話が出てきたりするので,そのままにしてあります。
しかし,これではデバッグも厳しいですし,新しい品種に対応しません。秋月最安値のtiny13が値上がりして,代わりに最安値に躍り出たtiny202に移行しようにも,この環境ではコンパイルさえ出来ないのです。
昨年の春にPICKIT4は買ってあったので,tiny202もこれで開発すれば良いのですが,それにはMPLAB XなりMicrochip Studioを導入しなくてはいけませんし,なによりAtmelがMicrochipに買収されたという現実を受け入れることから始めなくてはいけません。
なにせツール類をアップデートせず,AVRをマイコンではなく汎用電子部品として使っていた私ですので,最新の状況にするには不安が伴います。
AVRシリーズはどのくらいMicrochipに統合されているのだろう?
AVRのコンパイラはXC8だけ?XC8ってフリーで使えるの?
それまで書いたコードはリコンパイルで使える?
PICKIT4でAVRってちゃんと使えるんかい?
tiny202って旧シリーズのAVRとは何が違ってる?
まあ,案ずるより産むが易し。AVRを使うと言うよりも,新しいマイコンを開発環境ごと新規に導入したので勉強し直しだ,くらいに考えて試してみましょう。
まず,Microchipとの統合具合ですが,最近はかなり総合が進んでいるように思います。というのは,PICKIT4でAVRの開発をするのが当たり前になっているような感じですし,MPLAB Xを使って例もよく見るようになっているからです。
ですが,私はAtmel Studioを引き継いだMicrochip Studioを使うことにしました。これでもちゃんとPICKIT4をサポートします。
コンパイラはgccもちゃんと使えます。これは安心。XC8はフリーでも使えますが,最適化が出来ないので,メモリの小さな安いマイコンでは影響があるように思うので,私は使いません。
そうなるとソースの互換性ですが,ほぼ大丈夫だと思います。思います,と言うのは正直に言って試していないからなのですが,実は知らない間にマクロの使い方が随分変わってしまっていて,リコンパイルする気が失せてしまったからです。
例えば,_BV(PC0)なんていう書き方はもうしなくて,今はPIN0_bmと書いたりします。DDRBもPORTB.DIRと書きますし,これは本当に新しいマイコンを覚えるようなもんです。
もちろん,古い表記でもビルドは通りますし,ちゃんと動きます。けど,わざわざ新しく書くコードで古い書き方を踏襲するのもおかしいので,この際新しい書き方を覚えることにしました。
で,最初の一歩,ハードウェア界のHelloWorldたるLチカを書いて,PICKIT4でデバッグです。UPDIは非常に楽で,たった3本繋ぐだけでデバッグも書き込みもシームレスにこなしてくれます。これはいいですねえ。
PICKIT4は高電圧書き込みも行えますので,私のようなうっかりヒューズビットを間違って設定してしまう人も救えます。
ということで,tiny202 + PICKIT4 + MicrochipStudioで一連の作業が出来ました。やってみると簡単です。
次はI2Cです。8ピンの小型マイコンではI2Cが使えるとなにかと便利で,LCDからEEPROMからセンサから,ピンを消費することなくペリフェラルを増やせます。しかも使う端子は2本だけ。
tiny13やtiny2313では,私はGPIOを叩いてソフトでI2Cマスタを実装して使っていましたが,ATmegaシリーズではTWIというハードウェアが入っているので,随分と楽になりました。
そのTWIが,tiny202には入っています。これは助かったと,早速使って見ようと思ったのですが,なかなか大変でした。
こういう場合,同じTWIですのでコードの互換性はあると思うじゃないですか。レジスタ構成まで同じとはいいませんが,レジスタ名や手順などは同じじゃないかと期待していました。
しかし,コードをベタ移植しても全然動きません。クロックが異なるせいかもと思って修正をしましたがだめでした。
こういう場合は真面目にデータシートを読むに限ります。するとATmegaのTWIとtiny202のTWIは全然違うものだとわかりました。スタートコンディションの出し方も異なるほどですので,レジスタ構成だけではなく手順も異なるくらい全然違うものというのが正解でしょう。
なんとか辻褄を合わせてようやく動き出しました。(実は回路も間違えていたので全く動かなかったのです)
LCDもEEPROMも動いたので,これでI2Cは大丈夫でしょう。
てなわけで,AVRの新シリーズを一通り動かしてみました。IDEもライタもデバッガも新しくなり,その上ソースを記述する作法や約束事も新しいとなれば,もう本当に新しいマイコンに手を出したこととなにもかわりません。
ですが,そうだとしても,低価格,8ピン以下の小型が揃っている,多ピン大容量品もしかもDIPも手に入る,アーキテクチャが綺麗でCで書いても我慢しないですむ,そして世界中にユーザーがいる,というメリットはAVRの個性そのものであり,覚え直してでも使う価値があるものだと思います。
特にtiny202などは,低価格なのに豊富なペリフェラルを備え,CPUにもハードウェア演算器を持つなど,安いマイコンでもここまで便利になったのかと思えるものに仕上がっています。
惜しいのは,昨今の半導体不足のあおりを受けてか,秋月でも価格が上がったり入手が出来なくなっていたりすることでしょう。tiny13はかつて50円だったもんが110円と高騰していますし,tiny202は私が買った45円から50円に値上がりしてしかも在庫切れです。tiny202は安いときで1つ35円くらいだったこともあるわけで,それを考えるとホビーストにも厳しい状況が続いていると言わざるを得ません。
私の場合,そのマイコンが使いこなせるとわかったとき,手元に在庫を持つようにしているのですが,今回改めて棚卸しをすると,おそらく死ぬまでに使い切らないくらいのAVRを抱えていました。tiny2313のフラットパッケージなんて,こんなにたくさんあってどうするのよ・・・