Микроконтроллеры | 3 канальный ШИМ на Tiny15L? |
|
---|---|---|
На таком принципе была написана программа для 24-канального шима на 20 МГц аврке, 256 точек, 6 кГц, возможно изменение всех уставок за один период шима. На периоде шима может быть до 25 прерываний, занимают минимум процессорного времени, зато фоновая программа приёма и упорядочения уставок и ассоциированных с ними номеров каналов занимает всё остальное время. Правда, если снизить частоту шим до 3 кГц, то примерно 80% времени процессора будет свободно для других задач. Для трёхканального шима задача упорядочения уставок вырождается в два-три десятка операторов. Сиё осложняется отсутствием памяти, но думаю задача вполне решаема |
|
|
Вобщем что-то получилось. Для начала цвета просто переливаются. Решил как и говорили выше в лоб. |
|
|
GM, а ведь в вашей реализации ШИМа невозможно получить коэффициент заполнения 100%? |
|
|
Напрямую - да, но здесь легко выкрутиться - в обработчике по переполнению установить линию руками, т.е. вместо ldi temp,0 заносить в порт данные из другого регистра - в нем на месте 100% ШИМа в битах устанавливаем лог.1, в остальных местах - лог.0. Просто 100% ШИМ - случай достаточно частный |
|
|
chav1961: Просто 100% ШИМ - случай достаточно частный Сделать нет проблем, от 0 и до 100, но при 0 и при 100 это не будет шим по определению. |
|
|
smg123: Реализацию по способу GM отложил до лучших времён Попробуйте такой вариант с переключателем а ля switch. ;Процедура обработки прерывания таймер1 по сравнению (11МЦ) pwmisr: sbrc switch,0 ;первое прерывание? rjmp pwm1 ;да sbrc switch,2 ;третье прерывание? rjmp pwm3 ;да pwm2: out portb,set2 ;второй образ порта out ocr1,time3 ;уставка 3 ldi switch,4 ;указатель на 3 прерывание reti ;сделано pwm1: out portb,set1 ;первый образ порта out ocr1,time2 ;уставка 2 ldi switch,2 ;указатель на 2 прерывание nop ;выравнивание веток reti ;сделано pwm3: out portb,set3 ;третий образ порта nop ;выравнивание веток reti ;сделано ;Процедура обработки прерывания таймер1 по переполнению (11МЦ)eopwm: ldi temp,0 ;обнулениеout portb,temp ;портаldi switch,1 ;указатель на 1 прерываниеout ocr1,time1 ;уставка 1nop ;выравнивание времениnop ;выполнения прерыванийnop ;(факультативно)reti ;сделано |
|
|
GM: Шорт побери, скипа съел всё форматирование. Как побороть проблему? Я обрамляю каждую строчку, типа так: Получается широко, но получается : eopwm: ldi temp,0 ;обнуление out portb,temp ;порта di switch,1 ;указатель на 1 прерывание |
|
|
Спасибо, но получается как-то не козяво. Хорошо ещё не по одной строке на страницу( |
|
|
ЗЫ. Переносите закрывающий тег на следующую строчку, как я показал, это самый компактный вариант. |
|
|
Если у меня второй обработчик прерываний (по таймеру Т0) обрабатывает алгоритмы изменения каждого ШИМ, то длительность обработки прерывания не должна быть больше длительности шага ШИМ, т.е. периода переполнения таймера Т1, с пом. которого формируется 3 канала ШИМ? Если я размещаю обработку алгоритмов в основной программе - ругается симулятор на переполнение счётчика команд. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |