Arduino Nano Every

Arduino Nano Everyに関する記事です。



Arduino Nano Every

Arduino Nano Every の MCU は Microchip ATMega4809 です。

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 との比較

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 で動作させるにはボード情報を書き換える必要があります。

  1. Arduino IDE を終了する。
  2. %LOCALAPPDATA%\Arduino15\packages\arduino\hardware\megaavr\n.n.n 内 (n.n.n はバージョン番号) にある boards.txt を LF 改行ができるテキストエディタで開く。
  3. 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:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: