Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/17: Рейтинг темы: голосов - 17, средняя оценка - 4.94
vytok
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 3
1

прерывание по захвату Т1 срабатывает сразу при разрешении:(

23.03.2012, 02:54. Просмотров 3284. Ответов 4
Метки нет (Все метки)

Приветствую всех!
Такая, вот непонятная ситуация:
Задача: измерение временного интервала между событиями на 2х входах.
Первое(стартовое) событие вызывает прерывание INT0. Его обработчик запускает Т1, разрешает прерывание по захвату Т1 и запрещает внеш.прерывания(событий на входе может быть несколько, но интересует только первое).
Далее ждем второе(стоповое) событие на входе захвата.
Обработчик захвата считывает в буфер результат счета, останавливает Т1, обнуляет его, запрещает прерывание по захвату Т1.
Результат выводится на дисплей в течении 2х секунд, после чего разрешается прерывание INT0 и ожидается следующее измерение.
В симуляторе все работает как и задумано, а вот в реальной схеме появляется глюк:
Первое измерение происходит правильно, а все последующие выдают $0000. Получается, что захват срабатывает сразу при его разрешении в обработчике INT0, не дожидаясь события на втором входе.
Это мой первый проект, подскажите- где собаку искать?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2012, 02:54
Ответы с готовыми решениями:

[Решено] Не срабатывает прерывание по захвату таймера А
Не срабатывает прерывание по захвату таймера А. Вот код, я уже вырезал все, оставил только...

Прерывание на Aтмега8 срабатывает сразу после включения
Доброго времени суток. Возникли проблемы в противне срабатывает прерывание int0 сразу после...

Повторное прерывание INT2 при глобальном разрешении
Доброго времени суток. Столкнулся со следующей проблемой. Есть МК AtMiko128 на нем настроены ряд...

прерывание по захвату + шим для сервопривода
Всем привет. Разрабатываю пропорциональное управление на AVR. В программировании я совсем новичок...

Timer2 STM32F103RBT6 прерывание по захвату
Здрасте всем! Помогите решить задачку! Мне надо по каждому изменению фронта на ноге мк...

4
ShodS
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 2,011
23.03.2012, 03:44 2
Может в этом проблема? (первый пост)
http://forum.iosyitistromyss.ru/viewtopys.php?f=4&t=9191
(флаг внешнего прерывания устанавливается во время каждого фронта на входе, соответственно в конце процедуры приема байта, пришлось очищать бит INTF0 в GIFR, чтоб прерывание не стартовало сразу после завершения текущего, а ждало реального прихода START следующего байта)

У меня тинька 13-я была (если у тебя другой контроллер, то мож и таймер другой...)
0
s_btosk
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 181
23.03.2012, 10:20 3
Цитата Сообщение от vytok
Это мой первый проект, подскажите- где собаку искать?
Во-первых, чтобы ответить на Ваш вопрос, нужно посмотреть код.
Во-вторых внимательно почитайте здесь, как решаются подобные задачи.
0
vytok
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 3
24.03.2012, 03:30 4
Цитата Сообщение от ShodS
... пришлось очищать бит INTF0 в GIFR, чтоб прерывание не стартовало сразу после завершения текущего, а ждало реального прихода START следующего байта.
..
Примерно такая мысль сразу и возникла, только в моем случае - bit ICF1 в TIFR. Но это не помогло, правда я очищал бит в самом обработчике прерывания захвата. Надо будет попробовать в другом месте...
0
vytok
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 3
24.03.2012, 03:54 5
Цитата Сообщение от s_btosk
Во-первых, чтобы ответить на Ваш вопрос, нужно посмотреть код.
Во-вторых внимательно почитайте здесь, как решаются подобные задачи.
Решение указанное по ссылке я видел, но оно не подошло, т.к. нужно искать временной интервал между событиями на разных входах.

Вот фрагмент кода (Тини2313):

;---------обработчик стартового события----------------------------
EXT_INT0:
out TCCR1B,st_fn ;запуск Т1 (регистр st_fn=$41)
ldi st_fn,$00 ;готовность к остановке Т1

out GIMSK,st_fn ; запрет внешних прерываний на время измерения
;out TIFR,st_fn ; сброс возможного срабатывания захвата

in tmp,TIMSK ; разрешение прерывания захвата Т1(стоповое событие)
ori tmp,$08 ;
out TIMSK,tmp
reti
;============================================================

;---------обработчик стопового события----------------------------
TIM_CAPT1:

in ZL,ICR1L ;чтение в буфер результата захвата
in ZH,ICR1H

in tmp,TIMSK ; запрет прерывания по захвату Т1
subi tmp,$08 ;
out TIMSK,tmp

out TCCR1B,st_fn ;остановка Т1(регистр st_fn=$00)
ldi st_fn,$41 ;готовность к новому запуску Т1

clr tmp
out TCNT1H,tmp ;обнуление Т1
out TCNT1L,tmp

;out TIFR,st_fn ; сброс возможного ложного срабатывания захвата Т1 при след.измерении

;============ отображение результатов =========================
rcall DISPLEY

reti
0
24.03.2012, 03:54
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2012, 03:54

Прерывание по захвату TIM4! f103cbt
Задача такая , есть у меня сигнал статического кода с пульта ворот (сигнал с rf приемника) на пине...

При разрешении 800х600 на сайте появляется горизонтальная полоса прокрутки, а при разрешении 1152х864 на странице справа пустота.
На главной странице моего сайта http://www.univer-comp.ru при разрешении 800х600 появляется...

СМА Indesit witl 106, Сразу при включении срабатывает УБЛ
Добрый день всем. Пришла в ремонт вертикалка Indesit. Модуль Arcadia. При включении сразу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.