クモ、アナログの味を知る


STATUS: 故障中x2


 ここのところ毎日 USBSPYDER08で遊んでますが、今日はADC(A/Dコンバーター)を動かしてみました。
 ADCが動けば、アナログ値はなんでも入力できますからね。ボリュームからはじまって、温度センサーや距離センサー、加速度センサーなどみんなアナログで入力できます。


 とりあえず、手軽なアナログ入力としてボリュームをつないでみました。
 USBSPYDER08のCPUであるMC9S08QG4のコアは「HCS08」なのですが、丁度いいサンプルがみつからなかったので、「HC08」を使ったサンプルを参考にしました。
 参考にしたページは、ここです。→ADCを使う


 HC08とHCS08では、レジスタの名称が異なりますがデータシートみながら書きかえてみたらすんなり動きました。



 ボリュームからの抵抗値をA/Dで8bit値として取得し、SPYDER08上のLEDを値に応じた明るさで点灯します。
 HCS08用のソースは以下のようになります。


#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */

void main(void) {
  int n1,n2,i;
  
  EnableInterrupts; /* enable interrupts */

   PTADD = 0b00000001; // PTAD bit 0 = out
   PTAD &= 0b11111110;
   
   // ADC start
   //         7        COCO
   //          6       AIEN
   //           5      ADCO
   //            43210 ADCH (select AD03 = 00011)
   ADCSC1 = 0b00000011; 

  for(;;) {
    if ( ADCSC1 & 0b10000000 ) {
      n1 = ADCRH;  // 0
      n2 = ADCRL;  // 0-255
      ADCSC1 = 0b00000011;   // ADC restart
      
      
      PTAD |= 0b00000001;
      for ( i=0; i<n2; i++ ) {
        __RESET_WATCHDOG();  
      }
      PTAD &= 0b11111110;
      for ( i=0; i<255-n2; i++ ) {
        __RESET_WATCHDOG();  
      }
      
    }
    
    __RESET_WATCHDOG(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}

 「ADCSC1」が、1つめのADCの制御レジスタで、変換方法や入力チャンネルの指定を行います。
 連続変換が指定されていない場合は、このレジスタに書き込みがあるたびに、変換処理が開始されます。
 また、今回は、ADP3のピンに接続しているので、入力チャンネルにAD03を選択しています。


 AD変換には少し時間がかかります。「ADCSC1」の最上位ビットが、1になると変換は完了です。
 「ADCRH」と「ADCRL」レジスタに値が入ってます。簡単ですね。
 10bitの入力が可能ですが、デフォルトでは8bit入力となりますので、「ADCRL」に0〜255の値がはいります。
 詳しくは、データシートの114ページを見てください。


 あとは入力した値にしたがって、LEDを点灯しています。PTA0のON/OFFを制御しています。
 入力値によって、LEDを点灯する時間を変更することで明るさを制御しています(PWM制御)。


 配線は、写真をみてみてください。
 →写真


 USBSPYDER08上のピンから、ICクリップで直接ボリュームに繋いでいるだけです。
 ICクリップの接続は次のとおりです。

赤…3番ピン(Vdd)
黒…4番ピン(Vss)
緑…8番ピン(ADP3)


 簡単ですねえ。
 ICクリップだけでいろいろ繋いで遊べます。



 この後、CMOS温度センサー(S-8100B、秋月で100円で売ってました。データシート付き)をボリュームに繋ぎ変えてみました。
 流石に、簡単に作り出せる温度変化ではLEDの明るさはほとんどかわらないので、デバッガで入力値をみると、手でつまんで暖めると約110、氷で冷やすと約140になりました。うんうん、それっぽいね。


 これでだいたいこのマイコンの感じがつかめてきました。
 何でも作れそうな気がしますよ〜