реклама на сайте
подробности

 
 
> PIC16F74 непонятки с прерыванием, хаотичная ошибка прерывания по таймеру
ddd-ekb
сообщение Oct 28 2015, 15:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-15
Пользователь №: 89 059



Здравствуйте.
Столкнулся с непонятным явлением при обработке прерывания по переполнению таймера1.
Исходные данные:
сделаны часы на PIC16F74, используется статическая индикация и контроллер выбран просто из-за большого количества выводов
быстродействие не требуется абсолютно, поэтому установлен LP режим и кварц на 32768
при данной частоте и использовании предделителя, период переполнения таймера1 составляет 64 сек
поэтому данный таймер использован для подсчёта минутных интервалов
разрешено единственное прерывание по его переполнению, в процедуре обработки сначала старший байт таймера перезагружается значением 10Н (чтоб сократить период до 60 сек), затем увеличивается регистр минут, часов, напоследок сбрасывается флаг прерывания
основная программа просто непрерывно по кругу выводит часы и минуты в сегментном коде на порты и проверяет кнопки управления

Проблема такая:
в сутки хаотично добавляется от 5 до 20 минут
все попытки как то программно отследить происходящее эффекта не дали
рассматривался и вопрос ложных прерываний от другово источника (в обработчик вставлялась проверка флагов и вывод на индикацию если будет обнаруже отличный от переполнения таймера), и помехи по кнопкам управления (они просто выкидывались из исходного кода)
нет, происходит именно хаотичное двойное увеличение счетчика при обработке, такое впечатление что иногда не сбрасывается флаг и после выполнения RETFIE прерывание тут же вызывается снова

Проблема в принципе решена:
в итоге прерывание было просто запрещено, в обработчике RETFIE заменено на обычный RETURN, в начало обработчика вставлена проверка бита переполнения и выход если бит не обнаружен, во все циклы основной программы просто натыканы CALL 4
т.е. реализовано тоже самое прерывание, только тупо программной имитацией
все сбои сразу исчезли

Вопрос:
куда копать то?
задача текущая конечно закрыта, но надо на будущее как то понять всё же sm.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Oct 28 2015, 15:58
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(ddd-ekb @ Oct 28 2015, 18:13) *
нет, происходит именно хаотичное двойное увеличение счетчика при обработке, такое впечатление что иногда не сбрасывается флаг и после выполнения RETFIE прерывание тут же вызывается снова

Так попробуйте сбрасывать флаг сразу при входе в прерывание. Что вы теряете?
Go to the top of the page
 
+Quote Post
Herz
сообщение Oct 28 2015, 16:09
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(ViKo @ Oct 28 2015, 17:58) *
Так попробуйте сбрасывать флаг сразу при входе в прерывание. Что вы теряете?

+1. Более того, если этого не делать, то повторный вызов практически гарантирован, имхо. Даже странно другое: что это не всегда происходит. Если мы верно поняли проблему автора.
Go to the top of the page
 
+Quote Post
ddd-ekb
сообщение Oct 28 2015, 16:35
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 28-10-15
Пользователь №: 89 059



Цитата(Herz @ Oct 28 2015, 21:09) *
если этого не делать, то повторный вызов практически гарантирован, имхо

хмммм.........., я вас понял, проверю
но я не понял какая разница за сколько команд до RETFIE сбрасывать флаг?
главное сбросить до
ну а если обаботчик, допустим, вообще состоял бы из 2-3 коменд?
допустим по прерыванию просто сбросить бит в каком-либо порту и всё
это как то некорректно и обработчик должен быть не менее, допустим, 15 команд?
бррррр................
есть какие то ссылки на аппноты по данной теме?
Код
    org    4

    movwf    buf1
    movf    STATUS,w
    movwf    buf2
    clrf    STATUS

    movlw    16
    movwf    TMR1H

    incf    min,f
    movlw    60
    subwf    min,w
    btfss    STATUS,C
    goto    iend

    clrf    min
    incf    hour,f
    movlw    24
    subwf    hour,w
    btfsc    STATUS,C
    clrf    hour
end
    clrf    PIR1
    movf    buf2,w
    movwf    STATUS
    movf    buf1,w
    retfie


Сообщение отредактировал ddd-ekb - Oct 28 2015, 16:39
Go to the top of the page
 
+Quote Post
Smen
сообщение Oct 29 2015, 04:58
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 211
Регистрация: 18-03-13
Из: Питер
Пользователь №: 76 081



Цитата(ddd-ekb @ Oct 28 2015, 20:35) *
есть какие то ссылки на аппноты по данной теме?
Дык, п. 6.4 даташита.
Подозреваю, что проблема именно в атомарности операции.
В более современных чипах (например 887) эта проблема решена аппаратно, а в старых приходилось изгаляться.
P.S.: Кстати, насколько помню, рекомендовалось таймер, при этом, вообще выключать (в примере этого нет).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ddd-ekb   PIC16F74 непонятки с прерыванием   Oct 28 2015, 15:13
|- - evc   Цитата(ddd-ekb @ Oct 28 2015, 19:35)...   Oct 28 2015, 18:58
||- - ddd-ekb   Цитата(evc @ Oct 28 2015, 23:58) Каждый р...   Oct 28 2015, 19:07
|- - ddd-ekb   Цитата(Smen @ Oct 29 2015, 09:58) Дык, п....   Oct 29 2015, 06:03
|- - evc   Цитата(ddd-ekb @ Oct 29 2015, 09:03)...   Oct 29 2015, 06:44
||- - ddd-ekb   по порядку 1 ничего не скрываю, разработкой всякой...   Oct 29 2015, 11:36
|- - Smen   Цитата(ddd-ekb @ Oct 29 2015, 10:03)...   Oct 29 2015, 08:54
- - ViKo   Думаю, ошибка в прерывании. Не могу вникать-вспоми...   Oct 29 2015, 12:05
- - ddd-ekb   Цитата(ViKo @ Oct 29 2015, 17:05) swapf -...   Oct 29 2015, 12:20
|- - ViKo   Цитата(ddd-ekb @ Oct 29 2015, 15:20)...   Oct 29 2015, 12:27
|- - ddd-ekb   Цитата(ViKo @ Oct 29 2015, 17:27) В прогр...   Oct 29 2015, 12:41
- - evc   ddd-ekb, слово "скрываете" я использовал...   Oct 29 2015, 12:41
- - ddd-ekb   Цитата(evc @ Oct 29 2015, 17:41) именно а...   Oct 29 2015, 13:03
- - evc   Цитата(ddd-ekb @ Oct 29 2015, 16:03)...   Oct 29 2015, 13:11
- - ddd-ekb   Цитата(evc @ Oct 29 2015, 18:11) из-за эт...   Oct 29 2015, 15:39
- - evc   Цитата(ddd-ekb @ Oct 29 2015, 19:39)...   Oct 29 2015, 16:28
- - ddd-ekb   Цитата(evc @ Oct 29 2015, 21:28) Нет, тол...   Oct 29 2015, 16:36


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.0143 секунд с 7
ELECTRONIX ©2004-2016