Управление более чем одним ШИМ с отдельными таймингами - PullRequest
0 голосов
/ 13 февраля 2019

Итак, я программирую свой первый проект 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, и попытался сопоставить их соответствующим образом.Снова без удачи.

Может ли кто-нибудь помочь мне встать на правильный путь?

Спасибо, Джейми

...