Arduino はUSB シリアル接続で、簡単にプログラムを書き込むことが出来ます。
その他に、ICSP (In Circuit Serial Programming) 端子で書き込む方法があります。
この方法は、普通の使い方をする上では、全く必要ありません。
これまでこの端子は、気になりつつも使わずにいました。
前回、変則的ながら使う事になったICSP 端子の、本来の使い方を調べてみました。
ICSP を使ったプログラマは市販品を購入することも、自作することもできます。
今回は、「Arduino を使ったISP プログラマ(書き込み器)」というものがあるので、使ってみます。(ISP (In-System Programmer) とICSP は同じような意味だと思います。)
Examples の中にある「ArduinoISP」というプログラムを書き込みます。
注意:このプログラムはArduino Uno には対応していないそうです。
このプログラムを書き込んだArduino (2009: Duemilanove 以前) をプログラマとして使い、他のArduino、あるいは生のAVR にプログラムを書き込む事が出来ます。
Bootloader を書くこともできるので、2台目、3台目のArduino を自作する際に活用できます。
実際やってみると、例によって罠が有りました。
error: avrdude: stk500_getsync(): not in sync: resp=0x15
Mac 環境では、オートリセットが邪魔をするそうです。
対処法がこちらで解説されていました。
上記サイトを参考に、ISP側の 5V-Reset 間に 110Ωの抵抗を挿入して対処しました。
(上記サイトの「ATmega168 とATmega168p の問題」は、ATmega328p を使用する場合は関係ありませんでした。
配線を簡単にするため、専用のケーブルを作成しました。
これで、生のAVR にブートローダーやプログラムを書き込む事が出来ます。
Arduino ISP を使ったブートローダーの書き込み手順
(追記 2012.1.19)Arduino IDE 1.0 では手順が簡単になりました。
1) Arduino (Duemilanove以前) に通常の手順で「ArduinoISP」 を書き込む
2) ISP 仕様のArduino と、新しくプログラムを書き込むArduino を接続する
3) Tools > Serial Port は1) のArduino を接続したポートを選択する。
4) Tools > Board は新しくプログラムを書き込むArduino に合わせる。
ATmega328p に Uno 相当のブートローダー(Optiboot) を書く場合は "Arduino Uno" を、
Duemilanove 相当のブートローダーを書く場合は "Arduino Duemilanove or Nano w/ ATmega328" を選択。
5) Tools > Burn Bootloader > w/ Arduino as ISP を選択する(ブートローダーの書き込み開始)
Arduino ISP を使ったプログラム書き込み
接続方法は上記手順と同じ、ただし、書き込み方法を設定ファイルで指示する必要があります。
preferences.txt にupload.using=arduinoisp を書き込む方法と、board.txt に同様の記述をする方法があります。
前者は、今後の書き込みを全てISP で行うので、後者をお勧めします。
設定ファイルの場所や、記入方法は、こちらを参考に。
*******
「簡単・お手軽なArduino」からちょっと離れてしまいますが、秋月の基板を使ってArduino を増産したり、ATmega8u2 をいじる場合に、ICSP 経由の書き込みは便利ではないでしょうか。
0 件のコメント:
コメントを投稿