Key words:ATMEL,AVR,Micro Controler,ATmega,ATtiny,DDS,Frequency Counter

Daddy's AVR Microchip Challenge!

Part One / Introduction
お父さんのAVRマイコン入門!(巻・1)

(Ver.1.2a:April 1st 2006+Ver.1.3k:April 9th 2006+Ver.1.4:May 14th 2006+Ver.1.5:May 25th 2006+Ver.1.5a:June 7th 2006+Ver.1.6:July 20th 2006+Ver.1.7:Sep. 17th 2006+Ver.2.0:Sep. 28th 2006+Ver.2.1a:Nov. 17th 2006+Ver.2.1d:Jan. 1st 2007+Ver.2.1e:Mar. 18th 2007+Ver.2.1f:Mar. 21st 2007+Ver.2.2:Feb. 3rd 2008)

Counter

written by Takahiro Kato JA9TTT/JH1WBU, Saitama JAPAN

http://ja9ttt.homedns.org/hamf/myexp/Daddys_AVR_P1.html



このページの目的
マイコンはヤングのおもちゃ? そんなことありません. このページは『ふつうのお父さん』のワンチップ・マイコン入門から活用までのストーリーです.もちろん若人のマイコン入門にも参考になるでしょう.サイトの性格上、例によって無線機への活用がメインテーマです.しかし、小さくてもコンピュータ、アイディア(プログラム)次第で色々な電子機器に活用できます.様々な応用へのヒントが得られるはずです.


関連のページ
BASCOM-AVRを使ったAVRマイコン入門と活用・応用編には、以下のページがあります。


ご案内
左側の写真をクリックすると大きな写真を見られます.
大きな写真から戻るにはブラウザのバックボタンで戻って下さい.

簡単じゃなくっちゃ、イヤ!
Basic_Prog.JPG お父さんは物覚えも少し怪しくなってるので、今さら面倒くさいことを一からやりたくない.でも、単なるお遊びで終わっちゃつまらない.やっぱり、多少は『使い物』にならないと. 物覚えの悪くなったお父さんでも、なぜか昔のことは覚えてるもの.昔とった杵柄で何とかならないの?・・・と言う所から出発してみましょう.ワンチップ・マイコン活用の障害になっていたのは、アセンブラとか、C言語を改めて覚えなきゃならないところですね.FORTRANは昔会社でやったし、良く似たBASICならパソコン黎明期にやりました.大したプログラムは書けなかったけど、文法も何となく覚えてます.でもねえ・・BASICって遅いんじゃないの? それにワンチップ・マイコンにはキーボードもCRTも付いてないよ.

BASIC言語について:
このページではBASIC言語を使って、マイクロ・コントローラ(マイコン)を活用しています.BASIC言語は、1970〜80年代にはパソコンのプログラム開発用としてポピュラーでした.BASIC言語はコマンドが人間的で、文法も平易なため習得が容易です.また、融通性に富むためカット・アンド・トライで動作するプログラムが作れます.その反面、その融通性があだとなって、少し規模が大きくなるとわかりにくいものになる傾向がありました.従って現在パソコンでは他の言語を使ってプログラム開発を行なうのが普通です. マイコンにおいては、メモリ量の制限や機器に密着した制御が必要なことから、従来アセンブリ言語(通称:アセンブラ)もしくはC言語(Cコンパイラ)が多く使われてきました.現在もそれが主流です.しかし、マイコンのメモリ量も豊富になり、BASIC言語のような高級言語でのプログラム開発も支障ない状況になっています.さらにマイコンのプログラムが複雑になるケースは稀ですからBASIC言語であっても視認性が悪くなることはありません.過去にBASIC言語の経験があれば、容易にマイコンのプログラムを作ることができるわけです.あるいは未経験でも他のプログラム言語より格段に敷居は低く、容易に習得できます.プログラムの開発において使用言語はさほど重要でないと考えます.むしろ、どんな方法・手段でやれば機能を実現できるのか考えることが重要です.実現のためのアルゴリズムが重要という意味です。BASIC言語であろうがC言語であろうがアルゴリズムの部分はまったく共通です.これからプログラミングに挑戦される方にもBASIC言語の習得は無駄にはなりません.

マイコンパソコン:

一般的な定義がある訳ではありませんが、ここでは『マイコン』と『パソコン』を以下のように使い分けしています.

マイコンとパソコンを混同してしまうとワケがわからなくなってしまうので、注釈しておきました.


目標は・・・
ワンチップ・マイコンを使うと、どんなものが作れるのでしょう.いろいろあります.しかし大それた夢を抱いても挫折に終わります.まずは次の2つを具体的目標にして前進したいと思います.(え?、十分大それた目標ですって?)


DDSを使ったVFOユニット
AVR_DDS_cont_.V010_02.JPG 送・受信機を製作するには周波数が可変でき、安定度の良い発振器が必要になる.例えば、ミズホ通信機から出ていたVFO-5やVFO-7のようなユニット.しかし同ユニットは廃番になっている.同じようなVFOを自作するにも、良質のバリコンとダイヤルの減速機構のような重要部品はすでに入手困難.さらに良好な周波数安定度を得るには『技術とノウハウ』も重要.部品入手も製作も困難なVFO部分を、DDS発振器で代替する.DDSを使えば柔軟性に富み周波数安定度も抜群になる.いまは専用DDS-ICの値段も下がってきたので経済性も悪くはない.周波数の可変にロータリー・エンコーダとマイコンを組合せればダイヤルの減速比(?)も思うがままです.こうしたVFOを開発する必要性を感じたのは、昨今のDDS-ICの信号品質が非常に良くなってきたからでもあります.写真は、テストボードでプログラムを作成し、手始めに秋月のDDSオシレータを制御している様子.(秋月DDSは旧式で信号品質は無線機直結には適しませんが・・テストには最適です)


周波数カウンタ
Freq_Counter_02.JPG 単純な周波数カウンタを作っても面白くはありません.しかし、自作機のダイヤル表示用として、あるいは旧型無線機をデジタル表示にするアダプタが簡単に作れたら便利です.こうした用途には単純な周波数カウンタはだめで、計測周波数を補正して表示するカウンタが必要です.VFOの周波数を読み、それに中間周波数の値などを加減算して、実際の送・受信周波数を表示する必要があります.例えば、9R59Dの局発は受信周波数より約455KHz高い周波数を発振しています.局発の発振周波数を測定し、その値から455KHzを差し引いて表示すれば受信周波数の直読になります.SSB/CW受信の際は、BFOの発振周波数も測定して差し引けばより高精度です.こうした機能を持った周波数カウンタは、ハードウエア的に実現することも可能ですが、マイコン応用式なら回路はずっと簡単.しかもプログラムさえ変更すれば同じカウンタ回路が色々な無線機に使えてしまう.昔々BCLブームのころラジオカウンタと言うアダプタがあったが、あれより便利で高性能なモノが作れる.写真は簡単な周波数カウンタ用プログラムをテストボードに書込み、実際に周波数測定している様子.


PIC or AVR?
ATmega8535_01.JPG 安価でポピュラーなワンチップ・マイコンにはMicrochip Technology 社PICマイクロ・コントローラAtmel 社AVRマイクロ・コントローラが良く知られています.目的にはどちらのチップを採用してもほとんど差はないはずです.しかし、私はAVRを使うことにしました.

    AVRマイクロ・コントローラを選んだのは・・・
  1. 無線機に応用しているたいへん良い実例がネット上にあった.
  2. 必要なプログラム開発用ツール(具体的にはソフトウエア)が無料である.
  3. プログラム開発ツールは組込関数も豊富で、とても良くできている.
  4. プログラムをチップに書込むために専用のハードは殆ど必要ない.
  5. あまりにポピュラーなPICより、他人と違う方が面白い(?) など.
このうち、特に重要なのが(1)で、もしJN3XBY岩永さんのサイトがなかったら、始めなかったでしょう.私のサイトは、言わば岩永さんの分家のようなものです.ぜひとも本家もご覧ください.プログラムの開発環境とセットアップなど、初期導入の具体例は岩永さんのサイトにも詳しいです.こちらでは省略している内容も多々あります. 写真はAVRマイコン・シリーズの中でも比較的高機能なATmega8535です.多くの入出力端子(I/O Port)を持ち、内部に3つのタイマー、8つのA/Dコンバータを持っています.AVRマイコンは内蔵機能による大小のほか、形状でも8ピンから40ピン以上の表面実装型まで様々なものがシリーズ化されています.ATmega8535はプログラム開発用のテストボードに使いました.


■(私の)開発環境:以下のものを揃えた.

ノートパソコン
hp_nx9040_JA9TTT.JPG プログラムの開発に使用するパソコンの一例です.hp-nx9040というマシンで、OSはWindows-XP Proです.RAM-512MB、HDD-60GB、Clockは1.6GHzです.なお、Windows98以降のOS搭載機で、ワープロなど普通に使える程度なら性能は問題ないでしょう.私の場合、Windows-PCは持っていなかったので、他の用途も考えて比較的高性能なものを入手しました.しかし、二世代前の現用に適さないマシンでも十分使えます.手持ちを使えば良いでしょう.なお、中古ノートなら2〜3万円のもので十分だと思います.ディスクトップ機でもよいです.シリアル、パラレルのインターフェースが付いているものが良いです.(パラレルポートを使う「書込み用ケーブル」は作るのが簡単なので)


BASCOM-AVRベーシック・コンパイラ
BASCOM_AVR.jpg 実のところ、どんなチップを選ぶのかよりも、良い開発ツールを選ぶほうがずっと重要です.
幾ら高性能なチップがあったとしてもプログラム開発のツールがイモでは苦労の連続です.Hi Hi
AVRマイコンのプログラムはどのように作るのでしょうか.だいたい以下の手順で作成します.

    プログラム開発手順
  1. プログラムをBASIC言語で記述する.
    具体的には、『周波数カウンタのプログラム』とかを書くわけです.
            ↓
  2. プログラムのミスを修正する.(バグを取ると言う)
    単純な記述ミス、文法ミスなど修正して完全なものにします.
            ↓
  3. プログラムの動作を確認する.(思った通りの動きか)
    コンパイラ付属のシミュレータで、ポートの状態など模擬試験してみる.
            ↓
  4. AVRマイコンが実行できる形式に変換する.(コンパイルすると言う)
    マウスで「コンパイル・アイコン」をクリックするだけの簡単な操作.
            ↓
  5. テストボードに書込む.
    マウスで「書込みアイコン」をクリックするだけの簡単な操作.
            ↓
  6. テストボードで実行し、旨く動けば完成!
    必要があれば前に帰って修正し、意図した動作になるようにする.
プログラムの開発はBASCOM-AVRと言う統合ソフトウエアを使います.プログラムはBASIC言語で記述し、その後、デバッグでミスを取り除く作業をします.ほぼ完全なものになったら、マイコンが実行できるように機械語に変換(コンパイルという)します.書込みケーブルがボードに接続してあれば、マウスのクリック一つでプログラムは目的のAVRマイコンに書き込まれます.プログラムを書き込まれたAVRチップは、リセットされて直ちにプログラムの実行が始まります.そして、今度は実際のチップの動きを見ながら意図どおりの動作か確認します.旨くないようなら、元のBASICのプログラムを部分修正ののち、上記を繰り返すわけです.これら一連の作成〜修正〜テストまでの過程を目的のボードを接続したままで簡単に繰り返せるのが素晴らしいと思います.いちいちチップを外して書込み器に装着して・・・と言う操作は不要です.(AVRマイコンのISP=In-System Programmingと言う機能を有効に使った開発手法です) BASCOM-AVRは開発環境として十分な実績があり、多くの使用例が報告されています.国内ではこれからと言った感じですが、特にヨーロッパのAVR愛好家にはポピュラーです.MCS Electronics社のサイトから無償のデモ版がダウンロードできます.デモ版は書込み時の容量で4KBまでという制限があります.しかし、4KBの制限以内でかなり実用的なプログラムまで作れます.もともと4KB以下のメモリしかないチップも多く、それらは何らの制限もなく、デモ版で一杯まで使えるわけです.従って、正規版は将来規模の大きなプログラムを書くようになる(書けるようになる?)まで必要ないでしょう.700ページを超えるマニュアルにはBASICコマンドの使用実例がふんだんに記述されているので参考になります.(PDF版・英文)

BASCOM-AVRダウンロードページへの直接リンク:---こちら


書込みケーブル
AVRマイコンも、他のマイコンと同じように専用書込器を使いプログラムを書込む方法もあります.しかし、ここではより簡単で便利な方法を選択しました.上記のように『In-System Programming』と言う方法です.これはマイコンチップを目的の回路(基板)に装着したままプログラムを書込むものです.従って、いちいちマイコンチップを抜差しする必要はありません.手間が省けるだけでなく、足を曲げてしまうなどの装着ミスも防げます.しかも回路には通常の電源電圧(一般的に5V)を与えておくだけで良いのです.特別のプログラミング電圧を加える必要などはありません.『In-System Programming』には幾つか制約もあって万能ではありませんが、回路設計に多少注意すればよく、多くの場合に適用できます.従って、ここでは書込み器のようなものはモノは作らず、書込むための接続ケーブルを作るだけです.書込みケーブルはパソコンのパラレルポートにそのまま接続して使えます.

AVR_ISP_Cable.JPG まず初めに、図・1のような、抵抗器4本で作れるいちばん簡単なタイプを作りました.手軽に始めるならこれが良いです.材料さえ揃えば30分で作れます.不要になったケーブルを使うなど、工夫すればタダでも作れそうです.購入しても1,000円も掛からないはずです.

書込みケーブル:図・1
ISP_Cable_Samp_Elec.JPG もっとも簡単な書込み用ケーブルの回路図です.両端のコネクタと、カーボン抵抗4本、そして5芯ケーブルが数10cmあれば作れます.AVRマイコンは、書込み(及び消去)の時に特別な電圧を掛ける必要はなく、チップには通常の電源電圧(Vcc=5V)を与えたままでできます.従って、マイコンチップは目的ボードに装着したままで良く、書込み操作もたいへんシンプルです. 25Pin側をパソコンのパラレルポート(LPT0など)に接続し、10ピン側(IPSコネクタ)をAVRマイコンチップ(チップが実装されたボード)に接続します.ケーブルはあまり長く延ばさないのがコツのようです.多くの場合このケーブルで問題なく書込めるようです.(注:パソコンのパラレルポートを利用していますが、AVRマイコンへの書込みはパラレルではなく、シリアルな方法です)

書込みケーブル:図・2
STK_200_SCM.jpg こちらは上記にバッファを付けた書込みケーブルです.上記のケーブルでも問題ないことが多いようです.私の場合、稀に(20回に1回くらい)書込んだ後でベリファイエラーが出ることがありましたが、再書き込みで問題はないようでした。しかし、きちんとしたロジックレベルが保証できている訳ではないのと、リセットラインのGNDへの引き込みが甘いようでしたので、左図(図・2)のものを製作しました。やはりこちらの方が安定している感じで、エラーはまずでなくなりました。上記の図・1でしばらく試して、問題なければそのままでも良いと思いますが、これからAVRマイコンにじっくり付きあうならこちらのケーブルをお薦めしたいと思います。費用は幾らも違いません.

書込みケーブル:図・2の製作例
STK_200_001.JPG 小さな基板このような感じに作りました.製作時間は部品が揃えば1時間半くらいでしょう.ケーブルの長さの都合で回路は中間に入れましたが、AVRマイコンに近い側に置いたほうが良いかも知れません.74HC244は間違って壊す可能性があるのでソケットにしておくと安心です.

注意
BASCOM-AVRの初期設定には、使用する書込みケーブルを設定する項目があります.図・1と図・2では設定を変える必要があります.図・1のケーブルを使う場合は、書込みケーブルには『Sample Electronics programmer』を選択して下さい.また、図・2のバッファ付きケーブルの場合は『STK200/STK300 Programmer』です.BASCOM-AVRの初期設定については、入門編(3):初プログラミング/Part-3 に詳細があります.


テスト用ボード:
AVR_TEST_PCB_2.JPG いきなり目的のものを作っても良いので、このようなテストボードは必要ないかもしれません.私はAVRマイコンとBASCOM-AVRの感触を掴むために研究用テストボードを作りました.回路は、XBY岩永さんのサイトを参考にさせてもらいました.

テストボード製作にはAVRチップが必要です.ここでは機能多彩なATmega8535を載せてあります.AVRマイコンのプログラム格納用メモリはメモリカードと同じフラッシュメモリになっています.従って、どのAVRシリーズのチップを選んでもプログラムの書込み消去は同じようにできます.それだけにPICマイコンのように定番チップを決めにくいかも知れません.従って色々あるAVRマイコンからRAM、ROMの容量、内蔵する機能(例えばA/Dコンバータ、UARTは必要かなど)で、目的に合ったチップを選べば良いわけです.ここで使ったATmega8535はたくさんポート(入出力端子)があって色々な実験には便利なのですが、少々入手しにくく、組込み用には形状が大きすぎます.機能と多くのポート(入出力端子)を余らせても勿体ないので、実機には別のチップを使います.その場合、テストボートで作ったプログラムを実機のチップ用に移植するのも簡単にできます.実機にはATmega8/48/88/168、ATtiny2313、ATtiny26など20〜28ピンのコンパクトな最新チップが適当でしょう.いずれも120〜1,000円くらいです.手軽に始めるなら、最近安価になった、秋月のATtiny2313(@120円)や旧型で安価なAT90S2313(@150円)など如何でしょうか.ATtiny2313はヒューズビットの扱いが少し面倒かも知れませんが、『入門編(4):ATtiny2313への乗換えかた』をご覧になれば簡単に使えると思います.また、AT90S2313はヒューズピットの面倒がありませんし、普通使う上では旧型と言っても特に支障はありません.上記の書込みケーブルと合わせて、とても手軽に始めることができます.テストボード用、実機組込用ともにATmega8535に拘らず入手のしやすいチップを選べば十分でしょう. なお、同じ秋月で売っている一個100円也のAT90S1200だけはBASCOM-AVRが対応していないのでうまくありません.

テストボードには液晶(LCD)表示器を実装しておきました.プログラムの動作確認には言わば必需品です.標準的なものは16文字2行表示で、1,000円程度です.標準的なLCDには簡単に文字表示できるので、BASCOM-AVRを使った開発には欠かせません.デバッグのときに重宝しますから、組込用途の場合でも脱着できるようにしておきたいものです. また、発光ダイオード(LED)を幾つかのポート(入出力端子)に付けておくと動作確認が容易です. 最近のAVRチップ(megaシリーズ、tinyシリーズ)には、クロック発振器が内蔵されているので、外付けしなくても動作します.しかし、内蔵クロックは自励発振器なので周波数は電源電圧の影響を受けるほか、温度変化に対しても少々不安定です.周波数カウンタのようにクロックの精度と安定性を要する実験のために、温度補償型の12.800MHzのオシレータ(TCXO)も載せました.内蔵、外付けのクロック切換えはパソコンに接続しBASCOM-AVRを使って操作できます.そのほか、DDSコントローラの実験用にロータリ・エンコーダ、機能切換えの実験用にプッシュスイッチなども実装しておきました.もちろん、パソコンや外部回路と接続するためのコネクタやソケットは必須です.


参考サイト:参考情報
すでに、JN3XBY岩永さんのサイトはご紹介済みですが、他にも幾つかのサイトがあります.以下に、AVRマイコンを活用するうえで、参考になる情報をご紹介します.皆さんの実例はとても参考になります.
●『BASCOM・Programming of Microcontrollers with Ease』
BASCOM_BOOK4.JPG Claus Kuhnel著、初版:2001年、Universal Publishers/uPUBLISH.com、ISBN:1-58112-671-8、\3,494-

BASCOM-AVRの洋書はないかと思って探すとこの本が見つかります.他にはあまり良さそうなものはありません.初版が2001年なので、いささか古いと思いながら購入してみました.内容はBASCOM-AVRとBASCOM-8051の双方を扱うものです.残念ながら予想通り内容は古く、Ver.1.11.3.0をベースにしており、現在のBASCOM-AVRには不十分な内容です.BASCOMをMCS Elec.社のサイトからダウンロードし、その後インストールする過程など詳しく書かれています.扱うチップがAT90SXXシリーズなのはやむを得ないでしょう.LEDチカチカと言ったレベルのプログラミングからキーパッド、キーボード、シリアルI/F、IR-I/Fなどのプログラム例があります.多少参考にはなりますが、現在のNet上の情報や他の書籍で十分カバーされていると感じます.あっても良いかも知れませんが積極的にはお薦めしません.

どうやらBASCOM-AVRを詳細に扱い、楽しく活用を解説する趣味の工作読本は内外ともにまだ少ないようです。将来を期待しましょう.それまでは皆さんのサイトと連携しつつ、このサイトも頑張らなくては.Hi Hi そのほか、多くの情報をインターネットで参照しました.AVRは安価で性能にも優れたマイコンでありながら、後発のためPICと比べて書籍・雑誌が極めて貧弱なだけにネット上の情報は非常に助かります.有益な情報を公開されているサイトオーナーの皆さんに感謝します.


エピローグ
その昔(・・・25年以上もまえでしょうか)、『パソコン==BASICだ!』と叫ばれた時代がありました.たくさんの人がパソコン教室(=BASIC教室?)に通ったとも聞きます.しかし、セッセと雑誌のゲーム・プログラムを打ち込んで遊んでみたものの、じきにゲーム機が誕生するに及び、飽きられてしまったハズです.インターネットは夢の彼方でしたから、そもそも自宅のパソコンに使い道などほとんどなかったのです.BASICでゲームや家計簿など作っても仕方ないでしょう.大衆はマスコミやパソコンメーカーの宣伝にうまく乗せられてしまったわけですネ.そして、その当時を経験され、BASIC言語をかじってみたお方が、いまや大半が『お父さん』となられています.

昨今、自作無線機にも機能的なモノが求められてきているほか、従来の技術で解決しようにも『昔の良い部品』はお店から姿を消しています.そうした現代の自作ニーズを満たすには、マイコンの活用や、DDSチップのコントロールと言った今風の技術が必要になっていました.しかし、ワンチップ・マイコンとは言っても立派に『コンピュータ』です.プログラムがなければ何も機能しません.一念発起して、本格的なプログラミング言語を学習するのも良いかもしれません.しかし、目的はマイコンその物にあるわけではなくなく、無線機への応用です.なるべく少ない労力で目的を達成できるのなら少々Poorと思われるBASICでのプログラム開発も悪くはありません.難しいことにチャレンジしても挫折しては何にもなりません. ところで、BASCOM-AVRはその目的に十分応えてくれるものでした. 実際、大昔のBASICはインタープリタ(プログラムに書かれた一行ずつを実行する時に逐次機械語に翻訳しながら進む形式.実行速度は遅い)であったのに対して、コンパイラ型BASICは記述したプログラムを一気にコンパイルして機械語に変換します.そしてチップには変換された機械語が書き込まれます.このため、CPUはただちに機械語を実行するので速度は非常に速く、目的とする用途にとって処理速度が問題になるケースは少ないのです.生成される機械語の品質はもっぱらコンパイラの性能に依存するので、記述言語の種類にはあまり関係はなく、BASIC言語=低級とは一概には言えないのです.(BASCOM-AVRは変数形の定義が必須でローカル変数も定義できるほか、プログラムも構造化でき、実際のところC言語とたいして違わない) 変換されたプログラム(オブジェクト)のサイズが大きいと言う欠点は、他のコンパイラ型言語と同様に残ります.しかし目的は高級なものではなく、単純な周辺回路の制御程度のものです.多くの場合BASCOM-AVRデモ版の容量制限に掛かったり、チップのメモリ容量不足に悩むこともないでしょう.もしものときには、正規版を購入すれば非常に大きなプログラムも作れます.その正規版も1万円くらいです.

以上のように、Windowsパソコンとわずかな出費でマイコン開発の環境が揃えられます. これから続く実際例も、すべて上記を使って開発しました.誰でも手軽に始められるのですが、お遊び程度のモノしかできない訳ではありません.自作無線機に搭載するオリジナルで、機能的なマイコン・ユニットを開発することができるのです.

続いて簡単ハードウエアの製作に進みます.続きはこちらで.


Back to Experiments Index

Back to Site Top


End / おわり

(c)2006 Takahiro KATO All rights are reserved.
Not for republication in any form without written permission.