[Arduinoのすすめ][ArduinoConf][ArduinoMonitor][iArduino]

Arduino nano を 8MHz で動作させる

はじめに

乾電池で ATmega328P を動作させようとすると、電池4本では3.6V〜6V強になり定格を超えてしまいます。一方で電池3本では2.7V〜4.5V強で、動作周波数が16MHzでは電池を最後まで使えません。そこで 8MHz 動作にして、5V端子に乾電池3本をつけるとバランスがいいように思います。8MHz 動作の Arduino には Lily Pad Arduino と Arduino Pro, Arduino Mini の 3.3V 版がありますが、形状が大きかったり、USBシリアルが別で必要なので Arduino nano の方が便利な場合があります。

内蔵RC発振で8MHz動作させる

boards.txt (バージョンによって違うので探してください)に以下を加えて Arduino IDE を起動すると「ボード」に「Arduino w/ ATmega328 Internal 8MHz」が加わるので、これを選んでブートローダを書き込みます。ブートローダーを書き込んだ後は「LilyPad Arduino」を選んでも大丈夫(boards.txt を書き換えていない Arduino IDEで使える)です。

ただしこの方法だとうまくArduino IDEから書き換えができない場合がありました。内蔵RC発振の精度は±10%(25℃)なので個体差によってはそういうことがおこります。

##############################################################

avr_int8.name=Arduino w/ ATmega328 Internal 8MHz
avr_int8.upload.protocol=stk500
avr_int8.upload.maximum_size=30720
avr_int8.upload.speed=57600
avr_int8.bootloader.low_fuses=0xe2
avr_int8.bootloader.high_fuses=0xda
avr_int8.bootloader.extended_fuses=0x05
avr_int8.bootloader.path=atmega
avr_int8.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
avr_int8.bootloader.unlock_bits=0x3F
avr_int8.bootloader.lock_bits=0x0F
avr_int8.build.mcu=atmega328p
avr_int8.build.f_cpu=8000000L
avr_int8.build.core=arduino
avr_int8.build.variant=standard

水晶発振16MHz、内部8MHz動作させる

boards.txt (バージョンによって違うので探してください)に以下を加えます。

##############################################################

avr_xt16_div2.name=Arduino w/ ATmega328 8MHz (X'tal 16MHz)

avr_xt16_div2.upload.protocol=arduino
avr_xt16_div2.upload.maximum_size=30720
avr_xt16_div2.upload.speed=57600

avr_xt16_div2.bootloader.low_fuses=0xFF
avr_xt16_div2.bootloader.high_fuses=0xDA
avr_xt16_div2.bootloader.extended_fuses=0x05
avr_xt16_div2.bootloader.path=atmega
avr_xt16_div2.bootloader.file=ATmegaBOOT_168_atmega328_pro_16MHzDiv2.hex
avr_xt16_div2.bootloader.unlock_bits=0x3F
avr_xt16_div2.bootloader.lock_bits=0x0F

avr_xt16_div2.build.mcu=atmega328p
avr_xt16_div2.build.f_cpu=8000000L
avr_xt16_div2.build.core=arduino
avr_xt16_div2.build.variant=standard

そしてATmegaBOOT_168_atmega328_pro_16MHzDiv2.hexをダウンロードして、ATmegaBOOT_168.c のあるフォルダ(ディレクトリ, バージョンによって違うので探してください)にコピーします。 Arduino IDE を起動すると「ボード」に「Arduino w/ ATmega328 8MHz (X'tal 16MHz)」が加わるので、これを選んでブートローダを書き込みます。ブートローダーを書き込んだ後は「LilyPad Arduino」を選んでも大丈夫(boards.txt を書き換えていない Arduino IDEで使える)です。

この方法だと周波数が安定するのでArduino IDEから書き込めないことはないと思います。 一方でマイコンのリセット直後の一瞬だけ16MHzで動作するので最低動作電圧が内蔵RC発振器を使ったときよりも高くなる可能性があります。1個だけですが測ってみたら2.8Vから動作する(おそらくBODが働いている)ようだったので、あまり気にしなくてもよいとは思います。

何をしているか

この方法では Arduino nano にある 16MHz の水晶発振子で動作するようにフューズビットを設定していますが、ブートローダーのプログラムの先頭で動作周波数を16MHzの1/2になるようプリスケーラーを設定しています。具体的な書き換え方はTutorial: 3.3V hacking for Arduino Nano (Baoshiさんによる)のまま(hexファイルのコンパイル方法も)です。

履歴


Arduinoのすすめ
Copyright (c) 2017, Noriaki Mitsunaga