2016-07-25 5 views
1

このコードを変更してPWMを3番ピンから11番ピン(Arduino Nano v3)に移動しようとしていますが、あまり成功していません。どのようにそれを行うことができますか?PWMを3番ピンから11番(Arduino Nano)に移動

pinMode(3, OUTPUT);  // enable the PWM output 
TCCR2A = B00100011;  // Fast PWM change at OCR2 
TCCR2B = B11001;   // Timer running at full system clock 
OCR2A = 21;    // output frequency = 16,000,000/(OCR2A+1) 
pinMode(3, OUTPUT);  // enable the PWM output 
OCR2B = 11; // 50% duty cycle 

答えて

1

ピン11は、PB3に位置OC2 としてマークされている - それゆえ、このレジスタは、カウンタのTOP値として使用することはできません、登録OCR2Aにバインドされることを意味します。

TOPとしてOCR2Aを使用しないモードはないため(ただし、0xFFを先頭値として使用する場合を除く)、この場合は使用できません。

ただし、50%のみが必要な場合は、CTCモードを使用してオーバーフロー時にOC2Aを切り替えることができます。このような何かをコメントによると

は(高速PWMモード)を扱う必要があります。それを説明するための

pinMode(11, OUTPUT); 
    OCR2A = 7; // 19 -> 400kHz, 7 -> 1MHz, 10 -> 727.72kHz 
    TCCR2A = _BV(COM2A0) | _BV(WGM21) | _BV(WGM20); // Fast PWM mode, OC2A toggle on compare match + =TOP 
    TCCR2B = _BV(WGM22) | 1; // start timer 
+0

感謝を。別のデバイス用のクロックを生成するには、50%のデューティ・サイクルで方形波が必要です。私はそれを約700kHzに設定する必要があり、それをaprox +/- 300kHzで変化させたいと思っています。私がこれを設定し、その範囲をうまくコントロールできる方法はありますか、少なくとも50レベルでしょうか? – bbglazer

+0

@bbglazer:13ステップで十分なら、私の更新された答えを見てください – KIIV

関連する問題