Arduino用ブートローダ/スケッチライタの製作(7)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) (9) 次のページへ
2014年04月21日 公開
2015年06月24日 USBシリアル変換器の出力電圧に関する注意書きを追加。
2015年10月15日 ヒューズビットを書き込む手順を追加。
2015年10月20日 ATmega88/88V/168Pに関して加筆。

6-5.ブートローダなしでATmega168/328Pにスケッチを書き込む方法

前々回前回は、ブートローダを使って、ATmega168/328Pにスケッチを書き込む方法を説明しました。今回は、ブートローダを使わずに、直接スケッチを書き込む方法を説明します。

具体的な方法の説明に入る前に、ブートローダを使ってスケッチを書き込む方法と、ブートローダなしでスケッチを書き込む方法の長所・短所を、表を使って簡単に説明します。

表3、スケッチの書き込みにブートローダを使う方法とブートローダを使わない方法の比較

ブートローダを使う方法 ブートローダを使わない方法
長所
  • 安価で小型なUSBシリアル変換器をターゲット基板に差し込むことで、スケッチを簡単に書き換えられる。
  • Arduino IDE上でのスケッチの書き換えの操作が、本家のArduinoと同じになる。
  • ブートローダによるスケッチの転送速度は、ブートローダを使わないICSPによるスケッチの転送速度より、通常は高速なため、大きなスケッチを書き換える場合は、ブートローダを使うほうが高速になる。
  • スケッチの起動が高速。
短所
  • マイコンのリセット時に、スケッチがシリアルポートから書き込まれてこないかを、毎回ブートローダがチェックするので、スケッチの起動が遅くなる。
  • スケッチの書き換えには、高価で大型のICSPライタ(例えばこの記事で紹介しているArduino用ブートローダ/スケッチライタ)が必要。

要約すると、Arduino互換マイコンをターゲット基板に組み込んだ後に、スケッチを書き換える可能性があるなら、おおむねブートローダを使う方が便利です。逆に、スケッチは基板製造時に書き込めば十分で、スケッチを後から書き換える可能性がない用途には、おおむねブートローダを使わない方法が便利です。

なお、ブートローダを使うスケッチの書き込み方の原理的な説明は、Arduinoのブートローダって何?(1)の記事に、またブートローダを使わないスケッチの書き込み方の原理的な説明は、ブートローダを使わずにArduinoのスケッチをATmega328Pに書き込むの記事に載っていますので、そちらもご覧ください。

ブートローダを使わずにATmega168/328Pにスケッチを書き込むには、以下の手順に従ってください。

【手順1】 CN1にUSBシリアル変換器が接続されていない事と、CN2にジャンパピンが付いていない事を確認する
写真34(再掲)、CN1とCN2に何もつながっていない事を確認
↑ 画像をクリックすると拡大
写真34(再掲)、CN1とCN2に何もつながっていない事を確認

USBシリアル変換器から電源が供給されている状態でジャンパピンの設定を変えると、電源がショートする事があり、故障の原因になります。過電流保護用のポリスイッチを付けているので、簡単には故障しない設計にはなっていますが、保護回路を過信する事は禁物です。

【手順2】 必要ならCN4にジャンパピンを付ける
写真35(再掲)、CN4へのジャンパピンの取り付け
↑ 画像をクリックすると拡大
写真35(再掲)、CN4へのジャンパピンの取り付け

CN4(ENABLE BUZZER)にジャンパピンを付けると、スケッチの書き込み時に、書き込みの様子を音でモニターできます。音が出るとうるさい場合は、CN4にはジャンパピンを付けないでください。

【手順3】 CN5にジャンパピンを6個接続し、CN6とCN7にはジャンパピンが付いていないことを確認する。
写真36(再掲)、CN5にジャンパピンを6個接続
↑ 画像をクリックすると拡大
写真36(再掲)、CN5にジャンパピンを6個接続

注:CN5~CN7は、マイコンの種類の選択用のピンヘッダです。ATmega88/88V/168/168P/328Pの場合は、CN5のみに 6個のジャンパピンを付けます。ATtiny44/84の場合は、CN6のみに6個のジャンパピンを付けます。ATtiny45/85の場合は、CN7の みに6個のジャンパピンを付けます。

【手順4】 USBシリアル変換器をCN1に接続し、さらにUSBケーブルでパソコンに接続する。
写真37(再掲)、USBシリアル変換器とUSBケーブルを接続
↑ 画像をクリックすると拡大
写真37(再掲)、USBシリアル変換器とUSBケーブルを接続

使用するUSBシリアル変換器は、5V出力の物をお勧めします。3.3V出力の物でも使えますが、制限事項があります。上の写真に写っているのは、5V出力と3.3V出力を切り替えられる物です。

電源の入ったパソコンにUSBケーブルを接続すると、LED1(POWER)が点灯します。また、LED6(HEARTBEAT)が周期的に明るくなっ たり暗くなったりします。このようにLED6が周期的に明暗を繰り返すのはArduinoISPのファームウェアが正常に動作している印です。

【手順5】 SW1をArduinoISP側に切り替える
写真38(再掲)、SW1をArduinoISP側に切り替える
↑ 画像をクリックすると拡大
写真38(再掲)、SW1をArduinoISP側に切り替える

注:SW1(およびSW2、CN4)は電源が入っているときでも操作して構いません。ただし、ブートローダやスケッチの書き込みの最中には操作しないでください。

【手順6】 Arduino IDEを起動し、マイコンに書き込みたいスケッチを開く

ここではバージョン1.0.5のArduino IDEを使っています。確認はしていませんが、バージョン1.0.1~1.0.4のArduino IDEでも問題なく使えるはずです。

また、下の図では例としてArduino IDEに標準で付いているBlink(D13に接続されているLEDを点滅させるスケッチ)を読み込んでいますが、実際には皆さんがマイコンに書き込みたいスケッチのファイルを開いてください。

図22(再掲)、Blinkスケッチを開く
図22(再掲)、Blinkスケッチを開く
図23(再掲)、Blinkスケッチを開いた後の様子
図23(再掲)、Blinkスケッチを開いた後の様子
【手順7】 Arduino IDEを起動し、ツール→シリアルポートメニューでUSBシリアル変換器のポート番号(COM番号)を指定する

下の図ではCOM30を選んでいますが、皆さんの環境に合わせて、COM番号を選んでください

図29、シリアルポートを選ぶ
図29、シリアルポートを選ぶ
【手順8】 ツール→マイコンボードメニューでArduinoの種類を選ぶ
図30、Arduinoの種類を選ぶ
図30、Arduinoの種類を選ぶ

上の図ではArduino Unoを選んでいますが、実際にはマイコンの種類に応じて、Arduinoの種類を選択する必要があります。

ATmega168 ・・・ Arduino Diecimila or Duemilanove w/ ATmega168、Arduino Nano w/ATmega168、Arduino Pro or Pro Mini (5V, 16MHz) w/ ATmega168、Arduino Pro or Pro Mini (3.3V, 8MHz) w/ ATmega168など
ATmega328P・・・ Arduino Uno、Arduino Duemilanove w/ ATmega328、Ardino Nono w/ATmega328、Arduino Pro or Pro Mini (5V, 16MHz) w/ ATmega328、Arduino Pro or Pro Mini (3.3V, 8MHz) w/ ATmega328など

もし、ZIFソケットに装着したマイコンと、メニューで選択したArduinoの種類が対応していなければ、スケッチの書き込み時にエラーがでます。

【手順9】 ツール→書込装置メニューでArduino as ISPを選ぶ
図31、Arduino as ISPを選ぶ
図31、Arduino as ISPを選ぶ
【手順10】 CN3のZIFソケットにスケッチを書きこみたいATmega168/328Pを挿入し、レバーで固定する
写真39(再掲)、ATmega168/328Pの挿入
↑ 画像をクリックすると拡大
写真39(再掲)、ATmega168/328Pの挿入

上の写真を参考にして、ZIFソケット左上のレバーを立てた状態で、ATmega168またはATmega328Pを挿入してください。この際、マイコンの向きを反対にしないように注意してください。

マイコンがZIFソケットに挿入できたら、ZIFソケットのレバーを倒して、マイコンを固定してください。

写真40(再掲)、ATmega168/328Pの固定
↑ 画像をクリックすると拡大
写真40(再掲)、ATmega168/328Pの固定
【手順11】ツール→ブートローダを書き込むメニューを選んで、ヒューズビットを書き込む

スケッチを書き込むに先立って、ヒューズビット(マイコンの動作モードを設定する情報)をATmega168/328Pに書き込んでおく必要があります。ツール→ブートローダを書き込むメニューを選んで、ヒューズビットを書き込みます。

図32、ATmega168/328Pにヒューズビットを書き込む
図32、ATmega168/328Pにヒューズビットを書き込む

注1:この時、ヒューズビットと同時に、ブートローダも書き込まれますが、手順12でスケッチを書き込むのに、ブートローダは使いません。またスケッチを書き込む際に、ブートローダは消去されてしまいます。

注2:以前にヒューズビットを書き込んだ事のあるATmegae168/328Pの場合は、この手順をスキップする事ができます。

【手順12】 ファイル→書込装置を使って書き込むメニューを選んで、スケッチを書き込む
図33、書込装置を使って書き込むを選択
図33、書込装置を使って書き込むを選択

書込装置を使って書き込むメニューを選択すると、コンパイル後にスケッチの書き込みが始まります。

スケッチの書き込み中は、LED3(PROGRAMMING)が点灯します。また、LED2(RX)とLED4(TX)は、USBシリアル変換器との情報のやり取りに合わせて点滅します。

手順2でCN4(ENABLE BUZZER)にジャンパピンをつけた場合は、スケッチの書き込みの最中に音が出ます。

写真49、スケッチ書き込み中の様子
↑ 画像をクリックすると拡大
写真49、スケッチ書き込み中の様子

スケッチが無事に書き込めると、LED2、LED3、LED4は消灯し、Arduino IDEの画面に「マイコンボードへの書き込みが完了しました。」と表示されます。CN4にジャンパピンをつけている場合は、音も止まります。

写真42(再掲)、スケッチ書き込み終了時の様子
↑ 画像をクリックすると拡大
写真42(再掲)、スケッチ書き込み終了時の様子
図34、書き込み完了時のメッセージ
図34、書き込み完了時のメッセージ

スケッチの書き込みに失敗した場合は、LED5(ERROR)が点灯します。(エラーの出方によっては、点灯しないこともあります) また、Arduino IDEの画面にはエラーメッセージが表示されます。

写真43(再掲)、ERROR LEDの点灯
↑ 画像をクリックすると拡大
写真43(再掲)、ERROR LEDの点灯
図21(再掲)、エラーメッセージ
図21(再掲)、エラーメッセージ
【手順13】 ZIFソケットのレバーを起こして、マイコンを抜き取る

以上で、スケッチの書き込みが終わりました。続けて同じ型番のマイコンに、同じスケッチを書き込む場合は、手順10以降を繰り返してください。

スケッチを書き込んだマイコンを動作させる方法については、前のページのスケッチを書き込んだATmega168/328Pを動かしてみるの項目を読んでください。

広告

6-6.ATmega88/88V/168PにArduinoのブートローダを書き込む方法

ATmega88/88V/168P/328PにArduinoのブートローダを書き込む(1)ATmega88/88V/168P/328PにArduinoのブートローダを書き込む(2)の記事に詳しい説明が載っていますので、そちらをご覧ください。

6-7.ブートローダ書き込み済みのATmega88/88V/168Pにスケッチを書きこむ方法

ATmega88/88V/168P/328PにArduinoのブートローダを書き込む(3)の記事に詳しい説明が載っていますので、そちらをご覧ください。

6-8.USBシリアル変換器の出力電圧に関する注意点

USBシリアル変換器には、5V出力の物と、3.3V出力の物があります。出力電圧の選択を間違うと、うまくブートローダやスケッチを書き込む事ができない場合があります。結論からいうと、ブートローダ/スケッチライタの基板上のZIFソケットを使って書き込む限り、5V出力のUSBシリアル変換器を使えば、必ずうまく書き込めるのですが、細かい説明をすると、以下のようになります。

6-8-1.原則

ATmega168/328Pのブートローダやスケッチを書き込む際、水晶振動子を切り替えるSW2が16M側に設定されている場合は、必ず5V出力のUSBシリアル変換器をご利用ください。これは、3.3Vの電源電圧では、ATmega168/328Pが10MHzまでしか動作する事が保証されていないからです。

写真50、水晶振動子の周波数設定とUSBシリアル変換器の出力電圧
↑ 画像をクリックすると拡大
写真50、水晶振動子の周波数設定とUSBシリアル変換器の出力電圧

16MHzのクロック周波数に設定し、3.3V出力のUSBシリアル変換器を使っても書き込みが成功する事がありますが、全ての個体で書き込みできる事が保証されているわけではありません。

逆に、8MHzのクロック周波数に設定し、5V出力のUSBシリアル変換器を使う事には問題はありません。

6-8-2.ブートローダ書き込みの場合やブートローダを使わずにスケッチを書き込む場合

3.3V出力のUSBシリアル変換器しかなくても、SW2側を8Mに設定すれば、書き込む事ができます。Arduino Unoなどの16MHz動作するArduinoのブートローダやスケッチを書き込む場合でも、SW2を8MHzに設定してかまいません。ブートローダ書き込み時や、ブートローダを使用せずに直接スケッチを書き込んでいる時は、1MHz以上のクロックでATmega168/328Pが動作していれば、シリアル通信の通信速度を、ATmega168/328P側で自動調整する仕組みになっているからです。(その代償として、高速な書き込みができなくなっています)

6-8-3.ブートローダを利用してスケッチを書き込む場合

Arduino Unoなどの16MHz動作するArduino用のスケッチを、ブートローダを利用して書き込む場合は、5VのUSBシリアル変換器を利用してください。これは、Arduinoのブートローダが、指定されたクロック周波数でしか正常に動作せず、16MHzのクロックに設定すると、3.3Vの電源電圧では、ATmega168/328Pが10MHz超で動作する事が保証されていないからです。(16MHzのクロックでしかスケッチを書き込めない分、高速な書き込みができます)

6-8-4.実用的なUSBシリアル変換器の出力電圧の決め方

ここまでの説明が理解しにくい場合は、次の2つの内、どちらかの方法でUSBシリアルの出力電圧を設定すれば簡単です。(お勧めは後者)

  1. 書き込もうとしているブートローダやスケッチのArduinoの電源電圧と、USBシリアル変換器の出力電圧を同じにする

    例えば、Arduino Uno用のブートローダやスケッチを書き込む場合は、5V出力のUSBシリアル変換器を使い、Arduino Pro 3.3V 8MHz用のブートローダやスケッチを書き込む場合は、3.3V出力のUSBシリアル変換器を使います。

  2. ZIFソケットを使って書き込む場合は、必ず5V出力のUSBシリアル変換器を使う

    ブートローダ/スケッチライタ基板上のZIFソケットを使う場合は、5V出力のUSBシリアル変換器を使えば、必ずうまく書き込めます。(ただし、ICSP端子を使って、外部のターゲット基板上のATmega168/328Pに書き込む場合は、ターゲット基板の電源電圧に、USBシリアル変換器の出力電圧を合わせる必要がある)

これで、ATmega168/328Pに、ブートローダやスケッチを書き込む方法の説明は終わりました。

次のページからは、よりピン数の少ない、ATtiny44/84/45/85にスケッチを書き込む方法の説明を始めます。

目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) (9) 次のページへ

このページで使われている用語の解説

関連ページ

関連製品

Arduino用ブートローダ/スケッチライタキット 商品名 Arduino用ブートローダ/スケッチライタキット
税抜き小売価格 3000円
販売店 スイッチサイエンス
サポートページ
Arduino用ブートローダ/スケッチライタ(完成品) 商品名 Arduino用ブートローダ/スケッチライタ(完成品)
税抜き小売価格 3600円
販売店 スイッチサイエンス マルツ
サポートページ
Arduino Uno用ブートローダスケッチライタシールドキット 商品名 Arduino Uno用ブートローダスケッチライタシールドキット
税抜き小売価格 1440円
販売店 スイッチサイエンス
サポートページ
Arduino 電子工作
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。