スキップしてメイン コンテンツに移動

ATmega4809(megaAVR0)を試す



megaAVR 0という新しいAVRシリーズを試してみた。
 小さいパッケージなのに、UARTが4本もあるのが気になったのがきっかけ。
登場すると噂のArduino Uno Wifi rev2 にも採用されるらしい。

 簡単にデータシートを眺めてみると、アーキテクチャはXmegaシリーズを簡素化し、動作電圧範囲を広げたもののようだ。
 CPUの命令セットはAVRxtと新しくなっているが、Xmegaで拡張された一部の命令(DESやUSBで使われる命令)が削除されていて、基本的に今までのATmegaとほぼ同じだ。
 コンパイラからは、先に登場した新しいtinyAVR0, tinyAVR1シリーズと共にAVR8Xと呼ばれて区別されている。

 CPU周りを見てみると、割り込みレベルなど、今までのクラシックなATmegaで足りないなと思っていたものがかなり強化されていた。 ArduinoAPIを再実装するとしたら便利そうなペリフェラルもだいたい揃っている。

データシート P6
 DMAは無いけれど、周辺機能にイベント駆動用の割り込みネットワークが張り巡らされているのがわかる。  できるだけCPUを介在させない使い方がいろいろ提案されているので、アプリケーションノートやマニュアルを読み込むことになる。

ピックアップした特徴
・データメモリ空間(64kB)に統合されたFlashROMとEEPROM
・RAM 6kB ROM 最大48kB (メモリ空間制限のため)
・デバッグ専用の端子 UPDIを搭載
・優先度付きの割り込み(NMIと2レベル)
・ピン単位の割り込み(かなり複雑になった)
・リセットコントローラ(ソフトウェアリセット用レジスタが実装され、リセット原因が何だったかもリセット後に読み出せるようになった)
・豊富な16ビットタイマ(4809では5基)
・16ビット リアルタイムカウンタ(RTC)
・豊富な非同期シリアル/同期シリアル(USART 4ch、SPI 1ch,TWI 1ch)
・内蔵クロックは最高20MHz(PLL)と32kHzの2種類。外部クロックは発振器と時計用水晶のみ
・ADCは10bit 16ch
・内蔵VREF電圧が5種類と多い(0.55V,1.1V,1.5V.2.5V.4.3V)
・カスタムロジック(CCL) LUTを4つ内蔵
・シグネチャ領域にシリアル番号(ユニークID)が追加

tinyAVR-0とmegaAVR-0は同じアーキテクチャで、差異はROM/RAM容量、ピン数、ペリフェラルの数だけのようだ。 UPDIにより書き込みポートが1ピンだけになったので、tinyAVRシリーズの少ピンな型番での性能強化が目立っている。
 8ビットDACの外部出力やタッチ検出はtinyAVR-1のみに搭載されている。

試作

物は試しということで、早速石を入手して遊んでみた。
これだけ積んでいても小ロット単価が328Pより安い。
(2560や644Pなどになると、もう32ビットマイコンのほうが安い)

用意した開発環境
・Atmel Studio 7.0
・PICKIT4

 PICKIT4は5月に買っていたが、その頃に比べるとデバイス対応が徐々に進んでいて、最新のユーザーガイドには、各種デバッグインターフェースのピンアサインリストが追加されている。 もちろんUPDIも対応済み。
更にAtmel Studioでもちゃんと使える。 PICは概念になりつつある(?)

 実験用基板はQFNパッケージ用で作成。 デバッグ用のGHコネクタにUPDIとUART0、VDDを引き出し、他にLEDと32.768kHzのXT用パターンとSMDの発振器パターンを載せて最小限の構成とした。 リセット端子も、GPIOとして利用できる。マイコン動作に必要な受動部品は3つのバイパスコンデンサのみということになる。
 パッケージの外周に1mmピッチの手半田用パターンを設けているので、後で好きなように引き出せる。


試作基板は5x5cm角としては面積が余ったので、いくつかSHコネクタ用のパターンと、SPIROMパターン、PICKIT4の端子変換基板を相乗りさせている。 各パターンは、自前のPCBカッター(HOZAN)で切り出し加工した。

PICKIT用変換基板




UPDI


PICKIT4とは、UPDIで接続する。 1-Wireの半二重UARTプロトコルなので、必要な結線はVDD,GND,UPDIの三本だけだ。 (VDDは書き込みの際にターゲット電源を認識する関係で必要だが、電源供給はしてくれない様子)
 MPLAB SNAPなど、PICKIT4と同世代の書き込みツールが登場しているけれど、AVRへの書き込みの対応状況はそれぞれ違ったり、機能追加などが頻繁にあるため、MPLABXのバージョン毎にリリースノートを確認しよう。

Atmel Studio上での読み出し結果

Atmel Studio上でLチカも完了。 GPIOマクロはやはりXMEGA用なのでちょっと戸惑った。

動作周波数と電圧

 メインクロックには水晶発振子を使えないけれど、 内蔵オシレーターを最大で64分周することができる。 最高速度はレジスタで選択するが、16MHzか20MHzを選べる。
 16~20MHzでの動作は動作電圧が4.5V以上でないと動作保証されていない。
 3.3V固定で使うなら2分周して10MHz駆動が安全だろう。 5MHz動作なら1.8Vまで保証されるので、Ni-MHx2直の運用にちょうどよい。 

Lチカ

UARTまわり

ATmega4809はUARTが4基存在し、さらにピンの接続先は代替を含めると2系統まで切り替えて、ピンとバスの競合を抑えることができる。ボーレート生成の仕組みが変わったので、前と比べるとクロック精度をそれほど心配しなくてもよくなった。5MHz動作でも115.2kbpsをやり取りできる。

 これを利用して、デバッグ用のポートを基板上のヘッダに1基割り当てておき、別なUART機器をオルタネートピンに割り当てておくことで、UART1基を別の物理接続に利用することもできる。

MPLABでAVR開発を試す


 最近アップデートされたMPLABX 5.0も、ベータ版ではあるがAVRをプログラミングできるようになった。
 XC8もAVR対応が始まっており、2.0からベータ対応が始まっている。ただ、まだXC8 2.0でコンパイルすると、実機に書き込んだ後で挙動がおかしくなる。
 プロジェクト設定からAtmel Studioでインストールしたコンパイラを選択した場合は実機が正常に動作するので、しばらくアップデート待ちのようだ。



公式開発ボード

megaAVR系の開発ボードがいくつか登場している。
ATTYNY416 XPLAINED NANO
 https://www.microchip.com/Developmenttools/ProductDetails/ATTINY416-XNANO
ATMEGA4809 CURIOSITY NANO
 https://www.microchip.com/DevelopmentTools/ProductDetails/DM320115
AVR-IOT WG Development board  (ATmega4808)
https://www.microchip.com/developmenttools/ProductDetails/AC164160

いずれもUPDIプログラマとしてmEDBGかnEDBGを搭載している。 XPLAINEDはmEDBGで5V単電源。 CURIOSITY NANOのnEDBGはレベルシフタ、可変電圧供給機能をもっていて、ターゲット電圧をある程度変更できるようになっている。
 nEDBGはマスストレージとして認識され、放り込まれたHEXファイルを書き込む機能もある。
 AVR-IOTボードはATmega4808、センサ、クリプトチップ、Wifiモジュール(文章によると技適取得済み)が搭載されていて、Google Cloud IoT platformにデータを上げることができる。

追記(2019Oct)
有志によるArduino IDE向けの環境
Atmega328PベースのUPDIプログラマ  ”jtag2updi” https://github.com/ElTangas/jtag2updi
megaAVR ”MegaCoreX” https://github.com/MCUdude/MegaCoreX
TinyAVR ”megaTinyCore” https://github.com/SpenceKonde/megaTinyCore

Popular posts

Arduino Nano Everyを試す

 秋月で売っていたAtmega8と、感光基板でエッチングしたArduino互換ボードを製作してみて、次に本家ボードも買って…  と気が付いたら10年が経過していた。  ハードウェア的な観点では、今は32bitMCUの低価格化、高性能化、低消費電力化が著しい。動作周波数も100MHz超えが当たり前で、30mA程度しか消費しない。  動作電圧範囲が広く、単純な8ビットMCUが不要になることはまだないだろうけど、クラシックなAVRマイコンは値上がりしており、価格競争力は無くなりつつある。 そしてコモディティ化により、公式ボードでは不可能な値付けの安価な互換ボードがたいていの需要を満たすようになってしまった。     Arduino Nano Every https://store.arduino.cc/usa/nano-every https://www.arduino.cc/en/Guide/NANOEvery  そんな中、Arduino本家がリリースした新しいNanoボードの一つ。  他のボード2種はATSAMD21(Cortex-M0+)と無線モジュールを搭載したArduino zero(生産終了済み)ベースのIoT向けボードだが、 Nano EveryはWifi Rev2と同じくAtmega4809を採用していて、安価で5V単電源な8ビットAVRボードだ。  Atmega4809はATmegaと名がついているが、アーキテクチャはXMEGAベースとなり、クラシックAVRとの間にレジスタレベルの互換性は無い。   https://blog.kemushicomputer.com/2018/08/megaavr0.html  もちろん、ArduinoとしてはArduinoAPIのみで記述されたスケッチやライブラリは普通に動作するし、Nano Every用のボードオプションとして、I/Oレジスタ操作についてはAPIでエミュレーションするコンパイルオプション(328Pモード)がある。 公式のMegaAVR0ボードはどれもブートローダーを使わず、オンボードデバッガで直接書き込みを行っている。  ボードを観察してみると、プログラマ・USBCDCとしてATSAMD21が搭載されている(中央の四角いQFNパッケージ)MCU的にはnEDBG

【サボテン】太陽電池の結線

 久しぶりにサボテン計画。 忙しかったり投薬治療直前でだるかったりして、かなり放置していた。 さぼてんも不機嫌そうだ。 せっかくなので、園芸用の水受けに移す。  関節痛で寝込んでる間に、エイプリルフール終わってましたね^^・・・。  太陽電池の展開機構を想像したが、まずは太陽電池の結線を済ませよう。  配線を綺麗にまとめたくていろいろ探していたら、千石電商でぴったりなものを見つけた。 LEDリング基板 というらしい http://www.led-paradise.com/product/629?  本来はチップLEDをリング状にまとめる代物。 イレギュラーな使い道だ。   今度は小径のを買って、GX200のリングライトに仕立て上げよう。   嬉しいことにフレーム径にジャストフィット。 配線を綺麗にまとめられた。   太陽電池の接続部。逆流防止用にショットキーダイオードを入れている。 かなりスッキリ。 蛍光灯下 500ルクスでの実験。 EDLCは10Fを使用。  ちゃんと充電が行われている。 といっても、とてもとてもゆっくりとだけれど・・・。

GPSアンテナをつくる

GPSアンテナを作ってみた。 1575MHzの波長は約19cmなので、半波長で9.5cmとなる。 GHz帯とはいえ、結構長いものだなぁ。 セラミック等の誘電体がなければ、平面アンテナで真面目に半波長アンテナを作ろうとすると手のひらサイズの面積が必要になってしまう。 普通のダイポールだと指向性があるので、交差させてクロスダイポールにする。 屋外地上局のアマチュア衛星用アンテナの設計をそのまま縮小したもの。 水平パターンはややいびつ 92.2mmの真鍮の針金(Φ=0.5mmくらい)を2本用意して、42.3mmで90°に曲げる。 長さの同じ素子同士を並べて配置する。 (全長が半波長より長い素子と短い素子が交差した状態) 片方をアンテナ信号線、もう片方をGNDにつなげば完成。 実際5分くらいでつくったけれど、果たしてどうだろうか。 今回は、道具箱に眠っていた表面実装タイプのMT3339系モジュールに取り付けた。 アンテナはもともと3x1.2mm程度のとても小さいチップアンテナで、 LNAが入っているけど感度が悪かったのでお蔵入りしていた代物。 最近の携帯機器はみなアンテナに厳しい。 さて・・・ クロスダイポール版モジュールをPCでモニタしたウインドウ(左)と、QZ-Rader画面 東側に建物遮蔽があるので、そちら側の衛星はSNが悪い。 とりあえず補足できた衛星数はシミュレーションされたものとほぼおなじだった。 アンテナの角度をいろいろ振って、逆さまにしてもロストすることはなかった。 セラミックのパッチアンテナレベルにはなったかな・・・。 簡単にできてそれなりに測位するけれど、携帯性は皆無になった。 あと、近接周波数の干渉を受けやすいかもしれない。 GPSアンテナのDIY例としては、QFHアンテナもある。 ラジオゾンデなどで使われている例がある。 いつもお世話になっているQFHアンテナ計算シートのサイト https://www.jcoppens.com/ant/qfh/fotos_gps.en.php ヘリカルアンテナは加工精度の難易度が上がるので、今回はクロスダイポールにした。 GNSSとなると、複数の周波数のために調整されているセラミックパッチアンテナが有利だと思う。 セラミックパッチア