|
Время детектирования прерывания pin change |
|
|
|
Mar 22 2010, 00:27
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(frz @ Mar 21 2010, 16:06)  Вобщем имеется ATMega48 и необходимо детектировать короткие внешние импульсы(100-200нс). Тактовая частота 1МГц. Вопрос в следующем: можно ли для этого использовать прерывание PCINT ? Без внешних компонентов нельзя. см. раздел Pin Change Interrupt Timing, кстати там на рисунке 11-1 видно, что схема захвата PCINT - синхронная, т.к. защелка и триггер тактируются clk. Цитата В датащите не нашёл ничего толкового - написано лишь что изменение состояния пинов детектируется асинхронно. Но всеже должно быть какое-то время детектирования, которое гарантированно приводило бы к генерации прерывания? Чтобы гарантировано получить PCINT нужна такая частота тактирования МК, чтобы период одного такта был хотя бы в два раза меньше длительности импульса - т.е. 20Mhz в вашем случае. Если все же тактовая останется 1Mhz, то самым простым решением будет использование возможности встроенного компаратора + простейший аналоговый запоминающий элемент посторенный на кондике и диоде. По прерыванию от компаратора - переключить пин компаратора на вывод и разрядить запоминающий элемент.
|
|
|
|
|
Mar 22 2010, 04:44
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003

|
Цитата(defunct @ Mar 22 2010, 03:27)  Без внешних компонентов нельзя. см. раздел Pin Change Interrupt Timing, кстати там на рисунке 11-1 видно, что схема захвата PCINT - синхронная, т.к. защелка и триггер тактируются clk. Вопрос не совсем в тему, но в принципе про PCINT. Чем тактируется упомянутая схема захвата при уходе контроллера в Power Down, что-то в даташите не могу найти нужной информации, может быть кто знает?
|
|
|
|
|
Apr 1 2010, 02:21
|
Местный
  
Группа: Свой
Сообщений: 212
Регистрация: 23-09-08
Из: Новосибирск
Пользователь №: 40 406

|
Цитата(=GM= @ Mar 26 2010, 22:18)  Возникла идея, как расширить короткий импульс, чтобы он сработал. Нужно поставить таймер2 в асинхронный режим, записать в него 0хFF и подать короткий импульс на TOSC1. Таймер асинхронно сработает от фронта импульса, возникнет переполнение и проц на него отреагирует обычным образом. Идею сам не проверял, но противопоказаний простым глазом не вижу. Асинхронник занят своим делом.. Сама проблема неочень актуальна - внешний транзистор + кондёр+ подтягивающий резистор= надёжная генерация прерывания + защита контроллера от неприятностей на линии. Просто было интересно как именно оно детектируется - всёже асинхронно или синхронно, было неочень понятно из датащита.
|
|
|
|
|
Apr 4 2010, 20:13
|
Местный
  
Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017

|
Цитата Возникла идея, как расширить короткий импульс, чтобы он сработал. Нужно поставить таймер2 в асинхронный режим, записать в него 0хFF и подать короткий импульс на TOSC1. Таймер асинхронно сработает от фронта импульса, возникнет переполнение и проц на него отреагирует обычным образом. Идею сам не проверял, но противопоказаний простым глазом не вижу. Возникнут проблемы с переходом в асинхронный режим. Так как после установки бита AS2, данные в регистры таймера пишутся асинхронным клоком. Кроме того, после возникновения условий прерывания (переполнения тснт), процесс пробуждения контроллера начинается только со следующего такта (асинхронного)
|
|
|
|
|
Apr 18 2010, 00:44
|
Местный
  
Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017

|
Цитата Процесс пробуждения здесь ни при чём Это меня увели в сторону рассуждения про выход из Power down по PCINT. И все же, проблема с переходом в асинхронный режим остается. Ведь для обновления регистров таймера2 (TCNT2, OCR2 и TCCR2) нужно будет подать на TOSC1 как минимум 2 фронта.
|
|
|
|
|
Apr 19 2010, 17:23
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(=GM= @ Apr 19 2010, 15:18)  Ничего не понимаю. То пишут об обновлении регистров таймера2 TCNT2, OCR2 и TCCR2, хотя нужен только TCNT2, при чём здесь остальные регистры? То пишут о прерываниях. Зачем там прерывания по большому счёту? Задача стоит отловить короткий импульс. Ну так, читайте регистр таймера2 в цикле, сравнивайте, есть изменения - значит поймали короткий импульс. Написал о том , что если детектировать по прерыванию , как озаглавлен пост , то поймается только второй импульс.
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|