AVR 超入門 NO.3
[Previous]
[Next]
[Index]
AT90S1200 を使ったはじめてのプログラム
開発環境は ATMEL から無償で提供されている AVRstudio3.56 。下の画像はその起動時の画面。また、何よりもありがたいのはデータシートとヘルプファイルが日本語に翻訳して掲載されているサイトがある。

まずはじめにメニューの Project から New を選択し、 Select new project ウィンドウを開き Project name と Location と Project type を決める。 Project type には AVR Assembler を指定する。

AT90S1200 を使って PIC12F629 の時と同じように 0.5 秒点灯 0.5 秒消灯を繰り返すだけの簡単なプログラムを組んでみた。
今回のプログラム(テキスト形式)
アセンブラでプログラムを組むが、いきなり組むわけにはいかないので「マイクロコントローラ AVR 入門」にあるサンプルプログラムを参考にした。 AT90S1200A という 1MHz の内部発振回路を持つ AVR が使われているが、手元にあるのは AT90S1200 の外部発振回路で使うタイプ。そこで 4MHz のセラロックを外付けで使うことにした。両者は同じもので、内部のヒューズビットの書き換えだけでどちらにも切り換えられるということだ。しかし秋月のライターではヒューズビットなるものを書き換えることができないらしい。まあこのヒューズビットについてはゆっくり勉強しよう。
次に Project メニューから Add File... を選択してソースファイルを取り込む。 AVRstudio3.56 (以後 AVRstudio と略記) に備わっているエディタでもソースファイルを書くことができるが、ははっきり言って使いにくい。日本語が直接入力できないのだ。使い慣れたエディタかメモ帳を使った方がいいだろう。日本語が直接入力できないのは PIC の MPLAB IDE 6.3 も同様だ。両者で大きく違うのは AVRstudio では日本語を含むファイルを読み込むと 2 バイト文字は文字化けして読めない。読み込んだ後、毎回フォントを日本語に指定しなければならない点は何とも使いにくい。後者では一度日本語に指定しておけばそれ以降読み込んだファイルの 2 バイト文字はきちんと表示される。もっとも日本語を主に使うのはコメントぐらいなので、使わなければ問題ない。

AVR で使うことのできる汎用レジスタは 32 本ある。 R0 から R15 までは特定の命令が使えないが R16 から R31 までのレジスタはすべての命令が使えるとある。なるほどサンプルプログラムを眺めてみると多くのプログラムが R16 から使っている理由がこのあたりにあるようだ。すべてのレジスタに対してシングルサイクルでアクセスできるということだ。命令のすべてがシングルステップではないようだが PIC の 1 ステップ 4 サイクルとは違っている。クロックのわりに動作が速いというのはこのあたりにあるのかもしれない。右の画像は AVRstudio の中で開いた Registers ウィンドウ。
割り込みもパワーオンリセット、外部割り込み、タイマー割り込み、アナログコンパレータ割り込みなどがあるが、とりあえず最初のものを除いてまだわよくからないので今回は使わない。
LED を点灯した後と消灯した後にタイマルーチンをおけば 0.5 秒点灯 0.5 秒消灯を繰り返すルーチンを作ることができる。サブルーチンのコールには rcall(Relative Subroutine Call) 命令を使う PIC の call 命令と同じと考えて良さそうだ。スタックレベルは 3 段までなので注意が必要。 PIC16F84A の 8 段までに比べると少ないが、 PIC12C509A ではスタックが 2 段までだったので気を付ければそれほど問題ではない。
シミュレータデバッグによる点灯・消灯のタイムは統合環境の中の Processor ウィンドウの StopWatch で確認しながらソースを書き換えて調整することができる。 MPLAB に慣れてしまっているためか AVRstudio はちょっと使いにくい気もするが、少し使い込めば問題なさそうだ。とりあえず LED の点灯・消灯時間をシミュレータで調整してみた。今回の 4MHz レゾネータを使った場合 1 ステップが 0.25usec となる。タイマサブルーチンは PIC とは命令が違うもののそれほど違和を感じない。

前にも書いたが、あらかじめ上の画像のように AVR Assembler Options で Intel Hex ファイルを指定しておく必要がある。 HEX ファイルの生成は Project メニューから一番下にある Assemble をクリックすればいい。エラーがでたときはエラーコマンドをダブルクリックするとエラーのあるソースにフォーカスが移る。エラーがなければ HEX ファイルが生成される。 AVRstudio でデバッグを行う場合は Project メニューから Build and run をクリックする。シミュレータでトレースする場合はあらかじめ発振周波数を Simulator Options で Device を選択したあと Frequency を合わせておく必要がある。

めでたく no errors で生成された HEX ファイルをライタに読み込んで AT90S1200 に書き込み、実験ボードにセットして動作確認を行う。

こうして実験中のボードを見ると PIC と何ら変わらない感じだ。少々気になったのは 4MHz のレゾネータをセットして、 3.7V の電源電圧で AVR 自体約 4mA もの電流を消費している。 PIC に比べて結構電流食いのように感じるが 8 ピンの AVR ではどうだろう。ポート出力のシンク電流は 20mA となっているが、吐き出し電流はもっと少ないと思われる。このあたりも PIC の 25mA に比べて少ない。ただしこの値はあくまでもデータシート上での値。実際に負荷をつないでポートの出力電圧がどの程度ドロップするかを調べてみないとわからない。
とりあえず初めてのプログラムがきちんと動いたのでうれしい。しかし 20 ピンの AT90S1200 は果たして趣味の世界のどのような場面で使うことができるだろうか。
AVR では R0 から R31 までのレジスタのうちすべての命令が使えるは R16 から R31 まで
AT90S1200 のスタックレベルは 3 段まで
[Previous]
[Next]
[Index]
2003/09/03