サンプル2:アナログ入出力

J2コネクタの”A0″ピンのアナログ電圧を読み取って、その値をディスプレイに表示し、同時にJ1コネクタの”D6″ピンにアナログ出力(PWM出力)します。

アナログ電圧は最小値0Vが値0、最大値5Vが値1023になって読み込まれます。読み取った値を途中で4で割り算しているのは、アナログ出力の上限が255だからです。

                 .list

                 ;---
                 ; A Sample Code of Analog I/O Manipulation
                 ;---
                        dem_cseg
                 main:
 0000  21               LDI.d   1
 0001  39 18            OUT     18          ; AREF=AVCC=5V
                 loop:
 0003  64 05            SYS     sys_clear
 0005  38 19            IN      19          ; AIN0
 0007  64 02            SYS     sys_putdec  ; display AIN0 value
 0009  10               STR     R0
 0010  24               LDI.d   4
 0011  11               STR     R1
 0012  00               LDR     R0
 0013  76 41            DIV     R1          ; A = A / 4
 0015  39 27            OUT     27          ; AOUT6
 0017  22               LDI.d   2           ; 2 x 0.1s
 0018  64 20            SYS     sys_pause
 0020  61 19            JB      loop

光センサ(照度計)

付属のCdSセルとLEDとを使って実験ができます。以下のようにつないでください。(付属のリード線の色は図の通りにはなっていないことがありますので、結線状態をよく見て判断してください。)

CdSセルにあたる光の照度に応じてLEDの輝度が変わり(照度が高ければLEDは明るくなり)ます。

温度センサ(温度計)

CdSセルをダイオードに変えると温度計になります。ダイオードの順方向効果電圧が温度により変化することを利用しています。最近のICチップ(特に一般CPU)内の温度センサはこの原理が応用されています。

プログラムは先頭の1命令を「22」に書き換えてください。A/Dコンバータのフルスケール電圧が1.1Vになります。

温度が上がると数値が下がっていきます。変化量が少ないのでLEDの輝度はあまり変わりません。