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

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

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

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

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

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

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

 
Опции темы
Непрочитано 06.07.2010, 18:30  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Сообщение от 7Fantomas7 Посмотреть сообщение
SasaVitebsk,
Стоп, стоп, кнопок в действительности три это видно из первого поста. Режимов тоже три. Каждый режим имеет свое значение в интервале от 0 до 999 которое нужно видеть на экране. Прибавляем времена обработки антидребезга. При Вашем подходе если все смешать получится каша и динамичка тоже работать не будет.
А так нажали кнопку "выбор режима" остановилось все кроме динамички и делаем установки, чего наустанавливали видим на экране. Если кнопки не нажимаются 5сек вышли из обработчика прерываний кнопок продолжаем работу согласно новых установок.
Вы путаете тёплое с мягким. Каша - у вас в голове. Попытайтесь разделить задачи. И всё изменится. И, главное, отладка будет в 10 раз легче.

Итак:
1) В прерывании (единственном) у вас выводится изображение. При чём верным решением будет просто выводить экранную область. То есть прерывание не знает о существовании каких-то там режимов и прочего. Оно просто выводит заранее подготовленную информацию из экранной области. Соответственно вы сможете это использовать и в другой программе.
2) Там же вы вводите значение кнопок. Нет разницы сколько их, и какое назначение они несут. Вы просто их опрашиваете, гасите дребезг и обозначаете в соответствующих переменных. Опять же можно использовать многократно.
3) В голове анализируете переменные нажатых клавиш и выводите нужное вам изображение в экранную область.
Реклама:
SasaVitebsk вне форума  
Непрочитано 06.07.2010, 19:19  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Сообщение от baiderin Посмотреть сообщение
Кнопка LESS подключена к пину, который может вызывать внешнее прерывание INT0.
А вот этого делать не надо - INT0 имеет более высокий приоритет, чем прерывания таймеров.
И еще, судя по первоначальным наброскам здесь:
https://kazus.ru/forums/showthread.php?t=5361&page=13
сей девайс будет в конечном итоге хохометром. Следовательно, будет запущен еще один таймер. Если измеряемые частоты будут не очень крутые, я бы порекомендовал Фантомасу использовать TMR1 по захвату, замерять период или несколько, усреднять и потом вычислять частоту.
Halex07 вне форума  
Непрочитано 06.07.2010, 19:36  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

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

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

Ладно всем спасибо за соучастие и помощь.
Halex07,
Спасибо за помощь очень подозреваю что Вы как всегда окажетесь правы
baiderin,
Спасибо
Ваше решение честно говоря понравилось скорее всего так и попробую сделать.
Про флаги тоже помню их и использую.
nml,
Спасибо
На счет дребезга вразумили
SasaVitebsk,
Цитата:
Для этого надо в прерывании более низкого порядка (обработчик прерывания от кнопки) просто разрешить прерывание.
По правде говоря так и не понял как это реализовать

Я по правде говоря делаю может и не правильно.
Просто логика написания такая. Я видел как это делает один мудрец до которого мне наверное как до Пекина рачки.
Halex07, меня немножко критиковал за такой стиль но он мне всеравно нравится.
Пишет этот мудрец отдельные функции в не main. Например динамическая индикация отдельно, кнопки отдельно, индикация режимов отдельно, таймер 1 с со всеми обработками по ICP1 отдельно, управление реле отдельно.
А в main крутит те или другие функции в круговую или обрабатывает прерывания. Таким образом если необходимо чтото изменить то изменения делаются в отдельной функции практически никак не затрагивая остальных. Вобшем примерно так может объяснил и не правильно но смысл примерно такой.

Последний раз редактировалось 7Fantomas7; 06.07.2010 в 22:51.
7Fantomas7 вне форума  
Непрочитано 07.07.2010, 10:12  
Someone
Гражданин KAZUS.RU
 
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
Someone на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Сообщение от 7Fantomas7 Посмотреть сообщение
Пишет этот мудрец отдельные функции в не main. Например динамическая индикация отдельно, кнопки отдельно, индикация режимов отдельно, таймер 1 с со всеми обработками по ICP1 отдельно, управление реле отдельно.
А в main крутит те или другие функции в круговую или обрабатывает прерывания. Таким образом если необходимо чтото изменить то изменения делаются в отдельной функции практически никак не затрагивая остальных. Вобшем примерно так может объяснил и не правильно но смысл примерно такой.
Ну и правильно делает. Однако "в не маин" вовсе не значит, что в прерываниях. Скорее всего у него проекты состоят из нескольких файлов, по функциональному смыслу так сказать, которые просто в маин собираются вместе. Тогда при необходимости изменения какой-то функции меняется только один файл, а остальные неизменные кочуют из проекта в проект. А прерывания должны быть как можно короче, и их должно быть не больше, чем действительно необходимо, как выше уже отмечалось. Чем короче прерывание, тем меньше компилятору надо сохранять/восстанавливать контекста, снижается вероятность пересечения прерываний, возрастает скорость работы программы, а соответственно увеличивается скорость реакции программы на внешние воздействия, снижается вероятность возникновения ошибок.

По твоей-же проблеме - тебе нужно только прерывание для индикации. В нем и опрос кнопок делать. Никаких delay для подавления дребезга. И железо твое, ранее рассчитаное на прерывание, никаких изменений не требует для такого метода. Halex07 в примере показал, как это правильно делать. Упрощенно конечно, но тебе важно понять принцип, потому что такой подход позволяет добавлять широкий функционал кнопкам. Например надо задать скажем пемпературу в диапазоне 0-800. Нажимаешь и удерживаешь кнопку "+". Вначале кнопка срабатывает раз в секунду. Если удерживаешь ее 5 секунд, кнопка начинает срабатывать раз в пол секунды, еще пять секунд - и кнопка срабатывает раз в четверть секунды и т.д. А отпустишь - кнопку скорость сбрасывается, и при последующем нажатии весь цикл повторится. Или сделать "запираемую" кнопку, срабатывающую при нажатии/отпускании. Или сделать кнопку, срабатывающую через 5 нажатий. Словом много чего можно придумать, при этом будет меняться только программа, а железо будет неизменным.
Someone вне форума  
Сказали "Спасибо" Someone
7Fantomas7 (07.07.2010)
 

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

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

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, время: 18:38.


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