dsPICのADC10

dsPICのADC(10bit)について.
ちょっとメモめも.

unsigned int ValueADCON1 = ADC_MODULE_ON & ADC_IDLE_STOP & ADC_FORMAT_INTG &
ADC_CLK_TMR & ADC_AUTO_SAMPLING_ON &
ADC_SAMPLE_SIMULTANEOUS & ADC_SAMP_OFF;

unsigned int ValueADCON2 = ADC_VREF_AVDD_AVSS & ADC_SCAN_OFF & ADC_CONVERT_CH_0ABC
& ADC_SAMPLES_PER_INT_1 & ADC_ALT_BUF_OFF & ADC_ALT_INPUT_OFF;

unsigned int ValueADCON3 = ADC_SAMPLE_TIME_1 & ADC_CONV_CLK_SYSTEM & ADC_CONV_CLK_8Tcy;

unsigned int ValueADPCFG = ENABLE_AN0_ANA & ENABLE_AN1_ANA & ENABLE_AN2_ANA & ENABLE_AN3_ANA;

unsigned int ValueADCSSL = 0;

unsigned int Channel0 = ADC_CHX_NEG_SAMPLEA_NVREF & ADC_CHX_POS_SAMPLEA_AN0AN1AN2 &
ADC_CH0_POS_SAMPLEA_AN3 & ADC_CH0_NEG_SAMPLEA_NVREF;

わからない人用に,どこをいじればいいか軽く.

ADC_CLK_TMR....ADCのサンプリングをどおするか.TMRはタイマーで決めて,普通にwhileで回すときとかはAuto(?)にしとけばおkですね.たぶん
ADC_CONVERT_CH_0ABC....同時サンプルホールド数を決める.
一度にAD変換する個数を決めれるってことですね.

Channel0の設定....結構ハイテクで,アナログ入力の差分をAD変換したりできる設定.
普通に使いたいときは上の設定でおkですね.

こいつをopenの引数に入れて,
OpenADC10(ValueADCON1, ValueADCON2, ValueADCON3, ValueADPCFG, ValueADCSSL);
setして
SetChanADC10(Channel0);

Timer3で入れてあげればOK
アナログ入力のチャンネルがちょっと特殊で
CH0=AN3 CH1=AN0 CH2=AN1 CH3=AN2
になってるので,2分ほどハマった.

しかし,センサーと音入力でAD変換のタイミングをずらしたいときはどおするんだろ?
ADCのタイマーをやめて自分でタイマー設定しちゃえばいいのかな?
ADC_SAMPLE_SIMULTANEOUSをADC_SAMPLE_INDIVIDUALにして..
んーめんどくさいからいいや.処理が追いつかなくなってからで.
脱エコ

Tags: ,