fc2ブログ

AVR Studio に HIDaspx で AVRマイコンに書き込み

電子工作の世界から離れて丸4年、自分でも驚くほど色んなことを忘れていて、悲しいやら嘆かわしいやら。

当時、備忘録を兼ねて書いた自分のブログを見返してみても、あっちに引っ掛かったり、こっちで壁にぶつかったりで、なかなか思うようにいかない。

前回、取り敢えず Arduino の再始動は出来たので、今回はAVRマイコンへの書き込みに取り組んでみようと思います。

具体的には、Atmel社の統合開発環境 AVR Studio と自作ライター「HIDaspx」とで、ATtiny85、2313といったAVRマイコンにプログラムを書き込むための環境構築です。

実は、この辺りのことは過去にも書いているのですが、今回自分で見返してみて少し “散らかってる” ように感じたので、 “清書” してみようと思います。

統合開発環境 AVR Studio と Toolchain

先ずは、AVR Studio。現在の最新版は Atmel Studio 7 となっていますが、使い慣れたAVR Studio 4.19と、C言語を扱うための AVR Toolchain 3.4.1をダウンロード。

ダウンロード先は手続等不要な www.mikrocontroller.net というサイト。

AVR Studio 4選択
先に AVR Studio4.19 をインストールし、続いて Toolchain をインストールすれば、AVR Studio にてC言語が使用できる環境が出来上がります。

HIDaspx をAVRライタとして使うための hidspx

USB-AVRライタである HIDaspx を、AVRライタとして使うためには hidspx が必要なので、JA制御 ヒダピオシステムのHPから「ja_hidapio.exe」をダウンロードして解凍。

解凍して出来た「ja_hidapio」フォルダの「bin」の中にある「hidspx」(アプリケーション)にパスを通すため、hidspxのプロパティを開いて「場所」をコピー。

hidspxの場所

続いて、「コントロールパネル」→「システムとセキュリティ」→「システム」とたどり、「システムの詳細設定」から「システムのプロパティ」→詳細設定タブの「環境変数」。

パスを通す
「環境変数」画面下段の「システム環境変数」で、「変数」欄から「Path」を探してクリックして「編集」。

現れた「環境変数名の編集」画面の一番下の空欄に、先ほどコピーしておいたhidspxの「場所」をペーストして、「OK」→「OK」→「OK」とウィンドウを閉じていけば完了。

AVR StudioとHIDaspxを関連付ける

最後に、AVR Studio に HIDaspx を書き込み装置として関連付けしていきます。

AVR Studioを起動し、「Tools」 →「Customize」 → 「Tools」タブ、そして「Menu contents」右横のフォルダをクリックして、下の空欄にコマンドの「名前」を入力。

AVR Studio カスタマイズ
この「名前」は何でもOK。取り敢えず「HIDaspxWrite」と入力しておきます。

続いて、下の3つの空欄にそれぞれ以下のように入力していきます。

「Command:」→「cmd.exe」
「Arguments:」→「/k hidspx *.hex」
「Initial directory:」→「default」

「Close」をクリックし、再びメニューバーのTools を見てみると、プルダウンメニューの中に先ほど名前をつけた「HIDaspxWrite」の文字がある筈。

これで、AVR Studio で作成したプログラムをマイコンに書き込もうとする際、Tools → HIDaspxWrite を選ぶことで、HIDaspx経由での書き込みが可能となりました。

プログラム制作→コンパイル→マイコンに書き込み

AVRの基本的な開発環境は構築できたので、実際に AVR Studio を起動してみましょう。

AVR Studioを起動し、「New Project」を選び、「Project type:」は「AVR GCC」。Project type はアセンブラーを使うか、あるいはC言語を使うかの選択です。

new project
「Project name:」を記入、「Location:」で保存場所を指定し「Next」。

続いて、「Debug platform:」には「AVR Simulator」を、「Device:」には今回使用する予定の「ATtiny2313」をリストの中から選んで「Finish」。

デバイス選択

プログラムウィンドウが表れるので、取り敢えず「Lチカ プログラム」を書いて、メニューアイコンの中から「Build」をクリックしてコンパイル。

Makefile?

何の問題も無ければコンパイルされるのですが、今回は「Location:」に全角文字が入っていたのがまずかったようで、エラーに。

保管場所は、「C:\AVR\folder」といった感じに、出来るだけドライブのルートに近い位置に半角名で作るのが間違いないようです。

コンパイルが完了したら、PCと接続した HIDaspx にデバイス(ATtiny2313)をセットし、メニューバーの Tools から「HIDaspxWrite」を選べば、勝手に書き込み作業完了。

これにて、無事にATtiny2313へとプログラムが焼き込まれました。


AVRマイコンの開発環境をWindows10で再構築

最近、電子工作から遠ざかっています。

それは、PCを買い替え、OSがWindows10になったのに伴い、電子工作関連の諸々の設定をし直さなきゃいけないんだけど、これが面倒くさくて。もう、設定方法も忘れてるし。

なので、旧PCもヤフオクで売り払ってしまいたいと思いながら、それも出来ず(新PCと新OSで動かないと大変なことになるので)に、リビングの一角を占拠していて邪魔。

ということで、PCとOSの入れ替えから3ヵ月以上も経ってしまいましたが、そろそろ重い腰を上げて、電子工作の開発環境を再構築することに。
  1. 使うマイコンはAVR。私がよく使っていたのは、ATtiny13A、45、85、2313辺りかな。
  2. AVRの開発環境は AVR Studioを使います。Atmel 提供のフリーの統合開発環境。
  3. AVRマイコンへの書き込み装置は、USB接続の自作ライター「HIDaspx」を使います。

AVR Studio 4.19とToolchain 3.4.1をダウンロード、インストール

先ずは開発環境をダウンロードして、インストールするところからスタート。

使うのは以前と同じAVR Studio 4.19 (build 730) 。

AVRstudio4

ダウンロードしようとAtmelのHPに行ったら、現時点の最新版はAtmel Studio 7.0 ってやつになってました。AVR Studio 5.1の次はAtmel Studio 6.0という名前に変わったんですね。

AVR StudioでC言語を扱うためにAtmel AVR(Toolchain 3.4.1 - Windows)も一緒にダウンロード。Toolchainの代わりにWinAVRでもC言語が扱えるらしい。

ところで、今回ダウンロード先を調べていて、www.mikrocontroller.netというサイトを見つけました。こっちだと、事前手続きなしで即ダウンロードできるので、こっちの方が便利かも。

さらに言うと、こちらのサイトの最新AVR Toolchainは、2016/3にアップデートされた3.5.1。3.4.1のサイズは96 MBだったのが、3.5.1では約14 MBと、やけに小さくなってる。

ま、特に問題ない限り、Atmel Studio 7.0もToolchain 3.5.1も使う気はないけど。

インストールは特に難しいことはないけど、必ず先にAVR Studio4.19をインストールしてから、Toolchainのインストールをするって点だけ要注意。

Toolchainのインストールが終了すると、AVR Studioに自動的に組み込まれるので、AVR Studioを起動すればC言語が使用できる環境が出来上がっています。

「hidspx」へとパスを通す

AVRマイコンへの書き込み装置として使うのはHIDaspx。Atmel純正品のAVRISP mkIIなら、AVR Studioでそのまま書き込めますが、自作ライターなのでここで一手間必要なんです。

先ずは、このHIDaspxをAVRライタとして使う際に必要なプログラム「hidspx」を入手します。

JA制御 ヒダピオシステムのHPから「ja_hidapio.exe」をダウンロードし、解凍します。

解凍して出来た「ja_hidapio」フォルダの中の「bin」の中にある「hidspx」(アプリケーション)にパスを通していくので、hidspxのプロパティを開き、「場所」をコピーしておきます。

hidspxの場所

「パスを通す」とは、(私の理解では)PCに場所を教えて上げるってこと。

「コントロールパネル」→「システムとセキュリティ」→「システム」とたどり、左側の「システムの詳細設定」から「システムのプロパティ」へと行き、そこで詳細設定タブの「環境変数」をクリック。

パスを通す
「環境変数」画面下段の「システム環境変数」で、「変数」欄から「Path」を探してクリックして「編集」。

現れた「環境変数名の編集」画面の一番下の空欄に、先ほどコピーしておいたhidspxの「場所」をペーストして、「OK」→「OK」→「OK」とウィンドウを閉じていけば完了。

AVR StudioにHIDaspxを関連付ける

続いて、HIDaspxを書き込み装置としてAVR Studioに関連付けます。

AVR Studioを起動し、メニューバーから、「Tools」 →「Customize」 → 「Tools」タブを開き、「Menu contents」右横のフォルダをクリックして、下の空欄にコマンドの「名前」を入力します。

AVR Studio カスタマイズ
この「名前」は何でもOK。取り敢えず「HIDaspxWrite」と入力しておきます。

続いて、下の3つの空欄にそれぞれ以下のように入力していきます。

「Command:」→「cmd.exe」
「Arguments:」→「/k hidspx *.hex」
「Initial directory:」→「default」

これで「Close」をクリックし、再びメニューバーのTools を見てみると、プルダウンメニューの中に先ほど名前をつけた「HIDaspxWrite」の文字がある筈です。

これでAVR Studioで作成したプログラムをマイコンに書き込もうとする際、Tools → HIDaspxWrite を選ぶことで、HIDaspx経由での書き込みが可能となります。

これで、AVRの基本的な開発環境は構築できたはず。


Arduino用のプログラムを流用してATtiny2313に書き込む

自作したArduinoのブレッドボード製プロトシールドを試しに使ってみようと3色のLEDの調光にトライしてみたら、これが想像以上に美しい。最後にLEDの上に被せた琉球ガラスの小片が効いてる。

結構イイ感じに出来上がり、このままバラしてしまうのはもったいないので、これを電池駆動にしてランタン風のものを作ってみようと思います。折角なので、メロディーも流してみようかな。

とは言っても大して難しい話ではなく、Arduinoで制御しているのを1個のマイコンで置き換えるだけ。今回はATtiny2313を使ってみましょう。

ArduinoとATtiny2313とでは、PWMのpin番号が異なるので

プログラム自体は、前回作ったものをほぼそのまんま使います。ただ、前回も説明したとおり、LEDの調光をするには PWM出力で行うので、pin番号が変わってきます。

ATtiny2313ではPB2、PB3、PB4、そしてPD5がPWM対応のpinとなっています。pin番号で言うと、11、12、13、そして9番となります。

今回は11~13番のpinを使いますので、それに合わせてプログラムに変更を加えますが、僅か一箇所だけの変更でOK。3行目の {9, 10, 11} を {11,12,13} に変更するだけ。

ところで、Arduino用のスケッチを(ほとんど)そのままATtiny2313で使うには、Arduino IDE (Arduinoの開発環境)からATtiny2313に書き込むための環境を構築する必要があります。

以前、kosakalabさんのArduino IDEでATtiny他の開発(Arduino-ISP編)という記事を参考にこの環境を構築しましたが、(ハード的には)一旦バラしてしまったので再構築。

ブレッドボード製プロトシールド上の「3色LED調光回路」をバラし、ここにパーツを配置して配線をして完了。すごく簡単。

ATtiny2313書き込み装置

Arduino IDEで [ツール] > [マイコンボード] > [ATtiny2313] を選択し、続いて [ツール] > 書込装置] > [Arduino as ISP] として、[マイコンボードに書き込む]であっさりと書込み完了。

って思っていたら、なぜか書き込み出来ていませんでした。なぜ?

Arduino IDEの下の小窓に書き込まれているのを見てみたら、こんな表示が。

not in sync
この「not in sync: resp=0×00」ってのは何?って調べてみたら、Arduinoでこのエラーメッセージはどうやら珍しい現象ではないようで、検索結果もたくさんヒットします。

が、どうやら決定的な解決策が無いらしい。困ったな。以前、ArduinoからATtiny2313に書き込みをしたときは、何の問題もなく書き込めたのに、何がどうなってしまったんでしょうか?

Arduino の not in sync を解決するには時間がかかりそうなので

一旦この方法は諦め、もう一つある書込み装置HIDaspxを使うことに。ここで軽く触れましたが、こちらで公開されている「私家版 Ardublock」をダウンロードし、インストールすることで、Arduino IDEからHIDaspx経由でATtiny2313に書き込むことが出来ます。

ArduinoとHIDaspx組合

今度は何のエラーも発生することなく無事に書き込み完了(多分)。

取り敢えず動作確認のために、ブレッドボード上に回路を組み上げました。ミニブレッドボードは、こうしたちっちゃな回路を組むには小回りが利いて重宝します。

ATtiny2313で制御
が、電源ラインが無いのが玉に瑕。なので、ブレッドボード製プロトシールドを作った時に、切り離して不要になったブレッドボードの電源ラインを活用してみたら、これが以外に便利かも。

プログラムの方も無事に書き込めていたようで、単三電池3本の電源でATtiny2313が3色のLEDを順にボワーって点灯させ、そしてボワーって消灯させという動作を繰り返しています。

次回、この回路をユニバーサル基板上に組み上げていきます。


HIDaspxをhidspxで使用するためのコマンド

「ChaN氏の電子オルゴール」をベースに、ATtiny85で電子オルゴールを奏でるためのやり方を詳細に解説されたニコニコ動画をバイブルとして、製作途上にある電子オルゴールの続き。

前回、回路を組み上げ、プログラムの修正も終わり、ATtiny85への書き込みも成功したのに、「音が出てこない」(微かに雑音らしき音は聞こえる)状態で終わりました。

実際、周辺知識の無い私には、ニコニコ動画の通りにやって動かなければ “お手上げ” 状態。

天から降ってきたアイデアとは何の関係も無く音が流れ出した

どうすることも出来ずに1週間くらい手付かずにいたある日、ランニングをしながら何となく、「こんなことを試してみたらどうだろう?」ってのが天から降りてきました。

家に帰って早速試してみようと、いくつかある内の1つのATtiny85をHIDaspxにセットし、AVR Studio からプログラムを書き込んでみると・・・・・

何と、音が出たんです! 「こんなことを試して」みる前に音が出たんです。前回の音が出ない状態に何の手も加えていないのに、結果が変わりました。

ATtiny85で電子オルゴール

ヒューズ設定を再現できないことには

考えられるのは、やっぱりヒューズビットの違いかな。

手元にあるいくつかのATtiny85を、あっちのプログラムで焼いたり、こっちのプログラムで使ったりしているので、今回手に取ったATtiny85のヒューズビットが、たまたま “合致” したんでしょうね。

問題は、どうやったら同じ状態を作れるのかってこと。新品のATtiny85に書き込んでみたら、やっぱり前回と同じく、微かな雑音しか聞こえてきません。

そもそもヒューズビットの状態が見えないのが大問題。○○なら音が出るけど、××だと音が出ないという、この○○、××が分からないから手の出しようが無い。

手元にある HIDaspx や Arduino といったハードに、AVR Studio とか arduino IDE、mymelo2、hidspx 等のソフトを組み合わせて色々とやってみました。

その結果、「HIDaspx + mymelo2」で何らかの曲データを焼いた後に、改めて「HIDaspx + AVR Studio」で曲データを焼くと、雑音ではなく曲が流れ出すことが分かりました。

ただし、曲のテンポが速い。感覚的には1.5倍~2倍といった感じ。

うーむ、やっぱりヒューズビットの状態を見れないことにはどうしようもないなと。

HIDaspxをhidspxで使用するためのコマンドを見つけた!

更に、あっちを調べ、こっちを調べと足掻いている内に、やっと見つけました。「HIDaspxをライタとして利用する」ということを解説している「千秋ゼミ」のページがありました。

コマンドラインで、ターゲットのAVRマイコンのFuse情報を確認(hidspx -rf)したり、Fuse Lowの設定(hidspx -fL<hex>)ができます(もちろんFuse Highの設定も)。

早速、ATtiny85のFuse情報を確認。先ずは、出荷時の状態。

*後日、この記述を見ながら自分でやろうとしたら、すっかりやり方を忘れていて一苦労。いやいや、すぐに忘れるもんですね(私がバカなだけ?)。なので追記しておきます。

コマンドプロンプトを起動し、
[cd(チェンジディレクトリ)+半角スペース+hidspxのディレクトリ(置き場所)]でENTER

続けて、
[hidspx -rf] で、READ FUSE(フューズの確認)
[hidspx -ph -d4 -fL11100010]で、Fuse Low の設定(11100010は例えばの数値)

ATtiny85fuse出荷時

Fuse Highの方は、いじるのが怖いので手をつけずにFuse Lowに注目して、mymelo2 で書き込み後のATtiny85のヒューズ設定を調べてみた(曲テンポがやけに速いやつ)。

テンポ速いフューズ

続いて、どういう過程でこの状態になったのか分からないけど、テンポ的には妥当(元音楽より少し遅めだけど)なATtiny85を調べてみると。

テンポ遅いフューズ

なるほどー。3つのヒューズ設定を見比べてみると、先ず「7bit」の「クロック分周初期値」が「0」だと音が出ないってことが分かります。

曲のテンポは、「0bit」~「3bit」の「システムクロック選択」によって変わるらしいということも分かりました。ま、当然といえば当然。

取り敢えず「11100010」でFix

バカな私にも少しずつ見えてきました。

この情報を頭の隅に置きながら、Arduino(互換機)からATtiny45へとスケッチを書き込んだ際のヒューズ設定を調べてみると、こんな記述を見つけました。

   ATtiny85 (internal 8 MHz clock) attiny85-8.bootloader.low_fuses=0xe2

「0xe2」とは、2進数にすると「11100010」となります。ってことは、(まあまあ)適度なテンポで流れるヒューズ設定は、どうやらこの作業の時に書き込まれたようです。

更に、今回の製作でバイブルとしているニコ動のヒューズ設定部分を改めて詳細に見ていくと、Low Fuseに「0xF1」という設定をしているのを見つけました。

「0xF1」、すなわち「11110001」です。これは、先の曲テンポがやけに速いシューズ設定(11100001)と比べると、「4bit」の「起動時間」が違うだけ。

でも「起動時間」って、電源投入からプログラムが動作するまでの遅延時間の選択らしいので、ここを変えてもテンポには影響が出ないような気がするんだけど。

うーむ。これ以上、ヒューズ設定をあれこれいじるのは怖いので、取り敢えず「11100010」でFixとし、微妙なテンポの調整は、大元の曲のテンポを調整することにしましょう。

まだ微妙にモヤモヤしてはいるけど、ヒューズ設定を自分で書き込めるようになったのは間違いなく大きな前進だと思う。



ブレッドボード配線パターンタイプのユニバーサル基板は便利!

このところ色々と楽しませてもらっているAVRマイコンですが、その書き込み装置には自作のHIDaspxを使っています

ただ、ブレッドボードで組み上げているせいなのか、たまに認識してくれなくなったりと、少しずつ不安定になっているような気がします。

末永く使っていこうと思っているので、基板に部品を半田付けしてしっかりしたものを作ろうと。

ブレッドボード上で組んで

先ずは、調子がいまひとつだったHIDaspxを、改めてブレッドボード上に組み上げました。右半分がHIDaspxで、左側のZIFソケット(ターゲットマイコン用)へと書き込み用の配線をしてあります。

HIDaspxブレッドボード製

ユニバーサル基板へとそのまま移し替える

基本的には、この組み上げた回路をそのまま、ブレッドボード配線パターンタイプのユニバーサル基板へと移し替えていきますが、取り敢えずHIDaspx部を配線、半田付けして動作確認。

ブレッドボードパターン基板で

続いて左側の空きスペースに、HIDaspxで書き込んでいく先のAVRマイコンをセットするZIFソケットと信号線とを半田付けしていきます。イメージは下図の通り。

HIDaspx書き込み配線

AVRマイコンは、ATtiny45/85(8P)とATtiny2313/4313(20P)を想定。28PのZIFソケットを使って、それぞれセットする場所を変える事で両対応にしようかと。

これもあって、AliExpress で買ったZIFソケットが届くのを今か今かと楽しみにしていたんです。

で、完成形がこちら。

HIDaspxユニバーサル基板版

裏側はこんな感じ。

基板裏側

ブレッドボード配線パターンタイプのユニバーサル基板は、部品配置が限定されてしまうので、部品密度はどうしても薄くなってしまいますが、その分だけ半田付けは(非常に)楽です。

年を取ってくると、肉眼での確認にも限界が

まあ、見てもらえば分かる通り素人の半田付けなので、見た目も汚く半田の状態も千差万別。それだけに、キチンと半田付けされているのか不安になります。

そんな時、大活躍するのが100均で買った拡大率約3倍のミニルーペです。

ミニルーペ

これで半田付けの状態を一つ一つ確認していったら、見つけました。半田ミスを。付いているといえば付いているけど、穴が開いている。

半田付けをルーペで

半田を付け直して、完成です。


<< topページへこのページの先頭へ >> 次のページへ >>