Arduino Nano Every
Arduino Nano Everyに関する記事です。
Arduino Nano Every
Arduino Nano Every の MCU は Microchip ATMega4809 です。
- MCU: Microchip ATmega4809
- FLASH: 48KB
- SRAM: 6KB
- EEPROM: 256B
- CLOCK: 20MHz
- OPERATING VOLTAGE: 5V
- USB SERIAL: ATSAMD11D14A (ARM® Cortex® -M0+)
Arduino Nano Every は Arduino Nano の後継ボードですが、MCU は ATMega328P ではありません。ATMega4809 は ATMega328P 比で FLASH メモリが 1.5 倍、SRAM が 3 倍、EEPROM が 1/4、クロックが 1.25 倍です。
See Also:
購入
国内だと秋月電子で購入できます。
安い互換機は ATmega4809 ではなく ATmega4808 が載っている事があり、細工が必要です。細工しなきゃいけないのは互換機とは言えない気がしなくもないですが...。
See Also:
各部詳細
コネクタが microUSB になったのはいいのですが、Pro Micro 同様にモゲそうですね。エポキシ接着剤等で補強しておいた方がいいかもしれません。ハンダを盛ろうにも脇には表面実装 LED があったりしてちょっと難易度高いです。
ピンヘッダは最初からハンダ付けされていました。箱から出したらブレッドボードですぐ使えるのはいいのですが、秋月電子の細ピンヘッダでなく普通のピンヘッダが使われています。折角、端面スルーホール (半円スルーホール) で処理されているので、ピンヘッダがハンダ付けされていないものも売ってほしいトコロです。
ピンアウトシート
Nano Every はピンのシルク印刷が裏面にあり、ブレッドボードに挿して使う時に不便で仕方ないので、ピンアウトシート (?) を作りました。印刷してカットして両面テープで貼り付けてお使いください。利用や改変は自由です。
Arduino Nano との比較
- 基本的には Arduino Nano の上位互換だが、EEPROM は 1/4 になっている。
- Arduino Nano とピン互換
- 純正品で比較した場合、標準価格は Nano よりも安い。
- 片面実装
- ピンのシルク印刷が裏面にある。
- ピンヘッダを立てるためのスルーホールだけではなく、端面スルーホール (半円スルーホール) もある。
- microUSB。
- ICSP 端子はない。
- SAMD11 (ATSAMD11D14A) を再プログラミングするためのパッド (SWD) と ATMega4809 にブートローダーを書き込むためのパッド (UPDI) が裏面にある (2x3)。
- 裏面右上のパッド (x2) は USB の D+ と D-。
- D11 では PWM が使えない。
- SPI の SS は D8。
- A6 / A7 はデジタル入出力に使える。
- すべてのピンで外部割込み可能。
See Also:
セットアップ
最新の megaAVR がインストールされていれば、Nano Every を接続した時にドライバを勝手にインストールしてくれます。
まずは [ツール | ボード | ボードマネージャ] でボードマネージャを開き、"megeAVR" を検索します。megaAVR がインストールされていなければインストールしておきます。
ボードは Arduino Nano Every を選択します。
レジスタエミュレーション
例えば次のようなスケッチがあったとします。これはポートレジスタを使って D13 (内蔵 LED) で L チカするスケッチです。Nano の D13 は Port B の bit5 (32 = 1 << 5) です。
void setup() {
DDRB |= 32; // pinMode(13, OUTPUT);
}
void loop() {
PORTB |= 32; // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
PORTB &= ~32; // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
|
Nano Every で使われている ATmega4809 と Nano で使われている ATmega328P とではポートレジスタの割り当てが異なるのですが、レジスタエミュレーションが ATMEGA328 になっていると、ポートレジスタを使った Uno や Nano 用のスケッチを動作させる事ができるようになります。
Nano Every の D13 は Port E の bit2 (4 = 1 << 2) なので、レジスタエミュレーションを行わない (None) 場合の L チカスケッチは、本来次のようになると思いますが...
void setup() {
DDRE |= 4; // pinMode(13, OUTPUT);
}
void loop() {
PORTE |= 4; // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
PORTE &= ~4; // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
|
レジスタエミュレーション が None の場合には PORT や DDR, PIN 等が未定義となってしまって、コンパイルできません。ATmega4809 ネイティブのポートレジスタ操作を行うには VPORTを使います。
void setup() {
VPORTE.DIR |= 4; // pinMode(13, OUTPUT);
}
void loop() {
VPORTE.OUT |= 4; // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
VPORTE.OUT &= ~4; // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
|
VPORT はレジスタエミュレーションの影響を受けません。VPORTE はレジスタエミュレーションが ATMEGA328 / None のいずれになっていても Port E にアクセスします。
See Also:
20MHz 化
Nano Every で使われている ATmega4809 は本来、最大 20MHz で動作するのですが、デフォルトでは Nano との互換性のためにクロックスピードが 16MHz になっています。Nano Every を 20 MHz で動作させるにはボード情報を書き換える必要があります。
- Arduino IDE を終了する。
- %LOCALAPPDATA%\Arduino15\packages\arduino\hardware\megaavr\n.n.n 内 (n.n.n はバージョン番号) にある boards.txt を LF 改行ができるテキストエディタで開く。
- Nano Every の設定を変更する (赤字の部分を追記する)。
##############################################################
nona4809.name=Arduino Nano Every
nona4809.vid.0=0x2341
nona4809.pid.0=0x0058
nona4809.upload.tool=avrdude
nona4809.upload.protocol=jtag2updi
nona4809.upload.maximum_size=49152
nona4809.upload.maximum_data_size=6144
nona4809.upload.speed=115200
nona4809.upload.use_1200bps_touch=true
nona4809.upload.extra_params=-P{serial.port}
nona4809.build.mcu=atmega4809
nona4809.build.f_cpu=16000000L
nona4809.build.board=AVR_NANO_EVERY
nona4809.build.core=arduino
nona4809.build.variant=nona4809
nona4809.build.text_section_start=.text=0x0
nona4809.build.extra_flags={build.328emulation} -DMILLIS_USE_TIMERB3 -DNO_EXTERNAL_I2C_PULLUP
#nona4809.build.extra_flags=-B{runtime.tools.atpack.path}/gcc/dev/{build.mcu}
nona4809.bootloader.tool=avrdude
nona4809.bootloader.file=atmega4809_uart_bl.hex
nona4809.bootloader.SYSCFG0=0xC9
nona4809.bootloader.BOOTEND=0x00
nona4809.bootloader.OSCCFG=0x01
nona4809.fuses.file=fuses_4809.bin
menu.mode=Registers emulation
nona4809.menu.mode.on=ATMEGA328
nona4809.menu.mode.on.build.328emulation=-DAVR_NANO_4809_328MODE
nona4809.menu.mode.off=None (ATMEGA4809)
nona4809.menu.mode.off.build.328emulation=
menu.clock=Clock
nona4809.menu.clock.2internal=2MHz
nona4809.menu.clock.2internal.build.f_cpu=2000000L
nona4809.menu.clock.2internal.bootloader.OSCCFG=0x01
nona4809.menu.clock.4internal=4MHz
nona4809.menu.clock.4internal.build.f_cpu=4000000L
nona4809.menu.clock.4internal.bootloader.OSCCFG=0x01
nona4809.menu.clock.8internal=8MHz
nona4809.menu.clock.8internal.build.f_cpu=8000000L
nona4809.menu.clock.8internal.bootloader.OSCCFG=0x01
nona4809.menu.clock.16internal=16MHz
nona4809.menu.clock.16internal.build.f_cpu=16000000L
nona4809.menu.clock.16internal.bootloader.OSCCFG=0x01
nona4809.menu.clock.20internal=20MHz
nona4809.menu.clock.20internal.build.f_cpu=20000000L
nona4809.menu.clock.20internal.bootloader.OSCCFG=0x02
|
正しく追記されると、クロックを選ぶメニューが出現します。
See Also:
ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。