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

 
 
> датчик+мега8
Terapefft
сообщение Feb 5 2007, 10:13
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052



Доброго времени суток господа! smile.gif
Помогите пожалуста разобратся с такой проблемой. Есть оборудование, управляется мегой8, цикл начинается после того как размыкается индуктивный датчик, путем опускания ручки. Проблема заключается в том что, при первом размыкании все нормально срабатывает и цикл запускается, но потом когда ручку возвращаешь в исходное положение цикл опять запускается, что не есть гуд. Как сделать чтобы он после того как в исходное положение возвращаеш ручку не запускался?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
Wild007
сообщение Feb 5 2007, 10:34
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата
Помогите пожалуста разобратся с такой проблемой.

Как всегда -- кусок схемы и программы в студию!!! smile.gif smile.gif smile.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Feb 5 2007, 11:02
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052



датчик к контролеру я подключаю через резистор и диод, я так и раньше подключал такой же датчик, все нормально работает. В програме при инициализации разрешаю внешнее прерывание по int1
CLR RIN
LDI rin,1<<ISC10
OUT MCUCR,RIN
в п/п просто перехожу на метку М2:
cnt_int1:

push rin
in rin,sreg ; çàïîìíèòü ðåãèñòð ñîñòîÿíèÿ
push rin


rjmp M2
С этой метки у меня начинается рабочий цикл.

В конце цикла ухожу на метку start, где вновь разрешаю прерывание
start:
clr radr
sbr radr,1<<int1
out gicr,radr


ser ind ;
cbr reg_flgs,0b00010000 ;
stt2:
sbrs reg_flgs,4 ;
rjmp stt2 ;

ldi radr,dvig_0 ; îòêëþ÷èòü äâèãàòåëü
rcall Decod ;

rcall pnev_off ; Îòêëþ÷èì âñå ìåõàíèçìû
sei ;
stt1:
sbrs ind,PROG ; åñëè íàæàòà "ÏÐÎÃ"
rcall Obrab_key

пробовал в конце рабочего цикла запретить прерывание по int1, все равно срабатывает при втором замыкании
Go to the top of the page
 
+Quote Post
TriD
сообщение Feb 5 2007, 11:05
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 29-12-04
Пользователь №: 1 728



Вам нужно настроить прерывание либо по переднему, либо по заднему фронту управляющего импульса (см.стр.64 мануала). Сейчас у вас прерывание возникает и по переднему и по заднему фронту.
Go to the top of the page
 
+Quote Post
Wild007
сообщение Feb 5 2007, 11:11
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата(TriD @ Feb 5 2007, 10:05) *
Вам нужно настроить прерывание либо по переднему, либо по заднему фронту управляющего импульса (см.стр.64 мануала). Сейчас у вас прерывание возникает и по переднему и по заднему фронту.

А (ИМХО) лучше прерывание настроить по 0. Тогда прерывания не будет возникать по фронтам, т.к. тебя интересует открыта или закрыта дверца(ручка).


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 5 2007, 11:14
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



так оно все время будет возникать при определенном положении рычага. лучше уж по фронтам (если помех нет)


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Wild007
сообщение Feb 5 2007, 11:20
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672



Цитата(arttab @ Feb 5 2007, 10:14) *
так оно все время будет возникать при определенном положении рычага. лучше уж по фронтам (если помех нет)

Ну для управления такими ситуациями есть програмные "штучки", как запрет прерываний и т.д. smile.gif


--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
Go to the top of the page
 
+Quote Post
Terapefft
сообщение Feb 5 2007, 11:31
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 167
Регистрация: 14-06-06
Из: Рязань
Пользователь №: 18 052



сделал я по нарастающему фронту и все нормально заработало smile.gif)) (правда пока тока на стенде), пойду после обеда с оборудованием развлекатсяsmile.gif
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 5 2007, 15:47
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Terapefft @ Feb 5 2007, 12:31) *
сделал я по нарастающему фронту и все нормально заработало smile.gif)) (правда пока тока на стенде), пойду после обеда с оборудованием развлекатсяsmile.gif


Если вы станете осциллографом, то увидите выбросы. Как после переднего, так и после заднего фронта. Это может приводить к повторному "взводу" флага запроса на прерывание и, соответственно к обработке его. Я с таким столкнулся. Размер выбросов будет зависить от качества катушки, зазора скорости прошождения и т.д. Всегда будет вероятность возникновения в новой партии.
Чтобы этого избежать, можно уменьшить резистор подпорки, поставить небольшую емкостишку, ну и главное, - немного задержаться в процедуре обработки прерывания (время определить по осциллографу) и перед выходом из прерывания сбросить флаг фальшивого прерывания. Я таким образом добился стопроцентной работы.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:09
Рейтинг@Mail.ru


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