Страница 1 из 1

Переделка Microchip-овского частотомера.

Добавлено: Вс июн 30, 2013 19:25:00
dr.doc
У Microchip в AN592 описан пример создания частотомера с использованием таймера TMR0 и предделителя. Так вот, собственно, в чем суть проблемы: вместо программной задержки попробовал использовать задержку от таймера TMR1. В Proteus, PIC Simulator IDE и MPLab SIM работает на ура, по разработанному алгоритму. Но! В железе - полная лажа. Прошивка с программной задержкой работает в железе правильно, т.е. на формирователь грешить не могу.
Для чего мне эти проблемы? А все просто - используя в прерывании по переполнению таймера TMR0 регистр, я получаю один временной измерительный интервал и одну погрешность во всем диапазоне измерений.
Участок кода с прерываниями
Спойлер;-----------------------------
; Прерывания
;-----------------------------
org 0x004

movwf w_temp
swapf STATUS,W
movwf s_temp

; Проверим от чего произошло прерывание

btfsc PIR1,TMR1IF
goto No_inc_Count
; Прерывание от переполнения TMR0
inc_Count ; Добавим 1 в случае одновременного протекания
; прерываний
bcf PIR1,TMR1IF ; Сбросим признак прерывания от TMR1
bcf INTCON,T0IF ; Сбросим признак прерывания от TMR0
incf Counter2,F
swapf s_temp,W
movfw STATUS
movfw w_temp
retfie
; Прерывание от переполнения TMR1
No_inc_Count
nop
nop
nop
;nop
banksel TRISA
bcf TRISB,4 ; запретим счет.
banksel PORTA

bsf _END_
btfsc INTCON,T0IF ; Если произошло прерывание от TMR0
goto inc_Count
bcf PIR1,TMR1IF ; Сбросим признак прерывания от TMR1

swapf s_temp,W
movfw STATUS
movfw w_temp
retfie
Может кто сталкивался с подобным?
P.S. А как в Atmel контроллерах выполняются прерывания (в какой последовательности)?

Re: Переделка Microchip-овского частотомера.

Добавлено: Вс июн 30, 2013 19:33:16
Catcatcat
Думаю у тебя может быть такая ситуация, что ты не сможешь бит прерывания от таймера ТМР1 сбросить.

Re: Переделка Microchip-овского частотомера.

Добавлено: Вс июн 30, 2013 19:38:19
dr.doc
Почему? Что этому мешает? В теле основной программы мы находимся в BANK0 и проверяем флаг _END_. Т.е. исключен вход в прерывания в другом банке. А с такой ситуацией я уже сталкивался (вход в прерывания в 1-м банке).

Re: Переделка Microchip-овского частотомера.

Добавлено: Вс июн 30, 2013 20:48:20
dr.doc
Полагаю что все читают только "Непрочитанные сообщения"?

Re: Переделка Microchip-овского частотомера.

Добавлено: Пн июл 01, 2013 12:39:17
dr.doc
Всем спасибо, тема закрыта, проблема решена. Причина была чисто аппаратной - возбудился формирователь импульсов. Именно он и гнал на вход частотомера не фронты, а пачки импульсов на переходе. Частота - сотни МГц. При отсутствии сигнала этот уровень не превышал 100 мВ, поэтому мной и игнорировался. А зря.