======Lesson5====== ついにやってきました、AD変換です。 ぶっちゃけ、タイマーとADが出来れば想像力次第で\\ 大抵のものは作れる気がします。\\ というか、ココまでのLessonを理解できていればマイコンを使える、とえらそうに言っても問題なさそうです(笑 まず、AD変換とはアナログ→デジタル変換の略です。\\ ここで、アナログ、デジタルの概念は大丈夫でしょうか? アナログとは、連続しているものの事を指します。\\ 例えば、Sin波を想像してください。\\ Xを時間軸とすると、どこかひとつ点を取って、それを数値化しようとしても\\ 有限の桁数で「正確に」数値化することは不可能かと思います。 それでは、値がとれず、計算が出来ません。\\ そこで、大雑把な値にしてしまうことをデジタル化といいます。\\ デジタルとは離散的変数の、なんていう意味で使われています。\\ 例えば、Sin波のyの値を0~0.5、0.5~1の2つに分けると0~πの範囲では凸のような形になると思います。\\ こういう作業をAD変換といいます。下図のような感じです(Wikipediaより)\\ {{http://upload.wikimedia.org/wikipedia/commons/3/33/AD_conversion_%28ja%29.gif}} **それがライトレとどう関係するか** ライントレーサーでは最初に確認したように、センサーから赤外線を出しています。\\ で、その隣のフォトトランジスタに光が当たると電圧が上がります。(ちょっと適当な説明ですが。)\\ つまり、光が反射すればするほど電圧が上がります。 つまりつまり、白い部分では電圧が高くなり、黒い部分では低くなるわけです。\\ コレを使えばラインを検出できるわけです。 **実際にどう使うか** プログラムは AD.ADCSR.BYTE=0x20; while(AD.ADCSR.BIT.ADST!=0); SEN=(AD.ADDRA>>6)&0x03ff; という風に使います。この例ではAD変換のポートのBIT0を変換するときです。\\ AD変換した値をSENという変数に代入しています。\\ 勿論、SENはどこかで型宣言(intとか)してください。\\ SENの最大値は2進数で10BIT分、16進数で「3ff」になります。\\ ちなみに、BIT1を変換したいときは AD.ADCSR.BYTE=0x21; while(AD.ADCSR.BIT.ADST!=0); SEN=(AD.ADDRB>>6)&0x03ff; となります。\\ 1行目と3行目が変わりました。\\ 2BITを変換したいときは2とCになります。 詳しく知りたい人は、赤い本を読んでください。\\ で、ここで課題です。\\ **どれかのセンサーが反応したら、LEDを光らすプログラムを作ってください。**\\ 代入したSENとかの値をifで大小比べれば楽勝です。 それが出来たら、\\ **右のセンサが反応したときは右のLEDが光り、中センサが反応したら中LEDが光り、左センサが反応したら左LEDを光らせるプログラムを作ってみましょう。**