18.01.2017, 13:58 | #11 | |
Junior Member
Регистрация: 18.01.2017
Сообщений: 8
Вес репутации: 0 |
Re: Многоканальный Dimmer, работающий в фоновом режиме
Цитата:
Признаюсь честно, не так давно заинтересовался программированием МК, причем с целью именно прикладного применения. Язык С++ изучаю уже 3й день и видимо по этому у меня есть вопросы по данному коду Не сочтите за неуважение! Как я понял, изначально мы назначаем нулевому прерыванию на входе 2 запускать функцию detect_up() при появлении низкого уровня (переход через ноль). Эта функция обнуляет счетчик tic и запускает таймер1 "тикать" с периодичностью 40мкс, заодно переопределяя функцию и условие нулевого прерывания. В это время таймер "тикает", синусоида ползет вверх и когда количество тиков превышает "уровень" диммера, на выход подается единица, лампочка светит с этого момента синусоиды и до её спада до нуля. При переходе через ноль, функция detect_down() останавливает тиканье таймера, обнуляет его и ставит ноль на выходы, "гася лампочку" на какую-то часть периода, до нового запуска цикла. Верно ли я мыслю? Отсюда первый вопрос, почему всего 201 уровень (0...200), если в полупериод 50Гц укладывается 250 отрезков по 40мкс? И ещё объясните пожалуйста значение выражения volatile uint8_t tic? Это что-то связанное с работой регистров? 8 это разрядность таймера? Спасибо за терпение! Простите за тупость ) |
|
Здесь присутствуют: 52 (пользователей: 0 , гостей: 52) | |
|
|