TOP > n.s.研究所 > 講義 > マイコン・サイエンス講座 > 講座内容

講義

講座内容
第5回 インターフェイス:センサからの入力によるA/D変換

文責:林 叔克 (2008年12月30日) カテゴリ:2008年講座内容


Figure:自然界とコンピュータ

自然界は、時間や物理量が連続的な値をとる世界です。ところがコンピュータは、時間や物理量を離散的にしか扱うことができません。そこで、連続的な量を離散的に扱う変換が必要になります。アナログからデジタルへの変換を行うさいには、連続的なデータをある離散的な区分に区切って、各区間ごとの代表点をサンプルします。ここでA/D コンバータが必要になります。A/D コンバータはアナログ信号をデジタル信号に変換する「変換器」の名称です。

例えば、入力可能なアナログ電圧が0~5V に対して、A/D コンバータが10 ビットである場合、1024 個の数を扱うことができるので、デジタルに変換したときの最小の電圧区分は、5/1024 = 5mV になります。ATMega168 には10 ビットのA/D コンバータが6 チャンネル用意されています。

A/D 変換の手順は

  • 1. レジスタA にAD 使用のためのビット情報を書き込む
  • 2. チャネルを選択する
  • 3. AD スターとのビットをたてる
  • 4. 変換完了ビットをみて、データレジスタ内の値を取り込む

AVR のA/D コンバータには内部基準電圧が用意されています。この内部基準電圧をA/D コンバータ内の基準電圧として使用します。
A/D 変換の変換値は、


で計算されます。


Figure:AD 変換の概念図

A/D 変換プログラミング

#include <avr/io.h>
int main()
{
	int x;
	DDRB= 0xFF; //PORTB はすべて出力
	DDRC= 0x00; //PORTC はすべて入力
	ADCSRA= 0x80; //AD コンバータ機能をON
	ADMUX= 0x01; //ch1 を選択(cds がつながっている)
	while(1){
		ADCSRA |= 0x40; //AD 変換スタート
		while(ADCSRA & 0x40); //変換終了待ち
		x=ADC; //変換した値をADC から取得
		PORTB= (x>>2); //上位8bit を表示
	}
	return 0;
}

光センサを使ったI/O プログラミング

光センサ

光センサとしてCds を用います。これは硫化カドミウムセルの略です。Cds は当たる光の量に従って抵抗値が変化する電子ディバイスです。光の量は抵抗値に変換され、セルに当たる光が多ければ、抵抗値は低くなります。約数百~数MΩ の広いレンジで電気抵抗が変化します。ただし反応速度は低いので、光通信には向きませんが、街灯を自動的にオン・オフさせるスイッチとしてよく使われています。


Figure:AD 変換の概念図

課題

手を光センサにかざしたら、音楽が鳴り始めるプログラムを書こう。スイッチからの入力の時に使ったif 構文による条件分岐を使います。センサからの入力であるADC をx に読み取って、x に関する条件分岐の構文を作ります。

赤外線センサを使ったI/O プログラミング

赤外線センサ

赤外線リモコン受信モジュールを使って、赤外線による信号を受信します。このもモジュールは、変調された赤外線信号を増幅・成形出力まで行うデバイスうです。市販品では38kHZ~40kHz あたりに変調された赤外線に対して受信感度のピークをもつものが多い。出力端子には、デジタル信号[0][1] に対応して、[0V][5V]が出力されます。

A/D 変換プログラミング

#include <avr/io.h>
int main()
{
	int l;
	DDRB= 0xFF; //PORTB はすべて出力に設定し、LED を点灯させる
	DDRC= 0x00; //PORTC はすべて入力に設定し、スイッチ類からの入力に使う
	DDRD= 0xFB; //D ポート2 番ピンにモジュールがあるので、そこを入力に使う
	while(1){
		if((PIND&0x04)!= 0) PORTB= 0;
		else{
			PORTB= 0xFF;
			for(l=0; l<10000; l++);
		}
	}
	return 0;
}

以下は毎回使うプログラムのコンパイルと転送コマンドです。いずれもスーパーユーザになってから実行します。スーパーユーザになるためにはsu と入力します。whoami と入力して「root」と表示されればスーパーユーザになっていることが確認できます。

  • 1. コンパイル命令:途中に小文字のo と大文字のOがありますが、いずれも「オー」です。avr-gcc -mmcu=atmega168 -o t
  • 2. 実行ファイルへの変換:大文字のオーがあることに注意してください。avr-objcopy -O ihex test1.elf test1.hex
  • 3. プログラムをボードに転送する命令:ep00 は「ゼロゼロ」です。avrdude /dev/usbdev1.1_ep00 -c usbasp -p m168 -

■現在のカテゴリ: 講義 > マイコン・サイエンス講座 > 講座内容

講義

コンピュータ・サイエンス講座

マイコン・サイエンス講座


▲このページのトップn.s.研究所 トップ

関連記事

2008年


講座内容


▲このページのトップn.s.研究所 トップ

n.s.研究所

About n.s.研究所

Activity 活動予定

Thema 研究テーマ

単細胞生物の行動に関する研究

多細胞生物の行動に関する研究

社会性昆虫の行動に関する研究

人の認識に関する研究

環境に関する研究

Thema 開発テーマ

ロボットの開発

作ってみた

Lecture 講義

コンピュータ・サイエンス講座

マイコン・サイエンス講座

Library ライブラリ

LabVIEWを使った物理数学集

VisualC++

Report 報告

学会等での発表

論文発表

その他の報告




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました