AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
04.03.2013, 20:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,801
Сказал спасибо: 2,913
Сказали Спасибо 3,123 раз(а) в 2,113 сообщении(ях)
|
Re: AVR, меняется время срабатывания прерывания
Сообщение от Vitiril
|
кварцованного таймера как формирователя точных временных интервалов невозможно
|
Сдуру - можно и член сломать. Sic.
|
|
|
|
04.03.2013, 20:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: AVR, меняется время срабатывания прерывания
main_cnt =1
при одном main_cnt++;
main_count ›= 800 при main_cnt=800;
а при двух main_cnt++; main_cnt всегда нечетное
main_count ›= 800 при main_cnt=801;
На этом и получаете разницу.
|
|
|
Сказали "Спасибо" Boba_spb
|
|
|
04.03.2013, 20:53
|
|
Прохожий
Регистрация: 05.01.2008
Сообщений: 7
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: AVR, меняется время срабатывания прерывания
Прощенье за неточность изложения. Условие в обработчике
if(main_count ›= 800) так выглядит в случае с двумя инкрементами main_count, с одним инкрементом if(main_count ›= 400).
p_off переменная, но принимает действительно четные значения. Но операция с ее участием обеспечивает длительность единицы на выходе, а не период. Или я чего-то не понял?
|
|
|
|
04.03.2013, 21:13
|
|
Прохожий
Регистрация: 05.01.2008
Сообщений: 7
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: AVR, меняется время срабатывания прерывания
Благодарю Boba spb. Программа не моя, сейчас поразбирался и действительно увидел косяк. И расхождение по частоте как раз на время одного переполнения таймера. Но тему пока не закрываю, т.к. коллега уверяет, что сигнал гулял по частоте на иных изменениях тела обработчика. Завтра придет, проверим.
|
|
|
|
04.03.2013, 21:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: AVR, меняется время срабатывания прерывания
Какая у Вас задача? Частотота ШИМ должна быть константой? Иль Частота может гулять - а главное скважность точно держать?
Алгоритмы разные для этих ШИМов
|
|
|
|
04.03.2013, 22:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: AVR, меняется время срабатывания прерывания
Сообщение от Vitiril
|
Получается, что использование кварцованного таймера как формирователя точных временных интервалов невозможно
|
Вот тут http://www.530.ru/electronics/projects.php?do=p072 у Леонида Ридико все получилось, глядишь и у вас получится.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
Эти 2 пользователя(ей) сказали Спасибо gary2007 за это сообщение:
|
|
|
04.03.2013, 23:03
|
|
Прохожий
Регистрация: 05.01.2008
Сообщений: 7
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: AVR, меняется время срабатывания прерывания
Из разговора с коллегой выяснялось, что изменения сигнала по частоте он видел как раз играясь или с переинициализацией TCNT0 или с переменной main_cnt. А я, толком не проверив, вывалил проблему на форум. Благодарю сообщество за науку . Тема закрыта.
|
|
|
|
09.03.2013, 22:10
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 943
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: AVR, меняется время срабатывания прерывания
Сообщение от Boba_spb
|
На этом и получаете разницу.
|
На самом деле это совершенно ни причём. Ну сравнит он 800 с 800 или 800 с 801 - разницы никакой, в чём легко можно убедиться при желании, посмотрев асмовский листинг. Число тактов BRSH ровно столько же, сколько и, например, BREQ. Заменив второй инкремент на штук 7-10 NOP (инкрементируем слово, которое считываем из памяти, а потом его обратно в память записываем), получим точно такой же результат по уменьшению частоты.
А меняется частота просто потому, что состояние порта меняется через время сработки таймера, плюс время выполнения операторов до смены состояния порта. Т.е. таймер сработал скажем 100 мс. Переход в прерывание 5 тактов. Ещё тактов, скажем, 20 (на самом деле хрен его знает сколько CV сохраняет, смотреть листинг надо) на сохранение контекста, ну и предположим 10 тактов инкремент, 10 тактов проверка условия. Итого, состояние порта меняется через 100 мс + 45 тактов. Что даст одну частоту. Добавка ещё одного инкремента даст ещё 10 тактов (опытный программист не побрезгует volatile поставить, так что цикл чтение-инкремент-запись повторится полностью), и соответственно состояние порта будет меняться уже через 100мс + 55 тактов, что даст уже другую частоту.
Сообщение от Vitiril
|
Получается, что использование кварцованного таймера как формирователя точных временных интервалов невозможно. Вот это для меня после нескольких лет использования Atmel`овских девайсов новость.
|
Нет, не получается. Просто - думать надо, что пишешь. Контроллер он тупой - выполняет только то, что программа предписывает.
ЗЫ: Я вообще удивляюсь современным эмбедерам. Ладно студентами учиться не хотят - понимаю, сам студентом не хотел учиться, время весёлое. Даташиты редко читают, тоже можно понять - чтобы найти нужное нужно много не нужного прочитать, да плюс английский (знание языка - тут без комментариев, нет приличных ). Но проработав с контроллером несколько лет делать такие "открытия"... Мне одного года хватило после института что бы пройти стадии "Я нашел ошибку в контроллере, таймер, ацп, компаратор и т.п. работают не правильно", "я нашел ошибку в компиляторе. Я ему вот это, а он гад вот так", "Ничего не знаю, у меня неделю назад работало, я проверил, ищите ошибку в схеме". Думать надо однако.
Последний раз редактировалось Someone; 09.03.2013 в 22:16.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:43.
|
|