|
датчик+мега8 |
|
|
|
 |
Ответов
(1 - 8)
|
Feb 5 2007, 11:02
|

Частый гость
 
Группа: Свой
Сообщений: 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, все равно срабатывает при втором замыкании
|
|
|
|
|
Feb 5 2007, 11:11
|

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

|
Цитата(TriD @ Feb 5 2007, 10:05)  Вам нужно настроить прерывание либо по переднему, либо по заднему фронту управляющего импульса (см.стр.64 мануала). Сейчас у вас прерывание возникает и по переднему и по заднему фронту. А (ИМХО) лучше прерывание настроить по 0. Тогда прерывания не будет возникать по фронтам, т.к. тебя интересует открыта или закрыта дверца(ручка).
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Feb 5 2007, 15:47
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Terapefft @ Feb 5 2007, 12:31)  сделал я по нарастающему фронту и все нормально заработало  )) (правда пока тока на стенде), пойду после обеда с оборудованием развлекатся  Если вы станете осциллографом, то увидите выбросы. Как после переднего, так и после заднего фронта. Это может приводить к повторному "взводу" флага запроса на прерывание и, соответственно к обработке его. Я с таким столкнулся. Размер выбросов будет зависить от качества катушки, зазора скорости прошождения и т.д. Всегда будет вероятность возникновения в новой партии. Чтобы этого избежать, можно уменьшить резистор подпорки, поставить небольшую емкостишку, ну и главное, - немного задержаться в процедуре обработки прерывания (время определить по осциллографу) и перед выходом из прерывания сбросить флаг фальшивого прерывания. Я таким образом добился стопроцентной работы.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|