AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
14.08.2012, 22:20
|
#11
|
Вид на жительство
Регистрация: 10.08.2005
Сообщений: 385
Сказал спасибо: 0
Сказали Спасибо 161 раз(а) в 140 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Low-Jitter Multi-Channel PWM Software
• Подходит для любого AVR ® со свободным 8-разрядным таймером
• Не накапливаемое дрожание + / - 0,015% от базовой частоты
• До 24 каналов ШИМ с использованием поставляемого кода
• Для управления интенсивностью ламп, скоростью двигателя постоянного тока и т.д.
• Весь исходный код написан на C
"… – и она перешла на японский; на устаревшем английском трудно объяснить современные технические вещи, ..."
Генетические связи японского языка не до конца выяснены. Выделяются два слоя лексики, один из которых имеет параллели в алтайских языках, другой — в австронезийских языках; вероятнее, исконен алтайский слой.
Последний раз редактировалось Alecsej; 14.08.2012 в 22:49.
|
|
|
|
14.08.2012, 22:55
|
#12
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Сообщение от gary2007
|
только заметны кратковременные вспышки яркости при приеме данных и смене цифр, на малых уровнях яркости, но видно от этого не уйти. Прием данных сравнительно медленный у меня.
|
Делай подпрограмму прерываний приема и смены цифр максимально короткими - в идеале чтобы она гарантированно выполнялась за половину периода таймера, тогда все будет идеально как на моем видео. Переноси все вычисления из прерываний в основной код программы
|
|
|
|
14.08.2012, 23:22
|
#13
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Сообщение от gary2007
|
В общем, сделал на прерываниях, все работает, только заметны кратковременные вспышки яркости при приеме данных и смене цифр, на малых уровнях яркости, но видно от этого не уйти. Прием данных сравнительно медленный у меня.
|
У Вас на прерываниях еще что-то висит кроме ШИМа для индикатора?
Если прерывание одно, то такого не должно быть. Если прерываний несколько, то может быть. Выход один, как предложил niXto, делать обработчик прерываний максимально коротким. Я бы добавил, что это касается прерываний не связанных с индикацией. Или разрешать в таких обработчиках вложенные прерывания.
Последний раз редактировалось alvadep; 14.08.2012 в 23:45.
|
|
|
|
14.08.2012, 23:35
|
#14
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,981
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
gary2007,
как вариант - синхронный процесс на таймере с прерыванием и с частотой в 2раза выше приема данных, USART опрашивать поллингом флага (можно в прерывании от таймера), математику выверить по тактам и разместить в теле программы между прерываниями от таймера, расчленив на части (для длинных вычислений)
опять, похоже, стела
|
|
|
|
14.08.2012, 23:35
|
#15
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Будем думать, у меня прием занимает минимум 126 мс. Либо ускорять, либо смириться... Посмотрим на больших табло, когда они будут готовы. Если ШЕФ будет морщиться, тогда будем ускоряться!
Сообщение от Alecsej
|
"… – и она перешла на японский; на устаревшем английском трудно объяснить современные технические вещи, ..."
|
Там у нас есть ветки для приколов. В прикольные дни, хороший прикол, да под хорошую закуску, да с хорошими друзьями самое ТО... а тут - нет, выглядит как издевка.
Сообщение от alvadep
|
У Вас на прерываниях еще что-то висит кроме ШИМа для индикатора?
|
Нет, прерывания не использовал.
jump Вы просто провидец!
__________________
Мелочи не решают главного. Они решают всё!
Последний раз редактировалось gary2007; 14.08.2012 в 23:41.
|
|
|
|
14.08.2012, 23:59
|
#16
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Сообщение от gary2007
|
Нет, прерывания не использовал.
|
Ответил в предыдущем своем посте.
P.S. При одном обработчике, да и при числе градаций 16 такое может быть, только если что-то не корректно составленно в программе.
|
|
|
|
15.08.2012, 01:13
|
#17
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
А ведь вы правы!
Что-то не так, ведь я не запрещаю прерывания когда идет прием... прерывания по сравнению и переполнению таймера свободно отрабатывают в это время, им никто не мешает нормально шимить.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
|
15.08.2012, 09:09
|
#18
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Сообщение от gary2007
|
Все работает, вопрос в том как программно cделать то-же самое, т.е без схемы на ключе?
|
Если уж используешь улн-ки, то проще и использовать что-то вроде MAX7219.
Последний раз редактировалось Someone; 15.08.2012 в 09:14.
|
|
|
|
15.08.2012, 09:14
|
#19
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Я бы сделал так.
(Приоритет прерываний ровно такой в какой последовательности они идут в векторах, таймер2 и таймер1 более приоритетны, чем UART. )
В прерывании по приёму байта запись этого байта в память, наращивание счётчика принятых байт и всё. Фоновая программа смотрит на счётчик байт или признак конца пакета и обрабатывает.
В прерывании таймера по сравнению: выключить индикатор. Прерывание по переполнению: включить - по 4 команды out port,register.
Если подмигивает, значит, что-то не так с циклами. Вы не останавливаете таймер?
Вы запрещаете прерывания при записи в регистры OCRh,OCRl? Потому что прерывание может произойти между записью в OCRh и OCRl.
Ещё может быть, что перезагрузка OCR происходит на более низкое значение. Если, например, TCNT=100, OCR=120 и вы записываете в OCR 80 то прерывания в момент TCNT=120 не произойдёт, т.к. OCR уже 80. И следующее прерывание будет только после переполнения счётчика. Так происходит в режиме fast pwm, в других режимах таймера регистры OCR обновляются в момент переполнения. В общем, тут поищите.
Лучше всего обновлять OCR в прерывании по переполнению, тупо переписывая каждый раз из регистров / памяти. Туда писать значение, принятое из команды: так вы полностью развяжете временнЫе циклы приёма команды и яркости.
Глаз очень чувствителен к этим вспышкам светодиодов: изменение периода на 1/512 уже хорошо заметно, намучился с этим.
Последний раз редактировалось makakus; 15.08.2012 в 09:34.
|
|
|
|
15.08.2012, 10:54
|
#20
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: ATMega8515, заШИМить все порты вывода
Сообщение от makakus
|
Вы не останавливаете таймер?
|
Нет, я только обнуляю предделитель таймера Т0 для более точных замеров фронтов. В atmega8515 всего два таймера Т0 и Т1, 8-ми и 16-ти бит.
Таймер 0 меряет фронты импульсов приемной посылки. Прием сделан без использования прерываний, в main проверяется установка пина и если пришел "высокий" переход в процедуру приема, дешифрации, индикации. На Т1 сделан 8 бит фаст ШИМ, на него же вчера написал два обработчика прерываний, по совпадению и переполнению.
Накосячил скорее всего в инициализации таймера 1, буду разбираться.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:54.
|
|