2015年11月12日 | 公開。 |
この章では、Atmel社純正のソフトウェア開発ツールのAtmel Studio 7上で、ArduinoISPを使ってAVRマイコンにプログラムを書き込む方法を解説します。読者としてはAtmel Studioの使い方をある程度理解している人を想定していますので、Atmel Studioのインストール方法などについては触れません。また、Windows環境を想定しています。
Atmel StudioからArduinoISPを使ってAVRマイコンにプログラムを書き込むには、ArduinoISPを外部ツールとしてAtmel Studioに登録します。まず、Tools→External Tools...メニューを選んでください。
そうすると、次の様なウィンドウが開きます。
この画面で、Titleの欄に例えばArduinoISP (ATmega328P, COM8)などと、登録内容が分かりやすい名称を入れてください。基本的に、使用するマイコンやヒューズビットなどが変われば、別のツールとして登録する必要がありますので、それらの設定もある程度分かる名称にする方が良いと思います。(この点は、プロジェクトのフォルダに設定ファイルを用意すると回避できる可能性もありますが、将来の課題としておきます)
Commandの欄には、avrdudeの実行ファイル(avrdude.exe)を指定します。ファイル名をフルパスで入力するのは大変なので、欄の右側の...ボタンをクリックすると、ダイアログボックスでファイルを選択できます。
私の場合は、C:\WinAVR-20100110というフォルダにWinAVRをインストールしています。このフォルダの中のbinというフォルダにavrdude.exeがあります。
Extenal ToolsウィンドウのArgumentsの欄には、avrdudeのコマンドラインオプションを指定します。例えば、私は次の様に設定しています。
-c avrisp -P COM8 -b 19200 -p m328p -U flash:w:$(ProjectDir)Debug\$(TargetName).hex:i -U lfuse:w:0xff:m -U hfuse:w:0xde:m -U efuse:w:0x05:m
上の設定例で、パソコンの環境やプロジェクトの内容によって変更すべき部分をイタリックで示しています。
コマンドラインオプションを、前から順に説明していきます。
-c avrispはArduinoISPをプログラムライタとして使う事を意味しています。
-P COM8はプログラムライタとCOM8のシリアルポートで通信する事を意味しています。この部分は、自分の環境に合わせて書き換える必要があります。
-p m328pはターゲットのAVRマイコンがATmega328Pである事を意味しています。この部分は、開発ターゲットのマイコンの種類に応じて書き換える必要があります。
-U flash:w:$(ProjectDir)Debug\$(TargetName).hex:iは、マイコンに書き込むHEXファイルを指定している部分です。$(ProjectDir)の部分は、現在使用しているAtmel studioのプロジェクトのパスに置き換わります。また、$(TargetName)はビルドされたファイルの名称(パスや拡張子は含まず)に置き換わります。
デバッグビルドを前提にHEXファイルのパスを指定していますが、リリースビルドの場合は、パス中のDebugの部分をReleaseに書き換える必要があります。
なお、$(ProjectDir)や$(TargetName)の部分は、この通り入力しなくても、Argumentsの欄の三角印のボタンを使って、メニュー選択形式で簡単に入力できます。
-U lfuse:w:0xff:mと-U hfuse:w:0xde:mと-U efuse:w:0x05:mは、ヒューズビットの設定を行っている部分です。この部分は、開発ターゲットのマイコンのヒューズビットの設定に合わせる必要があります。
External Window のInitial directoryの欄は、空白で結構です。
その下のUse Output windowはチェックしてください。avrdudeが動作している時に、avrdudeが出力するメッセージをAtmel StudioのOutputウィンドウに表示できます。
以上の様に設定できたら、最後にOKボタンをクリックすると、ArduinoISPが外部ツールとして登録されます。
それでは、登録したArduinoISPで、プログラムをマイコンに書き込んで見ましょう。
まず、ArduinoISPのライターを、プログラムが書き込める状態に準備してください。Arduino Uno用ブートローダライタシールドやArduino用ブートローダ/スケッチライタを使う場合は、準備の仕方について、前のページで解説しています。
次に、書き込みたいプログラムをビルドしてください。
最後に、ライターとAVRマイコンが正しく接続されている(あるいはAVRマイコンが正しくライタのソケットに挿入されている)事を確認後、Toolsメニューから、登録したArduinoISPを選ぶと、プログラムの書き込みが始まります。
avrdudeの動作中のメッセージはOutputウィンドウに表示されます。
Arduino Uno用ブートローダライタシールドやArduino用ブートローダ/スケッチライタにはICSPヘッダがあります。
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
これらのライタ基板のICSPヘッダとターゲット基板上のICSPヘッダとをケーブルで接続すると、基板上に実装したマイコンに対してプログラムを書き込む事ができるようになります。ただAVRISP mkIIの様に、ターゲット基板の電源電圧に合わせた信号レベルでプログラムを書き込む機能はないので、Arduino Uno用ブートローダライタシールドの場合は5V、Arduino用ブートローダ/スケッチライタの場合は3.3Vまたは5V(USBシリアル変換器の電圧に依存)で動作するターゲット基板のみが、プログラムの対象になります。
AVRISP mkIIにない機能として、ICSPヘッダからターゲット基板へ電源を供給する能力があります。SUPPLY TARGETと表示のある2ピンヘッダ(Arduino Uno用ブートローダライタシールドの場合CN2、Arduino用ブートローダ/スケッチライタの場合CN9)にジャンパピンを差し込んでおけば、ICSPヘッダのVCCピン(2番ピン)から、ターゲット基板に電源を供給します。
手前味噌にはなりますが、最近では、Atmel Studioで開発する時でも、AVRISP mkIIよりもArduino用ブートローダ/スケッチライタを使う事が多くなりました。ターゲット基板に電源を供給できる点と、プログラムの書き込み状態を音で確認できる点が便利だからです。新規に開発を始める人にとっては、AVRISP mkIIよりも安価である事もメリットになるでしょう。
一方で、3.3Vと5V以外の電圧で動作するターゲット基板への書き込みが必要な場合は、AVRISP mkIIが必要になるでしょう。Atmelの純正ライタなので、外部ツールとして登録しなくてもAtmel Studioから使え、Atmel Studio上での作業が簡単な点も魅力です。
商品名 | Arduino Uno用ブートローダスケッチライタシールドキット | |
税抜き小売価格 | 1440円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino Uno用ブートローダライタシールドキットサポートページ |
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |