Arduinoで作った回路の小型化(Arduino互換機の製作)(7)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (2) (3) (4) (5) (6) (7) (8) (9) (10) 次のページへ
2017年02月19日 公開。
2017年03月31日 AVRマイコンICSP用6Pケーブルサポートページへのリンクを追加。

9.ICSP書き込みにより、マイコンを取り外さずにスケッチを書き込む

今まで説明してきたスケッチの書き込み方法だと、スケッチを書き込む際にマイコンを基板から外し、Arduino Uno用ブートローダライタシールドArduino用ブートローダ/スケッチライタのZIFソケットに装着する必要がありました。既にスケッチの開発が終わっている場合は、これでもいいのですが、スケッチの開発の際には、スケッチを変更するたびにマイコンを取り外ししないといけないため、手間がかかります。

そこで、Arduino互換機にICSP端子と呼ばれる、スケッチを書き込むための端子を設け、ここにケーブルを接続する事で、スケッチを書き込む方法を説明します。ICSPとはIn-Circuit Serial Programmingの略で、「マイコンを回路の中に接続したまま、シリアル信号によりプログラムを書き込む事」を意味します。ICSP端子を使うと、マイコンの取り外しもなくなりますし、ICSP端子に接続したケーブルは、スケッチの開発中は、付けたままでいいので、開発が楽になります。

9-1.ICSP端子によるスケッチの書き込みの概要

ICSP端子は、2.54mmピッチの2列×3ピンのヘッダです。次の写真に、後ほど作る電子サイコロ基板のICSP端子を示します。

写真30、ICSP端子
↑ 画像をクリックすると拡大
写真30、ICSP端子

また、Arduino Uno用ブートローダライタシールドやArduino用ブートローダ/スケッチライタにも、ICSP端子があります。

写真31、Arduino Uno用ブートローダライタシールドのICSP端子
↑ 画像をクリックすると拡大
写真31、Arduino Uno用ブートローダライタシールドのICSP端子
写真32、Arduino用ブートローダ/スケッチライタのICSP端子
↑ 画像をクリックすると拡大
写真32、Arduino用ブートローダ/スケッチライタのICSP端子

スケッチを書き込む際には、次の様に、Arduino Uno用ブートローダライタシールドまたはArduino用ブートローダ/スケッチライタのICSP端子と、ターゲット基板(スケッチを書き込みたいマイコンが載っている基板。下の写真では電子サイコロ基板)をケーブルで結びます。

写真33、Arduino Uno用ブートローダライタシールドとターゲット基板の結線
↑ 画像をクリックすると拡大
写真33、Arduino Uno用ブートローダライタシールドとターゲット基板の結線
写真34、Arduino用ブートローダ/スケッチライタとターゲット基板の結線
↑ 画像をクリックすると拡大
写真34、Arduino用ブートローダ/スケッチライタとターゲット基板の結線

ICSP端子には電源ピンも含まれており、Arduino Uno用ブートローダライタシールドまたはArduino用ブートローダ/スケッチライタから電源を供給する設定にする事も可能です。写真33や写真34では、電子サイコロ基板の電源端子には電源を接続していないのに、LEDが点灯している様子が分かるでしょう。

この様にすると、開発中はターゲット基板に電源回路をICSP端子とは別に用意する必要はありませんし、時間のかかるマイコンの抜き差しも不要になります。ICSPケーブルも、開発が終わるまでは、接続したままでOKです。

広告

9-2.ICSP端子のあるArduino互換機の作り方

それでは、ICSP端子のあるArduino互換機の作り方を説明します。

図48は、ICSP端子のあるArduino互換機の基本回路の回路図です。

図48、ICSP端子のあるArduino互換機の基本回路
↑ 画像をクリックするとPDFファイルで表示
図48、ICSP端子のあるArduino互換機の基本回路

ご覧の様に、この回路は、図7のArduino互換機の基本回路に、CN1のICSP端子を追加した回路となっています。

なお、図48の中でOPTIONALと書いてある部分の水晶発振子と2つの22pFのコンデンサは、マイコン内蔵のCR発振器をクロックとして使う場合は、不要です。

また、マイコンは、必要なメモリ容量に応じてATmega328P、ATmega168PまたはATmega88Vの中からお選びください。

図48の中で、ICSP端子の接続だけを抜き出したのが図49になります。

図49、ICSP端子の接続
↑ 画像をクリックすると拡大
図49、ICSP端子の接続

この図から分かる様に、ICSP端子を搭載すると、マイコンの17~19番ピン(Arduinoの信号名でいうとD11~D13)を使用します。そのため、マイコンのI/Oピンが十分に足りている場合は、17~19番ピンは使わずに、ICSP端子専用にしてください。

I/Oピンの数が足らず、どうしても17~19番ピンを使用したい場合は、図50に示す様に、1kΩの抵抗を介して回路を17~19番ピンに接続してください。

図50、17~19番ピンを使用する場合の接続
↑ 画像をクリックすると拡大
図50、17~19番ピンを使用する場合の接続

17~19番ピンを入力ピンとして使う場合は、追加した1kΩの抵抗は回路動作に影響を与える事は通常ありませんが、出力ピンとして使う場合は、1kΩが入ると、その先の回路に供給する電流が不足して、誤作動を起こす可能性があります。その様な場合は、図51に示す様に1kΩと17~19番ピンを使用する回路の間に、74HC244などのバッファを追加してください。

図51、バッファの追加
↑ 画像をクリックすると拡大
図51、バッファの追加

この例では19番について書きましたが、17番ピンや18番ピンの場合も、この図と同様に74HC244などのバッファを追加します。

9-3.ICSP端子を備えた電子サイコロの製作

図48の回路を基に、電子サイコロを作ると図52の様な回路になります。電子サイコロの場合は、I/Oピンの余裕が十分にありますので、マイコンの17~19番ピンは、ICSP端子専用にしました。

図52、ICSP端子を備えた電子サイコロの回路図
↑ 画像をクリックするとPDFファイルで表示
図52、ICSP端子を備えた電子サイコロの回路図

この回路図に従って組み立てた基板の写真を写真35と写真36に示します。なお、水晶振動子は使いませんでした。またマイコンはATmega328Pを選びました。

写真35、ICSP端子を備えた電子サイコロ(表)
↑ 画像をクリックすると拡大
写真35、ICSP端子を備えた電子サイコロ(表)
写真36、ICSP端子を備えた電子サイコロ(裏)
↑ 画像をクリックすると拡大
写真36、ICSP端子を備えた電子サイコロ(裏)

9-4.ICSP端子に接続するケーブルについて

ICSP端子に接続するケーブル(ICSPケーブル)は、2.54mmピッチ、2列×3ピンのメスコネクタ2つを、図53に示す様に、同じ番号のピン同士を接続する様にフラットケーブルで結線します。メスコネクタは、MIL規格で規格化されています。

図53、ICSPケーブルの結線
↑ 画像をクリックすると拡大
図53、ICSPケーブルの結線

ICSPケーブルの写真を写真37に示します。

写真37、ICSPケーブル
↑ 画像をクリックすると拡大
写真37、ICSPケーブル

このケーブルの購入については、以下のリンクをご覧ください。

AVRマイコンICSP用6Pケーブル 商品名 AVRマイコンICSP用6Pケーブル
税抜き小売価格 190円
販売店 スイッチサイエンス
サポートページ

9-5.ICSP端子経由でスケッチを書き込む方法

ICSP端子を備えたArduino互換機に、そのICSP端子経由でスケッチを書き込む方法について説明します。

Arduino Uno用ブートローダライタシールドを使う方法と、Arduino用ブートローダ/スケッチライタのICSP端子を使う方法を順に説明します。

なお、Arduino Uno用ブートローダライタシールドを使ってスケッチを書き込む場合は、ターゲット基板に5Vの電源電圧が供給されるので、注意が必要です。Arduino用ブートローダ/スケッチライタを使う場合は、使用するUSBシリアル変換器により、電源電圧を5Vと3.3Vで選択できます。

9-5-1.Arduino Uno用ブートローダライタシールドを使う場合のスケッチの書き込み

Arduino Uno用ブートローダライタシールドを使う場合のスケッチの書き込み方法について説明します。

Arduino Uno用ブートローダスケッチライタシールドキット 商品名 Arduino Uno用ブートローダスケッチライタシールドキット
税抜き小売価格 1440円
販売店 スイッチサイエンス
サポートページ

スケッチの書き込みにはATmega88/88V/168P/328Pサポートファイルが必要です。あらかじめArduino IDEにインストールしておいてください。インストール方法はATmega88/88V/168P/328PにArduinoのブートローダを書き込むの記事に説明があります。

次の手順に従って、スケッチを書き込んでください。

【手順1】ブートローダライタシールドをArduino Unoに装着し、CN3(KILL RESETと書いてあるピンヘッダ)からジャンパピンを取り除き、CN2(SUPPLY TARGETと書いてあるピンヘッダ)にジャンパピンを付ける
写真38、Arduino Unoにブートローダライタシールドを装着し、CN3のジャンパピンを取り除き、CN2にジャンパピンを付ける
↑ 画像をクリックすると拡大
写真38、Arduino Unoにブートローダライタシールドを装着し、CN3のジャンパピンを取り除き、CN2にジャンパピンを付ける
【手順2】ブートローダライタシールドとターゲット基板をICSPケーブルで接続する

写真39の様に、ブートローダライタシールドとターゲット基板の双方のICSP端子を、ICSPケーブルで接続します。

写真39、ブートローダライタシールドとターゲット基板の接続
↑ 画像をクリックすると拡大
写真39、ブートローダライタシールドとターゲット基板の接続

ブートローダライタシールドのCN1がICSP端子です。ICSPケーブルの接続の際には、ブートローダライタシールドのICSP端子の1番ピンが、ターゲット基板のICSP端子の1番ピンにつながる様に、ケーブルを接続してください。

写真40、ブートローダライタシールドのICSP端子に接続したケーブル
↑ 画像をクリックすると拡大
写真40、ブートローダライタシールドのICSP端子に接続したケーブル

茶色の線が1番ピン側になる様にコネクタを接続している事に注目してください。

写真41、ターゲット基板のICSP端子に接続したケーブル
↑ 画像をクリックすると拡大
写真41、ターゲット基板のICSP端子に接続したケーブル

茶色の線が1番ピン側になる様にコネクタを接続している事に注目してください。2つのICSP端子の1番ピン同士をつなぐようにケーブルを接続しています。コネクタを逆向きに接続すると、機器の故障の原因になりますので、注意が必要です。

【手順3】Arduino UnoとパソコンをUSBケーブルで接続する
【手順4】Arduino IDEを起動し、"ファイル→スケッチの例"メニューからArduinoISPのファームウェア(スケッチ)を開く
図54、ArduinoISPのスケッチを開く
図54、ArduinoISPのスケッチを開く
【手順5】"ツール→マイコンボード"メニュー(Arduino IDE 1.0.Xの場合)でArduino Unoを選択する

Arduino IDE 1.0.Xの場合は、ツール→マイコンボードメニューで、Arduino Unoを選択します。

図55、Arduino Unoを選択する(Arduino IDE 1.0.Xの場合)
図55、Arduino Unoを選択する(Arduino IDE 1.0.Xの場合)

Arduino IDE 1.6.X、1.7.X、1.8.Xの場合は、ツール→ボードメニューで、Arduino Uno(またはArduino/Genuino Uno)を選択します。

図56、Arduino Unoを選択する(Arduino IDE 1.6.X、1.7.X、または1.8.Xの場合)
図56、Arduino Unoを選択する(Arduino IDE 1.6.X、1.7.X、または1.8.Xの場合)
【手順6】ポート番号(COM番号)を指定する

ツール→シリアルポートメニュー(Arduino IDEのバージョンによってはツール→ポートメニュー)でポート番号を指定します。

図57、ポート番号を指定する
図57、ポート番号を指定する

注:この例ではCOM6を選んでいますが、実際には自分の環境に合わせてポート番号を指定してください。

【手順7】Arduino UnoにArduinoISPのスケッチを書き込む

図58の様に、右矢印ボタンをクリックして、ArduinoISPのスケッチをArduino Unoに書き込みます。

図58、ArduinoISPのスケッチを書き込む
図58、ArduinoISPのスケッチを書き込む

ArduinoISPのスケッチが正常に書き込めると、HeartbeatのLED(LED2)が明るくなったり暗くなったりを繰り返します。

写真42、Heartbeat LEDの点滅
↑ 画像をクリックすると拡大
写真42、Heartbeat LEDの点滅
【手順8】CN3にジャンパピンを装着する
写真43、CN3にジャンパピンを装着する
↑ 画像をクリックすると拡大
写真43、CN3にジャンパピンを装着する
【手順9】 ツール→書込装置メニューでArduino as ISPを選択する
図59、Arduino as ISPを選択
図59、Arduino as ISPを選択
【手順10】使用するマイコンとクロックを選択する

Arduino IDE 1.0.Xの場合は、ツール→マイコンボードメニューで、マイコンの種類とクロックの種類のペアを選択します。

図60、マイコンの種類とクロックの種類を選択(Arduino IDE 1.0.Xの場合)
図60、マイコンの種類とクロックの種類を選択(Arduino IDE 1.0.Xの場合)

注:この例では"ATmega328P(8MHz/INT OSC)"を選択していますが、実際には自分のターゲット基板で使うマイコンやクロックを選択してください。なお、マイコンの種類の表記については表3を、クロックの表記については表4を参考にしてください。

Arduino IDE 1.6.X、1.7.X、または1.8.Xの場合は、まず、ツール→ボードメニューで使用するマイコンを選び(図56参照)、次にツール→Clockメニューでクロックを選んでください(図57参照)。

図61、マイコンを選択(Arduino IDE 1.6.X、1.7.X、または1.8.Xの場合)
図61、マイコンを選択(Arduino IDE 1.6.X、1.7.X、または1.8.Xの場合)

注:この例では"ATmega328P"を選択していますが、実際には自分の使うマイコンを、表3を参考に選択してください。

図62、クロックを選択(Arduino IDE 1.6.X、1.7.X、または1.8.Xの場合)
図62、クロックを選択(Arduino IDE 1.6.X、1.7.X、または1.8.Xの場合)

注:この例では"8MHz/X'tal"を選択していますが、実際には自分の使うクロックを、表4を参考に選択してください。

【手順11】"ツール→ブートローダを書き込む"メニューを選び、ヒューズビットを書き込む

ツール→ブートローダを書きこむメニューを選び、ヒューズビット(マイコンの動作モードを決める情報)を書き込みます。

図63、"ツール→ブートローダを書き込む"メニューを選択
図63、"ツール→ブートローダを書き込む"メニューを選択

注:この際、ヒューズビットと一緒にブートローダも書き込まれますが、後でスケッチを書き込むときに、ブートローダはスケッチで上書きされます。

ヒューズビットの書き込み中は、ProgrammingのLED(LED4)が点灯します。

写真44、Programming LEDの点灯
↑ 画像をクリックすると拡大
写真44、Programming LEDの点灯

しばらくすると、ヒューズビットが書き込めるはずです。

図64、書き込み完了メッセージ
図64、書き込み完了メッセージ

ヒューズビットの書き込みが終わったら、ProgrammingのLEDは消えます。

写真45、Programming LEDの消灯
↑ 画像をクリックすると拡大
写真45、Programming LEDの消灯

もし、ヒューズビットの書き込みに失敗すると、ErrorのLED(LED3)が点灯して書き込みが中断します。その場合は、正しい手順で書き込んでいるか再確認の上、もう一度ヒューズビットを書き込んでください。

写真46、Error LEDの点灯
↑ 画像をクリックすると拡大
写真46、Error LEDの点灯

注:エラーの発生の状況によっては、ErrorのLEDが点灯しない事もあります。必ず画面のメッセージを確認してください。

【手順12】書き込みたいスケッチを開く

書き込みたいスケッチを開きます。

参考:電子サイコロのスケッチを書き込む場合は、リスト1(水晶振動子を使う場合)またはリスト2(内蔵CR発振器を使う場合)を開いてください。

図65、書き込みたいスケッチを開く
図65、書き込みたいスケッチを開く
【手順13】スケッチを書き込む

ファイル→書込装置を使って書き込むメニュー(Arduino IDEのバージョンによってはスケッチ→書込装置を使って書き込むメニュー)を選ぶと、スケッチを書き込めます。

図66、スケッチを書き込む
図66、スケッチを書き込む

スケッチの書き込み中は、ヒューズビットの書き込みの際と同様に、ProgrammingのLEDが点灯します。

スケッチが書き込み終わると、ProgrammingのLEDは消灯し、次の様なメッセージが表示されます。

図67、書き込み完了メッセージ
図67、書き込み完了メッセージ

以上で、スケッチの書き込みは終了し、書き込んだスケッチがターゲット基板上で動作し始めます。

スケッチを修正し、書き込みなおすには、手順12以降をもう一度実行してください。

注:ターゲット基板には、ヒューズビットは一度書き込めばいいので、2回目以降のスケッチの書き込みでは、ヒューズビットを書き込む必要はありません。

スケッチの開発が終わったら、ターゲット基板からICSPケーブルを抜き、正規の電源回路を電源端子に付けて使ってください。

次のページでは、Arduino用ブートローダ/スケッチライタを使ってICSP端子経由でスケッチを書き込む方法を説明します。

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

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

関連ページ

関連製品

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