ワレコ
Arduinoの標準開発環境 Arduino IDEにはデバッガーが無いので使い辛い。
一方AVRの開発環境 Microchip StudioはVisual Studioそのものなのでデバッガーが使える。
じゃあArduinoをMicrochip Studioでデバッグ出来れば開発作業が捗(はかど)るぞ。
マイクロソフト社の統合プログラミング開発環境であるVisual Studioは史上最強のプログラム開発環境だろう。
Visual Studioには沢山のメニューがあるがGUIベースなので良く使う基本操作方法を覚えれば初心者にも使い易い。
だいたいデバッガーが使えないArduino IDEみたいな貧弱な開発環境では、大規模なプログラミングはワテには出来ない。
と言う訳で、当記事ではArduino UNOをMicrochip Studioを使ってデバッグする方法をまとめてみた。
シリアルモニタ画面に文字表示も出来る事が判明した。
この方法を使えばArduinoプログラミング作業が非常に効率良く行えるぞ。
では本題に入ろう。
Arduino UNOをArduino IDEでプログラミングする場合
まずはArduinoの標準的な開発環境であるArduino IDEを使ってArduino UNOをプログラミングする環境を見てみよう。
下写真がArduino Uno R3だ。
写真 Arduino Uno R3(DIP28はAVRマイコンファミリーの一つのATmega328P)
引用元 https://store-usa.arduino.cc/collections/boards/products/arduino-uno-rev3
Arduino Unoは純正品や多数の互換品が販売されている。
下写真のスイッチサイエンスさんのArduino UNOは純正品だ。
下写真のArduino UNOは互換品で、かつ多数の実験用モジュールがセットになっていて値段も安い。
ワテの場合、最初に買ったのが純正品で、そのあと上写真のMiuzei製互換品を買った。
Arduino IDEは簡素な開発環境
下図にArduinoの標準開発環境であるArduino IDE(Integrated Development Environment)の画面を示す。
図 Arduinoの標準開発環境であるArduino IDE(Integrated Development Environment)の画面例
このArduino IDEで新規ファイルを作成すると、上図のようにsetup()とloop()と言う二つの関数からなるテンプレートが読み込まれる。
開発にはC言語を使う。Arduinoのプログラムはスケッチと呼ばれるのだが、ワテはその理由を知らない。
さて、上図を見ても分かるようにArduino IDEのメニューはファイル、編集、スケッチ、ツール、ヘルプがあるが、サブメニューを開いてみてもプログラム開発に必要なデバッグ関連のメニューは見当たらない。
デバッガー無しでプログラム開発なんてワテには出来ない。
Arduino IDEでArduino UNOのスケッチ開発する接続方法を図解
下図にArduino UNOをWindows 10パソコンにUSB接続して、Arduino IDEを使ってスケッチ開発する場合の接続方法を図解してみた。
図 Arduino UNOをWindows 10パソコンでArduino IDEを使ってスケッチ開発する接続方法(ジャンパーピン改造は後述)
この場合、シリアルモニタと言うウインドウを表示する事が出来て、そのウインドウにはprint文を使って文字列を表示する事が出来る。
Serial.print("文字列\n"); Serial.println("文字列"); // これでも良い
まあデバッガが無くてもこのprint文を使えばデバッグ作業を出来なくはないが、所謂C言語のprintfデバッグになるので、それだけでは作業性は良くない。
Microchip Studioを使ってArduino UNOをデバッグする
さて、Arduinoシリーズに搭載されているAVRマイコンを単体で使う場合には、Microchip StudioやMPLAB X IDEなどの開発環境がMicrochip社から提供されている。
ワテの場合は、Microchip Studioを使ってAVRマイコン(ATmega328P)でLEDチカチカやLCDパネルに文字表示などは先日成功した。
Microchip StudioはVisual Studioの技術を利用して作られているので、プログラムエディタとしての操作性も良いし、強力なデバッガーも搭載されている。
自称Visual Studioの達人のワテにはMicrochip Studioは非常に使い易いのだ。
どうにかしてArduino UNOのプログラム開発をMicrochip Studioで出来ないものかと思ってネット検索していたら、まさにそのやり方を解説している英文サイトを発見した。
Lon Glaznerさんと言う人が投稿している記事なのだが、Lon Glaznerさんが何処の誰なのかはワテは全く知らない。
上記事では旧Atmel Studio7を使っているが、それは現在のMicrochip Studioに名称が変更されている。
Arduino Uno基板の銅箔配線を切断してピンヘッダ&ジャンパーピンを取り付け
さて、Lon Glaznerさんの英文投稿を読むとMicrochip Studioを使ってArduino UNOにプログラム(スケッチ)を書き込んだりデバッガを使ってデバッグする為には、Arduino UNO基板に改造が必要になるとの事だ。
早速ワテもやってみた。
ワテは純正Arduino Unoと互換品Arduino Unoを持っているのだが、改造に失敗する可能性もあるので取り敢えず安い方の互換品でやってみた。
改造箇所は下写真の「RST EN」と言う文字があり、四角の破線で囲まれている二つの電極があるが、その二つの電極を接続している細い銅箔配線をカッターなどを使って切断するのだ。
図 Arduino UNO基板上の「RST EN」の二つのパッドを連結している細い銅箔を切断する
切断する前に、この二つの電極をテスターの導通チェックモード(ビープ音が鳴る)で調べたら、確かにビープ音が鳴った。
切断した後に再びテスターでチェックしたら、音は鳴らなかったので無事に切断出来たようだ。
ただし、この部分を切断したままだとArduino UNOとしては使えないので、二箇所の電極にピンヘッダを半田付けして、ジャンパーピンでショートさせると切断前の状態(導通した状態)に戻せるようにするのだ。
切断のコツとしては、実体顕微鏡や拡大鏡を使って該当箇所を拡大しておいて、小型のカッターで銅箔の二箇所に切り込みを入れる。その後で、カッター刃の先端を使って両端をカットした銅箔を剥がし取れば良い。
下写真がワテが実際にArduino Uno互換機でその改造を行った例を示す。
写真 Arduino Uno互換機の「RST EN」部分を切断してピンヘッダを半田付けした例
RST EN部分の二個の角型パッドの間隔は2.54mmピッチなので、標準的な2Pのピンヘッダを半田付け出来る。
ワテの場合は、HAKKO FM-206 ハンダステーションの交換コテ先T12-C08と言う極細のコテ先を使って半田付けした。
このピンヘッダに下写真のようなジャンパーピン(ジャンパーキャップとも言う)を挿し込めば、切断前の状態に戻せる。
これで改造は完了だ。
Microchip Studioを使ってArduino Unoにスケッチを書き込んでみる
さっそくMicrochip Studioを使ってArduino Unoにスケッチを書き込んでみる。
ジャンパーピンは付けない(オープン状態にする)。
パソコンとATMEL-ICE(下写真白色ケース)をUSB接続し、ATMEL-ICEとArduino UNOとの接続は6pin(3×2行)のデバッグワイヤーをICSP端子に接続して行う(下写真)。
写真 ATMEL-ICEとArduino UNO(RST ENをジャンパーピン改造済)とをICSP接続
上写真に於いて、Arduino UnoのDCジャックにはDC7V~12VまでのDC電圧を供給する必要がある。ワテの場合はDC5.2VのACアタプターしか持っていなかったのだが、それを接続しても正常に動いているようだ。
=>指定されているDC7V~12Vを正しく与えるべきだ。DC5.2Vでもたまたま動いているが、そんな手抜きは失敗の元だ。
さて、Microchip Studioを起動して「Create project from Arduino sketch」を開く(下図)。
図 Microchip Studioを起動して「Create project from Arduino sketch」を開く
そうすると下図のように読み込むスケッチファイルのパスを指定するように求められるので、Blink.inoを指定してみた。
図 Microchip Studioに読み込むスケッチファイルを指定
このBlink.inoファイルはLEDチカチカのサンプルで、Arduino IDEの中にある。そのBlink.inoファイルを予め上図に示すファイルパスに保管しておいたのだ。
さて、無事にBlink.inoスケッチファイルがMicrochip Studioに読み込まれると下図のようになる。
図 無事にBlink.inoスケッチファイルがMicrochip Studioに読み込まれた
あとはデバッグ関連の設定なのだが、これはMicrochip Studioを使ってAVRマイコンをデバッグする場合の設定と同じだ。
ワテの場合は、先日、AVRマイコン(ATmega328P)を単体で使ってLEDチカチカ実験をやった時に、既にこのデバッグ設定は経験済みだった(下記事)。
この記事を思い出しながらやったら、以下で示すように順調に行った。
まず、下図に示すようにプロジェクト(Blink)のプロパティを開いて、その中のToolメニュー画面を出し、デバッグツールとしてAtmel-ICEを選択する。
図 デバッグツールとしてAtmel-ICEを選択する
次は下図のようにInterfaceにdebugWIREを選択する。
図 InterfaceにdebugWIREを選択する
これで下図のようになっていれば良い。
図 debugWIREを使ってデバッグ行う為に必要な設定
デバッグ実行する
これで準備完了なので、下図のようにデバッグ実行(F5)してみる。
図 デバッグ実行する
そうすると「debugWIREを使ってデバッグするセッションの起動に失敗した」と言うメッセ-ジが出る(下図)。
図 「debugWIREを使ってデバッグするセッションの起動に失敗した」と言うメッセ-ジ
このメッセージはAVRマイコンのヒューズ設定のDWENが有効化されていない場合に出るようだ。
なので、ここではYESをクリックすると下図が出るはずだ。
図 debugWIREが有効化されたと言うメッセージが出る
OKをクリックする前に、一旦、Arduino Uno基板とATMEL-ICEやDC電源の接続を外して再び接続すると良い。ただし、両方とも必要なのか、どちらか一方だけで良いのかなどは未確認だ。
そしてOKをクリックすると、下図のようにデバッグモードでBlinkプロジェクトが実行される。
図 無事にMicrochip Studioのデバッグモードでブレークポイント停止した例
上図では点滅の間隔を100ミリ秒点灯、100ミリ秒消灯に設定しているので、速めの速度でチカチカしている。
適当な場所にブレークポイントを設定するとブレーク(停止)しているぞ!
素晴らしい!!
あとはVisual Studioと全く同じ操作性のなので、ブレークした状態から一行ずつステップ実行するとか、再開するとか、いろいろ試すと良いだろう。
debugWIREモードを解除する
さて、無事にMicrochip Studioを使ってArduino UNOをデバッグ実行出来たのだが、debugWIREモードを解除する方法を紹介しておこう。
下図のようにブレークした状態で、
を実行する。
図 debugWIREモードを解除する方法
これで解除できる。
なぜdebugWIREモードを解除する必要があるのかと言うと、debugWIREモードのままだとInterface設定をISPモードに戻せないのだ。その結果、このあとで紹介するが例えばブートローダーを書き込む操作なども出来ないのだ。
それと、もしMicrochip Studioで開発中のプログラムのビルドが正常終了しない場合には、プログラムを実行出来ないのでデバッガーでブレークさせる事が出来ない。なので、もしそんな時にdebugWIREモードを解除したい場合には、そのプロジェクトは取り敢えず終了して正常に動くBlinkなどの簡単なプロジェクトを開いて、それを使ってデバッガをブレークさせておいてdebugWIREモードを解除すると良い。
と言う事で、Arduino UNOをMicrochip Studioでデバッグする事に成功したのだ。素晴らしい。
なお、Microchip Studioを使ってArduino UNOに書き込んだBlinkのスケッチは、元々Arduino UNOに書き込まれていたブートローダーの領域も書き換えてしまう。
つまりこの時点ではArduino UNOはブートローダーが無くなってしまっているのだ。
ジャンパーピンを付けてArduino UNOとして使えるようにする
さて、このRST EN部をジャンパーピン改造したArduino UNOを再びArduino UNOとして使うには、下写真のようにジャンパーピン(黄色)を挿すだけでは駄目なのだ。
実際にやってみた。
ATMEL-ICEは取り外して、ジャンパーピンを付けて、USBでパソコンと接続。
Arduino IDEを起動して、Blinkのスケッチを書き込んでみた。
図 ブートローダーが無いArduino UNOにBlinkスケッチを書き込んでみる
そうすると、下図のようにスケッチの書き込みでエラーした。
図 ブートローダーが無いArduino UNOにはArduino UDEではスケッチが書き込めない
まあこれはArduino IDEがコンパイルしたBlinkの実行ファイルをArduino UNOに送信しても、ブートローダーが消えているから通信が出来ないのだ。
なので当然の結果だ。
Arduino UNOにブートローダーを書き込む
そこで、Arduino UNOにブートローダーを書き込む。
これは先日既に経験済の作業(下記事)なので、順調に行った。
実際にやってみる。
再びArduino UNOとATMEL-ICEをデバッグワイヤーで接続する。
ジャンパーピンを取り付けてArduino UNOのオリジナル状態に戻す。
Device Programmingの画面(下図)を開いて、Fuses設定を行う。
図 Device Programmingの画面を開いてFuses設定を行う
上図のようにFuse設定を行った。
この値は上記の記事でブートローダーをArduino UNOに書き込んだ時に使ったFuse設定の値と同じにした。それは元ネタのイチケンさんのYouTube動画で紹介されていた値だ。
この中でEXTENDEDの箇所は0xFDだ。
一方、この記事を書くに当たり参考にさせて頂いた英文サイトではEXTENDEDの箇所が0x05になっている。
そもそもEXTENDEDとは何なのか理解出来ていないので、0x05にすべきか0xFDにすべきか迷ったのだが、取り敢えず先日ブートローダーの書き込みには成功したので、その時の値(イチケン値)を採用した。(もしこれらの16進値の違いが何を意味するのかご存じでしたら、末尾コメント欄から教えて頂けると嬉しいです。)
そして下図のようにMemoriesメニューでFlashメモリに書き込むファイル名を指定する。
下図は先ほど書き込んだBlinkの実行ファイルが指定されている。
図 現時点でFlashメモリに書き込まれているファイル
それを下図のように、ATmega328Pブートローダーファイルを指定する。
図 ATmega328Pブートローダーファイルを指定してProgramボタンをクリックする
そして、Programボタンをクリックすれば良い。
これで無事にブートローダーの書き込みが完了した。
Arduino IDEを使ってBlinkスケッチを書き込み実行する
ATMEL-ICEやデバッグワイヤーを取り外して、Arduino UNOとパソコンをUSBケーブルで接続する。
DC電源は、今の場合は無くても良い。
下図のようにBlinkスケッチを書き込み成功!
図 ブートローダーを再書き込み成功したのでBlinkスケッチも書き込み成功
Arduino UNO基板上にあるLEDがチカチカしている。
Microchip StudioでArduino UNOをデバッグする時にシリアルモニタを使う
さて、ここまでの作業でArduino UNOをMicrochip Studio環境でデバッグ出来るようになった。
その結果ブートローダーが消えてしまったATmega328Pチップに再びブートローダーを書き込んでArduino UNOとして復活させる事も出来た。
これで万々歳!と思ったのだが、一つ忘れていた。
それはMicrochip Studio環境でArduino UNOをデバッグする時に、シリアルモニタ画面に文字表示させたいのだ。
そこで、以下のようにやってみた。
つまり、再びMicrochip Studio環境でArduino UNOプログラミングしたいので、ジャンパーピンを抜く。ATMEL-ICEとArduino UNOとをデバッグワイヤーで接続する。
Arduino UNOのUSBポートはケーブルを抜いておいた。
そしてMicrochip Studioを使ってBlinkスケッチを書き込んで動かす。プログラム中には幾つかのSerial.print文を入れてみた。
その状態でMicrochip Studioの「出力」、「イミディエイトウインドウ」、「コマンドウインドウ」など見てみたが、 Serial.print文の実行結果はそれらには表示されないようだ。
で、試しに下写真のようにArduino UNOのUSBポートにもUSBケーブルを接続してみた。
写真 パソコンとATMEL-ICEをUSB接続、パソコンとArduino UNOもUSB接続させた
そして、Microchip StudioだけでなくArduino IDEも起動してシリアルモニタ画面を出してみた。
図 Microchip StudioだけでなくArduino IDEも起動してシリアルモニタ画面を出してみた
その結果、上図のようにMicrochip StudioのソースコードにあるSerial.print(”文字列”)の実行結果が、Arduino IDEのシリアルモニタ画面に表示されているぞ!
おお、素晴らしい。
これでMicrochip StudioでArduino UNOをデバッグする時にprintfデバッグも可能になったのだ。
Microchip StudioとATMEL-ICEでArduino UNOをデバッグする時にシリアルモニタを使う接続
配線をまとめると下図のようになる。
図 Microchip StudioとATMEL-ICEでArduino UNOをデバッグする時にシリアルモニタを使う接続
上図のように二本のUSBケーブルを使ってATMEL-ICEとArduino UNOをそれぞれパソコンと接続する。
そしてパソコンではMicrochip StudioとArduino IDEを両方起動する。
そしてArduino IDEのシリアルモニタ画面を開いておくのだ。
そうするとMicrochip Studioでデバッガーを使いながら、必要ならSerial.print文の実行結果をシリアルモニタ画面に表示出来るのだ。
Microchip StudioのData VisualizerでCOMポートをモニタ出来る
その後の調査で、Microchip StudioのツールメニューにあるData Visualizer機能を使うとCOMポートのシリアル通信をモニタ出来る事が判明した。
先ほどArduino IDEのシリアルモニタ画面を使ってBlinkスケッチのprint命令の出力結果をモニタしたが、下図ではMicrochip StudioのData Visualizerを実行してCOM4ポートをモニタしている。
図 Microchip StudioのData Visualizer機能を使うとシリアルモニタが可能だ
接続は先ほどパワーポイントで図解したのと同じでArduino UNOにはATMEL-ICEをdebugWIREで接続し、USBケーブルはATMEL-ICEとArduino UNOにそれぞれ挿している。
これでArduino UNOあるいはArduinoの他のシリーズのスケッチ開発やデバッグ作業は、Microchip Studioを使うだけで完結させる事が出来た。
これは素晴らしい!
まとめ
ワレコ
Microchip Studioを使ってArduino UNOをデバッグしながら開発する方法を見付ける事が出来た。
かつシリアルモニタ画面にprintも出来る。
これでArduinoプログラミングが飛躍的に捗るぞ!
当記事では、Arduino UNOプログラミングにMicrochip Studioを使う方法をまとめてみた。
ネット検索して見付けた英文サイトの情報を参考にやってみたら上手く行ったのだ。
かつ、ワテ独自のアイデアとして、Microchip StudioとArduino IDEを同時起動しておいて、Microchip Studioで実行したSerial.printの結果をArduino IDEのシリアルモニタ画面に表示させる事に成功したのだ。
さらにその後の調査ではMicrochip StudioのData Visualizerを使うとシリアルモニタが可能なので、Arduino IDEを使わずにMicrochip Studioのみでスケッチ開発やデバッグ作業が完結する事が判明した。
恐らくワテが紹介したこの方式はArduinoのスケッチ開発の標準になるだろう。それくらいに便利なのだ。
ちなみにワテが使ったのは下写真の白いケースのATMEL-ICEだ。
でも多分、下写真のような別の製品でも同じような使い方が出来ると思う(もし上手く行った場合はコメント欄からお教えください)。
つまり、これらの機器とAVRマイコンとの接続は6pinのフラットケーブルを使ってAVRマイコンの6ピンICSP端子と接続すれば良いのだ。
一つ不思議なのは、ネット検索しても今回ワテがまとめたような情報が殆ど見付からない。
つまり、Arduino IDEを使ってArduinoで何らかのスケッチ開発をやったと言う記事は多いのだが、Microchip Studioを使ってArduinoスケッチ開発をやったと言うような記事が日本語では見付からなかった。
冒頭でも書いたようにワテの場合はデバッガが無い開発環境は非常に使い辛く感じる。
Arduinoスケッチ開発をやっている世の中の皆さんは、デバッガの無いArduino IDEで良くプログラミングが出来るなあと思うのだが…
それにArduinoってのはWikipediaを見ると2005年から始まっているからもう十年以上も経っている。
皆さんデバッガー無しで良くやっているなあ。
追記
ここで紹介したArduino UNOを改造する手法ではArduino UNOのATmega328Pのブートローダー領域も上書きしてしまう。
なので再びArduino UNOとして使うにはブートローダーを再書き込みしなくてはならない。
それならわざわざArduino UNOに搭載されているATmega328Pを使わなくても、ATmega328Pを単体でAtmel-ICEに接続してMicrochip Studioでプログラミングすれば良い事に気づいた。
という事でそう言う用途に使えるATmega328P単体実験用の汎用基板を今後製作する予定だ。
(続く)
コメント