Arduino Unoを20MHzで動かす

No Image

Arduinoの処理に遅さを感じてしまい、ちょっとでも速いほうがいいと思う人は少なからずいるのではないでしょうか。
水晶振動子を16MHzから20MHzに変えるだけで1.25倍速くなります、微妙・・・?
ライブラリによっては動かないなど、保証はできませんがクロック周波数20MHzで動作させる方法を紹介します。

スポンサーリンク

とりあえずArduino Unoについてる16MHzの水晶振動子を20MHzのものに付け替えます。
ただ、よく見るとこれじゃあ20MHzのが付けられないのでは・・・
どっちの水晶
取り替えるのは右の赤枠の小さい方です。
左にあるのはUSB-シリアル変換用ICのクロック用です。
無いので無理・・・ではなくて、このタイプで20MHzのやつは秋月でも売っていますので一応入手できます。

Amazonとかで売っている互換品だと大きな水晶振動子が付けられるような穴があるので簡単です。

これがいいと思いますが、なぜか私は一番面倒くさい方法に出ました。
そう自作です。

Arduino Uno @ 20MHz
・・・はい、できました。

USBコネクタはmini-Bにして接続しやすく(?)しました。
また、USB-シリアル変換ICは安いCH340Gを使っています。
それ以外は部品はありあわせを使ったので違うものの回路はほとんど同じです。

インターネットで探してみると、やろうとしてる人はいるみたいで、ブートローダを変えたり色々模索しているみたいです。

スポンサーリンク

色々読むと、ブートローダは変更せずに、アップロード時の通信速度を変えたらいいみたいです。
じゃないとよくあるエラーが出てきますよ。

avrdude: stk500_getsync( ): not in sync: resp=0x00

そのあたりを改変した記述をboards.txtに書き加えます。
ブートローダのパスなど当方と違う箇所があるかもしれません。
それなりに解読できる方のみ改変をしてください。

uno_20.name=Arduino Uno @ 20MHz
uno_20.upload.protocol=arduino
uno_20.upload.maximum_size=32256
uno_20.upload.maximum_ram_size=2048
uno_20.upload.speed=144000
uno_20.bootloader.low_fuses=0xFF
uno_20.bootloader.high_fuses=0xDA
uno_20.bootloader.extended_fuses=0x05
uno_20.bootloader.path=optiboot
uno_20.bootloader.file=optiboot_atmega328.hex
uno_20.bootloader.unlock_bits=0x3F
uno_20.bootloader.lock_bits=0x0F
uno_20.build.mcu=atmega328p
uno_20.build.f_cpu=20000000L
uno_20.build.core=arduino
uno_20.build.variant=standard

アップロード速度の値は、115200 * 20 / 16 = 144000という感じです。
この値以外でも1.25倍した速度なら問題ないと思います。

書き込みに使うIDEは1.0系をおすすめします。(例:1.0.6)
使っていくうえで色々問題が発生する可能性もありますが、高速化できますので20MHzに置き換えてもいいと思います。

Arduino Unoを20MHzで動かす

スポンサーリンク

Leave a Comment