2.4GHz版プロポ作製-ADCテスト編

アクセルとステアリング用のVRの読み出しに使うADCのテストを実施。

マイコンの電源(USBパワー)-GND間にVRを2個繋いで、AN0とAN1に入力しました。

























1.概要

2つのVR値(電圧)をAD変換を通して読み出しては、USBを通じてPCへ送り続けるアプリです。

PIC18F4550は、AD入力は10チャンネルほどありますが、変換は1チャンネルずつしかできないので、AN0とAN1の入力を切り替えては変換して読み出すという手順となります。



2.メインルーチン部

void main(void)
{
int ADread0,ADread1;

    InitializeSystem();

    while(1)
    {
        #if defined(USB_INTERRUPT) // See HardwareProfile.h
            if(USB_BUS_SENSE && (USBGetDeviceState() == DETACHED_STATE))
            {
                USBDeviceAttach();
            }
        #endif
   
SetChanADC(ADC_CH0);
ConvertADC(); //AD変換開始
        while( BusyADC());          //AD変換待ち
        ADread0 = ReadADC();      //AD読込み
SetChanADC(ADC_CH1);
ConvertADC(); //AD変換開始
        while( BusyADC());          //AD変換待ち
        ADread1 = ReadADC();      //AD読込み

PrintADC(ADread0,ADread1); //USBへAD値を出力する処理

    }//end while
}//end main


2.ADC初期化部

  ※adc.hをインクルードしておく必要があります。



config=ADC_FOSC_64 & // 変換クロック 500nsec×64=3.2μsec
ADC_RIGHT_JUST & //
ADC_20_TAD; // 蓄積時間 3.2μsec*20=60.4μsec
config2=ADC_CH0 & // チャンネル
ADC_INT_OFF & // 割込み未使用
ADC_VREFPLUS_VDD & // リファレンス電位* VDD
ADC_VREFMINUS_VSS; // リファレンス電位- VSS
portconfig=0b1011; // ADCON1のPCFG
OpenADC(config,config2,portconfig);



3.出力

ターミナルソフトで無事にVR値を確認できました。
VRを回すと0~1023までフルに変化はしますが、USBバスパワーなのでノイズが乗っている様で、1.5LSB程度のブレが発生しています。























次回は、無線の送信モジュールへ送るPPM信号を作成する為、タイマー割り込みとCCP機能の制御にチャレンジです。

コメント

このブログの人気の投稿

ARM用クロスコンパイラのビルド(Windows8+Cygwin)

Raspberry Pi のsleep時間測定

Quartus2 V13.1 ~エントリー編 HDL回路から回路図用シンボルを作成する~