AVRマイコンなページ †
AVRマイコンなページにようこそ
ここではAVRマイコン講座での内容をまとめたり,追加情報を載せたりしています
内容について不備,間違い,不足等あれば指摘,追記,修正等どんどんしてください
現在製作中のため画像等がないですが余裕ができたら作ってあげていきます
AVRマイコンとは? †
AVRマイコンとはATMEL社が生産している8bitマイコン(マイクロコントローラ)のことです
CPU、メモリ(RAM、ROM)、I/O、データ記憶用のEEPROM、クロック発振回路、タイマーなどが
1チップに収められており、書き込まれたプログラムにより制御することが可能です
よく似たものにPICがあげられますが,PICと違い内部に発信回路を持っているなど
使い勝手が良かったりします
AVRの種類 †
昔からある90Sシリーズと、大容量化、I/O拡張のMegaシリーズ、
高機能化・低消費電力化・低電圧対応のTinyシリーズがある
・90S***
・ATMega***
・ATTiny***
開発環境 †
開発環境として統合開発環境の「AVR Studio」が無料で配布されている
また,C言語用のコンパイラとして「WinAVR」も無料で配布されている
何ができるの? †
アイデア次第でいろんなことができますが,
今回の講座ではATTiny461を使ったライントレースロボットの開発をメインに
説明をしていく予定です
AVRマイコン講座 †
開発環境を作る †
AVRマイコンを使うにあたって開発環境の準備をします
コンピュータを使って何かをしたい場合,目的に合ったプログラムを用意しますよね?
AVRマイコンも同様でマイコンで何かをしたい場合,プログラムを用意する必要があります
ただし,マイコン自身でプログラムを作ることはできないのでパソコンにマイコン用のプログラムを作るための用意をします
次のページから最新版の「WinAVR」をダウンロードしてきます
http://sourceforge.net/project/showfiles.php?group_id=68108
ダウンロードページに"WinAVR-**********-install.exe"(*はリリースされた日付)
があるので最新の日付をダウンロードしてください
ダウンロードが済んだら"WinAVR-**********-install.exe"を実行します
後はセットアップウィザードに従ってインストールしてください
「WinAVR」はAVRマイコン用のC言語コンパイラでC言語で組まれたプログラムを
マイコンが理解できる形(マシン語)に変換してくれます
次にAVRマイコン用の総合開発環境をインストールします
総合開発環境はいろいろなコンパイラでの開発をサポートするための環境を提供するものです
今回は「AVR Studio」を使います
下記のページにある"Software:"コーナーの中から"AVR Studio 4.16 (build 628) "といったものをダウンロードします
http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725
よく似たものに"AVR Studio 4.16 SP1 (build 638) "がありますがこちらはサービスパックなので間違えないようにしてください
こちらは後で使うので一緒にダウンロードしておくと良いです
"AvrStudio?***Setup.exe"(*はバージョン)を実行します
先ほどと同様にセットアップウィザードに従ってインストールしてください
純正ライターでWindows8の場合 †
デジタル証明書をインストールしないとライターを認識してくれない。
以下の作業をこなしてくだせぇ
証明書いんすこ
1. C:\Windows\Inf\AtmelInf?.catのプロパティを開く
2. デジタル署名のタブをクリック
3. 署名一覧のAtmel Norwayをクリックして詳細を開く
4. 証明書の表示を開く
5. 証明書のインストールをクリック
6. 保存場所⇒ローカルコンピュータを選択
7. 自動的に証明書ストアを配置を選択
8. 完了
ドライバ更新
1. デバイスマネージャーを実行
2. ライタ挿したら「Jungo」に「AVRISP mkii」が
3. そいつのドライバを更新
まだAtmelStudio?は認識してくれなかった(筆者win8 x64)
2013/1/6現在あんま情報なくて、めんどいけどこれで取り敢えずできるから書いとく
dllファイルを移動させる方法もあって、C:\Program Files (x86)\Atmel\Atmel Studio 6.0\avrdbgにあるすべてのdllを「code Cache folder」へコピーしろって書いてあったけど意味わからんので放置(笑)
結局できた方法は例のC:\Program Files (x86)\Atmel\Atmel Studio 6.0\avrdbgにあるavrdbg.exeを管理者で実行してAtmelStudio?を起動する方法
やってみるとわかるけどavrdbg.exeが消えないから鬱陶しいよ。
以下その2つを起動するバッチファイル
avrdbg.exeのプロパティで「管理者としてこのプログラムを〜」にチェック忘れずに
@echo off
start "" "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\atmelstudio.exe"
cd "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\avrdbg"
start avrdbg.exe
純正ライターではなく usbaspを使用する場合 †
これに加えてライティングソフトであるavrdudeとライターのUSBドライバを入れないといけません。
avrdude http://yuki-lab.jp/hw/avrdude-GUI/
このページでavrdude.exeとavrdude-GUIをダウンロードしてください
USBドライバー http://www.wortelsoft.nl/english/usbasp.html
更に加えてOSがWindowsXPよりも上位の場合はavraspライターのファームウェアを書き換える必要があります(winXPで書き換える必要がないことは検証できてません)。
ファームウェアはusbaspの本家サイトよりダウンロードできます。
これで開発環境が整いました
ライタって何ですか? †
さて,開発環境が整ったところで,どうやってマイコンにプログラムを入れるのか?
という問題が出てきます
マイコンにプログラムを入れることを"書き込み","焼き込み"といったりします
マイコンのROMにデータを書きもむことから来てるのですが,昔は紫外線を使って
ROMを変質させることによって書き込んだため"焼き込む"といった言い方をします
話が脱線してきたので元に戻しますが
この書き込みには"ライタ"と呼ばれるものを利用します
ライタにはパラレル,シリアル,USBに接続するものがありそれぞれで書き込み方が違っています
開発環境の構築で「AVR Studio」をインストールしましたが一部のライタを用いることで
「AVR Studio」からライタを操作してマイコンにプログラムを書き込むことが可能です
今回はATMEL社純正のライタである「AVRISP mk?」を使うので「AVR Studio」から書き込みが可能です
自分でライタを自作することも可能ですので興味がある人は調べてみてください
プログラムを組んでみよう †
では実際にプログラムを組んで見ましょう
「スタート」→「プログラム」→「Atmel AVR Tools」から「AVR Studio」を起動してください
次に「project」→「New Project」を選択します
ウィンドウが開くので,AVR GCCを選択して「Project name」を決めます
今回は例として「sample」というプロジェクトを作ってみます
ここでCreate folderのチェックを入れるとプロジェクトごとにフォルダが作成されます
保存先の指定もここで行います(デフォルトはマイドキュメントになっています)
設定したら「Next」で次にいきます
次の画面ではデバッグを行うためのシミュレータと使用するマイコンの選択をします
今回はATTiny461を使うので「Debug plogram」は「AVR Simulator」を
「Device」は「ATTiny461」を選びます
選び終わったら「Finish」を押します
「Finish」を押した後,「sample.c」というファイルが開いた状態でエディタが立ち上がります
この「sample.c」の中にプログラムを書いていきます
次にサンプルプログラムを書いておきます
#include <avr\io.h>
int main(void)
{
while(1){
}
return (0);
}
まず,
#include <avr\io.h>
ですがこれはAVRマイコンの各種設定等を持っているヘッダーです
while(1){
}
ここで無限ループが発生します
この中に処理を記述します
今回は何も記述されていないので,何もしません
ということで今回のプログラムは起動した後何もしないプログラムです
ポートとは何ですか? †
さて,このままでは面白くもなんともないので次に行ってみましょう
先ほどのプログラムを改造していくのですが,ここで一つ重要な情報があります
AVRマイコンには数本から数十本のピンが出ています
このピンは何に使うかというと
1,電源及びグランド(0V)
2,入出力(H,L)
3,A/D変換入力
4,アナログ出力
5,シリアル通信
6,クロック入力
7,プログラム書き込み
他いろいろな入出力に使われます
今回使用しているATTiny461はDIPパッケージで20本のピンを持っており
内16本が入出力をサポートしています
但し,一本のピンが複数の機能を持っているのでどの機能を使用するか指定が必要です
前置きが長くなってしまいましたが
ポートとはHightやLowの信号を出したり受けたりするピンのことです
ATTiny461ではポートA,Bの2つがありそれぞれ0〜7の8ポート,計16ポートあります
LEDを光らせてみよう †
では実際にハードを制御してみましょう
まずは簡単にLEDを点滅させるプログラムを作ってみましょう
上にある何もしないプログラムを改造していきます
#include <avr\io.h>
int main(void)
{
long i;
while(1){
//処理の実行を待つ
for(i=0;i<20000;i++){
}
//ポートAの1番を出力に設定する
DDRA = 1;
//ポートAの1番の出力を反転する
PORTA ^= 1;
}
return (0);
}
これで後は実際に配線を行いマイコンにプログラムを書き込むことでLEDが点滅するようになります.
まず,
for(i=0;i<20000;i++){
}
のループですが,今回使用するATTiny461は20MHzのクロックで動作するため
大体1秒間に200万回命令が実行されます(実際は処理内容により変わりますが).
そのため,簡単な機能しか持たないプログラムでは処理が高速で実行され変化
を認識することができなくなります.
そこで,何もしない処理(といっても比較処理、加算処理を行いますが)を大量
にさせることで目的とする命令をゆっくり実行することが可能となります.
次に,
DDRA = 1;
とありますが,この書き方ではポートAの0〜7に対して0b0000001という指示を出しています.
これはポートAの0は出力,1〜7は入力として使いますという指示になります.
これによってポートの入力,出力を設定することが可能になります.
また,次のように書くことも可能です.
DDRA = 0b0000001; //2進数表記~
DDRA = 0x01; //16進数表記~
そして,
PORTA ^= 1;
これも同様にポートAの0〜7に対して0b0000001という指示を出しています
しかしながら ^= となっているので排他的論理輪(XOR:AとBが等しい場合0,違う場合1を返す)
となっています.この場合ですと,PORTAの現状に対し0b0000001と比較して同一なら0を
違うなら1を返すため,出力が反転したようになります.
これが,
PORTA ~= 1;~
となると,ポートAの0はHを,1〜7はLを出力しなさいという命令になります
但し,DDRAで0番のみ出力になっているので実際に出力されるのは0番のみ有効です
A/D変換とは †
まずはA/D変換とはなんぞや?という人のために簡単に説明
A/D変換とはアナログな入力(0〜5Vの電圧変化といったもの) をマイコン側でデジタルな値(0〜1024の値)として認識するための変換である。
逆にD/A変換というのもあり、こちらはマイコン内部の値を0〜5Vの電圧として出力したい際などに使われます。
センサを使ってみよう †