同じ問題でまた嵌まった [PIC32]
(2015.07.31)
PIC32MX250を使い、アナログ2CHを200kHzサンプリングしようとして、嵌まりました。サンプリング・レートが200kHzに届きません。
プログラムを書き換えてもなかなか思うようになりません。あれこれ試しているうちに、サンプリング・レートが突然1MHzに跳ね上がって、またビックリ!調べてみるとADC割込フラグが消えなくなって誤動作していました。orz
”え~と、これは以前にも経験したやつだ。そのときは1MHzサンプリングも出来たんじゃなかったっけ?”
親族管理人ブログで検索を掛けて、以前書いた記事(これ)を発掘しました。
ふむふむ。(<==自分で書いたブログに感心している)
そのときも原因は判らないまま、AD1CON.SSRC<2:0>を”Internal counter ends sampling(auto convert)”に設定して、1MHzサンプリングを実現していました。
今回も同様に、”Internal counter ends sampling”に設定し、さらに"auto sampling"も設定して(ADCをフリーラン状態にして)おいて、200kHzインターバルで読み取るという方法でなんとか200kHzサンプリングが実現しました。
やれやれ
----------------------------------------
ちなみに、プログラムはこんな感じです
PIC32MX250を使い、アナログ2CHを200kHzサンプリングしようとして、嵌まりました。サンプリング・レートが200kHzに届きません。
プログラムを書き換えてもなかなか思うようになりません。あれこれ試しているうちに、サンプリング・レートが突然1MHzに跳ね上がって、またビックリ!調べてみるとADC割込フラグが消えなくなって誤動作していました。orz
”え~と、これは以前にも経験したやつだ。そのときは1MHzサンプリングも出来たんじゃなかったっけ?”
親族管理人ブログで検索を掛けて、以前書いた記事(これ)を発掘しました。
ふむふむ。(<==自分で書いたブログに感心している)
そのときも原因は判らないまま、AD1CON.SSRC<2:0>を”Internal counter ends sampling(auto convert)”に設定して、1MHzサンプリングを実現していました。
今回も同様に、”Internal counter ends sampling”に設定し、さらに"auto sampling"も設定して(ADCをフリーラン状態にして)おいて、200kHzインターバルで読み取るという方法でなんとか200kHzサンプリングが実現しました。
やれやれ
----------------------------------------
ちなみに、プログラムはこんな感じです
while( break_flag == FLAG_OFF ) { if( ADC_TIMER_INT_FlagGet() ) { // DMAをキックしてad_buffの内容を転送する SYS_DMA_Channel1ForceStart(); ADC_TIMER_INT_FlagClear(); } if( ADC_1_INT_FlagGet() ) { //ADC1BUFを読み出してから、割込フラグをクリアする ad_buff[0] = ADC1BUF0; ad_buff[1] = ADC1BUF1; ADC_1_INT_FlagClear(); }
|
|
|
コメント 0