Например TDA7294

Форум РадиоКот • Просмотр темы - pic12f675 не работают interrupt-on-change
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 08:27:53

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Сб авг 12, 2017 18:39:49 
Родился

Зарегистрирован: Пн июл 17, 2017 15:51:45
Сообщений: 9
Рейтинг сообщения: 0
Привет!

на вход GP1 МК_2 подаю 0 либо долго (120мк), либо недолго(13мк).
этот ноль до мк доходит и изменяет напряжение на его ноге (запечетлено на рис.1)
Далее по плану срабатывает прерывание по изменению уровня на ноге, в зависимости от фронта в иср коде либо запускается таймер, либо читается с него значение (фронт определяем по рег. START_FLAG)
Далее с этим числом другие плюхи всякие творятся(не об них речь)..

Но прерывание не срабатывает => в иср код не заходит => не знаем сколько натикало => всяких плюх не будет и всё насмарку
Вроде все флаги очистила, разрешения дала.

Подскажите, в чём дело
Изображение
рис.1


Код:
 list   p=12f675
     #include <p12f675.inc>
    __CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDTE_OFF & _INTRC_OSC_NOCLKOUT
   
W      equ          0
F      equ          1
varT      equ          20h      
varTMR0_1   equ          21h      
W_temp      equ          22h
STATUS_temp   equ          23h
TMR0_time   equ          24h
time_on_TMR0   equ          25h   
START_FLAG   equ          26h
   
   
      org 0x0000
      goto INIT
      
      
;...................................................
;...................................................
      org 0x0004
      
      movwf       W_temp          ;saving key register values
      swapf       STATUS,W
      clrf        STATUS
      movwf       STATUS_temp
                  
                  
      ;interrupt actions
      
      bcf       STATUS,RP0
      btfsc       GPIO,1      ;LOW lvl on GPIO.1
      goto       What_time_on_TMR0   ;NO   => HIGH lvl => it was LOW lvl => end of pressed
                  ;YES  => it was HIGH lvl => START of pressed
      clrf       TMR0
      clrf       START_FLAG
      goto       escape
      
      
What_time_on_TMR0      
      MOVF       TMR0,W
      MOVWF       time_on_TMR0
      clrf       TMR0
      bcf       INTCON,GPIF
      
      MOVWF       START_FLAG
      
      goto       escape
      
               
escape      swapf       STATUS_temp,W 
      movwf       STATUS
      swapf       W_temp,F
      swapf       W_temp,W
      retfie          
         
      
;...................................................
;...................................................   
      
;===INIT=========
INIT   
   
   bsf   STATUS,RP0
   MOVLW   b'11111111'
   MOVWF   TRISIO      ;all ports as inputs
   
   ;==SET GP<5:0> to Digital IO
   bcf   STATUS,RP0;BANK 0
   clrf   GPIO      ;LOW lvl http://avr.ru/beginer/understand/1wire ????????..... so to press data bus DO GPIO.1 as OUTPUT!!!
   MOVLW   H'1f'      ;Set GP<5:0> to
   MOVWF   CMCON          ;digital IO
   bsf   GPIO,0
   
   bsf   STATUS,RP0;BANK 1
   CLRF   ANSEL      ;Digital I/O
   bsf   STATUS,RP0
   MOVLW   b'11111110'
   MOVWF   TRISIO      ;all ports as inputs.  GP0 as output
   bsf   TRISIO,0
   ;==
   
   
   bsf       INTCON,T0IF
   bcf       INTCON,T0IE
   bcf       INTCON,GIE
   
   ;
   banksel   OPTION_REG
   MOVLW   b'11010000'   ; ~, ~, CLKOUT, ~, TMR0, prescaller 2
   MOVWF   OPTION_REG
   
   BCF   STATUS,RP0

   clrf   START_FLAG
   
    ;==Initializing CHANGE INTERRUPT
   ;enable   change interrupt on GPIO.1
   MOVLW       b'00000010'
   bsf       STATUS,RP0
   MOVWF       IOC
   ;==clr   change interrupt flug
   bcf       INTCON,GPIF
   ;==enable Change interrut
   bsf       INTCON,GPIE
   
    ;====Initializing CHANGE INTERRUPT END
   
   
      goto main
;==========
   
      
      
;============      
main       bcf      STATUS,RP0                     
       MOVF   GPIO,w       ;reading GPIO
wait_interrupt
       ;MOVF   GPIO,w
       MOVF   START_FLAG,F
       btfsc   STATUS,3    ;Z=0? flag <> 0 ?
       goto wait_interrupt       ;Z=1, flag   = 0
                ;Z=0, flag   <> 0
      
       MOVF    time_on_TMR0,W
       MOVWF   EEDATA
       MOVLW   00h
       MOVWF   EEADR
      
      
       BSF       STATUS,RP0       ;Bank 1
       BSF       EECON1,WREN       ;Enable write
       BCF       INTCON,GIE       ;Disable INTs
       MOVLW   55h          ;Unlock write
       MOVWF   EECON2       ;
       MOVLW   H'AA'          ;
       MOVWF   EECON2       ;
       BSF       EECON1,WR       ;Start the write
       BSF       INTCON,GIE       ;Enable INTS
      
       goto main
      
      
   end




Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Вс авг 13, 2017 00:46:39 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 17
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 124
Откуда: не с Уфы
Рейтинг сообщения: 0
При появлении в main прерывания запрещены (GIE).
Читать gpio в коде не надо, поскольку ожидаете прерывания по изменению на ноге.
Из wait_interrupt выбраться будет не просто, поскольку STATUS,3 всегда будет "1".
Копируете в EEDATA без смены банка.
В прерываниях если GPIO,1=0 выходите без очистки флага источника (GPIF)

И хорошо подумайте над алгоритмом записи в eeprom, с таким подходом износить его можно за пару минут.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Вс авг 13, 2017 10:38:02 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
И еще один момент:
Цитата:
The user, in the Interrupt Service Routine, can clear the interrupt in the following manner:
a) Any read or write of GPIO. This will end the mismatch condition.
b) Clear the flag bit GPIF.
A mismatch condition will continue to set flag bit GPIF. Reading GPIO will end the mismatch condition and allow flag bit GPIF to be cleared.

Так что просто bcf INTCON, GPIF не пройдет.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Вс авг 13, 2017 11:09:08 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 17
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 124
Откуда: не с Уфы
Рейтинг сообщения: 0
Zhuk72
Мне кажется этого "btfsc GPIO,1" достаточно, чтобы покончить с мисматч кондишн.

Думаю в данном случае ещё можно напомнить тс про дребезг контактов.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Вс авг 13, 2017 13:29:15 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
Это еще под вопросом.
А вот movf GPIO, f и последующий bcf INTCOM, GPIF точно сработают.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Вт авг 22, 2017 14:49:39 
Родился

Зарегистрирован: Пн июл 17, 2017 15:51:45
Сообщений: 9
Рейтинг сообщения: 0
[Родерик и все остальные,

Спасибо за ответ!
Прошу прощения за позднюю реакцию -- нет возможности запротеусить и вообще подойти к компу сейчас. В близжайшую неделю все рекомендации проверю и отпишу о результатах!

Из wait_interrupt выбраться будет не просто, поскольку STATUS,3 всегда будет "1".


Почему будет всегда 1?
В прерывании мы в STSRT_FLAG мы копируем число не ноль.
В wait_interupt мы проверяем, равен ли нулю Z при вставке регистра в самое себя. Или не так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Вт авг 22, 2017 17:34:03 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 17
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Сообщений: 124
Откуда: не с Уфы
Рейтинг сообщения: 0
...
Почему будет всегда 1?
...

Потому что это _PD
Z - это 2-ой бит


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Ср авг 23, 2017 06:53:03 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 168
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1231
Откуда: Баку
Рейтинг сообщения: 0
Поэтому всегда нужно оперировать именами битов, а не их позицией. Так и с программой разбираться проще, и не ошибёшься.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y