<< AVRなんてこわくない! >> 初めてのAVRマイコン

 マイコンなんて、何に使うかわからない・・・
 LED(発光ダイオード)を点滅させて、そこから先に進まない・・・
 プログラムなんて、誰もが作れるわけじゃない・・・

 電子工作にマイコンを取り入れて、簡単に動かしてみたい・・・
  そんなときには!

■ AVR & BASCOM-AVR トレーニング・ボードの製作 ■

 PIC・AVR・H8など、ワンチップ・マイコンと呼ばれる部品は、多種多彩に販売されており、電子工作を楽しむ上では、避けて通れない存在になっています。
 パソコンは扱えても、電気回路は不得意だったり、ハンダ付けは得意でも、プログラムに必要なC言語やアセンブラ言語を、今さら勉強するのも・・・と言う方も多いのではないでしょうか。

 当ページでは、AVRマイコンを中心とした電子工作を各種掲載しておりますが、AVRにはBASCOM-AVRと言う、とても良くできたBASIC言語のコンパイラがあります。
 BASICとは、マイコンが登場した初期の頃から使われている基礎言語で、その簡単さから現在でも愛好者がおり、進化もしています。
 また、マイクロソフトのVB(Visual Basic)準拠のBASIC言語なので、VBの経験があれば、AVRマイコンへの取り組みは早いと思います!

 そこで、専門的学習や業務使用の方は、Cやアセンブラを学んでいただくとして、このページではBASIC言語を使い、趣味の電子工作にいかに簡単に応用できるかを、習得していただくお手伝いになればと思います。

 BASCOM-AVR試用版(DEMO)は、無償で試用できます。 (4Kbyteのプログラム容量制限があります)
 もちろん、「製品版」を購入すれば、業務使用にも遜色はありません!


応用プログラム 集
トレーニング・ボード 機能テスト
適温表示機能付き 温度計
LED調光 イルミネーション
メロディー 再生
音感センサー & スイッチ
デジタル時計
ストップ・ウォッチ
パルス・ジェネレーター
周波数カウンター
デジタル タイマー プログラム
光センサー 周波数+回転計 プログラム
ゲーム・プログラム 集
体内時計 精度測定 ゲーム
LED たたき ゲーム
電子サイコロ
マウス・ハント ゲーム
四則計算 算数 ゲーム
Hit & Blow ゲーム
神経衰弱 ゲーム
応用回路の製作とプログラム 集
サーボ・モーター 制御
RC5 赤外線リモコン
NECフォーマット 赤外線リモコン 受信テスト
家電製品協会(AEHA)フォーマット 赤外線リモコン 受信テスト
Arduino用 赤外線キット [DFR0107] を受信する
FT232RL USBシリアル変換モジュール[AE-UM232R]使用 パソコン通信テスト
[DS18B20] 高精度デジタル温度計の制御 (-55℃〜+125℃)
電子オルガン
ストロボ式 ギター・チューナー
シャープ測距モジュール GP2Y0A710K 距離計測 & 近接アラーム
デジタル 温度&湿度センサー [SHT11] ・ [DHT22] を制御
小型のI2Cデジタル気圧計 MPL115A2を制御
デジタル気圧センサー LPS331APを制御
Arduino用 赤外線キット [DFR0107] を受信
ホール効果センサー A1324LUA-T で磁束密度の測定
SDカードの接続と制御
GPS受信モジュール AE-GYSFDMAXBのデータを表示する
TCXO水晶内蔵 I2CバスRTC DS3231を制御する
TSL2561 照度センサーを制御する


トレーニング・ボードの準備
 
・まずは、AVRマイコンと、その手足となる部品を搭載した、回路基板を用意します。

 
AVRマイコン ATmega88P(A)-20PU 数百円で買える、なかなか頼もしいマイコンです。
タクト・スイッチ 押しボタン式の
スイッチ - 4個
マイコンに指示を与える入力装置。
LED
(発光ダイオード)
赤・緑・黄・青 - 各1個 マイコンからの情報を表示する、4色のランプ。
LCD
(液晶表示器)
16文字×2行
キャラクタ タイプ
マイコンからの情報を、文字や数値で表示します。
光センサー フォト・トランジスタ(CDS)
光の強さを電圧値に変換
基板周辺の明るさを感知して、動作に応用します。
温度センサー 温度を電圧値に変換 温度計や、温度に合わせた動作に応用します。
圧電スピーカー パルス電圧を音に変換 メロディー音やアラーム音を鳴らします。
測定端子 ターミナル端子 - 3回路 外部の電圧や、信号を計測します。
拡張端子 基板外部に信号を出力 サーボモーターなどの装置を制御します。


・基板を自作できる方。
 下記の回路図等をご利用頂き、ユニバーサル基板やブレッドボードまたはプリント基板で
 製作して下さい。
 
・キットならば組み立てられる方。
 頒布室にて、プリント基板やキットの頒布を行っておりますのでご利用下さい。
 
・配線やハンダ付けなどができない方。
 頒布室にて、完成品の頒布も行っておりますのでご利用下さい。


回 路 図  GIF版 AVRtrangCir.gif (106KB)  PDF版 AVRtrangCir.pdf (272KB)

部品配置図  GIF版 AVRtrangPcb.gif (158KB)  パターン AVRtrangPtn.gif (147KB)
アートワーク  GIF版 AVRtrangAW.gif (90KB)  部品表
 
   
注意! この図面を使用した、いかなる損害にも責任を負いません。
 
        著作権は放棄しておりませんので、販売や配布目的での使用は絶対にしないで下さい。
        (記事の無断転載を除き、個人での使用は可能です。 改変、自作品の掲載、リンクもご自由に。)



基板 前面

基板 後面

 
プリント基板

 
基板 部品面

 
基板 ハンダ面
(全パターンのハンダメッキは
任意(不要)です)


・ボードの調整箇所。
 
 ボード作製後、下記の「プログラム制作環境の準備」を整え、「初期設定プログラム」を実行すると、
 LCD画面にメッセージが表示されます。
 
 この時、ボード上のコントラスト調整用、半固定抵抗器を左右に回して、LCDの文字がきれいに
 見える位置に調整して下さい。



プログラム制作環境の準備 (BASCOM-AVR)
 
1.AVRマイコン書込器の用意
 
 ・AVRマイコンに、プログラムを書き込むための、「ISP」タイプ書込器(ライター)を準備します。
 ・当ページでは、既製品の書込器購入を推奨しています。
  (下記2種類の書込器以外は、当ページではサポートできません)
 
 (1) Atmel (AVRの開発メーカー)純正、「AVRISPmkII (Windows版)
  ・純正品のため価格は上がりますが、各種AVRへの対応などのサポートが間違いありません。
  ・難しい「ヒューズビット」も、BASCOM-AVRから自動で書き込めるため安心です。

 (2) 共立電子産業、USB接続型AVRライタ 「AVRWRT (Windows版)
  ・純正「AVRISPmkII」の、半額ほどで購入できます。


2.BASCOM-AVRのインストール
 
 ・BASCOM-AVRは、作成したBASICプログラムを、AVRの機械語に変換してくれるコンパイラです。
 ・試用版(DEMO)は、無償で試用できます。 (4Kbyteのプログラム容量制限があります)
 ・製品版は、約12,000円で購入できます。
 ・まずは、試用版(DEMO)で、練習をして下さい。
 
    BASCOM-AVR (DEMO) のインストール
 
 ・「1.AVRマイコン書込器の用意」で用意した書込器に合わせて設定を行って下さい。
 ・「AVRISPmkII」の準備。 Atmel純正 AVRライター 「AVRISP mkII」をBASCOMから使用
 ・「AVRWRT」の準備。 USB接続 AVRライター 「AVRWRT」をBASCOM-AVRから使用


このボードでは、ATmega88P(A)以外の28ピンAVRも使用できます。
  以降の初期設定やプログラム集の、「.bas」ファイル冒頭にある「$regfile = "******"」 行を、
  下記の様に変更してコンパイルして下さい。
AVRチップ名 $regfile =  (行) 備   考
ATmega88P-20PU
ATmega88PA-PU
$regfile = "m88pdef.dat" プログラム容量:8Kbyte 省電力
(このボードの標準)
ATmega88-20PU
ATmega88A-PU
$regfile = "m88Adef.dat" プログラム容量:8Kbyte 旧タイプ
ATmega168-20PU $regfile = "m168def.dat" プログラム容量:16Kbyte 旧タイプ
ATmega168P-20PU
ATmega168PA-PU
$regfile = "m168pdef.dat" プログラム容量:16Kbyte 省電力
ATmega328P-PU
$regfile = "m328pdef.dat" プログラム容量:32Kbyte 省電力


3.トレーニング・ボードの初期設定
 
 ・AVRマイコンは、使用する前に「ヒューズビット」と言う、動作にかかわる重要な設定が必要です。
  (初期値のまま使用する用途もありますが、このボードでは変更が必要です)
 ・「ヒューズビット」の設定は、ボードの使用前に一度だけ行って下さい。
  その後、標準の使用方法では、変更の必要はありません。
 ・頒布室のキットをご利用の場合は、発送時に設定済みですので必要ありません。

 ● 「AVRISPmkIIの場合。
 
 (1) 下記の [AVRtbinit.bas] ファイルを、プログラムを保存していく任意の場所に保存して下さい。
   (D:\BASCOM\など)
   (プログラム[.bas]ファイルには、日本語のフォルダ名やファイル名は使用できませんので、
    注意して下さい)

AVR トレーニング・ボード [AVRISPmkII] 用 初期設定プログラム
     (ATmega88P このボードの標準用)
AVRtbinit.bas
AVR トレーニング・ボード [AVRISPmkII] 用 初期設定プログラム
     (ATmega328P 専用)
AVRtbinit328.bas
 
 
 (2) トレーニング・ボードに、書込器(ライター)の [ISP] ケーブルを接続して、ボードの電源を
   入れて下さい。
 
 (3) BASCOM-AVRを起動して、メニューバーから [ File ]→[ Open ] をクリックし、
   (1)で保存した [AVRtbinit.bas] ファイルを開いて下さい。
 
 (4) メニューバーから、[ Program ]→[ Compile ] をクリックし、コンパイルをします。
 
 (5) メニューバーから、[ Program ]→[ Send to chip ] をクリックし、書き込み用の
   ウィンドウを開きます。
 
 (6) プログラマー・ウィンドウのメニューバーから、[ Chip ]→[ Autoprogram ]
   クリックすると、プログラムが書き込まれます。
   LCD画面にメッセージが表示され、青LEDが1秒間隔で点滅すれば完了です。


 ● 「AVRWRT の場合。
 
 (1) 下記の [AVRtraining.bas] ファイルを、プログラムを保存していく任意の場所に保存して下さい。
   (D:\BASCOM\など)
   (プログラム[.bas]ファイルには、日本語のフォルダ名やファイル名は使用できませんので、
    注意して下さい)

AVR トレーニング・ボード 初期設定プログラム AVRtraining.bas
 
 (2) トレーニング・ボードに、書込器(ライター)の [ISP] ケーブルを接続して、ボードの電源を
   入れて下さい。
 
 (3) BASCOM-AVRを起動して、メニューバーから [ File ]→[ Open ] をクリックし、
   (1)で保存した [AVRtraining.bas] ファイルを開いて下さい。
 
 (4) メニューバーから、[ Program ]→[ Compile ] をクリックし、コンパイルをします。
 
 (5) メニューバーから、[ Program ]→[ Send to chip ] をクリックし、AVRWRT書き込み
   用のウィンドウを開きます。
 
 (6) [検出] をクリックし、「デバイス:」欄に、[ATmega88P/PA] と表示されていることを確認
    して下さい。
    (違う名前が表示されている場合は、下記の処理を絶対に行わずに、基板や配線の
     確認をして下さい)
 
 (7) 「ヒューズ」欄の、[詳細]をクリックし、「ヒューズ」ウィンドウを開きます。
    画面の様に、[Low] 欄 と [High] 欄の [0]・[1] をクリックして切り換えて下さい。
    ※ この時点で、設定値を再確認して下さい。
    ※ 間違った値を書き込むと、AVRが動作しなくなる可能性があります。

    間違いがなければ、[書き込み] をクリックし、[戻る] をクリックします。
 
 (8) 「FLASH」欄の[参照]をクリックし、(1)でプログラムを保存したフォルダ内の、
    「AVRtraining.hex」ファイルを開き、同欄の[書き込み] をクリックすると、プログラムが
    書き込まれます。
    LCD画面にメッセージが表示され、青LEDが1秒間隔で点滅すれば完了です。



BASCOM-AVR と トレーニング・ボードの使い方
 
 ・このボードでプログラムを作成する場合は、初期設定プログラムAVRtraining.bas に、
  オリジナルのプログラムを書き足して下さい。
 
 ・この、「初期設定プログラム」では、 トレーニング・ボードに搭載されている回路に合わせて、
  AVRマイコンの動作を設定しています。
 ・内容を詳しく知りたい方は、BASCOM-AVRのリファレンス・マニュアルと、ATmega88P
  マニュアルを参照して下さい。


1.プログラムの作成手順
 
 (1) BASCOM-AVRを起動して、メニューバーから [ File ]→[ Open ] をクリックし、
   [AVRtraining.bas] ファイルを開いて下さい。
 
   「応用プログラム集」等を利用する場合は、ダウンロードしたプログラム「XXXXX.bas」を開き、
   (3)へ進んで下さい。
 
 (2) 各自のプログラムを作成した後に、メニューバーから、[ File ]→[ Save As... ]
   クリックし、任意の名前を付けて保存して下さい。
   ・フォルダ名 及び ファイル名は、必ず半角英数字にして下さい。
   ・日本語のフォルダ名・ファイル名は、エラーになります。
   ・「Leave the old CFG file ?」 と言うメッセージが出た場合は、[Yes] をクリックして下さい。
   ・2回目以降は、[ File ]→[ Save ] で、上書き保存できます。
 
 (3) メニューバーから、[ Program ]→[ Compile ] をクリックし、コンパイルを行います。
   ・問題が無い場合は、画面下のステータス行に、「No errors found」と表示されます。
   ・プログラムの打ち間違い等がある場合は、画面下に「Error Panel」が開き、エラーのある
    行番号とエラー内容が表示されますので修正して下さい。
   ・エラー報告をダブルクリックすると、プログラムにエラーのある行が、赤く表示されます。

 (4) メニューバーから、[ Program ]→[ Send to chip ] をクリックし、書き込み用の
   ウィンドウを開きます。

  ● 「AVRISPmkIIの場合。
   ・メニューバーから、[ Chip ]→[ Autoprogram ] をクリックすると、プログラムが
    書き込まれます。

  ● 「AVRWRT の場合。
   ・「FLASH」欄の[参照]をクリックし、(2),(3)でプログラムを保存したフォルダ内の、
    「プログラム名.hex」ファイルを開き、同欄の[書き込み] をクリックすると、プログラムが
    書き込まれます。

 (5) 書き込みが終了すると、ボード上で自動的にプログラムが開始されます。
   ・[RESET] スイッチを押すと、再度プログラムの最初から実行されます。


2.ボードに搭載されている機能の制御方法

 ◎ 実際のプログラムは、トレーニング・ボード機能テストプログラム ATBboardTest102.bas を、
   参照して下さい。

 (1) LED(発光ダイオード)の点灯。
 
  ・4つのLEDは、それぞれがポートDのビット4,5,6,7に接続されていますから、下記の命令で
   点灯、消灯を行えます。
  ・それぞれのLEDには、わかりやすい名前も割り付けてあります。
 Set PORTD.4
 Set Led_1r
赤LEDが点灯します
 Set PORTD.5
 Set Led_2g
緑LEDが点灯します
 Set PORTD.6
 Set Led_3y
黄LEDが点灯します
 Set PORTD.7
 Set Led_4b
青LEDが点灯します
 Reset PORTD.4
 Reset Led_1r
赤LEDが消灯します
 Reset PORTD.5
 Reset Led_2g
緑LEDが消灯します
 Reset PORTD.6
 Reset Led_3y
黄LEDが消灯します
 Reset PORTD.7
 Reset Led_4b
青LEDが消灯します


 (2) LCD(液晶表示器)への表示。
 
  ・LCDは、16文字×2行分の、英文字、数字、記号、カタカナを表示できます。
   (表示できる文字種は、LCDの説明書を参照して下さい)
  ・LCDへの接続設定は、初期設定プログラム内で行われているので、表示制御の命令のみで
   表示が可能です。
CLS LCDの表示全体を消去し、カーソルをホーム(画面左上)の位置に移動します。
CURSOR LCDのカーソル表示を、オン/オフまたは点滅させます。
LOCATE LCDのカーソルを、指定された位置に移動させます。
LCD LCDに、変数の値または文字列を表示させます。
 
  ・他のLCDに関する命令は、キャラクタLCD関連の命令を参照して下さい。


 (3) スイッチの検出。
 
  ・スイッチの信号を検出するには、何通りかの方法がありますが、このボードではAVRマイコンに
   搭載されているプルアップ機能を用いて、簡単に検出する方法を使用しています。
・AVRの初期状態では、ポート端子が開放状態になって
 いますが、プログラムによりプルアップの設定を行うと、
 電源とポートの間に数十KΩの抵抗が接続されます。
・これにより、ポートは [H] レベルに保たれます。
 
・このポートとGND間にスイッチを接続することで、
 スイッチが押された場合に、ポートが [L] レベルに
 変化し、その変化をプログラムで読み取ります。
 
・プログラムからは、スイッチが押されていない状態で1
 [H] 、スイッチが押されると0 [L] が検出できます。
 
  ・それぞれのスイッチには、わかりやすい名前も割り付けてあります。 (Sw_1, Sw_2, Sw_3, Sw_4)
  ・プログラムでは、下記のように記述します。
Swdata = Sw_1 変数「Swdata」に、スイッチ1の状態が入ります。(OFFで [01] , ONで [00])
If Sw_2 = 0 Then スイッチ2が押された場合に、条件が成立します。


 (4) スピーカーを鳴らす。
 
  ・圧電スピーカーを使用しているので、AVRのポートに直接スピーカーを接続し、ポートに
    [H] と [L] レベルのパルスを出力することで、方形波のブザー音やアラーム音が鳴ります。
  ・プログラムでは、「Sound」命令によって簡単に鳴らすことができます。
Sound Sp_out , 100 , 1333 1KHzの音を100mS間鳴らします。


 (5) 光センサーの使用方法。
 
  ・光センサーは、フォトトランジスタ(NJL7502L)を使用しています。
  ・センサーに光が多くあたるほど、フォトトランジスタには多くの電流が流れて、抵抗器(10KΩ)の
   両端の電圧値が高くなります。
  ・逆に、光の量が少なくなると、フォトトランジスタに流れる電流も少なくなり、抵抗器の両端の
   電圧値も低くなります。
 
  ・この抵抗器に発生する電圧値の変化を、AVRマイコンに搭載されたA/Dコンバータで
   読み取ります。
   (A/Dコンバータとは、アナログ信号レベルを、デジタル数値に変換する装置です)
  ・プログラムでは下記の命令により、光の強さを0〜1023の数値に換算することができます。
Phlevel = Getadc(0)
Phlevel = Getadc(Ad_photo)
ワード型変数「Phlevel」に、光量の換算値が入ります。


 (6) 温度センサーの使用方法。
 
  ・温度センサーは、専用IC(LM61BIZ)を使用しています。
  ・このLM61BIZは、-25℃〜+85℃までの温度を、350mV〜1.45Vの電圧に変換して出力します。
  ・センサーから出力された電圧値を、AVRマイコンに搭載されたA/Dコンバータで読み取ります。
   (A/Dコンバータとは、アナログ信号レベルを、デジタル数値に変換する装置です)
 
  ・出力される電圧値は、1℃が10mVで、マイナスの温度も表現するために、600mVの
   オフセットが加えられています。
  ・つまり、350mV - 600mV = -250mV で、350mVが-25.0℃を表すことになります。
  ・プログラムでは、A/D変換した電圧値を、計算により温度に換算します。
Dim Temp As Long
Dim Tempstr As String * 20
Do
Temp = Getadc(ad_thermo)
Temp = 5000 * Temp
Shift Temp , Right , 10 , Signed
Temp = Temp - 600
Cls
Tempstr = Str(temp)
Lcd "Temp = " ; Format(tempstr , "0.0") ; "゚C"
Wait 1
Loop
'ロング型変数を宣言する。
'文字変数を宣言する。
'繰り返し処理。
'温度センサー値をA/D変換する。
'5.000V÷1024×1000000×[A/D値]÷1000
'式を変えて 5.000V×1000×[A/D値]÷1024
'温度センサーIC [LM61]の温度変換計算。
'LCD画面を全て消去する。
'数値変数を文字変数に変換する。
'LCDに温度を表示する。
'1秒間の待ち時間。



 (7) 測定端子の使用方法。
 
  ・測定端子では、外部の信号や直流電圧を、3回路それぞれに測定することができます。
  ・端子から入力された信号を、AVRマイコンに搭載されたA/Dコンバータで読み取ります。
   (A/Dコンバータとは、アナログ信号レベルを、デジタル数値に変換する装置です)
 
  ・端子に入力できる電圧値は、GNDに対して正の電圧で、最大5Vまでです。
   (5V以上の電圧を測定する場合は、抵抗器で分圧してから入力して下さい)
  ・また、AVR内蔵のA/Dコンバータの特性から、測定できる周波数はDC〜10KHz程度です。
 
  ・プログラムでは下記の命令により、直流電圧値を測定できます。
  ・5Vを1024分割した値が換算値となります。 (0〜1023) (205で約1V)
Ch1data = Getadc(Ad_ain1)
Ch2data = Getadc(Ad_ain2)
Ch3data = Getadc(Ad_ain3)
ワード型変数「Ch1data」に、測定入力1の換算値が入ります。
ワード型変数「Ch2data」に、測定入力2の換算値が入ります。
ワード型変数「Ch3data」に、測定入力3の換算値が入ります。


3.ここまで読破したが、ほとんど理解できない・・・方へ

 ・まずは、ページ冒頭の応用プログラムを動作させて、個々の命令の動作や役割を
  BASCOM-AVRのリファレンス・マニュアルで調べて見て下さい。
 ・そして、パラメータ(命令の右の数値)をいじってみたり、命令を追加してみて、動作の変化を
  理解していって下さい。
 
 ・BASIC言語は、ほとんどの命令が1つの命令ごとに動作を完結するので、1行ごとに命令を
  並べていくことで、動作の確認ができるはずです。
 ・その上で、複合的な動作を考えていくと、プログラムとしてまとまっていくと思います。

 ・思い通りに動かない時は、ささいなことでも悩まずに、当ページの掲示板で質問して下さい!




応用プログラムや製作例の投稿募集!
 
 ・皆様の、実用的な応用(製作例)からゲームまで、幅広くプログラムをお寄せ下さい。

● 投稿方法 ●
 
ジャンル:  (上記のジャンル名)
タイトル:   (プログラムのタイトル名)
プログラム: (プログラムのファイル名 .bas)
作者:     (ニックネーム 可)
作成日:   (作成日 または 更新日)
動作説明や操作方法 (写真も可)

上記の項目をご記入の上、「掲示板」 または 「メール」にてお送り下さい。
 メールアドレス: information-dkあっとfamily.email.ne.jp
  (「あっと」の文字を@に変更して下さい)
 
注1.投稿内容は、「AVR & BASCOM-AVR トレーニング・ボード」上で動作する
    プログラムに限ります。
注2.「掲示板」では、プログラムファイルを「xxxxxx.bas」から「xxxxxx.txt」に
    変更した後に添付して下さい。
注3.画像ファイルは、一枚が100Kbyte未満に収まるように加工して下さい。






   電子工作の部屋 Top へ 前のページへ戻る