Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 24.03.2008, 14:34   #1
vas38
Member
 
Регистрация: 06.09.2007
Возраст: 53
Сообщений: 40
Вес репутации: 100/39
vas38 will become famous soon enoughvas38 will become famous soon enough
По умолчанию как отловить момент изменения сигнала PIC16F84

Подскажите пожалуста алгортим (ассемблер) как отловить момент изменения сигнала на одном из входов PORTA (PIC16F84a)
В программе идет периодический опрос сигналов с датчиков.
Надо отловить сам момент (факт) изменения сигнала с 0 в1 или наоборот, а не его уровень.
vas38 вне форума   Ответить с цитированием
Старый 24.03.2008, 14:40   #2
RY9C4N
Senior Member
 
Регистрация: 26.02.2007
Возраст: 50
Сообщений: 327
Вес репутации: 180/44
RY9C4N has a spectacular aura aboutRY9C4N has a spectacular aura about
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

Условие очевидно - был 0 стало 1
Стало быть нужно просто помнить предыдущее состояние порта (на момент предыдущего опроса) и проверять на вышеприведенное условие. Это если поллингом.
RY9C4N вне форума   Ответить с цитированием
Старый 24.03.2008, 14:47   #3
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 42
Сообщений: 2,610
Вес репутации: 2570/91
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

Есть специальное прерывание по изменению уровня на портах (RB4-RB7).
fantom вне форума   Ответить с цитированием
Старый 24.03.2008, 15:08   #4
vas38
Member
 
Регистрация: 06.09.2007
Возраст: 53
Сообщений: 40
Вес репутации: 100/39
vas38 will become famous soon enoughvas38 will become famous soon enough
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

для fantom
Про прерывание я с самого начала подумал.Но потом выяснил что прерывание можно настроить только на положительный или только на отрицательный фронт сигнала. А требуется ловить оба фронта
vas38 вне форума   Ответить с цитированием
Старый 24.03.2008, 15:10   #5
vas38
Member
 
Регистрация: 06.09.2007
Возраст: 53
Сообщений: 40
Вес репутации: 100/39
vas38 will become famous soon enoughvas38 will become famous soon enough
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

для RY9C4N
Именно по вашему пути я и пошел. Но не знаю как сохранить один бит PORTA
Созранить регистр легко а вот один бит не знаю как. Я вообще начинаю только
vas38 вне форума   Ответить с цитированием
Старый 24.03.2008, 15:36   #6
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 39
Сообщений: 3,249
Вес репутации: 3684/108
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

Цитата:
Сообщение от vas38 Посмотреть сообщение
для fantom
Про прерывание я с самого начала подумал.Но потом выяснил что прерывание можно настроить только на положительный или только на отрицательный фронт сигнала. А требуется ловить оба фронта
А в чем проблема? смотрим ножку, если на ней 0, то настраиваем прерывание по изменению из 0 в 1. В самом прерывании делаем такую же проверку и перестраиваем прерывание на нужный перепад.
IceS вне форума   Ответить с цитированием
Старый 24.03.2008, 15:39   #7
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 39
Сообщений: 3,249
Вес репутации: 3684/108
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

Цитата:
Сообщение от vas38 Посмотреть сообщение
для RY9C4N
Именно по вашему пути я и пошел. Но не знаю как сохранить один бит PORTA
Созранить регистр легко а вот один бит не знаю как. Я вообще начинаю только
А что мешает сохранить весь регистр PORTA?
Потом считываем сохраненный, XOR'им с новым значением и если в нужном битике 0 => изменения не было.
Если 1 => было изменение, надо запомнить новое состояние и выполнить обработку события.
IceS вне форума   Ответить с цитированием
Старый 24.03.2008, 15:40   #8
MBedder
Banned
 
Регистрация: 17.03.2008
Адрес: Москва
Сообщений: 222
Вес репутации: 202/0
MBedder has a spectacular aura aboutMBedder has a spectacular aura aboutMBedder has a spectacular aura about
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

Вообще-то, если в МК какая-либо функция уже реализована аппаратно, то повторять ее программно как минимум расточительно - это по поводу уже присутствующей функции Interrupt On Change на RB4..7, о которой тебе напомнил fantom. И вовсе не обязательно использовать именно Interrupt - есть ведь флаг RBIF, который ты можешь совершенно спокойно опрашивать и сбрасывать программно, не прибегая к прерыванию.

Но если уж приспичило изобретать велосипед, то делается это очень просто - в опросе порта делается XOR текущего состояния порта с предыдущим, а потом командой BTFSS делается проверка только нужного бита результата операции XOR
MBedder вне форума   Ответить с цитированием
Старый 24.03.2008, 15:43   #9
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 42
Сообщений: 2,610
Вес репутации: 2570/91
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

Цитата:
Сообщение от vas38 Посмотреть сообщение
для fantom
Про прерывание я с самого начала подумал.Но потом выяснил что прерывание можно настроить только на положительный или только на отрицательный фронт сигнала.
Неправда ваша. Внимательно читали даташит?
fantom вне форума   Ответить с цитированием
Старый 24.03.2008, 15:44   #10
MBedder
Banned
 
Регистрация: 17.03.2008
Адрес: Москва
Сообщений: 222
Вес репутации: 202/0
MBedder has a spectacular aura aboutMBedder has a spectacular aura aboutMBedder has a spectacular aura about
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

Цитата:
Про прерывание я с самого начала подумал.Но потом выяснил что прерывание можно настроить только на положительный или только на отрицательный фронт сигнала. А требуется ловить оба фронта
Могу ошибиться - PIC16F84A видел только в кошмарном сне, но вроде бы Interrupt On Change там именно по обоим фронтам сразу
MBedder вне форума   Ответить с цитированием
Старый 24.03.2008, 15:49   #11
killer258
Senior Member
 
Аватар для killer258
 
Регистрация: 30.12.2007
Адрес: Череповец
Возраст: 47
Сообщений: 1,206
Вес репутации: 588/54
killer258 is a name known to allkiller258 is a name known to allkiller258 is a name known to allkiller258 is a name known to allkiller258 is a name known to allkiller258 is a name known to all
Отправить сообщение для killer258 с помощью ICQ
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

Цитата:
Сообщение от vas38 Посмотреть сообщение
для fantom
Про прерывание я с самого начала подумал.Но потом выяснил что прерывание можно настроить только на положительный или только на отрицательный фронт сигнала. А требуется ловить оба фронта
это относилось к прерываниям по входу RB0/INT , там нужно назначать, по какому фронту.

А прерывания RB4..RB7 возникают просто по изменению на этих выводах,
так что ты и будешь ловить оба фронта . а в п/п обработки уже будешь определять, что там произошло- спад или наоборот. И на каком выводе.Если , конечно, для твоей задачи нужны разные действия при приходе положит и отрицат. фронта..
killer258 вне форума   Ответить с цитированием
Старый 24.03.2008, 15:52   #12
vas38
Member
 
Регистрация: 06.09.2007
Возраст: 53
Сообщений: 40
Вес репутации: 100/39
vas38 will become famous soon enoughvas38 will become famous soon enough
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

ОК.
Надо переварить всю инфу
не ожидал что будет так быстро
Всем большое спасибо за ответы.
vas38
vas38 вне форума   Ответить с цитированием
Старый 25.03.2008, 03:22   #13
fol
Senior Member
 
Аватар для fol
 
Регистрация: 04.05.2007
Возраст: 42
Сообщений: 267
Вес репутации: 264/44
fol is a jewel in the roughfol is a jewel in the roughfol is a jewel in the rough
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

[code]



ПРОЦЕДУРЫ ОБЕСПЕЧИВАЮТ КОНТРОЛЬ ВХОДА КАМНЯ И ПЕРЕХОД ИЛИ
ДРУГОЕ ДЕЙСТВИЕ ПРИ ИЗМЕНЕНИИ УРОВНЯ СИГНАЛА.
ПРОЦЕДУРЫ ИМЕЮТ ЗАЩИТУ ОТ ДРЕБЕЗГА

ЗАХОД ПО "CALL"



DETECT_FRONT:

;=========== РЕГИСТРАЦИЯ ПЕРЕХОДА ОТ 0 к 1 =================
;--- Будем здесь пока не произойдет переход от 0 к 1 --------
;--- Как только это произойдет вернемся от куда пришли по RETURN

CALL LOAD_TIME_DR ; ЗАГРУЗКА ТАЙМЕРА ЗАЩИТЫ ОТ ДРЕБЕЗГА

;----------- Проверка входа --------------------
A1:
BTFSS PortA,4 ; Если на RA4 низкий то по GOTO A2
GOTO A2 ; Если на RA4 высокий то по GOTO A1
CALL LOAD_TIME_DR ; ЗАГРУЗКА ТАЙМЕРА ЗАЩИТЫ ОТ ДРЕБЕЗГА
GOTO A1 ;
A2:
decfsz Sec_Dr,f
GOTO A1

;----------- Проверка входа --------------------
A3:
BTFSC PortA,4 ; Если на RA4 низкий то по GOTO A3
GOTO A4 ; Если на RA4 высокий то по GOTO A4
CALL LOAD_TIME_DR ; ЗАГРУЗКА ТАЙМЕРА ЗАЩИТЫ ОТ ДРЕБЕЗГА
GOTO A3 ;
A4:
decfsz Sec_Dr,f
GOTO A3

;------ Зафиксирован переход от 0 к 1 -----------

RETURN





DETECT_SPAD:

;=========== РЕГИСТРАЦИЯ ПЕРЕХОДА ОТ 1 к 0 =================
;--- Будем здесь пока не произойдет переход от 1 к 0 --------
;--- Как только это произойдет вернемся от куда пришли по RETURN

CALL LOAD_TIME_DR ; ЗАГРУЗКА ТАЙМЕРА ЗАЩИТЫ ОТ ДРЕБЕЗГА

;----------- Проверка входа --------------------
M1:
BTFSC PortA,4 ; Если на RA4 высокий то по GOTO M2
GOTO M2 ; Если на RA4 низкий то по GOTO M1
CALL LOAD_TIME_DR ; ЗАГРУЗКА ТАЙМЕРА ЗАЩИТЫ ОТ ДРЕБЕЗГА
GOTO M1 ;
M2:
decfsz Sec_Dr,f
GOTO M1

;----------- Проверка входа --------------------
M3:
BTFSS PortA,4 ; Если на RA4 высокий то по GOTO M3
GOTO M4 ; Если на RA4 низкий то по GOTO M4
CALL LOAD_TIME_DR ; ЗАГРУЗКА ТАЙМЕРА ЗАЩИТЫ ОТ ДРЕБЕЗГА
GOTO M3 ;
M4:
decfsz Sec_Dr,f
GOTO M3

;------ Зафиксирован переход от 1 к 0 -----------

RETURN










LOAD_TIME_DR:
;========= ЗАГРУЗКА ТАЙМЕРА ЗАЩИТЫ ОТ ДРЕБЕЗГА ==========
;--- При загрузке 5 время прохода (регистрации) ~ 25мкс -
movlw .5 ;
movwf Sec_Dr ; Загрузка защиты от дребезга
RETURN

[code]


Пардон за плохую читаемость, наверно надо СОКИесы в браузере включать чтоб правильно транслировались отступы, не хочу, дыть не лезла всякая фигня.
Процедуры простейшие, проверены.
Чтобы голова проги не торчала в этих процедурах вечно можно прогу направлять сюда с нужной цикличностью.

Удачи.
fol вне форума   Ответить с цитированием
Старый 25.03.2008, 03:29   #14
MBedder
Banned
 
Регистрация: 17.03.2008
Адрес: Москва
Сообщений: 222
Вес репутации: 202/0
MBedder has a spectacular aura aboutMBedder has a spectacular aura aboutMBedder has a spectacular aura about
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

Не "соокисы", а отредактируй второй тег, поставив там слеш - [/code]

Последний раз редактировалось MBedder; 25.03.2008 в 03:44.
MBedder вне форума   Ответить с цитированием
Старый 25.03.2008, 16:18   #15
vas38
Member
 
Регистрация: 06.09.2007
Возраст: 53
Сообщений: 40
Вес репутации: 100/39
vas38 will become famous soon enoughvas38 will become famous soon enough
По умолчанию Re: как отловить момент изменения сигнала PIC16F84

Ну вот вроде слепил что то.
Использовал команду XOR. В прерывания не полез. У меня тут и так сплошные прерывания (через TMR0 генерит ШИМ)
И вроде работает. А вот про дребезг как то не подумал сразу. Но слава богу у меня тут аппаратно это решено уже.
А вообще хорошая заготовочка на будущее спасибо fol.
И вообще всем спасибо. Не ожидал к чайнику такого отношения
Всем респект и удачи
vas38 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить момент поднятия телефоной трубки? Igor Общетехнические вопросы 11 24.03.2007 15:19


Часовой пояс GMT +3, время: 16:50.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot