2016-07-25 78 views
1

我試圖修改此代碼以將引腳3從PWM移動到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 - 這意味着它被綁定到OCR2A寄存器,因此該寄存器不能被用作計數器TOP值。

而且由於沒有使用OCR2A作爲TOP模式(除了使用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左右,並希望能夠改變它的+/- 300kHz。有沒有一種方法可以設置這個範圍,並對這個範圍有一些體面的控制,比如說至少50個關卡? – bbglazer

+0

@bbglazer:如果13個步驟夠了,請參閱我更新的答案 – KIIV