|
|
  |
tiny2313 & mega8, посоветуйте плз |
|
|
|
Dec 14 2006, 15:36
|

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

|
Ну не знаю. Вот стоит (возле меня  )устройство работающее по примерно такому же принципу: -- включил двигатель; -- разрешил прерывания по INT; -- пришёл сигнал с фотодатчика (прерывания по 0); -- выставил флаг датчика; -- запретил прерывания по INT; -- вышел в главный цикл: -- обработал флаг - выключил двигатель; И всё жужжит без проблем. Давай ещё раз текст программы буду смотреть
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Dec 14 2006, 15:59
|

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

|
я попробовал сравнивать например с "20" - эффект такой же как и с "255", включается и тут же выключается, вот исходник
Прикрепленные файлы
inddat.txt ( 69.73 килобайт )
Кол-во скачиваний: 82
|
|
|
|
|
Dec 15 2006, 09:31
|

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

|
Я немного "модернизировал" твою програму для проверки, как работает INT1, в отладчике STUDIOAVR. Подсчет колчеств входа в п\п работает правильно. Прерывание по спадающему фронту -- тоже. Появление флага, в отсутствие разрешения прерывания, как я и говорил. Все работает "как доктор пропсал"  . Можешь погонять сам, я там коментарии оставил.
Прикрепленные файлы
11.txt ( 70.92 килобайт )
Кол-во скачиваний: 74
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Dec 15 2006, 11:57
|

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

|
Я бы сделал так -- (пишу алгоритм код напишешь сам): -- когда надо включать двигатель выставляешь флаг; -- в главном цикле проверяешь этот флаг ; -- по флагу уходишь на п\п включения двигателя в которой (не изменять последователность!) : ---- снимаешь флаг ; ---- включаешь двигатель; ---- разрешаешь прерывания; ---- выходишь из п\п; Ну а обработка прерывания у тебя работает. Удачи!
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Dec 15 2006, 13:46
|

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

|
Я же написал, что ТОЛЬКО: Цитата -- когда надо включать двигатель выставляешь флаг; А он у тебя постоянно сбрасывается Код cbr reg_flgs,0b00000001; в главном цикле и прерывание постоянно включается. Ты же видел в моей "модернизации": Код clr radr sbr radr,1<<int1 out gicr,radr ldi radr,doza_1; дозатор на всасывание rcall decod start123: rjmp start123 я разрешил прерывания, включил двигатель и больше прерывания не включаю. да и алгоритм Цитата ---- снимаешь флаг ; ---- включаешь двигатель; ---- разрешаешь прерывания; ---- выходишь из п\п; надо изменить ---- снимаешь флаг ; ---- включаешь двигатель; ---- сбросить "лишний" флаг прерывания;---- разрешаешь прерывания; ---- выходишь из п\п; я писал, а меня отвлекли
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Dec 15 2006, 16:00
|

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

|
Цитата(Terapefft @ Dec 15 2006, 13:59)  так мне же и надо включать насос только в главном цикле, а выключатся он должен пока главный цикл не закончился. Насос включается после каких-то действий оператора машины? Или гланый цикл растянут по времени на все действия машины и повторение цикла это 30-40 минут  ? Цитата как понять сбросить "лишний" флаг? Цитата Может возникать ситуация, когда ты разрешаешь прерывание, а флаг в GIFR (INTF1) уже висит и сразу происходит прерывание и останавливается двигатель, поэтому можно, перед "включением" прерывания, прочитать регистр флагов и записать его обратно (сброс флагов производится ЗАПИСЬЮ 1 в соответствующий бит), и если бит установлен он "сам себя" сбросит . Это и есть"лишний" флаг
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Dec 15 2006, 16:13
|

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

|
Работа автомата такова: после выбора всех необходимых параметров, нажимаешь кнопку "пуск", и начинается, сошлись продольные, поперечные губки, началась заварка, включился насос, налился литр, разошлись губки и насос отключился. Вот такой цикл в общих чертах. А сбросить лишний флаг таким образом : in rin,gifr out gifr,rin
|
|
|
|
|
Dec 15 2006, 16:27
|

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

|
Цитата(Terapefft @ Dec 15 2006, 15:13)  Вот такой цикл в общих чертах. И сколько "такой" цикл длится, в смысле по времени? Цитата А сбросить лишний флаг таким образом : in rin,gifr out gifr,rin Да.
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
Dec 15 2006, 17:16
|

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

|
Цитата(Terapefft @ Dec 15 2006, 15:44)  примерно около 5 секунд. Пробовал я и лишний флаг сбрасывать, все равно нифига не работает... Ты сам понимаешь, что такой длинный цикл отладить в Студии практически нереально (особенно постороннему человеку  ). Может проблема возникать ещё и в том, что в: Код прерывания от INT1 используется регистр radr , но он не прячется в стек. Попробуй  . А лишнй флаг надо сбрасывать для правильного подсчета количества "пребываний" в подпрограмме по прерыванию
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|