[第1 章]

開発ソフト，プログラマは低価格だが AVR は高機能マイコン

AVR を知るにはまず動かしてみよう

1-1 AVR マイコンとは
AVR はアトメル社の開発した 8 ビット RISC タイプの MCU（Micro Controller Unit）です．
アトメル社は 1984 年にアメリカ合衆国のサンノゼに誕生しました．社長はギリシャ系アメリカ人のジョージ・パレゴス氏で，当初世界最速の EPROM でデビューし，その後も不揮発性メモリ分野で特色ある製品をリリースしてきました．パラレル EEPROM では，世界で最初にエラー・ディテク
ション・コレクション機能を搭載し 10 万回の書き換えを可能にした製品を商品化，EPROM でやはり世界で最初に低電圧 3 V 対応の製品を出したのもアトメル社です．また，ベンチャ企業には珍しく，自社ファブ（製造工場）を早い時期からもったことでも有名です．現在アメリカ，ドイツ，フランス，
イギリスなどに IC 製造の前工程の生産拠点をおき，デザイン・センタも世界各地にもつようになりました．アセンブリに関しては東南アジアの協力会社に依託しています．
AVR もこの展開の一つで，現在アトメル社のノルウェー工場で設計開発が行われています．ここ2 〜 3 年，MCU 業界では世界でもっとも出荷数の伸び率が高いと評価され，2004 年度は年率 40 ％を超える勢いで世界中の組み込み製品に採用されてきています．アトメル社の製品ラインナップの中でも 3 分の 1 を占めるほどになってきました．現在アトメル社には，32 ビット MCU として ARM コアをもつファミリ，8 ビットは AVR と 8051 コアをもつ製品，4 ビットに MARC4 などの製品がラインナップされていますが，自社製の ASIC，ASSP 製品のほとんどは AVR と ARM コアを内蔵して作られています．
AVR はノルウェーの大学生二人が卒業研究で開発し，その後この二人ごとアトメル社へ移籍し，
アトメル・ノルウェーとなり，ノルウェー工場で開発されていることはよく知られていることです．
AVR の名前の由来もその二人のイニシャルからとったとする説が有力です．

1-2 AVR を動かしてみよう
AVR のことを知ってもらうには，いろいろ解説しても始まらないと思います．とにかく少しでも動かしてみる，動かしてみればいかに使い勝手がよいかがわかってもらえると信じています．そこで，いきなりですが，AVR を動かすところからはじめます．動かすといってもハードウェアを持ってい1-2 AVR を動かしてみよう

11

ない人もいるわけですから，ここでは，誰でも無償で使うことのできるフリーウェアで AVR 開発のための Windows パソコン上で動作する AVR Studio を使って，クロス統合化開発環境上で AVR の動きを追ってみることからはじめます．AVR Studio は，アトメル社のホームページからダウンロード
することができます．
続いて，STK500 というアトメル社の供給しているスタータ・キットを使用して，AVR にプログラムを書き込んで走らせる手順を説明します．STK500 を持っている人は実際にデバイスを動かしてみることができます．AVR を実際に動かすためには最低限書き込み器が必要です．もし STK500 を持っていない場合は，AVRISP と呼ばれる簡易書き込み器を入手されることをお勧めします．書き込
み器をわざわざ自作する（書き込み器の製作から始める解説書を多くの MCU で見受けるが，これはAVR に関する限りむだであると思う）よりも手間がかかりませんし，とても低価格で入手できます．
これとチップを入手して，ユニバーサル基板に組み立てれば，ここでの話はすぐに実行できます．
その昔パソコン上でアプリケーション・プログラムを書いて走らせようとして暴走し，システムを壊してインストールをしなおすなどということを経験された方もいるかもしれません．AVR を開発，
デバッグする際にそのようなことはほとんどありません．ほとんどというのは微妙なところですが，いくつかの注意点を守れば，デバイスを壊したり，ツールを壊したりするケースはまずありえないので，どんどん自分の思いついたアイデアを実機でチェックしてもらいたいと思います．もし何らかの操作ミスで動かなくなっても，ほとんどのケースでは修復できます．

1-3 AVR Studio のインストール
まず，AVR Studio をインストールします．アトメル社のサイト（http://www.atmel.com/products/avr/）へアクセスし，左端のメニューから Tools & Software をクリックし，Design
Software の欄から AVR Studio4 をクリックすると Software の欄に AVR Studio4.xx の項目が現れますから，ディスク型のアイコンをクリックしてプログラムをダウンロードします．.xx のところは番号が大きいほうが新しいバージョンです．この際，保存をクリックして適当なフォルダを作りダウンロードしておきます．
AVR Studio4 をダウンロードする際，その近くにサービス・パック（SPx）の表示がある場合，一緒にダウンロードしておきましょう（図 1-1 参照）．
ダウンロードしたファイルをダブル・クリックして自動解凍します．パソコン型のセットアップ・
アイコンをダブル・クリックすると，セットアップ・ウィザードが開始されます．これからは画面の指示に従ってインストールを行ってください．Windows 2000 や XP などで Administrator とユーザを分けて利用されている方は，必ず Administrator 特権でインストールしてください（インストール
後はユーザ・モードで動く）．
途中ライセンスの許諾の可否についての問い合わせ画面が出てきますが，ひととおり読んで問題がなければ，I

accept …をクリックしてさらに Next をクリックします．フリーウェアなので，使用する分には問題はないですし，配布も OK のようですが，ソフトの改造や中身の解読は許されていないようです．
また，USB のドライバをインストールするか否かの問い合わせも途中で現れますが，JTAGICE-

12

第1章

AVR を知るにはまず動かしてみよう

二つのファイルをダウンロードして，ファイルに保存しておく

図 1-1 アトメル社のAVRStudio ダウンロード・サイト

mkII や ICE40/50 を使うことがあるようであれば，同時にインストールしておくとよいでしょう．使
えない OS もあるようなので，メッセージに注意してください．必要に応じてシステムを一度再起動してから，サービス・パックのインストールを行います．アイコンをダブル・クリックして画面の指示に従ってください．

1-4 アセンブラでのプログラミング
アセンブラでプログラムを作り，オブジェクト・コード（実際に AVR に書き込むためのコード）を生成するためには AVR Studio を使用して行います．

● プロジェクトを作る
パソコン上で，スタート→（すべての）プログラム→ ATMEL AVR Tools → AVR Studio4.xx をク
1-4 アセンブラでのプログラミング

13

Project Wizard

図 1-2 AVR スタートアップ画面

図 1-3 アセンブラ・ソースの入力画面

リックして AVR Studio を立ち上げます（デスクトップにショートカットを作っておくと便利）．図 12 のような画面が表示されます．
この Welcome to AVR Studio ウィンドウ（正しくは Project Wizard という）から新しくプロジェク
トを起こす場合は，Create New Project（既存のプロジェクトを開く場合は Recent Projects の中からファイルを選択し Open）
をクリックすると，次のウィンドウが現れます．
Project Name にプロジェクト名を入力し，Location のディレクトリを指定します．新しいフォル
ダを作ることもできるので，トレーニング用のフォルダを作っておきましょう．入力がすんだら，
Next>> をクリックします．ここではシミュレータでのシミュレーションを行うので，Debug
Platform のリストから AVR Simulator を選択して網掛け状態にしておきます．
Device 欄からデバイスを選択します．これからプログラムを書くためのデバイスです．この章では ATmega8 を用いるので ATmega8 をクリックし，Finish をクリックします．次の画面が表示されます（図 1-3）．中央の … program1.asm の編集ウィンドウにアセンブラのソース・コードを入力
して，ソース・ファイルを作成することができます．

● プログラムの入力
図 1-3 の中の C:¥Programwork¥Program1.asm に示されるように，リスト 1-1 の内容を入力してみます． ； はコメント行で，半角英字で入力しておけば，これ以降の行には，全角漢字も入力できます．改行した後は半角英数字に戻さなければなりません．
それではとりあえず，入力してみてください．.で始まるステートメントは擬似命令と呼ばれるもの
で，実際にコンピュータは実行しませんが，プログラムをコントロールするための命令です．AVR のアセンブラでは，16 進数を表現するときに先頭に 0x とつけてその後に 10C5 などの 16 進数を続けて記述します．すなわち 0x10C5 と書くことで 16 進数がアセンブラに伝えられます．$10C5 と書いても同じ意味になります．インテル系で使われる表現，010C5H などは受け付けられません．
入力が終わったらファイルをセーブします．File メニューから Save をクリックします．

14

第1章

AVR を知るにはまず動かしてみようリスト1-1 加算機能を確認するサンプル・プログラム; Program1; AVRStudio を用いてもっとも単純なプログラムを作る; Data1 ← 0，Data2 ←定数（5）; Data1 = Data1 + Data2 を繰り返し実行する.include "m8def.inc".def Data1 = R16.def Data2 = R17.org 0x00; リセット時のスタート番地
rjmp
RESET
RESET:Loop:; mega8 の定義ファイルをインクルードする; リセットがかかったときに 0 番地からスタートする; 相対ジャンプで RESET へジャンプ

ldi
ldi

Data2, 0x05
Data1, 0x00

; Data2 に初期値 16 進数 05 をセット
; Data1 を 0 で初期化

add
rjmp

Data1,Data2
Loop; R16+R17 → R16; ラベル Loop へ相対ジャンプ

永久に繰り返すプログラム

図 1-4 アセンブル後の表示● アセンブル
次に，アセンブルを行います．アセンブルは Build→ Build をクリックします．何も誤りがなけ
れば，画面の下のほうにある Output ウィンドウに Assembly

warnings と表示されます（図 1-4）．

complete, 0 errors 0

もしスペル・ミスなどがあれば，赤色の表示とともに Error Message が表示されます．どこがエラーかを知るには，メニュー・バーの Project をクリックし，プルダウン・メニューから Next Error（F4）をクリックすることで，エラーのある行にカーソルを移動させることができます．スペルなどをチェックして修正を加えます．修正後再度 Build でアセンブルし，エラーがなくなるまで修正とア
センブルを繰り返します．
1-4

アセンブラでのプログラミング15

1-5 AVR をシミュレータで動かしてみよう
ここからは，シミュレーションを行ってプログラムの動きを見ていきます．Debug → Start
Debugging をクリックすると，Work Space の表示がレジスタおよび I/O レジスタ表示に変わります．
Register16-31 の前にある ＋ をクリックしレジスタを展開しておきます（図 1-5）．さらに Processorも同様に展開しておきます．
これでシミュレーションの下準備の完了です．

● ステップ実行
Debug → Step Into をクリックしてみます．ソース・ファイルの黄色い矢印が移動したはずです．
プログラムが 1 ステップ実行され，次に実行される命令を矢印は示しています．Work Space のProcessor の下にある Program Counter の値も 0x0000 から 0x0001 へ変わります．rjmp 命令を実行したことで 2 サイクルかかったことが Cycle Counter に示されています．さらに Frequency が4 MHz，Stop Watch

0.5μs であることが示されます．4 MHz での 1 サイクルが 0.25μs なので，2 ク

ロック・サイクルで 0.5μs で rjmp 命令が実行されたことがわかります．
さらに Step into をクリックしていくと，1 ステップずつ命令を進めることができます．Step Intoの代わりに F11 を押すことでもステップを進めることができます（4 MHz の設定になっていないこともある．そのときは，Debug メニューから AVR Simulator Options を選択して周波数の変更を行うことができる）．
何回かステップを進めていくときに Workspace の R16，R17 も注目します．ldi 命令でデータをブレーク・ポイントをセットすると， が表示される

図 1-5 シミュレーション画面

16

第1章

AVR を知るにはまず動かしてみようロードし，add 命令で加算された結果が表示されていきます．16 進数で表示されているのでわかりにくいですが，立派に演算を実行していることがわかります．
Debug → Auto Step を次にクリックすると，繰り返しステップが実行され，そのつど Workspaceにアップデートされた結果が表示されます．停止するには，Debug → Break をクリックします．

● ブレーク・ポイント
Debug → Run でプログラムを走らせると，ストップした時点で結果を表示します．ブレーク・ポ
イントを検知した時点か Debug → Break などで，強制的にストップさせることができます（図 1-6）．
ブレーク・ポイントは，ソース・ウィンドウのステートメントにカーソルを置いて，左マウス・ボ
タンをクリックし，ツール・バーから Debug → Toggle Breakpoint をクリックするか，F9 を押す，
あるいはマウスの右ボタンを押してプルダウン・メニューから Toggle Breakpoint を選択してセットできます．トグルになっているので，押すたびにセット→リセットを繰り返すことができます．
設定されたブレーク・ポイントの上にカーソルを当て，右マウス・ボタンをクリックすると，プル
ダウン・メニューが開きます．ここで BreakPoint Properties にカーソルをあてクリックし，ブレークの条件を設定してみます．continue execution after the view have been updated. にチェックをつけて Ok をクリックしてブレーク・ポイントの一つにさしかかったとき，View を更新し，継続してRun するモードを設定しておき，F5 を押して Run させるとレジスタの内容がブレークにさしかかる
たびに更新されます．この場合，ブレーク・ポイントではブレークしません．
このように，AVR の動きを非常に簡単に見ることができます．ビット数の大きなコンピュータではアプリケーションを動かすまでの初期化という儀式だけでも大きなプログラム・ステップを取ってしまいますが，AVR はそのようなことにプログラム・スペースを費やす必要はほとんどありません．
最低限必要な初期化だけでシステムを作ることができます．

図 1-6 シミュレーション中の
AVRStudio

1-5 AVR をシミュレータで動かしてみよう

17

1-6 STK500 スタータ・キット
前節ではシミュレーションで AVR を動かしましたが，ここでは実際の AVR チップで動作をさせてみましょう．
ただし，ハードウェアがなければ実機確認はできません．一番手っとり早い方法は，アトメル社から出ているスタータ・キット STK500 を入手してそれで実験することです．しかし，STK500 はコ
ンピュータが普及する前の時代から考えるととても安くなったとはいえ，個人で購入される方にはまだ高価と思われるかもしれません．ここでは，STK500 以外にユニバーサル基板に部品を配線して作った場合でも同様に AVR を動かして見られるように解説します．
その場合でも最低限の書き込みツール AVRISP は用意してください．
STK500 は，図 1-7 のようにボード上に 40 ピンまでの数種類の DIP ソケットが並べられているボー
ドです．この上には，さらに ISP〔イン・システム・プログラム：AVR が実装されたシステム（ボード）上でプログラムをする〕用のプログラマ回路，ボードで使用するための電源電圧を発生する回路，
クロック周波数を発生するクロック発生回路，デバッグをするときに利用することができる 8 ビットの LED 表示機，やはりデバッグ時に利用できる入力信号を与えるための 8 ビットの入力スイッチ，
外部とのコミュニケーションを行うためのシリアル・ポートなどが組み込まれています．
スイッチ・ポートの
ピン・ヘッダターゲット・デバイス用
D I Pソケット

オプション設定用
ジャンパ

リセット・
スイッチ

拡張ボード用ヘッダ
電源スイッチ→ON

PA
90S8535
mega32
mega8535 mega16
PD

tiny26電源コネクタtiny15

mega8 mega88
mega48 mega168
PE

ホスト・パソコンのCOMポートと接続

tiny28PB

90S1200
90S2313tiny2313

tiny12tiny13tiny4590S8515
mega8515
mega162

シリアル・ポートとしてユーザが使用可

PC

入力
スイッチ

LED
表示器

LEDピン・
ヘッダ

ターゲット
I SPヘッダ

6ピン I SPイン
ターフェース

図 1-7 STK500 のコンフィグレーション

18

第1章

AVR を知るにはまず動かしてみよう

10ピン I SPイン
ターフェースプログラム・スイッチ．
ファームウェア・アップデートのときに使用．それ以外では押さないこと

AVR のもつ I/O ポートは，10 ピンのヘッダ・コネクタへ出されているので，LED，スイッチ以外のユーザがユニバーサル基板に作ったインターフェースともケーブルを介して接続することができるように工夫されています．

1-7 STK500 を動かす
それでは STK500 を使う準備をします．
AVR Studio を立ち上げて New Project をクリックし， Program2 と名前をつけて，リスト 1-2のプログラムを入力していきます．デバイスは，ATmega8 で設定していますが，STK500 に付属のサンプルを使う場合，付属しているサンプル IC 名でもかまいません．この場合，プログラムの中の.include の m8def.inc を変更します．
リスト1-2 STK500 上で動かすサンプル・プログラム; Program2; STK500 の LED を光らせる簡単なプログラムを書く; 出力ポートの初期化; 時間を遅らせるサブルーチンを使用するためにスタック・ポインタを; 初期化しサブルーチン・コールを行う.include "m8def.inc".def Temp = R16.def CNT1 = R17.def CNT2 = R18.org 0x0000
rjmp
Delay1: ldi
Loop1:
ldi
Loop2:
dec
brbc
dec
brbc
ret

;
RESET
CNT1,
0xFF
CNT2,
0xFF
CNT2
1, Loop2
CNT1
1, Loop1; ディレイ・サブルーチン・エントリ; カウンタ値の初期化;; カウンタ値をマイナス 1，結果が 0 になると SREG:Z=1; SREG のビット 1（Z）がクリアされていれば Loop2 へブランチ;; サブルーチン・リターン

RESET:

out
ldi
out

Temp, low(RAMEND) ; RAM の最終番地をバイト単位でSPL, Temp; スタック・ポインタへセット
Temp, high(RAMEND); メモリ領域の終わりである RAMEND は; 各.def ファイルの中で定義されている
SPH, Temp
Temp, 0xFF
DDRB, Temp
; PORTB のデータ・ディレクション・レジスタを出力にセット

out
rcall
com
rjmp

PORTB, Temp
Delay1
Temp
Loop

ldi
out
ldi

Loop:
; Temp レジスタのデータを PORTB にセット
; ディレイ・サブルーチンを相対コール; Temp レジスタのデータをビットごとに反転;

1-7 STK500 を動かす

19

たとえば AT90S8515 を使うなら， 8515def.inc に置き換えます．AVR Studio を標準インストールした場合，ディレクトリ¥Program

Files¥Atmel¥AVR Tools¥AvrAssmbler¥Appnotes フォルダの下に def ファイルが置かれており，この中から該当するデバイスのファ
イル名を見つけて記述します．
入力がすんだら Build でオブジェクト・コードを作成し，シミュレーションにかけることができる
ので動かしてみてください．ソフトウェア・タイマに時間がかかるので，ブレーク・ポイントを「out

PORTB, Temp」の行に設定し，ブレーク・ポイントのプロパティでブレーク・ポイント

でビューを更新後，継続モードを設定しておくと，PORTB の変化のようすが見られるでしょう．
次は，いよいよ STK500 と接続して，実デバイスでの動作の確認です．

● 電源を用意する
まず電源を接続します．電源はキットには入っていませんが，電源ケーブルは付属しています．実験用の電源を使うか，手持ちの AC アダプタでも電圧とピンの径が合えば使うことができます．電圧は 10 〜 15 V の DC で，極性は問いません．電源コネクタに接続します．接続時には，電源スイッチ
は切っておきましょう．

● STK500 とパソコンをシリアルで接続
ホスト・パソコンのシリアル・ポートと STK500 の通称 RS-232C CTRL ポートを，付属のグレイ・ケーブルで接続します．RS-232C CTRL コネクタは Dsub 9 ピン・コネクタで，ボード・エッジの中央付近にあります．
最近のノート・パソコンでシリアル・ポートがサポートされていない機種もありますが，USB-RS232C 変換アダプタなどを使うこともできます．しかし，動作が安定しないケースもあるので，できればシリアル・ポートをもったパソコンを用意することをお勧めします．

● AVR チップをソケットに差し込む
IC チップを IC ソケットに装着します．ATmega8 を持っている人は SCKT3200A2 の緑色に色分けされたソケットに装着します．IC の向きに気をつけてピンを曲げないように装着してください．IC の向きは RS-232C コネクタの反対側に 1 ピン・マークを向けます．AT90S8515 を使う場合は SCKT3000D3（赤色）に装着します．AVR チップとソケットの対応は第 5 章で説明します．

● 書き込み用 ISP ケーブルを接続
次に，ISP 用のケーブルを接続します．6 ピンのヘッダ・コネクタ ISP 6PIN とそれぞれの装着したデバイスに相当する色に対応する SPROG ヘッダ・コネクタに付属のフラット・ケーブル 6 芯を接続します．フラット・ケーブルはひねったりせずに，1 ピン・マークをフラット・ケーブルの 1 ピン・マーク（ケーブルに色が塗られている）にそれぞれあわせて接続してください．ちなみに ATmega8 の場合，SPROG2 の緑色ヘッダ・コネクタに接続します．
LED のヘッダ・コネクタ LEDS と PORTB ヘッダを 10 芯のフラット・ケーブルで接続してください．方向などをまちがえないようにするのは同様です．

20

第1章

AVR を知るにはまず動かしてみよう● ジャンパの設定
次に，ジャンパの設定が必要です．基本的には出荷時（デフォルト）のジャンパのままでかまいま
せん．VTARGET，AREF ，RESET，XTAL1 のジャンパ・ポストにジャンパがささった状態にします．
OSCSEL は文字を正面に見て右側にジャンパされていれば OK です．BSEL2，PJUMP はジャンパをはずしておきます．
これで準備が完了です．

● 動作確認AVR Studio が先ほどの Run 状態であれば，Break します．デバッグ・モードであれば，Stop
Debugging でこのモードから抜けます．
STK500 の電源を投入します．このとき VTARGET ジャンパの上にある LED が点灯します．もし点灯しなければ電源の接続や IC の向き，ケーブルの接続などに問題があるので，チェックしてください．
Tools → Program AVR → Auto Connect をクリックします．STK500 のウィンドウが表示されます．
このとき Program ボタンがアクティブでない場合は，Program タブをクリックして，Program 画面を表示させます．STK500 を立ち上げた直後にメッセージ・ウィンドウにエラーが出る場合，クロー
ズド・チェック・ボックスをクリックして一度ウィンドウを閉じてから再度同じ手続きを繰り返します．このとき電源を立ち上げなおす必要があるかもしれません．
さらにエラーが出るようであれば，それぞれの接続を確認します．電源が確実に入っていなかった
り，Disconnected Mode を誤ってクリックしてしまった場合，もう一度 Tools からはじめますが，
Program AVR の次に Auto Connect を選択しないで Connect でポートを指定して，パソコンが割り当てている COM ポートの番号を選択して Connect します（通常は COM1）．

● プログラムの書き込みと動作確認
STK500 のウィンドウが表示されたら，デバイス・ボックスの値を ATmega8（あるいは装着したデバイス名）にします（図 1-8）．Programming mode は ISP に ●（チェック）が入っているようにします．
マウスでクリックすれば指定できます．Files ボックスにこれから書き込むためのプログラム名を表示させます．右端の...ボタンを押すと，ファイルのリスト・ウィンドウが開かれます．ファイルの場所を指定し，表示されるプログラム・ネームをクリックします．ここでは Program2.hex です．
続いて Program ボタンをクリックします．どうですか？ LED が点滅を始めたと思います．
ATmega8 を使っている場合 8 ビットの出力をしたにもかかわらず 6 ビット分しか点滅しないと思います．これは，点滅しない 2 ビット分が STK500 上では水晶発振器（オシレータ）の回路に接続されているためで，もし内部 RC オシレータを使用するように回路接続をしてあるボードを使用すれば，すべてを点滅させることができます．
ここで注意することは，STK500 上の「PROGRAM スイッチ」は絶対に押さないことです．通常
STK500 を使うとき，このスイッチを押す必要はありません．もし誤って押すと，AVRStudio と通信ができなくなることがあります．このスイッチは，AVRStudio を新しいバージョンに更新したときに STK500 のファームウェアが改訂されることがあり，このときファームウェアの内容を書き換える
1-7 STK500 を動かす

21

図 1-8 STK500 の設定ウィンドウ

図 1-9 ヒューズ設定ウィンドウ

ために押すスイッチです．
もし誤ってファームウェアを壊してしまったときには，マニュアル・ファームウェア・アップグ
レードという方法で修復を行うことができます．これについては，開発ツールの第 5 章で説明します．
引き続き Fuses タブをクリックし，ヒューズ設定画面にします（図 1-9）．

● ヒューズ・ビットの意味と変更例
ヒューズ・ビットとは AVR に特徴的な機能で，AVR のシステム機能の設定に使われます．システ
ム・クロックに何を使うか？ デバッグ・モードは使えるようにしておくか？ ブラウン・アウト・
ディテクタ（低電圧検出回路の閾値電圧）は何 V に設定するか？ など，リセット直後に AVR がどのよ
うなセットアップでスタートするかを決める項目が含まれています．これは AVR のプログラムの中では変更することができません．項目が多いですから，右側のスライダを操作して全体を見渡しておいてください．
ここでは，internal RC Oscillator の周波数を変えてみます．デフォルトで 1 MHz になっているはずです．4 MHz と書かれたうちの一つのボックスをクリックしチェック・マークを入れて，Program
ボタンを押してください．どうですか？ LED の点滅速度が非常に速くなったはずです．
これは何をしているかというと，ATmega8 など mega シリーズに搭載されている，内部 RC オシ
レータの発振周波数をヒューズ・ビットのプログラムで変更してみたわけです．ATmega8 の場合は
1，2，4，8 MHz を選択することができるようになっています．残念ながら古い設計の AT90S シリー
ズは内部 RC オシレータをもっていません．したがって，AT90S8515 で実験した場合はこの周波数を変える実験はできないことになります．

● プログラムの内容
ここでリスト 1-2 の内容を見ておきましょう．このプログラムでは，サブルーチン Delay1 を用
22

第1章

AVR を知るにはまず動かしてみよういてソフトウェア・タイマを使っています．サブルーチンを用いるためにスタック・ポインタを設定し，サブルーチン・コールしたあとで戻り先の番地を確保するためのメモリ領域を設定しています．

RAMEND は include ファイルに定義されていて，それぞれのデバイスに固有のアドレスが取り込
まれます．これについては第 3 章で説明します．

PORTB に 0xFF を出力し，ソフトウェア・タイマで時間を遅らせた後，PORTB に反転データである 0x00 を出力します．続いて Delay1 で時間を遅らせ，反転データを出力，これを永遠に繰り返します．
STK500 は，STK500 上の AVR だけでなくユーザの作成したボード上の AVR にプログラムを書き込む機能ももっています．これは STK500 の ATmega8 にプログラムするときにも使用した，ISP の信号を用いて行います．ユーザのターゲット・ボードにこの信号をフラット・ケーブルで接続して行
います．次の節で説明する AVRISP と同じことができるわけです．

1-8 AVRISP を用いたボード上の AVR へのプログラミング
図 1-10 に ATmega8 の評価用ボードの回路例を，外観を写真 1-1 に示します．
この回路例では 6 ピンのヘッダが ISP コネクタとなっています（写真 1-2）．AVRISP を購入すると本体から出ているケーブルが 10 芯のフラットとなっているようですが，6 芯を用いたほうが省スペー
スになりますし，10 ピンだからとくに性能が良いということもないので，6 ピンに交換しておきます．
AVRISP 本体裏面の 4 隅に楕円の穴があり中に爪が見えるので，マイナス・ドライバを使ってこの爪を外側へ押せば蓋を外すことができます．付属の 6 芯フラット・ケーブル（10 芯と 6 芯の両方を出しておいても問題ないようだ）と交換します．AVRISP の電源はこのケーブルを介してターゲット・
ボードから供給されます．評価用ボードには 8 ビットの LED 表示器，3 ビットのプッシュ・スイッチ，
RS-232 シリアル・インターフェースを設けてありますが，今回の実験では LED 表示器だけ使っています（写真 1-3）．
ボードを設計する際には，VCC と GND ピンの近くにバイパス・コンデンサ 0.1μF 程度を必ず入れてください．また AVCC は，必ず VCC と等しいかそれ以下の電源を加えます．オープンで使用することがないようにしてください．
内蔵の A-D コンバータをより高精度で使うには，この電源（AVCC ）に安定度の高いリプルの少ない電源を供給する必要があります．VCC から作る場合，VCC に約 10μH のインダクタを接続してもう反対側を AVCC に接続し，AVCC と GND 間に 0.1μF のセラミック・コンデンサを入れます．外部リファ
レンス電圧を使用しない場合，0.1μF のセラミック・コンデンサを AREF と GND 間に入れると安定度が増すとされています．
その他，ISP のインターフェースですが，ISP でのプログラムが終わったら，通常の I/O 機能として使用することができます．ただし，ISP のインターフェースが AVR の出力ピンとして使用する場
合はまず問題がないのですが，入力として設計され外部信号と AVR のピンの間にバッファ IC などをつけていると，この IC により信号がスタックしてしまいプログラムを行えない場合があります（図 111）．アトメル社は，この IC と AVR ピンの間に 6.8 kΩ以上のできるだけ高い抵抗を直列に入れることを推奨していますが，むしろ抵抗の代わりにジャンパを入れることをお勧めします．
1-8 AVRISP を用いたボード上の AVR へのプログラミング

23

L1

R4

S5

22k

10μH

I C1
AVR MEGA8-P
23PC（
0 ADC0）24PC（
1 ADC1）25
22
PC（ADC
AGND
2
2）
26
21
PC（
ADC
）
AREF
3
3
27
20
PC
（
ADC
/SDA）
AVCC
4
4
28
PC（ADC/SCL）
559PB（XTAL
6
1/TOSC1）
2PD（
0 RxD）
10
3
PB（XTAL
7
2/TOSC2） PD（TxD）
14PD（
2 I NT0）
5
PD
（
NT
）
I
3
1
8
6
GND
PD（XCK/T
）
4
0
11
PD（
T
）
5
1
7
12
VCC
PD（
A
I
N
）
6
0
13
I N1 ）
PD（A
7
1

C3

0.1μ

PORTC
2
1
4
3
6
5
8
7
10
9

D2
SWダイオード

C4

0.1μ

C2

SV3

PC（
6 RESET）

0.1μ

R1

R2

R3

LED2
LED3
LED4

LED6

2
3
4
5
6
7
8
9

LED7

1
3
D1
U06C

1
3
5

C1

47μ

I SP

S4

1
2

LED1

S1

0V

3
4

10k

LED5

5V

3
1
4 S 2
3

10k

14
PB（
0 I CP）
15
PB（
1 OC1A）
16
PB（SS/OC1B）
2
PB（MOS
I /OC2）173
18PB（
4 M I SO）
19
PB（
5 SCK）

2

3
1
4 S 2
2

10k

1

RN 1

220Ω

LED8
2
4
6

SV1

図 1-10 ATmega8 評価用ボード回路例

I SPへ

入力バッファ
I /OなどAVR

入力バッファ

AVR

RST
MOS I
M I SOSCK

MOS I
M I SOSCK
これらの信号線が入力バッファにより引っぱられるので，I SPプログラムが正常に行えない

図 1-11 ISP プログラムの注意点
24

I SPへ

第1章

AVR を知るにはまず動かしてみよう

抵抗を入れる．もしくは，

ジャンパ・ポストでプログラム
時はジャンパをはずす

6ピン

10ピン
パソコンへ．
シリアル

写真 1-1 手作り評価ボードの例

写真 1-2 AVRISP の外観

6芯または10芯のインターフェース・
ケーブルがあるRS - 232C シリア
ル・ケーブルでホスト・パソコンへ

写真 1-3 AVRISP と手作り評価ボードの接続

AVRISP とパソコンはシリアル・ケーブルで接続します．電源はターゲット・ボードから供給しま
す．後は，STK500 でプログラムしたときと同じ手続きで，ターゲット・ボード上の AVR にプログ
ラムすることができます．
Tools → Program AVR → Auto Connect を選択するとウィンドウが表示されるので，STK500 で行った手続きで，Program およびヒューズ・ビットのプログラムができます．インターフェースが接続されていれば即，表示器の点滅を見ることができます．ヒューズ・ビットのプログラムでオシ
レータの周波数を変えてプログラムすれば，点滅の速さを変えることもできます．

1-9 1 クロック 1 インストラクション
この MCU の特徴である 1 クロック 1 インストラクション（命令）を説明する前に，古くから使われてきた構造のコンピュータの動作を復習しておきます．伝統的なコンピュータと動作を比較すること
で，AVR のパワーを明確にできると思われます．
1-9 1 クロック 1 インストラクション

25