AVRマイコンなページにようこそ
ここではAVRマイコン講座での内容をまとめたり,追加情報を載せたりしています
内容について不備,間違い,不足等あれば指摘,追記,修正等どんどんしてください
現在製作中のため画像等がないですが余裕ができたら作ってあげていきます
AVRマイコンとはATMEL社が生産している8bitマイコン(マイクロコントローラ)のことです
CPU、メモリ(RAM、ROM)、I/O、データ記憶用のEEPROM、クロック発振回路、タイマーなどが
1チップに収められており、書き込まれたプログラムにより制御することが可能です
よく似たものにPICがあげられますが,PICと違い内部に発信回路を持っているなど
使い勝手が良かったりします
昔からある90Sシリーズと、大容量化、I/O拡張のMegaシリーズ、
高機能化・低消費電力化・低電圧対応のTinyシリーズがある
・90S***
・ATMega***
・ATTiny***
開発環境として統合開発環境の「AVR Studio」が無料で配布されている
また,C言語用のコンパイラとして「WinAVR」も無料で配布されている
アイデア次第でいろんなことができますが,
今回の講座ではATTiny461を使ったライントレースロボットの開発をメインに
説明をしていく予定です
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"(*はバージョン)を実行します
先ほどと同様にセットアップウィザードに従ってインストールしてください
これで開発環境が整いました
さて,開発環境が整ったところで,どうやってマイコンにプログラムを入れるのか?
という問題が出てきます
マイコンにプログラムを入れることを"書き込み","焼き込み"といったりします
マイコンの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本のピンを持っており
内18本が入出力をサポートしています
但し,一本のピンが複数の機能を持っているのでどの機能を使用するか指定が必要です
前置きが長くなってしまいましたが
ポートとはHightやLowの信号を出したり受けたりするピンのことです
ATTiny461ではポートA,Bの2つがありそれぞれ0〜7の8ポート,計16ポートあります
では実際にハードを制御してみましょう
まずは簡単に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が点滅するようになります
ここで,
DDRA = 1;
とありますが,この書き方ではポートAの0〜7に対して0b0000001という指示を出しています
これはポートAの0は出力,1〜7は入力として使いますという指示になります
PORTA ^= 1;
これも同様にポートAの0〜7に対して0b0000001という指示を出しています
ポートAの0はHを,1〜7はLを出力しなさいという命令になります
但し,DDRAで0番のみ出力になっているので実際に出力されるのは0番のみ有効です