AVR

                         その1

まず、IOポートに信号を出力させるという簡単なものから始めたいと思います。
今回用いるマイコンは、AVRの1200Aというマイコンです。
このマイコンには、クロック発生回路まで内蔵しているので
外部にクロック発生回路を必要としません。
(基本的には1200と同じですが、1200Aは内部クロックでの動作)

ICのピン配置は次のようになっています。

1200のピン配置

電源、リセット、クロック用ピン以外は、全てIOポートになっているという
わかりやすいICです。ポートは、B,Dの2種類あり、それぞれ8,7ピンあります。

 

ハードの作成

このICを用いて、次のような回路を作りましょう。
マイコン回路といっても、ここまでシンプルになってしまいます。

シンプルな回路

Rは、300Ω程度がいいでしょう。ICは、直に基板につけるのではなく
ICソケットを使いましょう。これをしないとマイコンが書き換えられなくなってしまいます。

ここまでの回路ができたら、ハードウェアは完成です。
次は、マイコンを動かすソフトを作成していきます。

 

ソフトの作成

AVR Studioを起動してください。
「Project」からNewを選び、新しくプロジェクトを作成します。
「AVR Assember」を選ぶのも忘れないようにしましょう。

プロジェクト作成

 

次に、アセンブラファイル自身を作成します。
「ファイル」から「New Text File」を選択します。
ここでは、以下のようなファイル名にしました。拡張子に「.asm」をつけるのを忘れないでください。

14_std02.gif (3849 バイト)

このファイルに次のような命令を書いてみましょう。
なお日本語は、「Edit」の「Font」から日本語のフォントを選ぶことで表示できます。

.include "1200def.inc"
.def    temp = r17        ; 一時ファイル
    ldi    temp,0xFF    ; ポートBを出力に設定
    out    DDRB,temp    
    ldi    temp,0xFF    ; ポートDを出力に設定
    out    DDRD,temp

    ldi    temp,0x55
    out     PORTB,temp
    
END:
    rjmp END


;**** End of File ****

プログラムの流れを見てみましょう。

.include "1200def.inc"

最初の「.include」は、1200マイコンの定数値の読み込みを行っています。
プログラム中に「DDRB」などという文字が出てきますが、その実際の数値を
「1200def.inc」ファイルに記述しています。

.def  temp = r17    ; 一時ファイル

ここでは、tempという変数を定義しています。
本来は、「R17レジスタ」というようにレジスタ名を指定するものなのですが、
それではやりにくいので、「temp」という文字に置き換えています。
セミコロンを使うと、コメントになります。

ldi  temp,0xFF

ldiは、レジスタに定数を代入する命令です。ここでは、0xFFという値を
temp変数(実際にはR17レジスタ)に入れます。

  ldi  temp,0xFF  ; ポートBを出力に設定
  out  DDRB,temp

outは、指定されたIOアドレスに、指定されたレジスタの値を出力します。
ここでは、DDRBというレジスタにtempの値を書き込みます。
このDDRBですが、ポートBの入出力を指定するレジスタです。
1200マイコンには、前述の通りBとDの2ポートがあります。

IOポートの制御

IOポートの制御に使うレジスタは、3種類あります。

DDRB 入出力の指定 0-入力 1-出力
PORTB PORTBへ出力
PINB PORTBの入力値

  ldi  temp,0x55
  out  PORTB,temp

PORTBにtempの値が書き込まれ、PORTBのICピンに出力されます。

END:
  rjmp END

rjmpは、指定された場所に移動するという意味です。
END:はラベルになっているので、「END」という場所は
ここであるということを示しています。
rjmp ENDによってENDと示された場所、つまり自分自身に戻るので
永久ループになります。これは、プログラムが終了すると、
その後の動作が不定になるのを防ぐためです。

 

シミュレーション

Buildを押すと、コンパイルが行われます。
コンパイルが無事に通れば、シミュレータが立ち上がります。
すると、プログラムソースには次のような矢印が現れます。

ソース画面

F10を押すごとに1行づつ実行確認ができます。
シミュレータでは、そのときのレジスタの値、IO、Flush、EEPROMの値、
処理にかかる時間、ポートの値や、ステータスレジスタの値などを
表示することができます。
下の画面は、上記のプログラムを最後まで実行させたときの様子です。
PORTBの出力が01010101になります。

IOポートのシミュレーション


動作確認

シミュレータで予定道理の動作であることを確認したら
実際にマイコンにデータを書き込み、基板に装着して
動作確認を行います。

パソコンとライターをシリアルケーブルでつなぎ、ライターソフトを立ち上げます。
(秋月のセットに入っていると思います。)

13_aki2.jpg (47838 バイト)

ライターソフトで書き込むマイコンの種類と、データ(HEX形式)を指定します。
ところで、このHEX形式のファイルは、AVR Studioでは作成されません。
AVR Studioでは、専用のエミュレータとのセット仕様を前提としているので
HEX形式のファイルが必要ないためです。

そこで、「AVR Assembler」を新たにATMELのHPからダウンロードし
コンパイルをします。ここでできたHEXファイルをライターに
書き込むことになります。

ファイルを指定してWriteを実行すると、Writeとベリファイが実行されます。
これで、マイコンの完成です。
このマイコンを基板に装着して電源を入れると、LEDが交互に点灯しているはずです。


戻る戻る