UPDI書き込みのAVRマイコンをArduinoとして使う
AVRマイコンにはいろんな種類があり、開発環境として何を使うかを迷う場面も多くなってきました。
当方は昨今ESP32のような割と開発の流れが安定しているマイコンを使うことが多いのですが、Atmel時代からMicroChipになりカオス化し何を選んでよいのかすら迷ってしまう状況となり、AVR系は手を出しにくくなってしまってます。
また開発環境も基本はAtmelStudio、MicrochipStudio、MPLAB X IDEを使うこととなりますが、色んなものが統合されて使い込んでない者からすれば段々億劫になってしまいます。
一方でArduino UNOのATmega328pに代表されるAVRマイコンの使いやすさがあります。もちろん細かな癖、eFuseなどはありますが、それでもArduinoとして割り切れば開発に使うという敷居は一気にさがります。
昨今のATmega、ATxmegaなどの石でArduinoとして使う方法はそこそこのサイトで紹介されていますが、ほとんどがArduino NanoやUNOをライタとして、jtag2updiというファームを使うようになっています。これはこれで専用ライタとしてNanoを使うのはOKかとおもいますが、AVRマイコンを触っている方であればAtmel ICEを持っている確率が高いと思います。ところがこのAtmel ICEをライタとして使う例がほとんど出てきませんので手順をざっと紹介しておきます。
Atmel ICE
ターゲットを仮にATmega4809としますと、接続は以下の通りです。UDPIラインには念のため100Ω程度の抵抗を挟んだ方が安心です。
Arduino化するにはBootloaderが必要です。
C:\Users\UserName\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.3\bootloaders\optiboot\bootloaders\mega0\115200
この中のどれを使うかですが、UART0が無難だと思いますので、
Optiboot_mega0_UART0_DEF_115200_A7.hex
を使うこととします。
書き込みはMicrochipStudioを使います。他のIDEでも Device Programmingで Atmel ICEが選択できるならそれでOKかと思います。
MicrochipStudioで左図のように問題なくBootloaderを書き込みすることができます。
ここまででAVRマイコンがArduinoのBootloaderで動作できるようになっています。
ですのでここからは普通にArduino IDEをつかって開発することができます。PCとAVRとの間は USB-UART変換器を使います。
当然Bootloaderに合わせて、AVRマイコンのUART0 にTx,Rxを接続し、自動書き込みを使うのであれば USB-UART変換器の DTR 信号を コンデンサー0.1uF程度を介してAVRマイコンのRESET端子(Pullup必要)に接続します。
このあたりの回路は、Arduino UNOの回路図 を参考にします。
これで快適なArduino IDEでの開発環境が準備できました。 シリアルモニタもちゃんと使えます。
Ardunio Pin レイアウト例
詳細は、 https://github.com/MCUdude/MegaCoreX を参照してください。
おまけ?
なぜかArduino IDEから書き込み機をAtmel ICEを選択してBootloaderを書き込もうとするとエラーになりできませんでした。