TOPへ
特殊電子回路について

English
Loading
トップ ページ >  チュートリアル > 12bitADコンバーターを使う

12bitADコンバーターを使う

RXduinoのライブラリでは、RX62NのADコンバータは10bit版のほうが使われていました。

12bit版のA/Dを使う関数は現状のライブラリに入っていないのですが、お客様からのご要望があったので12bit A/Dを使うプログラムを書いてみました。

#include <tkdn_hal.h>
#include <iodefine_gcc.h>
#include <stdio.h>
 
void s12ad_init(void) {
  SYSTEM.MSTPCRA.LONG &= ~(1 << 17);
  PORT4.DDR.BYTE = 0; // 全ポートを入力にする
  S12AD.ADCSR.BYTE = 0x0c; // S12ADのサンプリングクロックをPCLK (48MHz)にする
  S12AD.ADANS.WORD = 0x003f; // SD12ADを、CH0〜CH5でスキャンする
}
 
// AN0〜AN5をA/D変換する関数
void s12ad_sample(unsigned short *adcdata) {
  int i;
  S12AD.ADCSR.BIT.ADST = 1; // AD変換開始
  while(S12AD.ADCSR.BIT.ADST) {}
  unsigned short *result = (unsigned short *)&S12AD.ADDR0;
  for(i=0;i<6;i++) {
    adcdata[i] = result[i];
  }
}
 
int main() {
  char tmp[128];
  unsigned short adcdata[6];
  sci_init(SCI_AUTO, 38400);
  sci_convert_crlf(CRLF_CRLF,CRLF_CRLF);
  gpio_set_pinmode(PIN_LED0, 1);
  s12ad_init();
  while(1) {
    gpio_write_port(PIN_LED0, 1);
    s12ad_sample(adcdata);
    gpio_write_port(PIN_LED0, 0);
    sprintf(tmp,"%04d %04d %04d %04d %04d %04d \n",
      adcdata[0], adcdata[1], adcdata[2],
      adcdata[3], adcdata[4], adcdata[5]);
    sci_puts(tmp);
  }
}
                                

 

6chを変換するのに要した時間は約8usでした。

このプログラムをRaXino♪で動かして、USB経由でAD変換値を表示してみました。

12ビットA/Dコンバータが必要になった際にはご活用ください。