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

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

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

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

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

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

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

 
Опции темы

Прерывания в прерываниях ATmega8

Непрочитано 06.07.2010, 12:56  
7Fantomas7
Почётный гражданин KAZUS.RUN
 
Регистрация: 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.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

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

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

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

Типовое решение - обработка кнопок опросом. Я бы сделал так. Создал бы одно прерывание, по регенерации изображения. Именно в этом прерывании, я бы заодно с регенерацией опрашивал клавиатуру и гасил дребезг.
SasaVitebsk вне форума  
Непрочитано 06.07.2010, 14:11  
7Fantomas7
Почётный гражданин KAZUS.RUN
 
Регистрация: 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,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

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

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

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

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

Сообщение от SasaVitebsk Посмотреть сообщение
Создал бы одно прерывание, по регенерации изображения. Именно в этом прерывании, я бы заодно с регенерацией опрашивал клавиатуру и гасил дребезг.
Именно это я ему и втолковывал, только в другой ветке.
Halex07 вне форума  
Непрочитано 06.07.2010, 15:16  
7Fantomas7
Почётный гражданин KAZUS.RUN
 
Регистрация: 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,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

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

Цитата:
А прерывание из прерывания в АВРках просто так не получится, надо чуток шаманить,
Ну шож Вы меня не понимаете то, ну шо мне еще както сказать
Не прерывание из прерывания. А есть главное прерывание и второстепеное прерывание. Второстепенное прерывание включается когда нет главного прерывания по событию и прерывается главным прерыванием когда таковое случается. А потом продолжает выполняться.
7Fantomas7 вне форума  
Непрочитано 06.07.2010, 15:38  
7Fantomas7
Почётный гражданин KAZUS.RUN
 
Регистрация: 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, время: 21:05.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.