|
|
EnglishLoading
|
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コンバータが必要になった際にはご活用ください。 |
|
|
|
|