1ピンの電圧値を連続で取るのは以前にもやった。
「PIC24FJ64GB002 MCC でAD変換をやってみる。」
この時は「Enable Auto Sampling」にチェックを付けて、ただただADC1_ConversionResultGet();を繰り返すだけというものだった。
半固定抵抗を付けて値をぐりぐり変化させると、表示も追随する。
ま、いいんじゃね、って感じで終了していた。
今度は、2ピン分のAD変換値を取ってみる。
前回と同様にADC1を追加して、AD変換用のピンをRB2(6pin)とRB3(7pin)にした。
「Enable Auto Sampling」のチェックは外してみた。
前回良く考えずにやみくもに呼んでいたADC1_ConversionResultGet();をよく見るとこう書いてある。
1 2 3 4 |
uint16_t ADC1_ConversionResultGet(void) { return ADC1BUF0; } |
このADC1BUF0をデータシートで確認するとこうずらっと並んでいるうちの1つであることがわかる。
adc1.cには、使ってみてはいないがバッファを用意して呼べば値を取って来てくれそうな以下のようなコードが生成されていて、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
uint16_t ADC1_ConversionResultBufferGet(uint16_t *buffer) { int count; uint16_t *ADC16Ptr; ADC16Ptr = (uint16_t *)&(ADC1BUF0); for(count=0;count<=adc1_obj.intSample;count++) { buffer[count] = (uint16_t)*ADC16Ptr; ADC16Ptr++; } return count; } |
どうやら、バッファから順に読み出しているだけのようだ。
ならば、2ピン程度ならこれで良かろうということで、直にADC1BUF0とADC1BUF1を表示させてみた。
お決まりの半固定抵抗で電圧値を変更してみて2つそれぞれの変化にちゃんと追随するので一応良さそうだ。
「Enable Auto Sampling」のチェックを外してあるので、
ADC1_Start();
が必要だ。
結局こんな感じになった。
表示のためのコードがほとんどなので、実際にAD変換関連なのは赤く塗った部分だけだ。