PIC AVR 工作室->TopPage->工作のツボ->AVRのツボ
AVRのツボ
AVRを使って工作をする際に、私が迷ったり困ったりした時のことを備忘録的に記していきたいと思います。 なのであまり体系立てた情報にはならないかもしれませんが、書籍に載ってないことや、書籍では分かり難いこと などを記載していきたいと思います。
以下、少しずつ整備していきます。
統合環境関係
入手方法とインストール
趣味の世界で使用する開発環境といえばAVRstudio+CコンパイラWINAVRの2つのソフトでしょう。
これらのソフトは各配布サイトに行けばダウンロードできますすが、それよりもAVRwikiの最新情報を時々見に行く方が 簡単だと思います。最新版のリリース状況とそのダウンロードサイト場所が適宜開示されていて便利です。
インストール自体も簡単なので躓く人はいないでしょう。
デバッギングについて
アセンブラの場合はシミュレーション時のSRAMダンプやレジスタダンプなどを利用すれば、デバッギング作業自体はそれほど 他の開発環境と変わり無いと思います。
問題はWINAVRでC言語プログラムのデバッグを行う時のこと。C言語ソース上で定義した各変数はメモリダンプ上のどこに 配置されているか、最近まで知りませんでした。
ネットで調べてみても「elfファイルをcoffファイルに変換して読み込ませよ」とか色々なことが書いてあるんですが、 それらがどのバージョンの話なのかが不明確だったりして、当時私の頭では結局どうすればいいのか判断できず仕舞い。 仕方なく暫くはmemoryウィンドウでSRAMを表示させておいて1ステップずつ実行し、 SRAMの変化で推測するという原始的な方法で無理やりデバッグをしておりました。 (そもそも各変数がどのアドレスに割り当てられているかすら分からなかった。それでよくデバッグできたものです…)
が、AVRstudioを弄っていたら、Cソース上の変数の中身をウォッチする方法がようやく判りました。 簡単に纏めておきます。正直、全然難しい話じゃなかった…単なる操作方法の問題でした。 (ちなみに現在、AVRstudioのバージョンは4.13、WINAVRは20070525を使用しています。)
- 1:まずは普通どおりデバッギングを開始(黄緑の三角をポチッと押すか、debug→start debuggingで開始)
- 2:watchウィンドウを開く(view→watch)
- 3:nameのテキストボックスをダブルクリックし、変数の名前をテキストボックスに入力
- (別方法)2~3の代わりに、ソースリスト上の変数をドラッグして選択し右クリックしてadd watchを選択
この手順で必要な変数をすべてwatchウィンドウに登録しておけば、シミュレーション中に各変数を観測することができます。 値は10進値にも16進値にも表示を切り替えられます。さらに配列は1個1個の要素すべてを一覧上で見ることも出来ます。 うーん、よく出来てる。
注意点を1つだけ。変数のスコープのことです。
for文のループカウンタや座標軸などは複数の関数内で同じ名前を使うことが多いと思います(iとかjとかxとか)。 こういった複数箇所で定義されている変数は一体どれがwatchリスト上に表示されるのかというお話。 (watchウィンドウに登録する変数名は単なるテキスト文字としての名称であって、少なくともどこの関数で定義 されている変数かを明示的に指定できません。)
手っ取り早く実験してみました。2つの関数内で同じ名前で定義されている変数を両方ともwatchウィンドウに登録 してみてシミュレーターを実行。結果は単純でした。現在実行中のステートメントを含む関数で定義されている変数の内容が 表示されます。別の関数に処理が移れば当然そちらの関数で定義してある変数の内容が表示されます。ちなみに、 スコープ外(該当の変数名を使用していない関数内など)になると値が表示されません。
解ってしまえば単純な話。そういえば、watchウィンドウ自体は前々から存在を知ってたんだけど、使い方が わからないと操作のしようないなぁ…って思ってた記憶があるなぁ。確かその時、変数名だけ入力したって どの関数か指定しないと何が表示されるかわからないだろうから、まさか変数名だけ入れるんじゃないだろうなぁ…なんて 憶測して、でもそんなwatichウィンドウの仕様を調査するより、目先のプログラムのデバッギングの方が重要と思い 後回しにしていたという記憶があります。
まぁ、無事解ったのでめでたしめでたし。
書き込みウィンドウについて
AVRstudioからAVRISPmkⅡでいざ書き込もうと思うと、ついやっちゃう失敗があります。
書き込みウィンドウを開くと、deviceが自動的に選択されてて、書き込むHEXファイルとEEPROMファイルも 自動的に選択された状態でウインドウが開きます。そこでプログラムボタンをポチッと押せばそれぞれHEXファイルや EEPROMファイルが書き込まれるんですが、その時に陥りやすい失敗が。
それは、デフォルトで選択されているデバイス名やファイル名が常に前回使用したものであるということ。
現在編集中のプロジェクトで使用しているHEXファイルやEEPファイルをデフォルトで設定して くれればいいのに、わざわざ前回使ったファイルを覚えておいてくれるというおせっかい仕様。
何でこんな仕様になってるんですかね?テストボードV1やPLAYERのように複数のICを 搭載しているボードで開発している時って、ついうっかりファイルの指定を忘れて別のIC用HEXを書き込んでしまい、 動作がメチャメチャになるようなことがあります。そういう時ってまずプログラムを疑ってしまうんですが、 実は単に書き込んだファイルが間違えていただけ、という間抜けなことをよくしてしまいます。
このUIを直してくれるとうれしいんですけどねぇ。
各種ウィンドウについて
AVRstudioを立ち上げると、ソース画面やデバッグ用のメッセージ画面、ダンプファイルをウォッチするための 画面など、複数のウィンドウが開きます。これが今いち使いにくい…。
複数のウィンドウが開くのは別に普通なので構わないんですが、各ウィンドウを配置できる位置が妙に固定化されてたり、 中途半端な位置にしか動かせなかったりして、思うように配置できません。並列させたいウィンドウが重なっちゃったり。
このUIももう少し改善されるといいんだけどなぁ。(使い方が解ってないだけ?)
書き込み器関係
AVRISPmkⅡ
ネットでAVRの書き込み器関係の情報を探ってみると、皆さん自作されている方が多いようですね。
PICと違って低電圧で書き込めるし、書き込みのソフトもハードの回路図もそこらじゅうに転がって いるし、見たところ部品も汎用品ばかり。多分作ってしまうのは容易なのでしょう。
私はAVRISPmkⅡを最初に買ってしまいました。なぜかというと、書き込み器を自作すれば安上がりで 出来てしまうんだろうけど、それがトラブルの原因になるのがイヤだな、と思って…。特に書き込み速度については みなさん苦労しているようなので、それなら純正の安いアダプター買ってしまえ!と。
それともう一つは、以前マルツパーツ館の2Fで山根さんのデモンストレーションを拝見した際に、AVRstudio上から 操作マウスだけでサクッと一瞬で書き込んで、その直後にすぐ動作し始めるボードを見て、「おぉ、AVRstudioと ISPケーブルって、すっげーイイじゃん!」って。他のもの苦労して使うのが面倒に思えました。
それまでマイコンといえば秋月のPICライターしか使ったことが無かったので、ICの抜き差しもいらず、 書き込みも速く、USBから直接書ける小さい機械というのがすごく魅力的に思えました。 素人の工作で小さいマイコンばかり使うなら、これだけで充分な気がするんですけどね。
引出しの中には以前入手したまま放置してあるXILINXのJTAGケーブル もあるはずなんだけど、20ピンや28ピン程度のマイコンなら、AVRISPmkⅡがやっぱり一番簡単でいいなぁと思います。
EEPROMへの書き込み
プログラムとEEPROMの両方のファイルを書き込まないとならない場合の話です。
プログラムファイルとEEPROMの両方を書き込む時って、まずはプログラムを書き込んで、次にEEPROMを 書き込むかと思いますが、(デバッグなどを行って)その後またプログラムを上書きすると、なぜかEEPROMが クリアされてしまいます。プログラムのロジックは合っているはずなのに、想定しない動作をしたりして頭を悩ませていると、 原因はEEPROMが空っぽだから、という話が結構ありました。なんで何でしょうかね?(ドットイーター 作っていたときに何度も悩みました)
AVRISPmkⅡの問題なのか、それともAVRstudioの問題なのか、もしくはチップ自体の問題なのか…?
アセンブラ関係
準備中
各ペリフェラルの使い方
準備中
アドレッシングモードについて
準備中