Итак, я программирую свой первый проект AVR C (ATMEGA32U4), контролируя три отдельных светодиода: красный, зеленый и синий.Я могу управлять одним контактом / таймером ШИМ, хотя я не могу управлять более чем одним.Я чувствую, что что-то упустил с регистрами.Вот что я сделал, чтобы добиться этого с помощью одного пина / таймера:
void pwm8bit(){
// PWM Pins: PB6 PB7 PC6
DDRB |= (1 << PORTB6) | (1 << PORTB7);
DDRC |= (1 << PORTC6);
TCCR0A = (1 << COM0A1) | (1 << WGM00) | (1 << WGM01);
TIMSK0 = (1 << TOIE0);
OCR3A = (RotaryRedValue / 100.0) * 255.0; // PC6
OCR0A = (RotaryGreenValue / 100.0) * 255.0; // PB7
OCR1B = (RotaryBlueValue / 100.0) * 255.0; // PB6
TCCR0B = (1 << CS00);
}
Зеленый работает, а другие остаются постоянно, я предположил, что это из-за таймера TCCR"0A"
, поэтому я сделалпопробуйте добавить TCCR"3A"
с теми же значениями для красного (здесь не повезло).Затем я посмотрел в документации на тот же регистр таймера и заметил, что с ним связаны разные регистры COM, WGM и CS, и попытался сопоставить их соответствующим образом.Снова без удачи.
Может ли кто-нибудь помочь мне встать на правильный путь?
Спасибо, Джейми