Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Три быстрых ШИМа на одном 16ти разрядном таймере (+)
Отправлено
Двоешник (193.200.150.82) 31 августа 2012, г. 10:09
ATtiny10. Есть у нее "16-bit Timer/Counter0, True 16-bit Design, Including 16-bit PWM". Мне нужно получить три быстрых ШИМ канала на этом одном таймере для управления светодиодом. Больше в проце нет ничего для данных целей.
Хочу запрограммировать таймер в режим "Fast PWM", с вершиной счета определяемой регистром ICR0 (для гибкого выбора разрядности). Блок сравнения "А" программирую так чтоб он выставлял на пине OC0A единичку в начале счета и сбрасывал ее при совпадении счетного регистра с регистром сравнения OCR0A. То есть, Блок А будет работать как обычный ШИМ формирователь и при этом полностью аппаратно. Так я получу один канал ШИМ.
А вот блок сравнения "В", запрограммирую следующим образом:
Естественно "Fast PWM", с вершиной счета определяемой регистром ICR0. Далее разрешаем прерывания по достижению максимума, а также по совпадению с счетным регистром OCR0B.
Настройками отключаем выход блока сравнения от вывода процессора.
В памяти храним значения ШИМ оставшихся двух каналов (х1 и х2), отсортированные по значению, а также некую переменную указывающую какой канал имеет меньший/больший по заполнению ШИМ (x3).
В прерывании по достижению максимума пины двух каналов ШИМ выставляем в единицы.
Загружаем в регистр сравнения меньшее значение из пары хранящихся значений (х1, х2) и ждем прерывания.
В прерывании выясняем какой именно пин нужно сбросить (анализируя х3), сбрасываем пин в конкретном канале и перезаписываем регистр сравнения большим значением из пары х1, х2!!!
Снова ждем прерывания, сбрасываем пин в оставшемся канале.
Таким образом первый канал ШИМа сформирован аппаратно, задача программы просто подкладывать в регистр сравнения новые значения, второй и третий канал ШИМа сформируются полуавтоматически, но проц при этом загружен будет минимально.
---
Сформируется ли второе прерывание в блоке сравнения "В"?
Какие бы вы посоветовали параметры ШИМ для управления RGB светодиодом?
Составить ответ | Вернуться на конференцию
Ответы
- Проще надо быть (+): - argus98 (384 байт, 03.09.2012, 11:49:9 81.22.205.230)
- Такая же тема "обсасывалась" год назад на электрониксе (ссыль), чтоже вы там такое одинаковое делаете-то, а??? - SADAT (пустое, ссылка, 02.09.2012, 16:36:4 178.216.73.167)
- Раз не удастся полностью автоматизировать аппаратный ШИМ - то программный на сумматорах делай. ...{+}(+) - Vasja (1029 байт, 01.09.2012, 22:17:39 62.75.248.138)
- что-то у вас как-то замутненно... - A_R_V (487 байт, 31.08.2012, 18:05:28 172.20.20.123,87.117.1.141)
- Посмотрите BAM: - Леонид Иванович (589 байт, ссылка, 31.08.2012, 10:57:20 87.252.227.57)
- Ответ: второе прерывание по совпадению! - Двоешник (пустое, 31.08.2012, 10:48:8 94.45.131.110)