2016-07-25 26 views
1

Ich versuche, diesen Code zu ändern, um PWM von Pin 3 auf 11 zu bewegen (Arduino Nano v3), hatte aber nicht viel Erfolg. Wie kann es gemacht werden?Move PWM von Pin 3 auf 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 

Antwort

1

Pin 11 auf PB3 befindet, als OC2 markiert A - es bedeutet, es ist verpflichtet, OCR2A zu registrieren, daher kann dieses Register nicht als Zähler TOP-Wert verwendet werden.

Und weil es keinen Modus gibt, ohne OCR2A als TOP zu verwenden (außer dass 0xFF als oberster Wert verwendet wird), können Sie es in diesem Fall einfach nicht verwenden.

Wenn Sie jedoch nur 50% benötigen, können Sie den CTC-Modus verwenden, wenn OC2A beim Überlauf umgeschaltet wird.

Nach etwas kommentieren, wie diese es (Fast PWM-Modus) behandeln soll:

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

Vielen Dank für das zu erklären. Ich brauche eine Rechteckwelle mit 50% Tastverhältnis, um eine Uhr für ein anderes Gerät zu erzeugen. Ich muss es auf etwa 700 kHz einstellen und möchte es um +/- 300 kHz variieren können. Gibt es eine Möglichkeit, dass ich das einrichten kann und eine gewisse Kontrolle über diesen Bereich habe, sagen wir mindestens 50 Levels? – bbglazer

+0

@bbglazer: Wenn 13 Schritte genug sind, siehe meine aktualisierte Antwort – KIIV