Arduinoは搭載されているマイコンチップにブートローダー(小さなプログラムです)が書き込まれていることにより普段あまり意識することはありませんがUSB端子からのスケッチの書き込みやシリアルモニタなどが使えるようになっています。
マイコンチップに書き込まれているブートローダーの破損等によりArduinoが正常に動作しなくなることは稀にありますが、そのような場合ブートローダーを再度書き込む必要があります。
また自作Arduinoを作る場合に何も書き込まれていない生のマイコンチップを使う場合にもArduinoとして動かすにはブートローダーの書き込み作業が必要となってきます。
ブートローダーの書き込みにはAVRプログラマやライタと呼ばれる特殊な書き込み装置が必要になってきます。
USBaspといった安価で入手出来るAVRプログラマが1台あると便利です!
しかし、このようなAVRライタが無くてもArduinoが1台あればこれをAVRライタとして使うことも出来ます。
AVRライタとして機能させるArduinoを1台用意し、ブートローダーを書き込みたいArduinoに接続して書き込みを行うといった感じですね!
またAVRマイコンにはATmega328PやATmega2560といったArduinoで使われているマイコンチップ以外にもATtinyシリーズのマイコンチップなど多数ありますが、同様にArduinoをAVRライタとして機能させこれらマイコンチップにブートローダーやArduinoスケッチを書き込む際の書き込み装置として使うことも出来ます。
目次
ArduinoはAVRプログラマ(ライタ)として使うことも出来る!
ArduinoISPスケッチの書き込み
ArduinoをAVRライタとして機能させるための便利なスケッチはArduino IDEに標準で用意されています。
このスケッチをArduinoに書き込むことにより、ArduinoをAVRライタとして機能させることが出来るようになります。
ArduinoをAVRライタとして機能させるには「ArduinoISP」というスケッチを使います。
Arduino IDEの[ファイル]→[スケッチ例]→[11.ArduinoISP]の中にある[ArduinoISP]スケッチを開きます。
このスケッチを通常作業でArduinoに書き込めば、書き込まれたArduinoはAVRライタとして機能します。
Arduino UnoやNano/Mega/LeonardoといったArduinoボードを使うことが出来ます。
あとはこのArduinoを使って接続した他のArduinoにブートローダーを書き込んだり、ATtinyといったAVRマイコンチップの書き込み装置として使うことが出来ます。
Arduinoにブートローダーを書き込む
簡単にArduinoにブートローダーを書き込む方法を見ておきます。
ブートローダーが問題でPCに認識されないなどArduinoが正常に動作しなくなることは稀に起こりますが、ArduinoISPスケッチを書き込みAVRライタとして機能するArduinoを1台用意すればブートローダーの書き込みを行うことが出来ます。
接続にはSPI端子が使われます。
ArduinoではボードによってSPI端子(MOSI/MISO/SCK)が決まっています。
例えばArduino Unoでは、D11がMOSI/D12がMISO/D13がSCKとなっています。
またArduinoISPではリセットをかけるためのSS(Slave Select)端子はD10に割り当てられています。
AVRライタとして書き込みの際に使われる端子は、MOSI/MISO/SCK/SSの4本が使われます。
ちなみに他のArduinoボードのSPI端子はこのようになっています。
MOSI | MISO | SCK | |
Arduino Uno | D11 | D12 | D13 |
Arduino Nano | D11 | D12 | D13 |
Arduino Mega | D51 | D50 | D52 |
Arduino Leonardo | ICSP4 | ICSP1 | ICSP3 |
接続にはこの4本(Arduino UnoではD10~D13)の端子を使います。
接続はこれらSPI端子同士を接続するだけです。
例としてArduino UnoをAVRライタと機能させ、Arduino Nanoにブートローダーを書き込む際の接続はこのようになります。
対応するSPI端子同士を接続するだけですが、D10の接続だけ異なります。
書き込む際に書き込み側のArduinoを一旦リセットする必要があるのでこのような接続になります。
Arduino Uno(ライタとして機能) | Arduino Nano |
D11(MOSI) | D11(MOSI) |
D12(MISO) | D12(MISO) |
D13(SCK) | D13(SCK) |
D10(SS) | RESET |
5V | 5V |
GND | GND |
書き込む際の設定はこのようになります。
まずArduinoISPを書き込んだArduinoを書き込み装置とするので、[書き込み装置]は[Arduino as ISP]を選択します。
そして[シリアルポート]はPCに接続しているArduino Uno(書き込む側)を選択、ブートローダーを書き込む対象は今回Arduino Nanoなので[ボード]は[Arduino Nano]を選択します。
書き込む際の設定は以上です。
あとは[ブートローダを書き込む]を選択すると、Unoを経由してNanoにブートローダーの書き込みが行われます。
今回はArduino UnoをAVRライタとして機能させArduino Nanoに書き込みを行いましたが、Uno→UnoやNano→Unoといった組み合わせなどで使う事が出来ます。
当然ですがライタとして機能させる書き込み側のArduinoボードにはArduinoISPスケッチを書き込んでくださいね!
Arduinoのブートローダー書き込みに関してはこちらの記事も参考にして下さい!
他のAVRマイコンに書き込んでみる
ArduinoISPスケッチを書き込むことにより、ArduinoボードをAVRライタとして機能させることが出来ました。
AVRライタなので他のAVRマイコンに書き込む際に使うことも出来ます。
例えばArduinoにはATmel社のAVRマイコンが使われていますが、同じATmelのAVRマイコンでATtinyという人気のマイコンチップがあります。
このようなAVRマイコンにブートローダーやスケッチを書き込む際のライタとして使うことも出来ます。
詳しくはこちらの記事を参考にして下さい!
書き込みシールドがあると便利!
Arduinoはこのように簡単にAVRライタとして使うことが出来ます。
上記のような接続が面倒な場合、AVR ISP書き込みシールドなども販売されています。
Arduinoはシールドを接続するだけで機能を拡張する事が出来るのも便利ですよね!
こちらは自作したATtiny用の書き込みシールドですが、このようなシールドはユニバーサル基板などを使い簡単に作ることも出来ます。
自作する際は、「書き込み中」や「書き込みエラー」が発生したなどの状態が分かるインジケーターランプを付けておくと便利だと思います。
ArduinoISPスケッチのコメント欄を見ると、D7~D9にインジケーターLEDを動作させるための端子が割り振られているのが分かります。
- D7端子(Programming) 書き込み時に点滅
- D8端子(Error) 書き込みエラーが発生した場合に点灯
- D9端子(Heartbeat) ArduinoISPが正常に動作している時にゆっくりと点滅
自作する際は単に上記端子にLEDを接続するだけなので付けておくと便利です!
こちらはATtinyシリーズのAVRマイコンチップの書き込みシールドを自作したものですが、参考になればと思います。
この投稿をInstagramで見る
最後に!
ArduinoをAVRライタとして使う方法でした!
Arduinoへのブートローダーの書き込みやAVRマイコンを使った開発ではAVRライタが必要となってきますが、Arduinoボードが1台あればAVRライタとして使うことも出来るので便利ですね!
コメントを残す