Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
04.08.2010, 10:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 739
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Увеличение скорости счета импульсов с энкодера на АТ90S2313
Добрый день уважаемые, имеется счетчик импульсов с фотодатчика (энкодера) на АТ90S2313 с динамической индикацией, приходящий импульс по внешнему прерыванию инкрементирует переменную, прерыванием по таймеру она выводится на индикацию. Тактовая частота 4Мгц. При больших частотах следования импульсов контроллер виснет, или сбрасывается на начало программы. Как можно исправит эту проблему ? я додумался только до установки внешнего счетчика/делителя импульсов, но не хочется плодить лишних корпусов возможно ли программное решение ?
__________________
Да здравствует Разум,да сгинет Маразм!
Последний раз редактировалось E_C_C; 04.08.2010 в 12:09.
|
|
|
|
04.08.2010, 10:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Re: Увеличение скорости счета импульсов на АТ90S2313
Похоже программная ошибка у вас или во фьюзах в железе ошибка раз сброс.
Выкладывайте прожект, схему, фото монтажа - будет виднее.
А лучше в CVAVR сделайте прогу и будете уверены что с прогой все впорядке.
PIC лучше относится к высоким входным частотам для счета.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
Сказали "Спасибо" avr123-nm-ru
|
|
|
04.08.2010, 11:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 739
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Увеличение скорости счета импульсов на АТ90S2313
в CVAVR и писал, скорее всего не успевает отрабатывать прерывания, вот проект в протеусе и в кодевижен.
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
04.08.2010, 11:58
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,948
Сказали Спасибо 1,327 раз(а) в 578 сообщении(ях)
|
Re: Увеличение скорости счета импульсов на АТ90S2313
Ну, во первых, в программе - судя по всему - не счетчик импульсов, а обработчик энкодера типа "трещотка".
Если вам нужен счет импульсов с максимальной скоростью, то надо завести его на T вход и таймер настроить на счет импульсов с этого входа. Тогда максимальная скорость счета будет, если не путаю, половина тактовой микроконтроллера.
В вашем случае обработка прерывания достаточно длинная - навскидку - никак не менее 50 тактов. И если частота на INT входе выше, то МК будет постоянно торчать в обработчике прерывания - по внешним признакам - зависание.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
04.08.2010, 12:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 739
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Увеличение скорости счета импульсов на АТ90S2313
Да верно,извиняюсь за неточно сформулированный вопрос, считаются импульсы с фотодатчика сдвинутые на 90 градусов, фактически это энкодер ,но с высокой частотой вращения. Я не смог придумать как используя встроенный таймер определить направление вращения.
Датчик выдает 1000имп за оборот, макс скорость порядка 300об/мин, т.е 5об/сек значит 5000гц,
если обработку прерывания принять за 50 тактов, то необходима тактовая частота свыше 25Мгц,
с 90S2313 тут явно нечего делать. Если только другой датчик применить.
__________________
Да здравствует Разум,да сгинет Маразм!
Последний раз редактировалось E_C_C; 04.08.2010 в 12:16.
|
|
|
|
04.08.2010, 12:17
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,948
Сказали Спасибо 1,327 раз(а) в 578 сообщении(ях)
|
Re: Увеличение скорости счета импульсов на АТ90S2313
Сообщение от E_C_C
|
фактически это энкодер ,но с высокой частотой вращения.
|
Озвучьте, что такое "высокая".
Оппаньки, опоздал, уже озвучили
Обработчик прерывания можно изрядно "укоротить" при помощи ассемблера и расположения переменной в регистрах (только не знаю позволяет ли такое ваш компилятор).
Да, и еще бы я сделал не одно прерывание и в нем тестирование второй линии, а прерывания по обоим линиям. Кстати, если взять не "классик" а тини2313, то там можно настроиить прерывание на фронт и спад, и в результате удвоить точность.
И еще - для ускорения я делал так - в прерывании модифицировал однобайтный счетчик, а в головном цикле - где уже тики не так критичны - запрет прерывания, прочесть переменную, обнулить переменную, прерывание резрешить, прочитанное - прибавить к LONGу. Насколько помню, обработчик грантированно укладывался в 50 uS (c 50% запасом)
__________________
[ жизнь приятна и красива, если выпить литр пива ]
Последний раз редактировалось nml; 04.08.2010 в 12:25.
|
|
|
|
04.08.2010, 12:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.01.2008
Сообщений: 1,143
Сказал спасибо: 379
Сказали Спасибо 430 раз(а) в 274 сообщении(ях)
|
Re: Увеличение скорости счета импульсов на АТ90S2313
Сообщение от E_C_C
|
приходящий импульс по внешнему прерыванию инкрементирует переменную
|
Чтоб устройство правильно считало, необходимо чтобы период импульса был больше времени выполнения прерывания.
Это чтобы только считать импульсы. А на индикацию тоже необходимо время.
По этому возможно что контролер только и сидит за обработкой внешнего прерывания. А вам кажется что он завис.
Если вы во время обработки прерывания от таймера разрешите выполнение прерывания то контролер точно зависнет.
Считать импульсы по внешнему прерыванию не очень удачная идея.
Необходимо задействовать какойто из двух таймеров, это существенно разгрузит
контролер и позволит считать имульсы с частотой слелования вплоть до частоты тактового генератора.
Ну если нужно считать импульсы с большей частотой, необходимо повышать тактовую частоту контролера (или использовать PIC у них можно не синхронизировать внешний импульс тамера с тактовым импульсом МК).
Еше если вы используете динамическую индикацию на светодиодную матрицу то посмотрите оправдано ли это?, может поставить LCD дисплей.
На то чтоб устройство подсчивало импульсы, динамической индикация возможна, а вот если еще какието функции, то нужно проанализировать.
|
|
|
|
04.08.2010, 12:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 739
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Увеличение скорости счета импульсов на АТ90S2313
Компилятор позволяет, не позволяет мое знание ассемблера , но это поправимо.
А что даст прерывание по обеим линиям ? все равно надо читать соседнюю линию.
Если только в прерывании_1 устанавливать флаг, в прерывании_2 его читать и по состоянию прибавлять либо убавлять счетчик, после чего флаг сбросить, аналогично в
прерывании_1 .
Пойду разбираться в ассемблере...
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
04.08.2010, 12:52
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,948
Сказали Спасибо 1,327 раз(а) в 578 сообщении(ях)
|
Re: Увеличение скорости счета импульсов на АТ90S2313
Сообщение от E_C_C
|
А что даст прерывание по обеим линиям ? все равно надо читать соседнюю линию.
|
Комбинации на INT входах
00, 01, 11, 10
Это то, что в "трещотках" считается дискретом. На самом деле точность в 4 раза выше.
Так вот, если прерывание одно и только на спад, то и поймаете этот 1 дискрет. Если и на фронт и на спад - то за этот "один дискрет" поймаете 2 прерывания. Ну а по двум линиям - еще в 2 раза больше. Лишняя точность, IMHO, не помешает.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
|
|
|
|
04.08.2010, 12:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 739
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Увеличение скорости счета импульсов на АТ90S2313
Сообщение от E97
|
Считать импульсы по внешнему прерыванию не очень удачная идея.
Необходимо задействовать какойто из двух таймеров, это существенно разгрузит
контролер и позволит считать имульсы с частотой слелования вплоть до частоты тактового генератора.
|
Я думал за такой способ, но нужно еще знать направление счета, а оно определяется фазой сигнала.
Может проще будет собрать внешний счетчик на рассыпухе, и читать его состояние в весовом коде, а на контроллер оставить индикацию и побочные функции управления ?
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:58.
|
|