Генерация ШИМ без analogWrite()
Я пишу кастомное ядро для Arduino Mega 2560 и мне нужно генерировать ШИМ, кодом такого вида:
bitSet(TCCR0A, COM0A1);
OCR0A = duty;
Какие значения мне нужно подставить, чтобы ШИМ был не только на 13 пине (таймера...)?
Ответы (2 шт):
Автор решения: gbg
→ Ссылка
Аппаратная генерация ШИМ возможна только на пинах, которые прописаны в даташите как пины для аппаратного ШИМ.
На остальные пины можно выдать ШИМ только программно, что имеет ряд ограничений.
Автор решения: K_R_O_K_O_D_I_L_L_O
→ Ссылка
Вот работающий код:
switch (pin) {
case 2:
bitSet(TCCR3A, COM3B1);
OCR3B = duty; // set pwm duty
return;
case 3:
bitSet(TCCR3A, COM3C1);
OCR3C = duty; // set pwm duty
return;
case 4:
bitSet(TCCR0A, COM0B1);
OCR0B = duty; // set pwm duty
return;
case 5:
bitSet(TCCR3A, COM3A1);
OCR3A = duty; // set pwm duty
return;
case 6:
bitSet(TCCR4A, COM4A1);
OCR4A = duty; // set pwm duty
return;
case 7:
bitSet(TCCR4A, COM4B1);
OCR4B = duty; // set pwm duty
return;
case 8:
bitSet(TCCR4A, COM4C1);
OCR4C = duty; // set pwm duty
return;
case 9:
bitSet(TCCR2A, COM2B1);
OCR2B = duty; // set pwm duty
return;
case 10:
bitSet(TCCR2A, COM2A1);
OCR2A = duty;
return;
case 11:
bitSet(TCCR1A, COM1A1);
OCR1A = duty;
return;
case 12:
bitSet(TCCR1A, COM1B1);
OCR1B = duty;
return;
case 13:
bitSet(TCCR0A, COM0A1);
OCR0A = duty;
return;