ATmega328にブートローダーを書き込む


ArduinoISPを使うと生の(ブートローダの書かれていない)ATmega328にArduinoのブートローダを書き込むことができま す。
生のATmega328ならばAliで2個セットが$3程度で入手できます。

手順はこちらで紹介さ れているとおりですが、1か所だけ配線の記載にミスが有ります。
ブートローダーを書き込む配線図でUNOのD10がATMEGA328P-PUのD10に直接接続されていますが、
UNOのD10は104コンデンサーに接続します。
これによりリセットが少しだけ遅延されます。
ブートローダーを書き込むと生のATmega328がArduinoになります。

先日、アキバのAitendoに行ったら「あちゃんでいいの」の旧バージョンが投げ売りされていました。
左:ピンヘッダー/クリスタル/リセットボタンなど一式付属
右:基盤のみ


この旧バージョンはこ ちらで紹介されている「どうやってもブレッドボードに刺さらない」モデルです。
こちらに2号 機の制作記事が紹介されていますが、どうせ「どうやってもブレッドボードに刺さらない」ので
ピンソケット、リセットボタン、LEDをすべて裏側に実装してみました。
ATmegaは生の(ブートローダの書かれていない)ATmega328に、上記の方法でブートローダーを書き込んでいます。




D13に繋がっているLEDの電流制限抵抗が少し小さいようで、Lチカをするとものすごく明るく点滅します。
リセットボタンはすごく狭い場所にあるので、これはCPU側にあってもいいかもしれません。

トータルの値段を考えるとAliでProMiniを買った方が安くつきますが、ProMiniにはレギュレータをはじめ色々なものが最初から
実装されていて省電力ではないので、電池で駆動するときはこちらの方がいいかもしれません。
ATmega328の省電力モードを使った場合、乾電池3本でどの程度動くのか、どこにも記事がなさそうなので、調査してみたいと思います。



Arduinoを使っていると、何かの拍子にスケッチ書き込み時に、このようなエラーになることがあります。

avrdude: stk500_getsync(): not in sync: resp 0x00
avrdude: stk500_disable(): protocol error, expect 0x14, resp 0x51

これもブートローダーを再度書き込むことで解決します。
例えばProMiniのブートローダーを復活する場合の結線は以下のようになりますが、ほかのボードでも同じです。

Uno---------------------ProMini
5V----------------------VCC
GND---------------------GND
Digital Pin 11(MOSI)----MOSI
Digital Pin 12(MISO)----MISO
Digital Pin 13(SCK)-----SCK
Digital Pin 10(SS)------RST
 


手順はこちらで紹介さ れているとおりです。
- Arduino UNOにArduinoISPのサンプルスケッチを書き込む。
- ProMiniと結線をして、ツール→ボードでArduino Miniを選ぶ。
- ツール→書き込む装置でArduino as ISPを選ぶ。
- ツール→ブートローダを書き込む、
これで工場出荷時のブートローダーが復活します。
ブートローダーが復活したら、USB-シリアル変換モジュールを使って、ProMiniにスケッチを書き込む事ができます。



Arduino NanoにはOld BootLoaderが書き込まれている物が売られています。
以下の手順で通常のBootLoaderに変更することができます。
- ツール→ボードでArduino Nanoを選ぶ。
- Nano(通常BootLoaderの物)にArduinoISPのサンプルスケッチを書き込む。
- Nano(Old BootLoaderの物)と結線をする。
- ツール→書き込む装置でArduino as ISPを選ぶ。
- ツール→ブートローダを書き込む、
これでOld BootLoaderのNanoが通常のブートローダーになります。



続く...