Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
24.06.2011, 09:52
|
|
Частый гость
Регистрация: 17.11.2009
Сообщений: 31
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Организация грамотного прерывания на PIC16
Реализовал часы на DS3232 и PIC16F873 - связь по I2C.
Для ежесекундной индикации времени использую выход с ДС (меандр 1Гц) на INT МК для прерывания по спадающему фронту.
Но... всвязи с нахождением входного импульса на INT в нижнем уровне, после отработки прерывания, вновь ухожу в прерывание и так пол секунды...
Как победить данный вопрос программным путем? Пока дошел только до установки конденсатора, укорачивающего отрицательный импульс (но как-то некошерно получилось). Одновибратор ставить нет желания. Чую должен быть программный способ...
Подскажите куда копать?
|
|
|
Сказали "Спасибо" Victor_72
|
|
|
24.06.2011, 10:37
|
|
Прописка
Регистрация: 14.04.2011
Адрес: Кишинев
Сообщений: 243
Сказал спасибо: 39
Сказали Спасибо 144 раз(а) в 71 сообщении(ях)
|
Re: Организация грамотного прерывания на PIC16
первый вопрос вы действительно уверены что ситуация именно такова как вы ее описали? на RB0/INT приходит сигнал типа меандр с частотой 1Гц? вы это видели осциллографом?
если да, то:
Как следует и документации, INT срабатывает по переходу, а не по уровню. Это значит, что вы что-то не то в программе написали, если у вас оно не так работает. Самый простой способ найти и устранить проблему- это прогнать на симуляторе MPLAB. Симулятор позволит вам убедиться что проблема таки есть и позволит проконтролировать когда вы ее таки устранили да.
Хотя может быть и просто взгляда на исходник хватит. давайте исходник, скажу где собака порылась.
Цитата:
|
12.10.1 INT INTERRUPT
External interrupt on the RB0/INT pin is edge triggered,
either rising, if bit INTEDG (OPTION_REG‹6›) is set,
or falling, if the INTEDG bit is clear. When a valid edge
appears on the RB0/INT pin, flag bit INTF
(INTCON‹1›) is set. This interrupt can be disabled by
clearing enable bit INTE (INTCON‹4›). Flag bit INTF
must be cleared in software in the Interrupt Service
Routine before re-enabling this interrupt.
|
|
|
|
Сказали "Спасибо" Ruslan-1
|
|
|
24.06.2011, 12:25
|
|
Частый гость
Регистрация: 17.11.2009
Сообщений: 31
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Организация грамотного прерывания на PIC16
Сообщение от Ruslan-1
|
...Как следует и документации, INT срабатывает по переходу, а не по уровню.
|
Я тоже так думал, но вся засада в том, что при низком INT идет постоянное прерывание... Проверю мож флаги не сбрасываю (или сбрасываю но не вовремя).
Ок, погляжу осциллографом...
Еще поиграю с флагами INTF, INTE.
|
|
|
Сказали "Спасибо" Victor_72
|
|
|
24.06.2011, 12:51
|
|
Прописка
Регистрация: 14.04.2011
Адрес: Кишинев
Сообщений: 243
Сказал спасибо: 39
Сказали Спасибо 144 раз(а) в 71 сообщении(ях)
|
Re: Организация грамотного прерывания на PIC16
Сообщение от Victor_72
|
Еще поиграю с флагами INTF, INTE.
|
Не нужно ничем играться. Это цифровая техника, тут все предсказуемо и документированно, нужно просто прочитать документацию. Чудес не бывает.
Что мплабовский симулятор показывает? программа действительно переходит повторно на прерывание при сохранении низкого уровня на RB0 ?
Но гадать так долго можно, просто программу приведите, тогда будет конкретика. Если там ноухау какие-то - то специальную тестовую версию сделайте и ее дайте поглядеть.
|
|
|
Сказали "Спасибо" Ruslan-1
|
|
|
24.06.2011, 13:08
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Организация грамотного прерывания на PIC16
У этого камня прерывание идет только по изменению уровня. На более современных можно выбрать спад и наростание отдельно.
Выход из ситуации - проверять в прерывании, равно ли оно единице. Если равно - выполнять дальше. Если нет, выкидывать из прерывания. Элементарно, Ватсон.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
24.06.2011, 13:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.08.2007
Адрес: Болгария Перник
Сообщений: 1,771
Сказал спасибо: 74
Сказали Спасибо 357 раз(а) в 245 сообщении(ях)
|
Re: Организация грамотного прерывания на PIC16
Сообщение от Victor_72
|
INTF
|
В прерывании нужно сбрасывать. Если Вы это сделали, без кода вразумительный ответ дать затруднительно.
__________________
Мыслю, следовательно существую
|
|
|
|
24.06.2011, 15:22
|
|
Частый гость
Регистрация: 17.11.2009
Сообщений: 31
Сказал спасибо: 3
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: Организация грамотного прерывания на PIC16
Сообщение от Popeye
|
В прерывании нужно сбрасывать. .
|
Сбрасываю при завершении обработки прерывания...
Исходник дома, доберусь, выложу...
|
|
|
Сказали "Спасибо" Victor_72
|
|
|
24.06.2011, 17:59
|
|
Прописка
Регистрация: 14.04.2011
Адрес: Кишинев
Сообщений: 243
Сказал спасибо: 39
Сказали Спасибо 144 раз(а) в 71 сообщении(ях)
|
Re: Организация грамотного прерывания на PIC16
Сообщение от Easyrider83
|
У этого камня прерывание идет только по изменению уровня. На более современных можно выбрать спад и наростание отдельно.
|
Неверно. смотрите отрывок из документации, который я цитировал раньше. именно нога RB0/ INT может ловить конкретный перепад. Вы наверное перепутали с прерыванием по порту RB.
|
|
|
Сказали "Спасибо" Ruslan-1
|
|
|
25.06.2011, 07:57
|
|
Прописка
Регистрация: 09.12.2003
Сообщений: 116
Сказал спасибо: 5
Сказали Спасибо 23 раз(а) в 19 сообщении(ях)
|
Re: Организация грамотного прерывания на PIC16
Сообщение от Ruslan-1
|
Flag bit INTF
must be cleared in software
|
Таки это надо сделать , других вариантов нет.
|
|
|
Сказали "Спасибо" PlainUser
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Прерывания PIC
|
milssky |
Микроконтроллеры, АЦП, память и т.д |
12 |
10.10.2010 13:31 |
Как изменить адрес подпрограммы обработки прерывания?
|
Godzilla82 |
Микроконтроллеры, АЦП, память и т.д |
21 |
23.08.2010 09:52 |
Прерывания в прерываниях ATmega8
|
7Fantomas7 |
Микроконтроллеры, АЦП, память и т.д |
35 |
07.07.2010 10:12 |
Вложенные прерывания HITECH PIC16
|
picavr |
Микроконтроллеры, АЦП, память и т.д |
17 |
07.03.2010 17:39 |
Вход в прерывания для PIC микроконтроллеров
|
dimmich |
Микроконтроллеры, АЦП, память и т.д |
4 |
06.12.2009 17:17 |
Часовой пояс GMT +4, время: 15:22.
|
|