10ビットA/Dチャンネルを使う - PIC電圧計

Posted by kyosuke at 07/31 2007
>>次の記事: 電圧計を作る
>>前の記事: USB充電器を作る



USB充電器の製作。

電圧を測れなきゃ話は進まない。

電圧を読み取る、プログラムを作る。
まぁ、とりあえず、電圧計。
簡単にLEDで電圧を表示させよう。




Pic16f877reg

10ビットA/Dチャンネルを使うには、
ADRESH、ADRESL、ADCON0、ADCON1の4つを操作すればいいから、簡単。

データシートを見よう。
レジスタのファイルマップは上にあります。

これからは、これをかき混ぜながら、
プログラムを組むと・・。


1.5V以上、LED8個点灯
1.4V以上、LED7個点灯
1.3V以上、LED6個点灯
1.2V以上、LED5個点灯
1.1V以上、LED4個点灯
1.0V以上、LED3個点灯
0.9V以上、LED2個点灯
0.9V未満、LED1個点灯

微妙に、めんどくさそうなプログラムになりそうだが、
さっさと作ってみる。

で、結局のところ、
ADRESH、ADRESL、ADCON0、ADCON1の4つを操作するのだが、
種類わけしておこう。


ADRESH、ADRESL=データをもらうところ
ADCON0、ADCON1=設定するところ


ADCON0だが
Foscを10にして
RAピンにアナログのデータを流し込むと。
適当にRA0にするから000。

あとは、0でよしとすると
ADCON0 =1000 0000 = 080H

使うときは、0ビットを1にして、Delayをはさんで1ビットを1にすると。
そのあと、1ビットを0にして、Delayをはさんで、データを取り出す、そして0ビットを0にしてOFFにする。


Vrefを2ボルトくらいにしてっていうか、1.5がいいんだけど、
VrefのMinは2ボルトだって。


ADCON1だけど、
最初は1にするとADRESHの最初の6個が0になる。 そのあと0、その次、0011。RA3がVrefになる。

ADCON1 =1000 0011 = 083H
ということだね。


よし材料はそろった。

プログラムを組んでみる。



その前に休憩だ



3時間後・・


初期化部分を

	BSF	STATUS,RP0
	MOVLW	083H
	MOVWF	ADCON
	MOVLW	017H
	MOVWF	TRISA
	BCF	STATUS,RP0

	MOVLW	080H
	MOVWF	ADCON0

アナログデータを読み取る部分を
	MOVLW	081H
	MOVWF	ADCON0

	CALL	T20MSEC

	BSF	ADCON0,GO     
	; 1ビットと0ビットを同時に変えるなデータシートにわけろって書いてある

PROG0
	BTFSC	ADCON0,GO
	GOTO	PROG0

	MOVF	ADRESH,W
	MOVWF	DATAH
	MOVF	ADRESL,W
	MOVWF	DATAL

T20MSEC; 1 cyc 0.4us, so 50 instr
	MOVLW	0FH
	MOVWF	CNT
T20MSEC1
	DECFSZ	CNT,F
	GOTO	T20MSEC1
	RETURN

まぁ、こんなもんで
RA0にアナログデータを流して、
RA3にVrefをやって、
DATAHとDATALで10ビットのデジタルデータを取り出して、

あとは、
IF関係でデータを振り分けて、任意の数のLEDを点灯させればいいと



10ビットあるということは、2^10で1024
Vrefが2Vとして、2÷1024=2mV

DATAH+DATAL
00 0000 0000  0mV
00 0000 0001  2mV
01 1100 0000  896mV-991mV
01 1111 0000  992mV-1087mV
10 0010 0000  1088mV-1183mV
10 0101 0000  1184mV-1279mV
10 1000 0000  1280mV-1375mV
10 0011 0000  1376mV-1503mV
10 0111 0000  1504mV-...

DATAHの2ビットと、DATALの4ビットで振り分けろと。

DATAH+DATAL→DATA(6ビット)
にしてから、あとは、単純にふりわければいいな。
if(DATA<900mv){
} else if(DATA<1000mV){
}...

みたいな表現、PICのアセンブラではどう書けば簡単か?

PICにもシフト系の命令文があるだろう・・、それでDATAを入れたとして、

引き算でもして、答えがマイナスだったら、次のifへ、
プラスだったら、ifの中身へってな具合で書くか?

バカッぽいが、バカだからいいや。


長くなってきたから次回に続く。


>>次の記事: 電圧計を作る
>>前の記事: USB充電器を作る





PIC電圧計のモノ作り記事

Vol_reg_thumb
定電圧電源の製作、電圧表示付き(7セグメント3つ)
PIC電圧計の完成!(C言語バージョン+7セグメントLED)&lt;br /&gt; http://give-n-take.net/gat/user/show_diary/229 &lt;br /...
続きを読む>>定電圧電源の製作、電圧表示付き(7セグメント3つ)
Posted by kyosuke at 04/10 2008

Vol_reg_seg_thumb
PIC電圧計の完成!(C言語バージョン+7セグメントLED)
PICマイコンの10ビットA/Dコンバータのプログラム+回路図+LEDバー&lt;br /&gt; http://toolible.net/monozukuri/articles/51&lt;br ...
続きを読む>>PIC電圧計の完成!(C言語バージョン+7セグメントLED)
Posted by kyosuke at 04/02 2008

Vol_reg_thumb
PICマイコンの10ビットA/Dコンバータのプログラム+回路図+LEDバー
電圧計の完成!&lt;br /&gt; http://toolible.net/monozukuri/articles/21&lt;br /&gt; &lt;br /&gt; とか書いてあります...
続きを読む>>PICマイコンの10ビットA/Dコンバータのプログラム+回路図+LEDバー
Posted by kyosuke at 03/30 2008

Pictester_thumb
PIC電圧計の完成!(アセンブラバージョン)
前回は、割り込み処理のデバックが終わった。&lt;br /&gt; &lt;br /&gt; いうなれば、今回のデバックが電圧計のためのものと。。&lt;br /&gt; &lt;br /&gt...
続きを読む>>PIC電圧計の完成!(アセンブラバージョン)
Posted by kyosuke at 08/11 2007

No_image
電圧計PICプログラム デバック
さて、デバックする。&lt;br /&gt; &lt;br /&gt; 凡ミスを取り除いて、&lt;br /&gt; ビルトOK。&lt;br /&gt; &lt;br /&gt; RUNし...
続きを読む>>電圧計PICプログラム デバック
Posted by kyosuke at 08/09 2007

PIC電圧計 の14記事を見る