Exercise5

ついにやってきました、AD変換です。

ぶっちゃけ、タイマーとADが出来れば想像力次第で
大抵のものは作れる気がします。
というか、ココまでのLessonを理解できていればマイコンを使える、とえらそうに言っても問題なさそうです(笑

まず、AD変換とはアナログ→デジタル変換の略です。
ここで、アナログ、デジタルの概念は大丈夫でしょうか?

アナログとは、連続しているものの事を指します。
例えば、Sin波を想像してください。
Xを時間軸とすると、どこかひとつ点を取って、それを数値化しようとしても
有限の桁数で「正確に」数値化することは不可能かと思います。

それでは、値がとれず、計算が出来ません。
そこで、大雑把な値にしてしまうことをデジタル化といいます。
デジタルとは離散的変数の、なんていう意味で使われています。
例えば、Sin波のyの値を0~0.5、0.5~1の2つに分けると0~πの範囲では凸のような形になると思います。

こういう作業をAD変換といいます。図のような感じです(Wikipediaより)

それがライトレとどう関係するか

ライントレーサーでは最初に確認したように、センサーから赤外線を出しています。
で、その隣のフォトトランジスタに光が当たると電圧が上がります。(ちょっと適当な説明ですが。)
つまり、光が反射すればするほど電圧が上がります。

つまりつまり、白い部分では電圧が高くなり、黒い部分では低くなるわけです。
コレを使えばラインを検出できるわけです。

実際にどう使うか

プログラムは

void initAD(void) {
	STB.CR4.BIT._AD1 = 0;
	AD1.ADCR.BIT.ADST = 0;
	AD1.ADCSR.BIT.ADCS = 0;
	AD1.ADCSR.BIT.TRGE = 0;	
	AD1.ADCSR.BIT.CKSL = 0;
	AD1.ADCSR.BIT.ADIE = 0;
	AD1.ADCSR.BIT.ADM = 0;
	AD1.ADCSR.BIT.CH = 0;
}

main文で実際に使う際は、

AD1.ADCR.BIT.ADST = 0;
AD1.ADCSR.BIT.CH = 0;
AD1.ADCR.BIT.ADST = 1;
while (AD1.ADCSR.BIT.ADF == 0);
AD1.ADCSR.BIT.ADF = 0;
 
SEN = AD1.ADDR4>>6;

という風に使います。この例ではAD変換のポートの端子4を変換するときです。
AD変換した値をSENという変数に代入しています。
勿論、SENはどこかで型宣言(intとか)してください。
SENの最大値は2進数で10BIT分、16進数で「3ff」になります。
ちなみに、端子5を変換したいときは

void initAD(void) {
	STB.CR4.BIT._AD1 = 0;
	AD1.ADCR.BIT.ADST = 0;
	AD1.ADCSR.BIT.ADCS = 0;
	AD1.ADCSR.BIT.TRGE = 0;	
	AD1.ADCSR.BIT.CKSL = 0;
	AD1.ADCSR.BIT.ADIE = 0;
	AD1.ADCSR.BIT.ADM = 0;
	AD1.ADCSR.BIT.CH = 1;
}

main文で実際に使う際は、

AD1.ADCR.BIT.ADST = 0;
AD1.ADCSR.BIT.CH = 1;
AD1.ADCR.BIT.ADST = 1;
while (AD1.ADCSR.BIT.ADF == 0);
AD1.ADCSR.BIT.ADF = 0;
 
SEN = AD1.ADDR5>>6;

となります。
それぞれ最後の命令が変わりました。
端子6を変換したいときはCHが2、SENに代入する値はADDR6になります。 詳しく知りたい人はデータシートのチャネルセレクト一覧表を読んでください。

で、ここで課題です。
どれかのセンサーが反応したら、LEDを光らすプログラムを作ってください。
代入したSENとかの値をifで大小比べれば楽勝です。

それが出来たら、
右のセンサが反応したときは右のLEDが光り、中センサが反応したら中LEDが光り、左センサが反応したら左LEDを光らせるプログラムを作ってみましょう。

/home/users/2/deca.jp-mice/web/cgi/dokuwiki/data/pages/exercise5_ad変換器.txt · 最終更新: 2015/03/15 17:31 by member
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0