Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: ivan_fd  
Вопрос по прерыванию.
xxxmonejall Дата: Пт, 28.08.2009, 00:51  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Возможно ли считать время между прерываниями и записывать его в переименую. И если это возможно как это сделать????
ЯНДЕКС Дата: 28.08.2009
ADMIN Дата: Пт, 28.08.2009, 11:53  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Конечно можно.
Между какими прерываниями, во-первых? Давайте подробней формулировать вопросы.
brown Дата: Пт, 28.08.2009, 11:57  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Сделать аппаратный таймер (Timer0 or Timer1), а в теле прерывания считывать-расчитывать и сбрасывать его.

Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
xxxmonejall Дата: Пт, 28.08.2009, 19:58  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Ну есть 58 импульсов, после них идет пауза длиной в два импульса, их нет там просто 0 но длиной в 2 импульса. Есть Pic16f84, к порту Б0 подключен вывод по которому идут вот эти импульсы, и программа которая (прерівание) тоисть когда на єтом порте есть 1 тогда чето там сварганить. Так вот мне нужно просто узнавать время между прерываниями, а вообще мне нужно отслеживать вот тот ноль длиной в 2 импульса. И начать от него отсчет. Импульсов и по приходе ну там 34-го что-то там сделать!
brown Дата: Пт, 28.08.2009, 22:36  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Я думаю можно применить следующий алгоритм:
1. Предварительно оценить период следования импульсов т.е. Тмакс и Тмин, чтобы правильно выбрать Кдел прескалера:
Чтобы переполнение таймера TMR0 происходило не раньше 3*Тмакс.
2. В подпрограмме прерывания первым делом считиваем таймер
Timer1=TMR0
Сброс TMR0=0
Timer2=Timer1
Nimp=Nimp+1
IF Timer1>Timer2*2 Then Nimp=1 ; прерывание вызвано 1-м импульсом
3. Дальше ваше действие
If Nimp=34 then ....................

Есть одно но: подпрога прерывания должна выполниться быстрее Тмин


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Dmitry Дата: Сб, 29.08.2009, 01:01  |                                                                                                                Сообщение # 6
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 157
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Чет вы замудрили. Прерывания, таймеры, прескалеры surprised
Все гораздо проще.
Цикл, в цикле опрашиваем ногу, наращиваем переменную-счетчик.
Нога сработала (зуб пришел) - значение счетчика переписываем в доп. переменную, счетчик сбрасываем.
Опять крутим этот же цикл, ждем следующий зуб, снова наращиваем счетчик. И в этом же цикле условие - если счетчик превышает доп. переменную (т.е. предыдущее значение счетчика) более чем в 1,5 раза,то все - это дырка в зубьях. Ну не упадут обороты более чем в 1,5 раза за время интервала между зубьями smile
xxxmonejall, скажи, в чем я неправ.
brown Дата: Сб, 29.08.2009, 10:25  |                                                                                                                Сообщение # 7
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Quote (Dmitry)
Цикл, в цикле опрашиваем ногу

Прерывание по переходу из 0 в 1
Quote (Dmitry)
наращиваем переменную-счетчик

Таймер-счетчик сам работает
Quote (Dmitry)
Нога сработала (зуб пришел) - значение счетчика переписываем в доп. переменную, счетчик сбрасываем.

Quote (brown)
Timer1=TMR0
Сброс TMR0=0
Timer2=Timer1

Quote (Dmitry)
И в этом же цикле условие - если счетчик превышает доп. переменную (т.е. предыдущее значение счетчика) более чем в 1,5 раза,то все - это дырка в зубьях.

Quote (brown)
IF Timer1>Timer2*2 Then Nimp=1 ; прерывание вызвано 1-м импульсом

Quote (Dmitry)
Ну не упадут обороты более чем в 1,5 раза за время интервала между зубьями

Я тоже так подумал

Итог: теже яйца не много с другого бока! Ну и просили с прерываниями.


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
xxxmonejall Дата: Сб, 29.08.2009, 12:00  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 139
Репутация: 0   ±
Замечания:   ±
На сайте с 17.05.2008

Статус: Offline

Ребята не грузити. Поподробней если можно. А то я что-то ниче не понял. Я только начинающий!
brown Дата: Сб, 29.08.2009, 13:02  |                                                                                                                Сообщение # 9
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Трижды описан алгоритм. Поподробней, чего не понял.

Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
  • Страница 1 из 1
  • 1
Поиск: