ATmega88/88V/168P/328PにArduinoのブートローダを書き込む(4)

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
目次へ  前のページへ (1) (2) (3) (4) (5) 次のページへ
2016年05月13日 公開。
2016年10月28日 「ATmega88/88V/168PにArduinoのブートローダを書き込む」から「ATmega88/88V/168P/328PにArduinoのブートローダを書き込む」に改題。

7-2.ブートローダ書き込み済みのATmega88/88V/168P/328Pを組み込んだArduino互換基板にスケッチを書き込む方法

前のページでは、Arduino用ブートローダ/スケッチライタを使って、ブートローダ書き込み済みATmega88/88V/168P/328Pに直接スケッチを書き込む方法を説明しました。

今回は、ブートローダ書き込み済みのATmega88/88V/168P/328Pを組み込んだArduino互換基板にUSBシリアル変換器を装着し、スケッチを書き込む方法を説明します。

この方法の場合、スケッチの書き込みの際に、マイコン(ATmega88/88V/168P/328P)を基板から取り外す必要がありません。そのため、ICソケットを使わずに、マイコンを直接基板に半田付けできます。

7-2-1.スケッチの書き込みに必要になる機器(USBシリアル変換器)

今回紹介する方法では、スケッチの書き込みに、FTDI BASIC互換のUSBシリアル変換器が必要になりますので、別途用意する必要があります。

FTDI BASICには5V出力の物3.3V出力の物がありますが、Arduino互換基板の電源電圧に合わせる必要があります。スイッチサイエンスからは5V出力と3.3V出力とを切り替えられる互換品が出ていますので、私はそれを愛用しています。

写真17、5V出力と3.3V出力に切り替えられるUSBシリアル変換器
↑ 画像をクリックすると拡大
写真17、5V出力と3.3V出力に切り替えられるUSBシリアル変換器

7-2-2.USBシリアル変換器でスケッチが書き換えられるArduino互換基板の回路構成

今回は、Arduino互換基板の例として、LEDが1つだけ付いた、最もシンプルな構成の物を紹介します。もっと複雑な働きをする基板を作る場合も、USBシリアル変換器の接続用回路、水晶発振回路、電源回路等は共通ですので、必要に応じてアレンジしてください。

図24が、出力としてLED1個だけが付いた、Arduino互換基板の回路図です。また部品表を表4に、ユニバーサル基板上に作ったArduino互換基板の写真を写真18と写真19に示します。

図24、USBシリアル変換器でスケッチが書き換えられるArduino互換基板の回路図
↑ 画像をクリックするとPDFファイルで表示
図24、USBシリアル変換器でスケッチが書き換えられるArduino互換基板の回路図
表4、Arduino互換基板の部品表
部品番号 数量 部品の種類 パッケージ 仕様・型番 備考
R1, R2 2 カーボン抵抗 ランド間隔300mil 330Ω±5%、1/6W  
R3, R5 2 カーボン抵抗 ランド間隔300mil 1kΩ±5%、1/6W

R5はLEDの電流制限抵抗。LEDを含まないプロジェクトの試作の場合はR5は不要。

R4 1 カーボン抵抗 ランド間隔300mil 10kΩ±5%、1/6W  
C1, C4, C5 3 セラミックコンデンサ ランド間隔200mil 0.1μF、50V(Zランク)  
C2, C3 2 セラミックコンデンサ ランド間隔100mil 22pF±5%、50V 

マイコンの内蔵CR発振器を使用する時は不要。

U1 1 AVRマイコン DIP28ピン ATmega88-20PU
またはATmega88V-10PU
またはATmega168P-20PU
またはATmega328P-PU

ICソケットを使わずに、直接基板に実装できる。実装する前にブートローダを書き込んでおくこと

ATmega88V-10PUを使う場合は、クロック周波数を16MHzに設定できない。

D1 1 ダイオード ランド間隔300mil 1N4148

小信号スイッチングダイオードなら大抵使える。

SW1 1 タクトスイッチ   6mm角

リセットスイッチ。手動でリセットする必要のない場合は不要。

LED1 1 LED   赤色、φ3mm

青色や白色のLEDを使いたい場合は、電源電圧を5Vにする事。(3.3Vでは不十分) また、電流制限抵抗を下げる事。

CN1 1 ピンヘッダ   6ピン、L字型、2.54mmピッチ

40ピンのL字型ピンヘッダを切って使用。

CN2 1 ピンヘッダ   3ピン、ストレート、2.54mmピッチ  
CN3 1 ピンヘッダ   2ピン、L字型、2.54mmピッチ

40ピンのL字型ピンヘッダを切って使用。

X1 1 水晶振動子 HC-49/S型 8MHzまたは16MHz

マイコンの内蔵CR発振器を使用する場合は不要。周波数はブートローダの設定に合わせる事。

  1 ジャンパピン
(ショートソケット)
   

CN2に使用し、マイコンに供給する電源を選択するために使う。

  1 ICソケット   DIP28ピン、300mil幅

U1に使用。必ずしも必要がないが、ICソケットを使用すると、マイコンを乗せ換える事ができる。

  1 ICソケット   丸ピン、シングル3ピン

X1に使用。必ずしも必要ないが、ICソケットを使用すると、水晶振動子を乗せ換える事ができる。

シングル20ピンの丸ピンソケットをカットして使用。

  1 ユニバーサル基板    

使いやすい大きさのものを選べば良いが、写真18に写っているのは70mm×90mmの物。

  4 樹脂スペーサ   M3×6mm、両側メス

基板を机から浮かすために使用。

  4 ねじ   M3×5mm

樹脂スペーサを基板に取り付けるために使用。

写真18、Arduino互換基板の写真(表)
↑ 画像をクリックすると拡大
写真18、Arduino互換基板の写真(表)
写真19、Arduino互換基板の写真(裏)
↑ 画像をクリックすると拡大
写真19、Arduino互換基板の写真(裏)

U1がブートローダを書き込んだマイコン(ATmega88/88V/168P/328P)です。先ほど説明した様に、U1はブートローダの書き込みの際に、基板から取り外す必要はないので、ICソケットを用いずに、直接基板に半田付けできます。ただし今回は、マイコンの種類を取り換えて、色々と実験できる様に、ICソケットを使ってマイコンを基板に装着しています。

この回路には、水晶振動子(X1)がありますが、この水晶振動子の周波数は、書き込んだブートローダに合わせてください。

通常、水晶振動子は基板に直に半田付けしますが、今回は8MHzと16MHzの水晶振動子を交換できるように、丸ピンICソケットを利用しました。(写真20参照)

写真20、水晶振動子を交換できるようにするための丸ピンICソケット
↑ 画像をクリックすると拡大
写真20、水晶振動子を交換できるようにするための丸ピンICソケット

マイコン内蔵CR発振器をクロック源として使う場合は、X1、C2、およびC3(つまり点線で囲んで"CRYSTAL(OPTIONAL)"と書いた部分の回路)を実装する必要はありません。また、この際に余った8番ピン(XTAL1)と9番ピン(XTAL2)がGPIO(D20とD21)として使える事は、1ページでお話ししたとおりです。

注:1ページで説明したとおり、内蔵CR発振器は周波数精度が悪く、それがスケッチのダウンロード時の通信エラーの原因になります。図24の様に、USBシリアル変換器経由でスケッチを書き込む構成の互換基板を作る際は、極力水晶振動子を使う事をお勧めします。

CN1は2.54mmピッチの6ピンのピンヘッダです。ピンがまっすぐのピンヘッダでも構いませんが、L字型のピンヘッダを使うと使い勝手がいいでしょう。

CN3は、マイコンを動作させるための電源を接続するコネクタです。今回はL字型のピンヘッダ用いましたが、誤接続が怖い場合などは、逆接続ができない電源用のコネクタを使ってください。

CN2の3ピンのピンヘッダは、マイコンに供給する電源を選択するためのジャンパです。1番ピンと2番ピンをジャンパピン(ショートソケット)でショートすると、電源はUSBシリアル変換器から供給されます。2番ピンと3番ピンをショートすると、電源はCN3に接続した電源から供給されます。

USBシリアル変換器から供給される電源と、CN3につないだ電源をぶつけないように、CN2のジャンパで電源を選択できるようにしましたが、USBシリアル変換器とCN3の電源を、同時に接続しないように運用する自信がある場合は、ジャンパで選択をするのをやめて、SER_VCC(USBシリアル変換器からの電源)とEXT_VCC(CN3に接続した電源)の両方をVCC(マイコンに供給する電源)に接続して構いません。

シリアル通信線(RXDTXD)に330Ωの抵抗(R1とR2)が入っていますが、これはデバイス(U1およびUSBシリアル変換器に内蔵されているIC)の保護用の抵抗です。この抵抗を入れておくと、USBシリアル変換器がCN1に接続されている状態で、USBシリアル変換器かArduino互換基板の一方の電源が入っていない場合(あるいは双方の電源電圧が異なる場合)に、シリアル通信線に大電流が流れてデバイスが破壊するのを防ぎます。

もっとも、保護抵抗を過信するのは良くありません。USBシリアル変換器を接続している場合は、USBシリアル変換器とArduino互換基板の両方の電源を入れるか、あるいは両方の電源を落とすかのいずれかの状態にすべきです。この点では、Arduino互換基板の電源をUSBシリアル変換器から取る様にすると、この条件は自動的に成立するため、安心です。

D1、R4、C1およびR3は、USBシリアル変換器からU1にリセットを掛けるための回路です。スケッチを書き込む直前には、ブートローダを起動するために、U1にリセットをかける必要がありますが、この回路により、ブートローダを書き込む際に、自動的にリセットがかかるようになります。

SW1は、手動でU1にリセットを掛ける際に使うリセットスイッチです。手動でリセットを掛ける必要のない用途の場合は、SW1を実装する必要はありません。

回路図の右側にはPROJECT AREAと記された、点線で囲まれた領域があります。この部分に、必要な機能を実現するための様々な回路を組み込みます。

図24の例では、PROJECT AREAにLEDと電流制限用抵抗が付いているだけですので、せいぜいLEDの点滅(Lチカ)の実験程度しかできませんが、例えば温度を測定する必要があるなら温度センサ、音を鳴らしないなら圧電ブザー、文字などを表示したいならLCDモジュールという具合に、必要な回路を接続します。

広告

7-2-3.Arduino互換基板にスケッチを書き込む方法

ここでは、LEDを点滅させるスケッチ(Blinkスケッチ)を例にあげ、Arduino互換基板にスケッチを書き込む方法を説明します。

これから説明する作業に先立って、USBシリアル変換器を動作させるのに必要なドライバをパソコンにインストールしておいてください。

【手順1】CN1とCN3に何もつながっていない事を確認する

写真21の様に、CN1とCN3に何もつながっていない事を確認します。

写真21、CN1とCN3に何もつながっていない事を確認
↑ 画像をクリックすると拡大
写真21、CN1とCN3に何もつながっていない事を確認
【手順2】CN2の1番ピンと2番ピンをジャンパピンでショートする

CN2の1番ピンと2番ピンをジャンパピンでショートすると、マイコンの電源をUSBシリアル変換器から取る設定になります。(写真22参照)

写真22、CN2の1番ピンと2番ピンをジャンパピンでショートする
↑ 画像をクリックすると拡大
写真22、CN2の1番ピンと2番ピンをジャンパピンでショートする

注:USBシリアル変換器の電流供給能力はそれほど大きくありません。今回の様にLED1個の制御の場合は問題ありませんが、サーボモータを動かす基板など、電流を多く消費する基板の場合は、後のコラムで説明するように、CN3の外部電源から電源の供給を受ける必要があります。

【手順3】CN1にUSBシリアル変換器を接続し、さらにUSBケーブルでパソコンに接続する

写真23に示す様に、CN1にUSBシリアル変換器を接続し、さらにUSBケーブルでUSBシリアル変換器とパソコンを接続します。

注:充電用のUSBケーブルは使えません。通信用のUSBケーブルを利用してください。

写真23、CN1にUSBシリアル変換器を接続し、さらにUSBケーブルでパソコンに接続する
↑ 画像をクリックすると拡大
写真23、CN1にUSBシリアル変換器を接続し、さらにUSBケーブルでパソコンに接続する

CN1とUSBシリアル変換器のピン接続に注意してください。(表5参照) USBシリアル変換器を反対向きに接続すると、USBシリアル変換器、Arduino互換基板、双方の故障の原因になります。

表5、CN1の信号とUSBシリアル変換器の信号の対応表
CN1のピン番号 CN1の信号名称 USBシリアル変換器の信号名称
(USBシリアル変換器により名称が若干違うため、複数の名称を表記)
1 GND GND
2 GND CTS
3 SER_VCC VCC、VCCIO、POWER
4 RXD TX、TXO
5 TXD RX、RXI
6 /RESET DTR

注:TXD、TXおよびTXOは、送信用信号線を表わします。またRXD、RXおよびRXIは受信用信号線を表します。Arduino互換基板の送信信号線(TXD)と受信信号線(RXD)は、USBシリアル変換器にとってはそれぞれ受信信号線(RX)と送信信号線(TX)になります。表1で、RXDとTX、あるいはTXDとRXを接続しているのは誤りではなく、この表の様にテレコに接続しないと動作しません。

また、X1に16MHzの水晶振動子を使う場合は、5VのUSBシリアル変換器を使用してください。ATmega88/168P/328Pは、3.3Vの電源電圧では、16MHz動作が保証されていません。(ATmega88Vの場合は、そもそも16MHzの動作が保証されていないので、8MHzで動作させる必要がある)

【手順4】Arduino IDEを起動し、Arduino互換基板に書き込みたいスケッチを開く

ここではArduino IDEに付属しているBlinkスケッチを開きますが、他のスケッチを書き込みたい場合は、そのスケッチを開いてください。

図25、Blinkスケッチを開く
↑ 画像をクリックすると拡大
図25、Blinkスケッチを開く
図26、開いたBlinkスケッチ
図26、開いたBlinkスケッチ
【手順5】マイコンの種類とクロックを選択する

Arduino IDE 1.0.Xの場合は、「ツール→マイコンボード」メニューでマイコンの種類とクロックを選択します。(図27参照)

図27、「ツール→マイコンボード」メニューでマイコンの種類とクロックを選択
↑ 画像をクリックすると拡大
図27、「ツール→マイコンボード」メニューでマイコンの種類とクロックを選択

Arduino IDE 1.0.Xの場合

Arduino IDE 1.6.Xまたは1.7.Xの場合は、「ツール→ボード」メニュー(バージョンによっては「ツール→マイコンボード」メニュー)でマイコンの種類を選び、次に「ツール→Clock」メニューでクロックを選択します。(図28、図29参照)

図28、「ツール→ボード」メニューでマイコンの種類を選択
↑ 画像をクリックすると拡大
図28、「ツール→ボード」メニューでマイコンの種類を選択

Arduino IDE 1.6.Xまたは1.7.Xの場合

図29、「ツール→Clock」メニューでクロックを選択
↑ 画像をクリックすると拡大
図29、「ツール→Clock」メニューでクロックを選択

Arduino IDE 1.6.Xまたは1.7.Xの場合

【手順6】USBシリアル変換器のCOM番号を指定する

「ツール→ポート」メニュー(バージョンによっては「ツール→シリアルポート」メニューで、USBシリアル変換器のCOM番号を選択します。(図30参照)

図30、「ツール→ポート」メニューで、USBシリアル変換器のCOM番号を選択
↑ 画像をクリックすると拡大
図30、「ツール→ポート」メニューで、USBシリアル変換器のCOM番号を選択

注:ここではCOM8を選択していますが、実際にはご自分のUSBシリアル変換器が割り当てられているCOM番号を指定してください。

【手順7】スケッチを書き込む

矢印ボタンをクリックして、スケッチを書き込みます。(図31参照) 書き込みが終わると、自動的にスケッチが動作します。(Blinkスケッチの場合は、LEDが点滅を始める)

図31、矢印ボタンをクリックしてスケッチを書き込む
図31、矢印ボタンをクリックしてスケッチを書き込む

7-2-4.スケッチを書き込んだArduino互換基板を外部電源で使う方法

USBシリアル変換器を接続し、スケッチを書き込んだ時点で、スケッチは動作し始めますが、実際にArduino互換基板を使う場合は、USBシリアル変換器をつなげたままにするわけにもいきませんし、USBから電源を取るわけにもいきません。(もちろん、デバッグをしている間くらいは、USBシリアル変換器から電源を取ったままで結構です。)

スケッチを書き終わったArduino互換基板を使うには、CN3に外部電源を接続して使用します。以下の手順に従って、使ってください。

【手順1】CN1とCN3に何もつながっていない事を確認する

写真21の様に、CN1とCN3に何もつながっていない事を確認します。スケッチを書き込んだ直後で、CN1にUSBシリアル変換器が接続されている場合は、USBシリアル変換器を外してください。

写真21(再掲)、CN1とCN3に何もつながっていない事を確認
↑ 画像をクリックすると拡大
写真21(再掲)、CN1とCN3に何もつながっていない事を確認
【手順2】N2の2番ピンと3番ピンをジャンパピンでショートする

CN2の2番ピンと3番ピンをジャンパピンでショートすると、CN3に接続した外部電源から電源を取る設定になります。 (写真24参照)

写真24、CN2の2番ピンと3番ピンをジャンパピンでショートする
↑ 画像をクリックすると拡大
写真24、CN2の2番ピンと3番ピンをジャンパピンでショートする
【手順3】CN3に外部電源を接続する

CN3を外部電源に接続します。1番ピンをGND、2番ピンを+の電源に接続してください。(写真25参照) 正しい接続ができている事を確認してから、外部電源をONにしてください。

写真25、CN3を外部電源に接続する
↑ 画像をクリックすると拡大
写真25、CN3を外部電源に接続する

X1に16MHzの水晶振動子を使う場合は、5V(正確には4.5~5.5V)の電源を使ってください。

X1に8MHzの水晶振動子を使うか、内蔵CR発振器を使う場合は、電源電圧を2.7Vまで下げられます。この場合、1.5Vのアルカリ乾電池を2本直列にすれば、Arduino互換基板を動作させられます。

【コラム】消費電流の大きな基板へのスケッチの書き込み方

先ほど説明したスケッチの書き込み方法では、スケッチの書き込み時にUSBシリアル変換器からArduino互換基板に電源を供給していました。しかしながら、USBシリアル変換器の電流供給能力は限られているため、例えばサーボモータを動かすなど、電流を多く使う基板を作った場合などは、電流が不足してしまいます。この様な場合は、他の電源を接続してスケッチを書き込む必要があります。

5V出力のUSBシリアル変換器は、USBの5V電源をそのままVCC端子(あるいはVCCIO端子、POWER端子)に接続しています。USBの規格では500mAの電流を供給できますが、USBシリアル変換器がいくらか電流を消費するので、Arduino互換基板が消費できる電流は、500mAよりいくぶん少なくなります。

3.3V出力のUSBシリアル変換器の場合は、さらに条件が厳しくなります。3.3Vの電源は、USBシリアル変換ICに内蔵されているLDO(定圧化電源回路の一種)により、5V電源を降圧して作られるのですが、このLDOの最大出力電流があまり大きくないためです。

たとえばFT232RLというUSBシリアル変換ICの場合、内蔵LDOの最大出力電流は50mAしかありません。これなら、LEDが少し多めについている回路の場合、動作が怪しくなります。(LEDが10個付いている回路の場合、各LEDに5mAずつ流しても、それだけで50mAを使い切ってしまう)

図24の互換基板の場合は、CN3に外部電源の入力端子がありますので、ここから電源を取ってArduino互換基板を動かした状態で、スケッチを書き込むと、電源電流が不足する問題は解決します。

外部電源を使う場合は、スケッチの書き込み手順2を、以下の手順2a~2cに置き換えてください。

【手順2a】CN2の2番ピンと3番ピンをジャンパピンでショートする

CN2の2番ピンと3番ピンをジャンパピンでショートすると、CN3に接続した外部電源から電源を取る設定になります。 (写真24参照)

写真24(再掲)、CN2の2番ピンと3番ピンをジャンパピンでショートする
↑ 画像をクリックすると拡大
写真24(再掲)、CN2の2番ピンと3番ピンをジャンパピンでショートする
【手順2b】CN3に外部電源を接続する

CN3を外部電源に接続します。1番ピンをGND、2番ピンを5Vまたは3.3Vに接続してください。(写真26参照) 正しい接続ができている事を確認してから、外部電源をONにしてください。

写真26、CN3を外部電源に接続する
↑ 画像をクリックすると拡大
写真26、CN3を外部電源に接続する

注:X1に16MHzの水晶振動子を使う場合は、電源電圧を5Vにしてください。

【手順2c】CN1に通電した状態のUSBシリアル変換器を接続する

CN1に、あらかじめUSBケーブルでパソコンに接続し、通電した状態のUSBシリアル変換器を接続します。(写真27参照) USBシリアル変換器の電圧は、CN3に接続した電源の電圧と同じにしてください。(そうでないと、RXDとTXDの信号線に大きな電流が流れます)

写真27、CN1に通電した状態のシリアル変換器を接続する
↑ 画像をクリックすると拡大
写真27、CN1に通電した状態のシリアル変換器を接続する

注:通電していない状態のUSBシリアル変換器を接続すると、RXDとTXDの信号線に大きな電流が流れるので好ましくありません。R1とR2の保護抵抗の働きにより、デバイスの破壊を防ぐようにはなっていますが、保護抵抗に頼るのはなるべく避けるべきです。通電した状態のUSBシリアル変換器を接続する場合でも、電源VCCピンよりもRXDピンやTXDピンが先に導通した場合は同様の現象が起きますが、きわめて短時間で済みます。

次のページでは、ATmega88/88V/168P/328P用のOptibootのブートローダを、自分でコンパイルする方法を説明します。

目次へ  前のページへ (1) (2) (3) (4) (5) 次のページへ

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

関連ページ

関連製品

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