AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
15.08.2012, 11:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Сообщение от gary2007
|
Нет, я только обнуляю предделитель таймера Т0 для более точных замеров фронтов.
|
Для более точных замеров и меньшей нагрузки на проц используйте прерывания. Ничего обнулять не надо, если конечно таймер настроен правильно и успевает натикать хотя бы до 10. Или вообще используйте режим захвата
|
|
|
|
15.08.2012, 11:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
gary2007,
сделайте все на одном таймере (программный сом-порт из аппнота атмел + шим на программных счетчиках) - никаких засветок и потерь данных не будет, ибо коллизий с наложением прерываний не будет
делал прибор с динамической индикацией, приемом данных и математикой - все успевало
|
|
|
|
15.08.2012, 16:38
|
|
Временная регистрация
Регистрация: 26.06.2007
Сообщений: 71
Сказал спасибо: 7
Сказали Спасибо 41 раз(а) в 21 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Аппаратный бы УСАПП задействовать... Частенько делаю программный ШИМ на много-много ног (довольно низкочастотный, правда). 8 бит таймер тикает и тикает себе под нос, а прерывание настроено по переполнению. Вот тут то всё и начинается: вводится ещё одна переменная-счётчик (допустим N) (8, 16, да хоть 200 бит!), которая и инкреминируется в прерывании, а то и вовсе поднимается флаг, по которому основная программа это самое N и увеличивает. Смотрим, если N больше чего-либо, то туши свет, если 255 (ну или 15, как захотите), то всё зажигаем и обнуляем счётчик. Фактически получается виртуальный таймер нужной нам размерности, но который тикает медленне реального во столько раз, до скольки считает таймер реальный. Прелесть в том, что заняв один реальный таймер получаем хренову кучу независимых виртуальных таймеров с нужными нам параметрами. Конкретно в вашем случае можно многократно проредить прерывания, замедлив реальный таймер (предделитель). При делении в 256 и 16 градаций яркости (режим сброс по совпадению с OCR1A, прерывание на OCR1A-всключаем и OCR1B-тушим) получаем частоту ШИМа чуть ниже килогерца, зато между соседними прерываниями (нулевую яркость не рассматриваем) у нас в самом худшем случае 256 тактов процессора, а в среднем одно прерывание примерно на 500 мкс. Удачи в борьбе с глюками!
__________________
Ушёл делать
|
|
|
|
11.09.2012, 10:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Наконец то дошли руки до отладки программной части.
"Виновник" мерцания был определен. Ноги росли еще от версии с "железным" управлением ШИМ, когда цифра дешифрировалась и тут же выводилась в порт в одной процедуре, ЭТОТ непосредственный вывод в порт и был причиной дерганья яркости.
Когда были прописаны обработчики прерываний, то нужно было просто убрать это прямое присвоение порту и "зажигать/гасить" через переменные в процедурах прерываний.
Теперь яркость при смене цифр не прыгает при любой яркости, начиная от 1.
Тему считаю исчерпанной, а написал может кому пригодится?
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:04.
|
|