реклама на сайте
подробности

 
 
> Реализация 2-канального ШИМ на таймере T0 ATmega88
koluna
сообщение May 23 2008, 07:38
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Здравствуйте!

Необходимо организовать двух-канальный ШИМ (вообще-то трёх-канальный, но для начала - двух-канальный).
256 градаций хватит.
Активный уровень - низкий (управление драйвером MBI1801 светодиодов).

Решил это осуществить на 8-битном таймере T0.
Выходы обоих каналов ШИМ - выводы OC0 (OC0A, OC0B).

Алгоритм следующий.
Загружаем в регистры сравнения соответствующие длительностям ШИМ значения.
Настраиваем таймер в режиме Normal, разрешаем прерывание по переполнению, режим работы блока сравнения (управление выводами OC0) - "состояние выводов меняется на противоположное".
Т. е., при равенстве счётного регистра и регистра сравнения состояние вывода OC0 меняется на противоположное. Далее, при переполнении таймера (период ШИМ) - состояние опять меняется на противоположное. Т. о., получается ШИМ,

Вкратце, код тестовой программы такой:

Код
...

void TIMER0_OVF_vect(void)
{
    TCCR0B |= (1 << FOC0A) | (1 << FOC0B);
    sei();
    return;
};

...

int main (void)
{
        ...

    OCR0A = n_red;
    OCR0B = n_green;
    TCNT0 = 0x00;
    TIMSK0 |= 1 << TOIE0;
    TCCR0A = 0b01010000;
    sei();
    TCCR0B = 0b00000011;
    
        ...
};


Всё просто, код маленький, работает.
Изначально выводы OC0 настраиваю как выходы и перевожу в состояние "1".
Но заметил странную особенность, которую никак объяснить не могу!
При выполнении команды TCCR0A = 0b01010000 состояние выводов OC0 меняется на противоположное, т. е., на "0".
Вопрос. Почему?
Ни в Евстифееве, ни в даташите на контроллер я ответа на свой вопрос не нашёл...
Обидно... несколько пугает и обескураживает wink.gif
Помогите разобраться, пожалуйста!

Спасибо заранее!


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01238 секунд с 7
ELECTRONIX ©2004-2016