私は、2つの異なるADCからの2つの測定値とそれらに関連する2つの異なるPWM信号が必要なプロジェクトを行っています。測定された値は、変数freq
とduty
に格納されます。名前が示すように、私はfreq
の値に応じて1つのPWM信号の周波数を変化させ、もう一方はduty
に依存してそのデューティサイクルを変えなければなりません。問題は、最初の信号は正常に動作しますが、2番目の信号は正常ではありません。なぜPWM信号が出力されないのですか?
私はATmega328pを使用しています。私は変数duty
の代わりに一定の値を使用しようとしましたが、同じことが起こりました。 PWM信号の代わりに、出力ピン(OC0B
)は常にハイ、すなわち5V DCに設定されています。私はTCCR0
レジスタの値をトリプルチェックした
//Timer0 configuration
TCCR0A = 0b00100011;
TCCR0B = 0b00001001; //Fast PWM, no prescaler, non-inverted, out OC0B
OCR0B = duty;
が、すべてが正しいように思える:機能は本当に簡単です。この現象の原因は何ですか?
[このWebページ](http://www.avrfreaks.net/forum/solved-atmega328p-output-pwm-oc0a-and-oc0b)上のそれについて広範な議論があります。 –
モード7の代わりにモード3を使用したいと思うかもしれません。あるいは、 'OCR0A'を設定するのを忘れているかもしれません。 –
@EdgarBonet私の知らないことは申し訳ありませんが、どういう意味ですか?私はあなたが「モード3」または「モード3」の意味を理解していません。また、B出力を使用したい場合、なぜ 'OCR0A'を設定するのですか? – Tendero