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

Daddy's AVR Microchip Challenge!

Part Three/ BASCOM-AVR Fundamentals and Your First Program.
お父さんのAVRマイコン入門!(巻・3:コンパイラの基本とファースト・プログラミング)

(Ver.1.0c : April 29th 2006+Ver.1.2a : May 14th 2006+Ver.1.2b : May 25th 2006+Ver.1.3 : July 20th 2006+Ver.2.0a : Oct. 21st 2006+Ver.2.0c : Nov. 18th 2006+Ver.2.0d : Dec. 31st 2006+Ver.2.0e : Mar. 18th 2007)

Counter

written by Takahiro Kato JA9TTT/JH1WBU, Saitama JAPAN

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



このページの目的
前編ではAVRマイコンの超簡単ハードウエアが出来上がった.ちっぽけなコンピュータにすぎないが、プログラムがなければ何も機能しません.いよいよプログラム開発ツールのBASICコンパイラ:BASCOM-AVRに取り組むことなる.まずは、初期設定を行ない、ファースト・プログラムを走らせてみよう.


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


BASCOM-AVRの扱い
BASICコンパイラ、BASCOM-AVRについては、JN3XBY/exJA6IRK岩永さんのサイトにも解説があります.初期設定〜プログラミングまで説明されています. 独立したサイトとしては内容を完結させる必要がありますから、重複しますが採り上げることにしました.両方を参考にすればわかり易い可能性もあるでしょう.

BASCOM-AVRは統合開発環境(Integrated Development Enviroment:IDE)とも呼ばれるもので、それぞれの作業を助け、効率的に進むように工夫されているすばらしいツールです.単なるコンパイラ・ソフトではありません.


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

1・BASCOM-AVRの初期設定
BASCOM-AVRのインストールは無事に済んでいますか? 起動すると、ブランクになったプログラムを書込むウインドウが開くならOKでしょう.これからプログラムをそこに記述するのですが、その前に初期設定をしておきます.以下、順を追って初期設定をします.ここでは、必要最低限の設定ですから、詳しい機能は省略しています.詳しくはマニュアルを参照のこと.

chip_Select_00.JPG まずは、使用するAVRチップを選択します.
メニューから『Options』→『Compiler』→『Chip』を開きます.
なお、ここでOptionsメニューから初期設定せず、$コマンドを使ってコンパイラ用指令をプログラム中に記述する方法もあります.複数の種類のチップを使うならその方が間違いがなく良い方法です.難しくはないですが、ココはまだは初級コースなので詳しくはBASCOMのマニュアルを参照して下さい.


chip_Select.JPG Chip選択の画面が開くので、メニューから『2313def.dat』と言うAT90S2313の機能が定義してあるファイルを選びます.間違えたファイルを選ぶと書込む時に実際のチップと異なるというアラート(警告)が出ました.書込む前に必ず実際と照合するようです.プログラムを書込む時に、もしチップが違うという警告がでたらこの項を再確認して下さい.まだ下の『OK』ボタンは押しません


Clock_Set.JPG 続いて『Communication』タブをクリックし、左記の画面を呼び出します.使っているパソコン(BASCOM-AVR)とシリアル通信を行なう際のボーレート(データ通信の早さ)とマイコンのクロック周波数を設定する画面です.ここではシリアル通信はしないので、ボーレートの設定は何でも良いです.但し、チップに与えているクロックの周波数は必ずセットします.周波数は、『Hz単位』でインプットします.1MHzなら『1000000』となります.12.8MHzなら『12800000』です.まだ下の『OK』ボタンは押しません


LCD_Set.JPG さらに続いて『LCD』タブをクリックし、左記の画面を呼び出します.LEDチカチカには関係ないのですが、どうせすぐにLCD表示することになるので設定しておきます.まだLCD表示器が付いていなくても設定して何も問題ありません.心配せずに設定して下さい.対象のマイコン・ボードがPart-2の回路図通りに作ってあるなら、左図ようにセットします.まだ下の『OK』ボタンは押しません


Programmer_Select.JPG 最後に、書込みケーブル(Programmer)をセットします.『Programmer』タブをクリックし、左記の画面を呼び出します.左図では、Part-1で製作した図・1の『Sample Electronics programmer』と言う一番シンプルなケーブルを使う例を示しています.もし、バッファ付きケーブル(図・2)を使うなら『STK200/STK300 Programmer』を選びます.メニューからそれを選択してください.済んだら、ここで初めて下の『OK』ボタンを押します

以上で、この記事で必要な初期設定ができました.これらの設定は何回やってみても何も壊れはしないので気の済むまでやって下さい.なお、上記の設定状態は変更するまで記憶されます.パソコンを次に起動した際には、前の設定のままですから、再度設定する必要はありません.もちろん、異なるAVRチップを使いたい時や、クロック周波数を変更し、別のLCD接続を行なうなど、何か変更したら再設定する必要があります.(種々のチップを使うなら、初期設定のミスを防ぐのために、プログラム中に$コマンドを使ってコンパイラへの指令を記述しておく方法があります.)



2・初めてのプログラミング:LEDチカチカ
初めてのプログラムを書きます.今やマイコンフリークの定番(?)のようになった『LEDチカチカ』を一度はやってみます.Part-2で製作したマイコン・ボードの『ポート D、6番』に付けたLED(発光ダイオード)を一定周期で点滅させるだけの簡単なものです.

First_Program.JPG 取りあえず左図のようなプログラムを書いてみました.コメント行をたくさん入れました.これだけのプログラムなら見ての通りなので、コメントなど不必要でしょう.しかし、何のプログラムかわかるよう、習慣として書いておくべきです.


First_Program_01.JPG 本来必要なプログラム本体はタッタの8行に過ぎません.他はぜんぶコメント行です.但しコメント文は、コンパイルする際に全て読み飛ばされるので幾らあってもかまいません.当然、チップのメモリを無駄に消費することはありません.なるべく詳しく書いておくと後で見るときにたいへん役立ちます.誰しも半年もすれば細かいことは忘れてしまうのが普通です.

パソコンBASICにはない、コマンドがさっそく登場します.
Configとは、コンフィギュレーション(Configuration)のことで、「設定」の意味です.ワンチップ・マイコンの端子(ピン)は、入力にも出力にも使えます。もちろん途中で変更できますが、まずは起動時の初期設定が必要です.それを行なうのがConfig文です.ここでは、LEDの付いたポートDを出力(Output)に設定しています.Config文には他に内蔵のTimer/CounterやA/Dコンバータの設定などもありますが、追々そうした例が出てきます.

Do〜Loop文は、構造化BASICではおなじみでしょうか? このプログラムにはループの内側にループを抜ける条件判断の文(If〜文)はありませんから、DoとLoopの間を無限に繰り返すわけです.

Set/Reset文は、ポートのピンを操作するコマンドです.Setで指定したピンが論理"1"になります.Resetで論理"ゼロ"になります.Vcc=5Vなら論理"1"は概略5ボルト、論理"ゼロ"はGNDレベルのゼロボルトです.従ってポートDの6番がSetされ、5VになったときLEDが点灯しResetで消灯します.

Wait文は、文字通り『待つ』コマンドで、そのままの状態で待つだけで何も変化しません.従って、プログラムとしてはなくても間違いではありません.エラーにもなりません.しかし、非常に重要で、取り除くと、マイコンは約470マイクロ秒(クロック12.8MHzにおける実測値)で点滅を繰り返します.毎秒2,000回以上の点滅では人間の目では『チカチカ』に見えません.Wait文は人間が見えるようにするのためのコマンドですね.


First_Program_02.JPG 上記と同じ働きをするプログラムをもっと短く書いたものです.本体は2行減ってタッタの6行になりました.

Toggleコマンドを使うと自動的にポートの状態を反転してくれます.従って、いちいちSet/Restしなくてもチカチカするのです.


First_Program_03.JPG さらに、上記と同じ働きをするプログラムですが、Do〜Loopでなく、Goto文で繰り返す方法です.構造化以前のBASICでは良く使った手でした.

以上、『LEDチカチカ』のプログラム三題をご紹介しました.こんな簡単なものにも、同じ機能を実現するプログラムには様々な方法が考えられるわけです.この辺に好みや工夫が大きく現れる部分なのです.他人が作ったプログラムが解りにくい理由でもある訳です.こんな単純な『LEDチカチカ』ですが、上記以外の色々な手があるはずです.一つ考えてみて下さい.



3・プログラムのコンパイルと書込み・実行
さて、プログラムは書けました.でも、そのままではまだ『絵に描いた餅』の状態なのです.BASICで記述したコマンドをAVRマイコンが解釈できる機械語に翻訳(=コンパイル:編集する、集める等の意)し、チップに転送しなくては実行されません.以下はその方法を説明します.バグやエラーさえなければ数秒でできる操作です.まずはそのまえに、テスト回路とパソコンをプログラミングケーブルで接続して通電しておきます.

BASCOM_Icon.JPG コンパイルとプログラミングはメニューのアイコンをクリックすることで実行できます.図にコンパイル・アイコンとプログラム・アイコンを示します.他に並んだアイコンについてはマニュアルを見て下さい.取りあえず、図の2つががわかれば上記プログラムを書込んで『LEDチカチカのプログラム』を走らせることができます.


Program_Compile.JPG 上記コンパイルアイコンをクリックすると、図のようなコンパイルの進捗を示す窓が表示されます.うまく行けば図のようにフラッシュメモリ(プログラムを書込むメモリ)の消費量が表示されて終了します.『LEDチカチカ』のプログラムの本文はたったの8行なので、AT90S2313のプログラムメモリ(2Kバイト)の6%(=123バイトくらい)しか消費しませんでした.しかし、アセンブラで記述すればもっと短いのかもしれません.


Programming_01.JPG 機械語変換(コンパイル)が無事終了したら、いよいよチップに書込みます.左図の『Programming』アイコンをクリックし、上段の『Program』を選択します.


Programming_02.JPG 念の為、既にチップにある既存のプログラムを消去しても良いのか尋ねられます.初めての書込みなら、まだチップには何も書いてありません.書き換えても良いですから、迷わず『Yes』を押します.


Programming_03.JPG 上記で『Yes』を押すと、ただちに書込みが始まり、書込みが終わると正しく書込まれたか読出し照合(ベリファイ)されます.何もエラーが無ければ、チップは自動的にリセットされ、直ちにたったいま書込まれたプログラムの実行が始まります.さっそく『LEDが1秒おきにチカチカ』することが確認できれば、"My First Program"は大成功!

ここでコーヒーブレーク:
LEDチカチカ基板のままで、すこし遊んで見ましょう.まずは、上記3種類のプログラムをそれぞれコンパイル、書込みして違いのないことを確認してみます.その後、Wait文の所の数字を変えてみましょう.また、Waitの類似コマンドには、他にWaitmsWaitusがあります.Waitmsはミリ秒単位のウエイトです.例えば、0.5秒待たせたいなら1秒は1000ミリ秒ですから、『Waitms 500』のように書きます.Waitusはマイクロ秒待たせるコマンドです.しかし、人間の目が相手ではマイクロ秒を使うことはないでしょう.
基板に付いているLEDは1個ですから点滅周期を変えるくらいしか遊びようはありません.他のピンにも同じようにLEDと抵抗を配線してやれば、バラエティに富んだ遊びができます.並べて『ナイトライダー』(笑)のようなのが作れますし、クリスマスツリーの電飾のようなものもできるでしょう.たかがLEDの点滅ですが、何かの対象をON/OFFすると言うマイコンとしては非常に基本的な機能なのでこれからも頻繁に使います.けして馬鹿にしたものではありません.良く理解しておきたいものです.



4・Hello AVR World !
さて、『LEDチカチカ』もあっけなく大成功し、AVRマイコンの1stステップを踏み出すことができました.では、さっそく次のステップ、液晶(LCD)モジュールに文字を表示するプログラムを試みることにしましょう.

Hello_AVR_01.JPG 実は、BASCOM-AVRを使うとLCDに文字表示するのは『LEDチカチカ』より、もっと簡単なくらいなのです.専用のコマンドが用意されているからです.これをもし機械語でプログラムを書くとすれば、とても大変で初心者ではおそらくお手上げでしょう.しかし、BASCOMなら超簡単です.パソコンBASICで文字を表示する時には・・・Print "Hello World !"とやったことを思い出すでしょう.このPrintに相当するのがLcdコマンドです.Print "Hello World !"の代わりに、Lcd "Hello World !"の文を書くだけでLCD表示器にはHello World !の文字が表示されます.Clsと言うコマンドがクリア・スクリーンだろうというのはすぐに想像できますね.


Hello_AVR_02.JPG そして、これは応用問題です.見ての通りのものですから説明不要ですね.だんだんプログラムを発展させ『お父さんの』AVRマイコンの世界が広がって行くのです.


BASIC言語によるプログラミング
このページは、ワンチップ・マイコン入門がテーマなのですが、あまりにも初歩的な説明をしていたのでは幾ら経っても応用にたどり着けません.多少なりとも、BASIC言語を知っていることを前提にしています.まったく知らなければサンプルがあっても、それを改造するのさえ難しいはずです.BASIC言語でのプログラミング経験がないのでしたら、一歩前進して頂くことを期待するしかありません.サンデープログラマーに必要な知識は知れたものです.数時間の講習でもそこそこわかるようになります.しかし、身近に質問できる人がいないと少々ハードルは高いかも知れません.友人を誘って一緒に取り組むのが良いでしょう.掲示板にご質問を頂いても結構(もちろん常識を持ち、節度も保って下さい)ですが、文章で正確に意図を伝えるのは難しいものです.直接会話できる友人が身近にいるべきです.最初のころはつまらぬことに躓くものなので、いちいち文字で質問していたのでは捗らないでしょう.

ワンチップ・マイコンはポート(ICの足ピン)操作が主です.複雑な論理構造やグラフィック関係のコマンドは知らなくても十分です.最低限知るべきは、変数の意味(文字変数、数値変数、配列変数)とその扱いかた、条件判断を使った処理の流れの変えかた、くらいのものでしょう.あとの多くはBASCOM-AVRのBASICに固有のコマンドなので、それぞれ試して行けばわかってきます. 残念ながら、BASIC言語とそのプログラミングを初歩から解説する書籍は既に絶版になっています.入門書は図書館をあたってみてください. 書店でVisual-BASIC系の解説書は見掛けますが、BASCOM-AVRには適当ではありません.同じBASIC言語ですが目的が異なるからやむを得ないでしょう.

このサイトは自作機器へのワンチップ・マイコン応用の動機を示すのがねらいです.また、ハードウエアとプログラムを融合することで機能・性能を実現する過程を示すのもその一つです.さりとてプログラミング未経験者を救済するのは少々荷が重すぎます.その目的にはより良いサイトがあるでしょう.また、読者にプログラムをダウンロードさせて、レプリカを作っていただこうとも思っていません.せっかく自分で機能を操ることができるのに、ただのコピー品の製作では進歩はないと思うからです.キットを幾ら製作したところで回路技術は大して向上しないのと同じです.説明上必要な参考プログラムは掲載します.その先は各自で工夫して下さい.その上で、情報交換の輪ができたならたいへん嬉しいです.サイトに掲載の例題を完成させるのがゴールではなく、マイコンを活用できるようになるのが目標なのですから.

さて、BASIC言語の経験はあるが、もう随分前のことなのですっかり忘れてしまったと言うお方に、以下のサイトなど如何でしょうか? 思い出す切掛けになるはずです.これからプログラミングを始める人も役立つかもしれません.

☆Tiny BASICを題材にプログラミングの基礎を解説するサイト:・・・・Tiny Basic for Windows
プログラミングの基本的なことや、構造化に関したコマンドの解説もあって、とてもわかり易いと思います.


エピローグ
普通の電子回路なら、配線が終わり通電すればすぐに動作が始まる.マイコンが厄介なのは、配線の終了は道半ばに過ぎないことだろう.もちろん、ハードウエアがまともに動作しなくては、プログラムも正常に機能しない.しかし、いくら良く出来たハードでも、そのままでは未だ開眼しない.従って、ハード派にとっては、プログラムなど要らない回路の方が余ほど良いものに映るのも当然だ.

マイコン回路の良さは何か? それは、プログラム次第で変幻自在なことだ.Part-2で作ったのは『LEDチカチカ』の回路だった.だが、ポートDの5番に信号を与えれば周波数カウンタに変身する.あるいは、ロータリーエンコーダと出力端子をポートに割当てればDDSコントローラになる.それどころか、なにも追加しなくても、時計やタイマならスグにでも変身する.ポートのオンオフがわかったのだから、リレーの操作など簡単だ.少しのハード変更や追加で様々な機能を持った機器に変化する.マイコンには様々な可能性が秘められている.配線を変えずに変身する便利な(不思議な?)部品なのだ.

簡単なプログラムを例にテスト回路で実行させるまでを辿ってみた.これから先は、プログラミングの世界になる.手っ取り早くマイコン・チップが使えるようになったら様々にプログラムを書いて試してみよう.あとは興味次第、努力次第だろう.そのうち私のマイコン組込作品を紹介したいものだ.

続いて最新のATmega168の使い方に迫ります.続きはこちらで.
さっそくマイコン式周波数カウンタで応用編に進むにはこちらで.


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.