Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Увеличение скорости счета импульсов на АТ90S2313

Непрочитано 04.08.2010, 10:07  
E_C_C
Почётный гражданин KAZUS.RUN
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 750
Сказали Спасибо 679 раз(а) в 382 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Увеличение скорости счета импульсов с энкодера на АТ90S2313

Добрый день уважаемые, имеется счетчик импульсов с фотодатчика (энкодера) на АТ90S2313 с динамической индикацией, приходящий импульс по внешнему прерыванию инкрементирует переменную, прерыванием по таймеру она выводится на индикацию. Тактовая частота 4Мгц. При больших частотах следования импульсов контроллер виснет, или сбрасывается на начало программы. Как можно исправит эту проблему ? я додумался только до установки внешнего счетчика/делителя импульсов, но не хочется плодить лишних корпусов возможно ли программное решение ?
Реклама:
__________________
Да здравствует Разум,да сгинет Маразм!

Последний раз редактировалось E_C_C; 04.08.2010 в 12:09.
E_C_C вне форума  
Непрочитано 04.08.2010, 10:54  
avr123-nm-ru
Почётный гражданин KAZUS.RUN
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,552
Сказал спасибо: 75
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию Re: Увеличение скорости счета импульсов на АТ90S2313

Похоже программная ошибка у вас или во фьюзах в железе ошибка раз сброс.

Выкладывайте прожект, схему, фото монтажа - будет виднее.

А лучше в CVAVR сделайте прогу и будете уверены что с прогой все впорядке.

PIC лучше относится к высоким входным частотам для счета.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Сказали "Спасибо" avr123-nm-ru
E_C_C (04.08.2010)
Непрочитано 04.08.2010, 11:39  
E_C_C
Почётный гражданин KAZUS.RUN
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 750
Сказали Спасибо 679 раз(а) в 382 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Re: Увеличение скорости счета импульсов на АТ90S2313

в CVAVR и писал, скорее всего не успевает отрабатывать прерывания, вот проект в протеусе и в кодевижен.
Вложения:
Тип файла: rar 111.rar (50.2 Кб, 80 просмотров)
__________________
Да здравствует Разум,да сгинет Маразм!
E_C_C вне форума  
Непрочитано 04.08.2010, 11:58  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,357 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Увеличение скорости счета импульсов на АТ90S2313

Ну, во первых, в программе - судя по всему - не счетчик импульсов, а обработчик энкодера типа "трещотка".

Если вам нужен счет импульсов с максимальной скоростью, то надо завести его на T вход и таймер настроить на счет импульсов с этого входа. Тогда максимальная скорость счета будет, если не путаю, половина тактовой микроконтроллера.

В вашем случае обработка прерывания достаточно длинная - навскидку - никак не менее 50 тактов. И если частота на INT входе выше, то МК будет постоянно торчать в обработчике прерывания - по внешним признакам - зависание.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Сказали "Спасибо" nml
E_C_C (04.08.2010)
Непрочитано 04.08.2010, 12:07  
E_C_C
Почётный гражданин KAZUS.RUN
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 750
Сказали Спасибо 679 раз(а) в 382 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Re: Увеличение скорости счета импульсов на АТ90S2313

Да верно,извиняюсь за неточно сформулированный вопрос, считаются импульсы с фотодатчика сдвинутые на 90 градусов, фактически это энкодер ,но с высокой частотой вращения. Я не смог придумать как используя встроенный таймер определить направление вращения.
Датчик выдает 1000имп за оборот, макс скорость порядка 300об/мин, т.е 5об/сек значит 5000гц,
если обработку прерывания принять за 50 тактов, то необходима тактовая частота свыше 25Мгц,
с 90S2313 тут явно нечего делать. Если только другой датчик применить.
__________________
Да здравствует Разум,да сгинет Маразм!

Последний раз редактировалось E_C_C; 04.08.2010 в 12:16.
E_C_C вне форума  
Непрочитано 04.08.2010, 12:17  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,357 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Увеличение скорости счета импульсов на АТ90S2313

Сообщение от E_C_C Посмотреть сообщение
фактически это энкодер ,но с высокой частотой вращения.
Озвучьте, что такое "высокая".
Оппаньки, опоздал, уже озвучили

Обработчик прерывания можно изрядно "укоротить" при помощи ассемблера и расположения переменной в регистрах (только не знаю позволяет ли такое ваш компилятор).

Да, и еще бы я сделал не одно прерывание и в нем тестирование второй линии, а прерывания по обоим линиям. Кстати, если взять не "классик" а тини2313, то там можно настроиить прерывание на фронт и спад, и в результате удвоить точность.

И еще - для ускорения я делал так - в прерывании модифицировал однобайтный счетчик, а в головном цикле - где уже тики не так критичны - запрет прерывания, прочесть переменную, обнулить переменную, прерывание резрешить, прочитанное - прибавить к LONGу. Насколько помню, обработчик грантированно укладывался в 50 uS (c 50% запасом)
__________________
[ жизнь приятна и красива, если выпить литр пива ]

Последний раз редактировалось nml; 04.08.2010 в 12:25.
nml вне форума  
Непрочитано 04.08.2010, 12:29  
E97
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.01.2008
Сообщений: 1,140
Сказал спасибо: 379
Сказали Спасибо 429 раз(а) в 273 сообщении(ях)
E97 на пути к лучшему
По умолчанию Re: Увеличение скорости счета импульсов на АТ90S2313

Сообщение от E_C_C Посмотреть сообщение
приходящий импульс по внешнему прерыванию инкрементирует переменную
Чтоб устройство правильно считало, необходимо чтобы период импульса был больше времени выполнения прерывания.
Это чтобы только считать импульсы. А на индикацию тоже необходимо время.
По этому возможно что контролер только и сидит за обработкой внешнего прерывания. А вам кажется что он завис.
Если вы во время обработки прерывания от таймера разрешите выполнение прерывания то контролер точно зависнет.

Считать импульсы по внешнему прерыванию не очень удачная идея.
Необходимо задействовать какойто из двух таймеров, это существенно разгрузит
контролер и позволит считать имульсы с частотой слелования вплоть до частоты тактового генератора.

Ну если нужно считать импульсы с большей частотой, необходимо повышать тактовую частоту контролера (или использовать PIC у них можно не синхронизировать внешний импульс тамера с тактовым импульсом МК).

Еше если вы используете динамическую индикацию на светодиодную матрицу то посмотрите оправдано ли это?, может поставить LCD дисплей.
На то чтоб устройство подсчивало импульсы, динамической индикация возможна, а вот если еще какието функции, то нужно проанализировать.
E97 вне форума  
Сказали "Спасибо" E97
E_C_C (04.08.2010)
Непрочитано 04.08.2010, 12:39  
E_C_C
Почётный гражданин KAZUS.RUN
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 750
Сказали Спасибо 679 раз(а) в 382 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Re: Увеличение скорости счета импульсов на АТ90S2313

Компилятор позволяет, не позволяет мое знание ассемблера , но это поправимо.
А что даст прерывание по обеим линиям ? все равно надо читать соседнюю линию.
Если только в прерывании_1 устанавливать флаг, в прерывании_2 его читать и по состоянию прибавлять либо убавлять счетчик, после чего флаг сбросить, аналогично в
прерывании_1 .
Пойду разбираться в ассемблере...
__________________
Да здравствует Разум,да сгинет Маразм!
E_C_C вне форума  
Непрочитано 04.08.2010, 12:52  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,357 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Увеличение скорости счета импульсов на АТ90S2313

Сообщение от E_C_C Посмотреть сообщение
А что даст прерывание по обеим линиям ? все равно надо читать соседнюю линию.
Комбинации на INT входах

00, 01, 11, 10

Это то, что в "трещотках" считается дискретом. На самом деле точность в 4 раза выше.

Так вот, если прерывание одно и только на спад, то и поймаете этот 1 дискрет. Если и на фронт и на спад - то за этот "один дискрет" поймаете 2 прерывания. Ну а по двум линиям - еще в 2 раза больше. Лишняя точность, IMHO, не помешает.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Непрочитано 04.08.2010, 12:52  
E_C_C
Почётный гражданин KAZUS.RUN
 
Аватар для E_C_C
 
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,827
Сказал спасибо: 750
Сказали Спасибо 679 раз(а) в 382 сообщении(ях)
E_C_C на пути к лучшему
По умолчанию Re: Увеличение скорости счета импульсов на АТ90S2313

Сообщение от E97 Посмотреть сообщение
Считать импульсы по внешнему прерыванию не очень удачная идея.
Необходимо задействовать какойто из двух таймеров, это существенно разгрузит
контролер и позволит считать имульсы с частотой слелования вплоть до частоты тактового генератора.
Я думал за такой способ, но нужно еще знать направление счета, а оно определяется фазой сигнала.
Может проще будет собрать внешний счетчик на рассыпухе, и читать его состояние в весовом коде, а на контроллер оставить индикацию и побочные функции управления ?
__________________
Да здравствует Разум,да сгинет Маразм!
E_C_C вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 00:12.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.