秋月電子製 AKI-AVR プログラマー利用記

(2001.02.10---makefileなどgccに関する注意追加)
(2001.02.04---URL等追加)
(2000.10.08---電子工作関連ページ情報追加)
(2000.08.28作成)


このページは、秋月電子のAVRプログラマーキットの利用記を徒然に記したものです。
私自身のオリジナルの内容は全くありませんが、GNU-Cの開発環境もあるので、いつかは使いこなしたいと思っています。。。
AVRの2313というモデルを主に使おうと思っています。1200だとgccが対応していないようなので、2313が無難と思います。

でも良く考えると、某所でも似たような指摘があるように、AKI-H8のキットはライター+マザーボード+マイコンボードで7800円ですが、AKI-AVRのキットはライターだけで5950円で、8515を買い足し、max232やレギュレータとか周辺を買いっていくとAKI-H8に比べ割高になっていくという話もあります。

コンパクトなものを作る場合はAVRはよさそうですが、UARTを2つほしいとか思うとAVRのmegaモデルとなってしまうので、その場合はH8/3048Fを使った方が入手の容易さなども考えるとよさそうな気がします。
また、2000.10上旬からH8タイニーマイコンキットが秋月からたったの2,800円(開発用ソフト込み。マイコンボードだけなら2,000円。別途ライター用ハードを用意する必要なし!)で販売されるようになりましたので、AVR&PICの28pin以上のモデルはちょっと存在感が薄くなるのではないかとも感じます。AVR&PICの40pinモデルのアドバンテージは、たぶん、外部にアドレスバスを出せるということでしょうか。。。

<関連情報>

ATMELのweb上のAVRに関する情報:http://www.atmel.com/atmel/products/prod23.htm

トランジスタ技術2000.7月号:PICとAVRの特集があり、開発環境などの解説があります。
トランジスタ技術1999.11月号:AVR用のライター製作記事があります。関連情報がhttp://elm-chan.org/index_j.htmlに掲載されています。
シリアルライターの例をみると、手持ち部品だけでライターができそうで、部品代も数百円のような。。。秋月のプログラマーキットはインテリジェンスなのか?ちょっと高いですね。
トランジスタ技術2000.2月号:AVRマイコンの概要と評価。2313には触れていませんが、AVRのハードについてコンパクトにまとまっているとの印象です。汎用Registerの利用方法に関する注意なども掲載されていますので、はまらないように一読しておくとよいかもしれません。
GNU-C for AVRのwindows版などの情報:(以下のURL以外にもたくさん外国のサイトには情報があります)
Atmel for Dummie:http://8bit.at/avr/ avr gcc for windowsが提供されている。mini-FAQもある。---2001.01.04更新
(以前はフリーのプロバイダーらいしいhttp://members.xoom.com/volkeroth/index_e.htm でした。その際はつながりが非常に悪い時がありましたが、今後はどうなのか)。
http://medo.fov.uni-mb.si/mapp/ 主にLinux上のAVR用gcc関連情報
http://members.nbci.com/Paulo_Soares/ disassemblerソフトがあります。
http://homepage.ntlworld.com/matthew.rowe/micros/ Converter from 16C54 assembly code to AT90S1200 assembly code(16C54は確か12bits仕様ですから16F84などのコードは変換されるのか?)
@nifty FDEVICEフォーラム 「ワンチップマイコンの部屋」
市販のCコンパイラー販売店http://www.ipic.co.jp/newsindex.html 他にも国内で売っているところあると思います。この会社は、秋月電子では販売していないAVRのモデルも販売しています。
また、AVR用のユニバーサル基板(セラロック、RS232Cインターフェースなど実装)を発売しています。

JAVRbasic is a small B.A.S.I.C compiler for any Atmel AT90S RISC processor with SRAM
http://www3.igalaxy.net/~jackt/downloads.htm
http://www3.igalaxy.net/~jackt/software.htm
秋月電子でもBasicコンパイラーを売っていますが、3万円近くします。
他に、2Kまでという制限がありますが、http://www.mcselec.com/download_avr.htmにフリーのbasic compilerもあります。

STK200
Atmelのスターターキットは秋月電子http://www.akizuki.ne.jp/atmel.htmlでも発売されていますが、ちょっと高いです。gigo's web pageの掲示板で話題があったhttp://www.dontronics.com/では送料込みで90$(USD)程度(http://www.dontronics.com/cat_hard_avr_stk200.html)です。このサイトは、ATMEL関連製品をリーズナブルな価格で提供しているとの印象です。


現在は英語のサイトの方が情報が充実している気がします。MLなどもあるようですが、私は情報を見きれないので参加していません。興味がある方は、http://www.egroups.co.jp/group/avrを参照するとよいでしょう(world wide---英語です)。
以下リンク集。
http://www.ipass.net/~hammill/newavr.htm
http://www.omegav.ntnu.no/avr/resources.php3
http://www.avr-forum.com/
日本語のサイトの情報については、http://www.infoseek.co.jpあたりで検索すると、フリーのライターソフトやBch用ライブラリも見つかります。

<秋月電子AKI-AVRプログラマー情報>
---CDRの中味については、2000.08に秋月電子で購入したキット付属のものに基づいて記述しています

時々ライターソフトがバージョンアップしているようなので、秋月のwebをチェックしておくとよいようです。
最近は2323にも対応したようで、ハードのライターの改造方法などもヘルプに書いてありました。

付属CDRの\\ak-avr\dataディレクトリにはAT90S2313のデータシート(doc0839.pdf)が入っていません。
\\ATMELディレクトリ以下にATMELのwebのコピー(1999.04現在のもののようで、2000.08現在のwebとはデザインが違います)が入っていますので、そこからデータシート(doc0839.pdf)をダウンロードしてみると、1200と2313はpin互換であることがわかります。このデータシートをみながら、各種機能の設定方法などを勉強するとよいように感じます。
また、秋月電子の店頭で聞いたところ、秋月のAVRプログラマーのライターは2313に対応しているとのことです(2000.08.19)。

秋月の回路集CDRをみると、プログラム書き込み時に必要な6つの信号がソケットと違う位置のピンに出ているようなので、自分で別途基盤を用意して、ソケットとセラロックをつけて配線すれば、どのモデルでも書き込みOKとなると思われます。
また、秋月のライターをちょっと改造すれば、2323にも対応すると秋月が提供しているライターソフトの最新版のHelpに明記してあります。

AVR Assembler Userguide(doc1022.pdf)については、ライターキット付属のCDR(\\atmel\acrobatディレクトリ)には見当たりません。このドキュメントも読む必要があるでしょうから、これはATMELのwebからゲットしておいた方がよいと思われます。
Assemblerのニーモニックなどの解説書であるAVR instruction Set(doc0856.pdf)についてはCDR付属のものはちょっと古いようですからAtmelのサイトから最新版をダウンロードしておいた方がよいと思われます。なお、CDRの\\aki-avr\dataディレクトリにもsoft.pdfというファイル名でAVR instruction Setと思しきファイルがあります。
(2000.09.01)

<gccを用いた開発環境の構築>

私はwindows98SEマシン上に秋月のキットを用いて環境を構築してみました。その手順を参考までに書き記しておきます。

秋月のAKI-AVRプログラマの組み立て

素人の私でも1時間はかからない簡単な半田付けばかりです。その後、キット付属のペーパーp4に書いてある動作チェックを行います。

AVR Studioのインストール

秋月のキット付属のペーパーのp5については、「2 ライターコントロースソフトのインストール」のところ以外は無視します。
まず、最新版(v3.1)をATMELのweb からダウンロードしてインストールします。
インストーラーもついているので簡単です。ただ、インストール後、win98SEをrebootする必要がありました。
アセンブラおよびシュミレーターを含んだ統合開発環境となっています。

秋月のライターキットに付属のCDRの\ASMディレクトリ以下のファイルは古いのでインストールしませんでした。

AVR studioのマニュアルはdoc1019.pdfというファイルです。

ライターコントロールソフトのインストール

秋月のキット付属のペーパーのp5にある「2 ライターコントロースソフトのインストール」にしたがってソフトをインストールします。
その後、ライターソフトは必ず最新版にアップデートしておきます。アップデートしないと2313とかに対応できません。
最新版のありかは、秋月電子のweb pageやライターソフトのヘルプを参照してください。
ライターソフトは、ライターをパソコンに接続した状態で立ちあげた方がよいでしょう。

AVR用gccのインストール---2001.02.10更新

Atmel for Dummies(http://8bit.at/avr/) からAVR-gcc for windowsをダウンロードします。AVR gccテスト用サンプルプログラム(gcctest.zip)もダウンロードします。当該ページに書いてある手順どおりにやれば、AVR gcc環境が構築できます。以下の内容もその記載内容に従ったまでです。

具体的には、アーカイブを解凍し、インストールしたいディレクトリ以下にファイル一式をコピーします。
その後、install.exeを実行します。
run.batがインストールディレクトリに合わせて書き換わっていることをチェックします。
なお、ドキュメントをよくみればわかることですが、このインストーラーを使って、通常のwin32appのインストーラーのようにGUI画面上で任意の場所を選択してソフトがインストールされると思ったら間違いです

RUN.BATのうち
set AVR=G:\AKI-AVR\GCC
の部分は「/」を「\」に書き直しました。
gcctestアーカイブに含まれるreadme.txtには
Please copy make1/make2 inside your avr-gcc include directory
(.\include).
とありますが、AVR gccをインストールすると、すでにmake1/make2がインストールされていますので、無視してよいでしょう。と思っていたら、gcctest9.cをコンパイルできないと分かりましたので、gcctest.zipに含まれるmake1/make2に差し替えておいた方がよいようです。gcctest9.c以外はそのままでもコンパイルできます。どこが違うかは私自身は未調査ですが、アセンブラソースとCソースのリンクを行うような開発をしなければ問題は出ないとの情報があります。
(2001.02.10追加---このページを見た方からの情報)

AVR gcc for windowsのインストールディレクトリ以下にgccのドキュメントもありますので、参照すればいいでしょう。ただし、これはコンパイラーの一般的な説明といった印象で、AVR-gccで使える関数などの一覧はないとの印象です(indexページであるgcc_24.htmlを見た限りにおいて・・・)。

次にgcctestプログラムをコンパイルしてみます。
まず、gcctestに含まれるmakefileとgccをインストールしたディレクトリ直下の .\includeに含まれているmake1において
MCU = at90s8515
の部分をターゲットデバイスに応じて書き換えます。私は8515を2313と書き換えました。 ここで忘れてはいけないのはmakefile内にもMCU = at90s8515と指定してある場合は、コメントアウトする必要があります。makefileからmake1がincludeされるのですが、includeする順番から考えてmakefile内のMCU=の指定が有効になります。
逆にいうと、make1のMCU=はそのままにしておきターゲットデバイスの指定はmakefile内で行うということも可能です。
gcctest.zipに含まれるサンプルのうち、gcctest9.cについてはターゲットデバイスMCU=at90s2313とするとコンパイルできませんでした。たぶん、ターゲットデバイスのメモリが不足するのでしょうか・・・(詳しくは要調査)。8515と指定すれば可能でした。
(2001.02.10追加)
さらにはmake1において
FORMAT = ihex
としておきます。これを指定しておかないと秋月のライターソフトでは書き込みできません(たぶん)。
あとは、コマンドウィンドウズからmakeをタイプして、ドキュメントのとおりコンパイル状況が画面表示されれば問題ないでしょう。
AKI-H8のCの開発環境と違い、startup routineのリンクを意識する必要が全くないので、初心者にはとっつきやすい感じがします。
AKI-H8の場合もbatファイルがあれば、ほとんど意識する必要がなくなりますが。。。

ソースを修正せずに、もう一度コンパイルをやり直したい場合は、make利用のお決まりとして、
>make clean
を実行してからでないとだめでしょう。

メモリーイメージファイルは*.romとなり*.hexではないですが、私が試した範囲では、秋月のライターソフトでそのまま書き込み大丈夫でした。
どうしても*.hexでないと困る場合は、make2ファイル(gcctest.zipに付属していたもの)の中を「rom」で検索して「hex」とすればいいでしょう。3箇所あります。「.rom」で検索するとはまります。なお、AVR-gcc for windowsに付属しているmake2ファイル内には4箇所ありますので注意が必要です。
書き換え箇所(gcctest.zipに付属のmake2の場合):
13行目
all: $(TRG).obj $(TRG).elf $(TRG).rom $(TRG).eep
            ↓
all: $(TRG).obj $(TRG).elf $(TRG).hex $(TRG).eep
38行目
%rom: %elf
  ↓
%hex: %elf
54行目
$(RM) $(TRG).rom
  ↓
$(RM) $(TRG).hex
を書きかえればよいようです(自分ではコンパイルはしてみましたが、実機では試していません。気になる方は両方をバイナリコンペアするとよいでしょう)。
(2001.02.10追加---このページを見た方からの情報)

自分でmakefileを作成する際、小文字でmakefileというファイル名にしないとコンパイルの際はじかれるようです。エクスプロアラーで確認しておいた方がよさそうです。
よく調べていませんが、unixではよくあることなので、そのあたりを元のgccから引きずっているということでしょうか。。。
(2001.02.08追加---このページを見た方からの情報)

なお、gcctestに含まれるプログラムはSTK200(秋月電子でも2万円近くで販売されています) を使ってテストを行うようになっているようです。自分で、同様の配線をしたテスト環境を整えれば、なんとかなるでしょう。
STK200の回路図は、STK200のマニュアルであるdoc1107.pdfにはありません。ATMELのwebを探せばちゃんとあるかもしれませんが、AVR forumhttp://www.avr-forum.com/avrsource.htmlにあります。さらには、デバック情報表示用にLCDを接続できるように配線しておくとよいかもしれません(UARTに流してもよいですが)。

そこで、秋月のライターキットに、テスト用LEDおよびユニバーサル基板などが添付されていたので、PORT Bに吸い込みでLED点灯となるようにLEDを8個つけ、抵抗を470オームとして、5V動作のテスト回路を組んでみました。
セラロックは4MHzをつけました。
gcctest1.cをコンパイルして、gcctest.romを秋月のライタから2313に書き込んで動作させたところ、LEDが順次点灯しましたので、たぶん、うまく行ったのでしょう。
ここで気をつけなくてはいけないことは、秋月のキットに添付されているペーパーのp6にあるテスト用回路は電流吐き出しでLEDを点灯するようになっていますが、今回は、吸い込みですから抵抗の先はGNDでなく5Vに接続しておきます。

AVR Studioを用いたデバッグ

gccの環境ではgdbというデバッガーが有名らしいですが、素人にはなかなか使いこなせないようなことを聞いています。
しかし、AVR gcc for windowsを用いてコンパイルすると*.objというファイルが作成されるのですが、このファイルをAVR studioに読み込ませてやると、ソースレベルでソフトウェアデバッグできます
このことは上記のAVR gcc for windowsが提供されているAtmel for Dummiesのページにも明記されています。
ただし、若干の制限もあるようです。詳しくは、MIni-FAQ about AVR-GCC(前述のhttp://8bit.at/avr/のページの一番下の方にある)を参照してください。

AKI-H8も持っています(持っているだけ)が、H8用モニターソフトでの実機上のデバッグに比べれば、ビジュアルだし取っ付きやすい気がします。

gccにおけるAVR向けの仕様---2000.11.03更新

この情報をいかに把握するかで、ソフト作成の効率が違ってくると思われます。
具体的には、gcc関連のドキュメントをhttp://www.gnu.orgから入手して全部読むといいのでしょうか?(私には不可能に近いです)。
Atmel for Dummieのページにあるgcctest.zipに収録されているサンプルのソースファイルを眺めると感じは掴めるかなという感じです。

Atmel for DummiesのページのLink(Link先の内容説明がドイツ語)からたどれるhttp://www.enteract.com/~rneswold/avr/avr-lib.pdf(avr-gcc FAQというタイトルでリンクされている場合あり)などをみてみるとよいと思われます(内容はLinuxを前提に書かれています)。各関数の使い方、割り込み処理関数SIGNAL()の引数などが分かります。
また、AVR gccの io2313.hなどのincludeファイルの中味をみて、AVRのレジスター構成の名称と見比べると、関数の引数について少し理解が深まる気がします。さらには iomacro.hなどもまず見ておいた方がいいでしょう。
Mini-FAQ about AVR-GCCも読んでおく方がよいでしょう。

AVR-gccで使える関数について
g-libcのマニュアルをhttp://www.gnu.orgにおいてみてみましたが、indexページをみてもavr用の関数cbi()などの説明も見当たりません。
avr-libcのアーカイブを入手展開し、\srcディレクトリ以下のソースファイルを全部読めば、その内容を理解できるかもしれません?ただし、私にはそのようなことはできません。
そこで、次善の理解方法としては、\includeディレクトリ以下のヘッダーファイル中身を見てみるということが挙げられます。少なくとも利用可能な関数を総覧?できると思います。
(私の場合、現在のところ、ヘッダーファイルをみてもあまり理解できませんが。。。)


avr-gccは、AKI-H8用のC-compilerとは大分趣きが違うと感じました。例えば、ポートにデータを書き込む際、AKI-H8用のコンパイラーでは変数に代入しますが、AVR gccではoutp()関数を使います。
以下は、自分の理解の範囲で記述しているので、誤解があるかもしれません。
gigo's webの掲示板http://hpcgi1.nifty.com/gigo/n2icatbbs.cgiで 2000/09/26(Tue) 23:35 にこのページに対してコメントをもらっているので、そちらも参照してください(コメントを基に書き換えさせていただいた部分多々あり)。
AVR 2313(8Bitsマイコンチップ)の機能 <参考>
AKI-H8(内部32Bitsマイコンボード)
利用方法
gccでのコーディングに関する情報
備考
In-System Programming ROM 1K*16Bits ROM 128KByte プログラムコードを書き込むメモリ。実行しているアドレスはPC(program counter)にセットされている。


AVRでもprogram memoryへ定数を割りつけて参照することができますが、パソコン上でのCのコーディングとはちょっと変数宣言方法が違います。avr-libcソースのアーカイブを展開し\exampleディレクトリにあるprogmem.cを参照すると使い方が分かります(gcctest5.cより使い方の例が豊富です)。
汎用Register 32*8bits

汎用レジスターに変数を置きたい場合は明示的にregisterと宣言するとよいようです(サンプルソースからの想像)。

AT90S2313のデータシート(doc0839.pdf)をみると、一部の命令はR16〜しか適用できないようです。したがって、他のMCUに比べ汎用というには制限が多々あるとの話もあります(gigo's web参照)。
I/Oregister Portの設定・portへのデータ書込みやその他マイコンの機能の設定などは、I/Oregisterと呼ばれるregisterにアクセスしデータを書き込むことで行います。

I/Oregisterにバイト単位でアクセスするにはoutp()またはinp()関数を使うようです。

TimerCounter1にアクセスする場合など、ワード単位(2バイト単位)でアクセスする場合は__outw()関数(なぜアンダースコアがつくのか?たぶんマクロ定義されているからでしょう)などを使うようです。

ビット単位にアクセス(出力)するには、アセンブラと似た名前のsbi(),cbi()関数などを使うようです。
入力の場合は、bit_is_set()関数などもあるようです。
このあたりは、iomacro.h内の関数のマクロ定義をみるとある程度把握できると思います。
(2001.02.10追加)

gcctestのサンプル例をみると、各種機能のコントロールレジスタへデータを書き込む際には「1」をbit shiftさせてOR演算子でバイト単位に合成してoutp()関数で書き込むという手法をよく見かけます。ビットシフトの代わりにBV()関数を利用することもできるようです。
SRAM 128Byte RAM 4KByte
変数宣言でvolatileというのがあります。gccのdocの説明をみても私には?
Hi-tech Cのpdf版マニュアルをみると、割り込みなどの処理でデータが書き換えられるものはvolatile変数とすると書いてあるような。。。
英和辞書でvolatileを引くと「揮発性」という意味が載っていました。
gigo's webに詳しい解説があるので参照してください。

SRAMについてはC言語でコーディングする場合はあまり意識する必要ないとの印象です。
EEPROM 128Byte 不揮発性のメモリ。定数などを書き込んでおき、必要に応じて参照する用途に使う。


バイト単位での読み書きのための関数eeprom_wb(),eeprom_rb()が用意されています(gcctest5参照)。

programからEEPROM上に定数を確保するには、MIni-FAQ about AVR-GCCにも有用な情報があります。
I/O port
最大15本
I/O Port
最大78本
データの入出力に利用します。
工夫すれば(Timerと組み合わせる)シリアル通信に利用可能(Atmel提供のアプリケーションノートもあり)。
LCDもI/O portに接続して制御する。

スイッチを接続するためにはプルアップして抵抗をオンにする必要あり。チャタリング防止に気をつける必要があるようで、あちこちのweb pageに参考コードがあります。
電流値に気をつければLEDを点灯させることも可能。

外部にメモリーを増設できるモデルの場合は、アドレスバスやデータバスとしても利用。

TC
(8bits 1Ch,16bits 1Ch)
16Bits ITU*5Ch 名前から分かるとおり時間を計測したり、パルス発生に利用(?)--->PWMはモーター制御などに利用。
リモコン信号の認識にも利用します。
WDT WDT
(interval timer)
広い意味ではタイマーでしょうが、TimeOutを監視する用途に利用。
A/Dなし
Analog comparatorあり
A/D 10bits*8Ch
D/A 2Ch
UART 1Ch SCI 2Ch シリアル通信(パソコンとの接続のためには一般的にはmax232またはその互換品のレベルコンバーターが必要)に利用。制御は、I/O Register経由で行います。

gcctestの一連のファイルの中のuart.cを参照するのが手っ取り早いと思われます。
gcctest4に示されている方法は、TXCIEとRXCIEの両方を使っているのですが、gcctest9ではRXCIEしか使っていません。条件によっていろいろな手法があるようです。gigo's web の過去ログ 2000/09/15(Fri) 22:09 を参照するといいでしょう。さらにはgigo's webにあるAKI-H8の応用例であるn2ih8のページhttp://homepage1.nifty.com/gigo/garmin/index.htmlの最初の方のコメントを参考にソースファイルをみるのもいいかもしれません。

Atmel application note(doc1451.pdf AVR306)を読むとCでのコーディングの参考になると思われます(gccではないですが)。

当初、UARTのデータレジスタがRXとTXとが共用しているので、RXとTXがそれぞれ独立に動いているようなgcctestのコーディングに疑問があったのですが、データシートのUART Controlのページを良くみると、RXとTXはIO Registerは共用しているが物理的に独立しているRegisterがあるfull dupulex(全二重)と書いてありました。。。
なお、H8はTDRとRDRというようにIOレジスターが別々にあります。

<番外編1>---パソコンのシリアルポートプログラミングをする際に参考になりそうなweb page(勝手に紹介させていただいています)
http://www.mmm.muroran-it.ac.jp/~s1124006/
http://www.nsg.co.jp/nbb/ss/joy/ig980712.htm

<番外編2>
PIC16F8xxモデルは、データシートをみるとUSARTが内臓されており、同期通信もできるようです。
H8はSCIで同期通信できるようです。モデルによってはI2C Busインターフェースも持っているものがあります(3664など)。
(2001.02.07追加)
割り込み機能
外部2個
内部もあり
割り込み機能
外部7個
内部30個
AVRの場合もいくつかの割り込み機能があり、機能ごとに割り込みベクター(処理ルーチンへのジャンプ先アドレス)を設定できます。
一種のスイッチとして使える外部割り込みを設定することも可能。


SIGNAL()関数を使って割り込み処理ルーチンを記述するようです。
signal.hも見ておくとよいと感じます。
DMACあり
20pin Dip
400円
マイコンボード3800円
(注)Atmel 2313とAKI-H8を比べることは、意味がないような気もしますが。。。
浮動小数点演算
Mini-FAQ about AVR-GCCをみると、AVR-gccでもサポートされているようでgcctest6.cというサンプルソースがあります。しかし、ソース中のコメントをみると2313で動くのかはっきりせず。実験してみる必要あり。2313をターゲットとしてもとりあえずはコンパイルできましたが・・・。
http://www3.igalaxy.net/~jackt/に関連情報あり。C-compilerごとの浮動小数点演算用libの大きさ比較の記事もあります。
さらには、http://home.t-online.de/home/Michael.Stumpf/AVR/AVR.htmも参照するとよいと思われます。

文字列操作関数
avr-libcのアーカイブを展開し、\srcディレクトリ以下のソースファイルをみると、文字列操作関数が用意されている感じがしますが、サンプルを見たことがないです(残念。。。)。

外部EEPROMへのアクセス
ATMEL doc0954.pdf参照。AVR-gccのサンプルソース(一部はアセンブラで記述されています)がhttp://members.nbci.com/_XMCM/PeterFleury/avr-software.htmlにあります。
さらには、http://bray.velenje.cx/avr/i2c/i2c.htmlにはI2CBus経由でRTC(Real Time Clock)にアクセスするサンプルがあります。こちらは全部gccでコーディングされています。

I2CBus接続のEEPROMは、Microchipのものが秋月電子でも数百円で購入可能です。データシート付き。pdfファイルのデータシートもMicrochipのサイトからダウンロード可能です。
I2C Busによるデータ交換方法については、AVRのアプリケーションノートには、たいしたことではないのですがちょっとミスがありますので、全くの入門者がI2C Busについて知るには、PICに関する入門書(2001.01に出版になったCQ出版のものなど)やHitachi H8/3664のハードウェアマニュアルにあるI2C Busに関する説明を見ると良いと感じます。なお、H8/3664はハードウェアI2C Busインターフェースを実装しています。
また、I2C Busに関する仕様書はフィリップス社のサイトにpdfファイルがあるようです(自分では未確認)。
(2001.02.07追加)

アセンブラソースとCソースのリンク
gcctest9をみると、makefileの記述の仕方、変数宣言などを含め参考となるようです。

インラインアセンブラ
一例としては、asm("nop")などがあります。

delay関数の作り方
gigo's webでコメントいただいたのですが、アプリケーションノートなどにはよくソフトループの例が出てきますが、ソフトループは使わない方がいいようです。ソフトループを使いAVRstudioのストップウォッチ機能でdelay時間を計測して利用してもいいのですが、timerが余っている場合はそちらを使った方がよさそうです。
(続く)

<応用事例掲載ページの紹介>
コーディング事例がある役に立ちそうなページを(各ページの作成者に断りもなく勝手に)紹介。
上記で紹介したリンク集のページをみれば他にもたくさんありますが、私の興味の範囲です。

AVR-gcc(英語中心)

LCD(HD44780コントローラー)接続:http://bray.velenje.cx/avr/lcd/lcd.html
コントラスト調整用端子は、VRの接続がなくGNDに接続されています。GNDに接続した場合はコントラストが一番濃いはずなので問題はないですが、調整したい場合はVRを接続する必要があるでしょう。

赤外線リモコン信号の認識:http://bray.velenje.cx/avr/rc5/rc5.html
リモコン信号の受信部は秋月電子でも売ってますが、38KHzと40KHzがあります。
ATMEL のアプリケーションノートAVR410(doc1473.pdf)も読んでおくとよいと思われます。

PC用AT keyboadとのインターフェース:http://bray.velenje.cx/avr/pckey/pckey.html
Atmelのアプリケーションノートはアセンブラで記述されていますが、こちらはgccで書かれています。
PICでの例はDontronicsのリンク集からもたどれるhttp://ourworld.compuserve.com/homepages/steve_lawther/keybinfo.htmがあります。日本語のページも若干あるようですが、ソースコードがなかったりするのであまり参考になりません。
H8での例は@nifty FDEVICEに例があります。

AT keyboad(PS/2 interface) Emulator:http://members.home.net/nlange/
PS/2ポート(コントローラー)やkeyboadのインターフェースの情報については、アマチュアが入手しやすいものとして、CQ出版の「パソコンのレガシィI/O活用大全http://www.cqpub.co.jp/hanbai/books/320100.htmや「パソコン周辺インターフェースのすべてIII http://www.cqpub.co.jp/trs/trsmenu.htmがあります。またトランジスタ技術1995.10月号(H8/300H用のアセンブラコードあり)や1996.6月号にも情報があります。
最近、PIC版のPS/2キーボードエミュレーターの記事がhttp://www.cqpub.co.jp/hanbai/books/321030.htmにあると分かりました。
(2001.02.04追加)

IDE HDD interface:http://home.t-online.de/home/heesch/ide.htm
IDE I/FはCFにも応用できると思います。
ここのサイトの回路図はeagleというソフトhttp://www.cadsoftusa.com/のもののようです(たぶん)。

assembler(日本語中心)

ひととおりなんでも:http://www.toshu-ltd.co.jp/gaki/
インストラクションセットの解説のページなどもあり、かなり充実しています。また、メーリングリストを開設されているようです。

ひととおり(入門編):http://home.age.ne.jp/x/apony/elec/index.html
回路図エディタBch用のAVR部品ライブラリもあります。

USB関係http://www.geocities.co.jp/SiliconValley-SanJose/9496/usb.html
以前からどこかにないか探していたのですが、ようやくアマチュアが入手可能な部品を用いた事例紹介のページを見つけることができました。ソースコードもあり。ただし、未だ回路図が公開されていません。今後が期待されます。
(2001.02.04追加)

探せば、ロボコン系のページもあります。

メモ

<2313のUART>

2313のマニュアルp44をみると、4MHz動作のときは、エラー発生率が高いような気がします。無視できる範囲なのかもしれませんが、ちょっと気になり、気休めですが、秋月で4.19MHzのセラロックも買ってきました。

<マイコン一般>

マイコンの知識については、PICFUN(http://www.picfun.com)をまずみてみるとよいように感じます。
私のような入門者には、マイコンの機能のそれぞれが、いったい何に役にたつのか分からないと、どこから手をつけていいか分からないし、どのマイコンを選択してよいかも分からない気がします。
どのチップ(or モデル)でもいいので、アプリケーションノートやwebで収集できるコードを読めば知識が蓄積される?

秋月のPIC使用キットhttp://www.akizuki.ne.jp/pickit.htmlをみれば、ワンチップマイコンで何ができるかが分かってくるかもしれません。このページに掲載されていないと思われる他のPIC関連キットとしては、ステッピングモータードライブキットなどが他のページにあります。
略語メモ---ある程度はAT90S2313のデータシートをみれば分かりますが。。。
MCU: Micro Controller Unit 制御向けCPUのことを特にこう呼ぶらしいです(gigo's web参照)。
SCI :Serial Communication Interface
SPI:Synchronous Peripheral Interface
WDT:watch dog timer
IDE:Integrated Development Enviroment?(HDDのことではなさそうです)
ICE:In Circuit Emulator
ICD:In Circuit Developper

<マイコンについての勉強>


私の場合、電気・電子とは全く関係ない仕事をしており、また、はるか15年前ぐらいの学生時代、C言語を使ってパソコン上で数値計算用プログラムを書いた経験しかないので、マイコンをC言語でどうやって制御していいか分からず、ここが最初の関門となりました。
その際感じたことは、マイコンのハードウェアに関する知識が必要で、ハードウェアのそれぞれの機能がどのような場面で応用されているのかという知識も必要ということでした。

そこでマイコンの参考書がないかと書店を探したところ、Z80についての参考書はよくみかけました。最近はPICについても見かけます。しかし、私がチャレンジしようとしているH8やAVRについてはありません(最近H8はロボコン関係で見かけます)ので、PICなどの他のマイコンの知識を流用したり、メーカーのwebサイトにある情報を基に個別に学習することになります。
最近は、インターネット経由でメーカーのwebサイトから必要な情報はほとんどゲットできるので入門者が勉強をはじめたいと思えばすぐ始められます。
情報としては、ハードウェアのデータシートは必ず必要です。IOレジスターのメモリーマップの情報と各周辺機器の制御方法の情報(割り込み関係含む)がないとマイコンを適切に利用することができないからです。

マイコンの基本的なしくみを理解するには、
メモリマップ(プログラム領域---flash ROM、データ領域---register + RAM +EEPROM、IO register)
周辺機器とIOレジスタの関係
PC(プログラムカウンタ)、スタック
割り込み要因と割り込みベクタ
についてイメージをつかめばよいと思います。一般に周辺機器は、IOレジスターを操作して制御するようです。

次に、アセンブラ言語(Cで制御する場合でもある程度アセンブラによる制御方法を知らないと、だめかなと感じます)の仕様などの情報が必要です。
このあたりがわかれば、あちこちのweb pageにあるコーディング例やメーカーが提供しているアプリケーションノートをみれば、基礎知識が蓄積されていきます(私には蓄積されていないですが。。。)。

あと、基礎的電子回路の知識も必要と感じます。とりあえずはあまり難しい知識は必要ないと思われますが、抵抗によるプルアップ処理、オープンコレクタ出力などの意味を理解しないと、ちょっとした回路も作成できないことになります。ロボコン系ではパワートランジスタの知識などもあった方がよいと思います。
あと、RS232Cについての知識を得ておくとパソコンとの連携をする際に役にたちます。このあたりの情報はCQ出版の書籍や雑誌で勉強すればいいと感じます。

その他、
C言語でコーディングする際は、スタートアップルーチンをリンクすることが必要
C言語でも、マイコン制御の部分は、コンパイラーのベンダーにより仕様が違う
メーカーが提供している(無償の)IDE、シュミレーターを利用するとよい
ということを知っているとよいです。

AVRやPICなどの数百円のワンチップマイコンの場合、機能ごとに1chしかない場合も多く、2〜3の制御を組み込むのが精一杯という感じを持ちます。
H8は周辺機器の種類も多く、一つの機能が複数ch利用できるメリットがあります。例えば、Timer関連では、H8/3048FではITUが5chもあるので、ソフトウェアUARTだけでなく、赤外線リモコン認識なども同時に使えそうです。
H8の特徴としてDMACがあることも挙げられますが、現在の私の実力では、今ひとつありがたさが良く分かりません。

世間では、電気・電子の勉強のためにロボコンが盛んなようです。ロボコン関係の専門誌も発売になっているようですが、トランジスタ技術2000.2月号(モーター制御)及び2000.8月号(基礎から学ぶロボットの製作)も参考になるのではないかと思います。ロボット関係では、web ringもあるようです。

<情報メモ>

リモコンの信号については、96年ごろのトランジスタ技術に解説がありました(トラ技の記事の目次検索用ファイルがCQ出版から提供されています)。
最近では、トランジスタ技術2000.11月号にも若干応用例がありました。

方位センサのしくみについてよく分かっていなかったのですが、トランジスタ技術2000.11月号にメカトロ関係の記事で解説がありました。

<電子工作お役立ちサイト>---私の興味の範囲です。

私が作成した電子工作関係ページ(別ドメイン):http://masaaki.sato.nakano.tokyo.jp/gps
最近更新できていませんが。。。また、大した内容もありませんが。。。

RASTEME:ラステームシステム:http://www.rasteme.co.jp/web/index.htm
AVR用評価ボードも販売しています。価格もリーズナブルな感があります。秋葉原には直営店舗あり。
http://www.rasteme.co.jp/web/product/Atmel/rave120j/rave120j.htm

サンハヤト:http://www.sunhayato.co.jp/
感光基板用のアートワーク用インクジェットフィルムなどもあります。ICパッケージ変換アダプタも便利かも。

タクミ商事:http://www.takumic.co.jp
ユーザー登録なしに1,000円以上から部品をオーダーできるオンラインショップなので、アマチュアにもやさしいです。

Simmstick:http://www.simmstick.com/上記で紹介したDonTronicshttp://www.dontronics.com/(gigo's web参照)ではさまざまなsimmstick module用PCBを販売しています。AVR用やPIC用があります。日本でもIPIがオリジナルのsimmstick moduleを販売しています。

自分で作成しようとしているもの---いつになるか分かりませんが。。。---2001.01.24更新

PS/2 keyboad --->RS232C変換
windowsCEマシンに接続できるのではないかと思っています。

タクトスイッチ(4*4=16キー)--->PS/2 keyboad emulation
Sony Navin You用リモコンとして利用できないかと思っています。

Playstationコントローラー --->PS/2 keyboad emulation
ちょっと難易度高いですが、Sony Navin You用リモコンとして利用できないかと思っています。
playstationコントローラデータの解析については、最近ではトランジスタ技術2000.6月号にあります。USB関係記事の中で取り扱われています。PICのソースもCQ出版のホームページにあります。
Vectorに解析された方のページがあります。さらには、たぶん同じものがttp://lillith.sk.tsukuba.ac.jp/~kashima/games/psx.htmlに置いてあることも分かりました。
さらにはhttp://www.tky.3web.ne.jp/~applause/dualshock.shtmlもあります。
(2001.02.10追加)
PlaystationPADは基本的に同期通信だそうです。

PS PADの応用例(マイコンに限らず。作者に断りもなく紹介):
http://www.fun.ac.jp/~akita/robocup/rpad.html
http://www.geocities.co.jp/SiliconValley/2650/
http://www.ziplabel.com/dpadpro/index.html

Playstation2用のDVDプレイヤー用リモコンをつなぎたいとも思っています。現物は持っていないのですが、以前リモコン操作が可能なPADを分解した際の経験では、赤外線受光部は5V動作であり別途8V供給用ピンから電源を得ている回路でしたので、このあたりにも注意が必要だろうと考えています。