タイマ割り込み(精度時間付き)でADチャネルを読み取る必要があるコードがあります。中断PIC CCS
私はちょうどADを読んでも大丈夫です。しかし、私は、デジタルフィルタを使用する必要がある、と私はちょうど乗算を置けば内部警告持っ中断:
これはokです:
#int_RTCC
void RTCC_isr(void)
{
set_adc_channel(0);
delay_us(40);
unsigned int16 aD = read_adc();
}
をしかし、この取得警告:
#int_RTCC
void RTCC_isr(void)
{
set_adc_channel(0);
delay_us(40);
unsigned int16 aD = read_adc();
aDfilter = aDfilter * 8 + aD * 2;
}
(MUL3232)
私は精度が必要なので、私はタイマーを無効にしたくありません。これをどうすれば解決できますか?
警告は何ですか?おそらく次のような計算をする必要があります: 'aDfilter =(float)aDfilter * 0.8f +(float)aD * 0.2f;' Btw、割り込みを無効にしてリエントラント*を防止したいですか?理にかなっていないか、多分あなたは別の言葉が必要です*再帰を防ぐ*? – tilz0R
ソーリー、正しいです:aDfilter = aDfilter * 8 + aD * 2 フロートが必要ありません。 問題は、割り込みの内側と外側の乗算を使用していることです。これを行う方法はありますか? –
基本的にはすべての問題がこの点で発生します.PICはPCではありません。 – Lundin