PIC MCC ADCの実装をしてみた

こんばんは、ファルコン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変換中である。

サンプルコードは、PADC1_SampleList1ConversionResultBufferGetとなっている。SampleList0 を使用するので、PADC1_SampleList0ConversionResultBufferGet に修正する。また1つのポートから取得するので、slsize は1とする。

12bit のADCを使うので、0V が0x0000、3.3V が0x0FFF として取得できる。

まとめ

 

MCC を使って、ADC を実装し、AD値を取得した。

おそらくMCCを使って、ADC を実装する一番簡単なやり方。

 

スポンサードリンク



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です