こんばんは、ファルコンM です。
PIC マイコンで、MCC( Mplab Code Configurator ) を使って、ADC を実装してみた。
開発環境
- マイコン PIC24FJ128GC006
- PICKIT3
- MVA v2017_03_06
MCC の設定
やりたいこと
- PIN27 ( TCK/AN12/COM5/SEG18/T1CK/CTED2/PMA11/CN30/RB12 ) からアナログ入力値を取得する。
- 最小値 0V、最大値3.3V
最もシンプルな形で取得する。
まずはMCCの設定から。
MCC の画面で、PADC1 を設定する。( Device Resources でADC→PADC を選択しクリックする。)
以下を設定する。
- Enable PADC Interrupt にチェックを入れる。
- Sample List:0 にチェックを入れる。
1つのポートから取得するだけなので、SampleList0 だけを使用し、Sample Sizeを1のままにしておく。
さらに、Analog Channel Selection Table のAnalog Channel にAN12を設定する。PIN27 に対応するAnalog Channel がAN12のため。
これでジェネレートする。
ソースコード
次に、Header Files → MCC Generated Files → padc.h のコードを参考にAD値取得関数を作成する。不要な箇所はコメントアウトした。
static uint16_t getAD( void ) { // PADC1_SAMPLELISTCONFIG slconfig; // uint16_t sl0ResultBuffer[2];; uint16_t data = 0; uint8_t tableregindex; uint8_t slsize; // uint8_t adcChannel1 = 0; // AN0/AN1 // uint8_t adcChannel2 = 1; // AN2 tableregindex = 0; // slsize = 2; slsize = 1; //Disable sample list PADC1_SampleList0Disable(); // PADC1_SetADCChannel( tableregindex, adcChannel1, true ); // PADC1_SetADCChannel( tableregindex, adcChannel2,false ); // set up values for sample list // slconfig.trigger_src =0; //manual // slconfig.chargetime =5; // slconfig.autoscan = true; // slconfig.slsize = 2; // set the values for sample list and enable the list // PADC1_SampleList0Setup(&slconfig); PADC1_SampleList0ManualConversionStart(); while(1) { // if( PADC1_SampleList1ConversionResultBufferGet(sl0ResultBuffer, tableregindex, slsize)) if( PADC1_SampleList0ConversionResultBufferGet(&data, tableregindex, slsize)) { // PADC1_Tasks(); break; } } return data; }
サンプルコードでやっていた、PADC1_SetADCChannel、PADC1_SampleList0Setupは不要。MCC で行っているから。
PADC1_SampleList0ManualConversionStart() を呼び出すとAD変換を開始する。
PADC1_SampleList0ConversionResultBufferGet() の戻り値がtrue になったならば、AD変換が完了しdata に値が代入される。戻り値がfalseの場合はAD変換中である。
12bit のADCを使うので、0V が0x0000、3.3V が0x0FFF として取得できる。
まとめ
MCC を使って、ADC を実装し、AD値を取得した。
おそらくMCCを使って、ADC を実装する一番簡単なやり方。
コメントを残す