Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 06.07.2010, 12:56  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Прерывания в прерываниях ATmega8

Кто подскажет как написать правильно.
Есть прерывание по переполнению таймера0 напрмер
interrupt [TIM0_OVF] void indy(void) фукция динамической индикации.
Есть три кнопки
Например такие
#define mode PIND.1//PIND.1 кнопка выбора режима
#define more PIND.0//PIND.0 кнопка больше
#define less PIND.2//PIND.2 кнопка меньше
Как сделать так чтоб при нажатии кнопки например "mode" наступало прерывание и соответственно выполнялась функция обработчик прерывания например void button (void) но приэтом динамическая индикация не останавливалась. Другими словами в процесе прерывания и выполнения функции работы с кнопками происходило еше прерывание и выполнение динамической индикации. Вобшем прерывание прерывания.
Как правильно это написать?
Реклама:
7Fantomas7 вне форума  
Непрочитано 06.07.2010, 13:19  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Можно сделать и то что вы просите. Для этого надо в прерывании более низкого порядка (обработчик прерывания от кнопки) просто разрешить прерывание.

Но в данном случае, это абсолютно бредовая идея. Задумайтесь сами - зачем?

Обработка кнопки - медленная операция. Сопоставимая с реакцией человека. То есть ничего плохого не произойдёт если кнопка будет обработана за 0.1 сек, что для процессора гигантский интервал.

Типовое решение - обработка кнопок опросом. Я бы сделал так. Создал бы одно прерывание, по регенерации изображения. Именно в этом прерывании, я бы заодно с регенерацией опрашивал клавиатуру и гасил дребезг.
SasaVitebsk вне форума  
Непрочитано 06.07.2010, 14:11  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

SasaVitebsk,
Цитата:
Обработка кнопки - медленная операция. Сопоставимая с реакцией человека. То есть ничего плохого не произойдёт если кнопка будет обработана за 0.1 сек, что для процессора гигантский интервал.
Ну так в том то и дело.
Гоняется в круговую по прерыванию динамическая индикация которая чтото показывает. Например прерывание по переполнению таймера0 вектор прерывания [7], обновляет динамичку. С этим понятно сделал просимулировал все работает.
Нажимается кнопка, в прмежутке между прерываниями таймера0 происходит прерывание по событию PIND.1==0 ну дальше там антидребезг 0,05сек. Присвоим прерыванию вектор [20]. И если в процесе прерывания с вектором [20] произойдет прерывание с вектором [7], а это должно произойти судя из литературы без всяких разрешений, а исходя из того что одно главнее другого.
Если не так то как то как сделать это
Цитата:
Для этого надо в прерывании более низкого порядка (обработчик прерывания от кнопки) просто разрешить прерывание.
То время выполнения прерывания с вектором [20] будет равно суме времен. Ну выполнится обработка кнопки не за 0.05 сек, а чуть дольше так бог с ней. Человек этого и не заметит. Динамическая индикация выполняется не намного то и чаще поэтому увеличение времени будет не намного то и больше.
Отсюда вопрос какправильно объявить прерывание по событию т.е. если кнопка нажата сделать прерывание с таким то вектором например [20]?
Будет ли это прерывание прервано прерываним с вектором [7]?
Цитата:
Типовое решение - обработка кнопок опросом. Я бы сделал так. Создал бы одно прерывание, по регенерации изображения.
Создано, работает, опробовано. Обработчик по переполнению таймера0 вектор [7].
Цитата:
Именно в этом прерывании, я бы заодно с регенерацией опрашивал клавиатуру и гасил дребезг.
Стоп, стоп, кнопок в действительности три это видно из первого поста. Режимов тоже три. Каждый режим имеет свое значение в интервале от 0 до 999 которое нужно видеть на экране. Прибавляем времена обработки антидребезга. При Вашем подходе если все смешать получится каша и динамичка тоже работать не будет.
А так нажали кнопку "выбор режима" остановилось все кроме динамички и делаем установки, чего наустанавливали видим на экране. Если кнопки не нажимаются 5сек вышли из обработчика прерываний кнопок продолжаем работу согласно новых установок.

Последний раз редактировалось 7Fantomas7; 06.07.2010 в 14:16.
7Fantomas7 вне форума  
Непрочитано 06.07.2010, 14:29  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

7Fantomas7, а кто вам мешает сделать динамическую индикацию в прерывании, а опрос кнопок в рабочем цикле? Чтоб проще в понимании было.

Индикация в прерывании по таймеру - для основной программы - как бы и не существует вовсе. Идет себе и идет, никому не мешает (ну если корректно сохранять все что надо).

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

По моему, у вас пока размыто само понятие прерывания. То, что вы, допустим, ждете полсекунды для дребезга - не значит, что в этом цикле ожидания не будет прерывания по таймеру.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Непрочитано 06.07.2010, 14:33  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Сообщение от SasaVitebsk Посмотреть сообщение
Создал бы одно прерывание, по регенерации изображения. Именно в этом прерывании, я бы заодно с регенерацией опрашивал клавиатуру и гасил дребезг.
Именно это я ему и втолковывал, только в другой ветке.
Halex07 вне форума  
Непрочитано 06.07.2010, 15:16  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Цитата:
а кто вам мешает сделать динамическую индикацию в прерывании,
Так и сделана
Писал выше
Цитата:
Гоняется в круговую по прерыванию динамическая индикация которая чтото показывает. Например прерывание по переполнению таймера0 вектор прерывания [7], обновляет динамичку. С этим понятно сделал просимулировал все работает.
Цитата:
а опрос кнопок в рабочем цикле? Чтоб проще в понимании было.
Так и пытался делать, был справедливо раскритикован Halex07, причину критики нашел, начал переделывать.
Halex07,
Цитата:
Не, это работать не будет. Заведите один из таймеров, загоните опрос кнопок в прерывание и через какую нибудь переменную контролируйте свой антидребезг.
Вы советовали это. Это я пытаюсь сделать. Только прерывание не по таймеру, а по изменению сигнала на пине который опрашивается в маине. Другими словами если состояние пина изменилось то делаем прерывание и выполняем обработчик прерывания функцию работы с кнопками. При этом не мешаем динамической индикации которая в своем прерывании.
Цитата:
То, что вы, допустим, ждете полсекунды для дребезга - не значит, что в этом цикле ожидания не будет прерывания по таймеру.
Так и делал, был раскритикован Halex07, ждал антидребезг через delay. В принципе согласен по книжке так делать не советуют. Решил сделать через прерывание и таймер.
7Fantomas7 вне форума  
Непрочитано 06.07.2010, 15:31  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Сообщение от 7Fantomas7 Посмотреть сообщение
Только прерывание не по таймеру, а по изменению сигнала на пине который опрашивается в маине. Другими словами если состояние пина изменилось то делаем прерывание
Нет, у вас все же неверное представление о прерывании. Прерывание не делают, оно само возникает.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Непрочитано 06.07.2010, 15:36  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Цитата:
А прерывание из прерывания в АВРках просто так не получится, надо чуток шаманить,
Ну шож Вы меня не понимаете то, ну шо мне еще както сказать
Не прерывание из прерывания. А есть главное прерывание и второстепеное прерывание. Второстепенное прерывание включается когда нет главного прерывания по событию и прерывается главным прерыванием когда таковое случается. А потом продолжает выполняться.
7Fantomas7 вне форума  
Непрочитано 06.07.2010, 15:38  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Цитата:
Прерывание не делают, оно само возникает.
Хорошо как сделать так чтоб оно возникло когда состояние пина изменилось с 1 на 0.
7Fantomas7 вне форума  
Непрочитано 06.07.2010, 15:41  
mike7815
Прописка
 
Регистрация: 16.03.2005
Сообщений: 244
Сказал спасибо: 78
Сказали Спасибо 85 раз(а) в 55 сообщении(ях)
mike7815 на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

а что мешает сделать все в одном прерывании по таймеру и индикацию и опрос кнопок и антидребезг. еще и отсчет "точного" времени и еще кучу всего в одном прерывании. даже функцию delay?
mike7815 вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прерывания ATMega8 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 21 03.07.2010 10:41
ATMega8 VS USB SkyProc Микроконтроллеры, АЦП, память и т.д 28 28.04.2010 17:01
Вложенные прерывания HITECH PIC16 picavr Микроконтроллеры, АЦП, память и т.д 17 07.03.2010 17:39
Вход в прерывания для PIC микроконтроллеров dimmich Микроконтроллеры, АЦП, память и т.д 4 06.12.2009 17:17
Котроллер дисплея на Atmega8 kosant Микроконтроллеры, АЦП, память и т.д 24 30.11.2009 20:57


Часовой пояс GMT +4, время: 14:33.


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