Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
06.07.2010, 18:30
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Прерывания в прерываниях ATmega8
Сообщение от 7Fantomas7
|
SasaVitebsk,
Стоп, стоп, кнопок в действительности три это видно из первого поста. Режимов тоже три. Каждый режим имеет свое значение в интервале от 0 до 999 которое нужно видеть на экране. Прибавляем времена обработки антидребезга. При Вашем подходе если все смешать получится каша и динамичка тоже работать не будет.
А так нажали кнопку "выбор режима" остановилось все кроме динамички и делаем установки, чего наустанавливали видим на экране. Если кнопки не нажимаются 5сек вышли из обработчика прерываний кнопок продолжаем работу согласно новых установок.
|
Вы путаете тёплое с мягким. Каша - у вас в голове. Попытайтесь разделить задачи. И всё изменится. И, главное, отладка будет в 10 раз легче.
Итак:
1) В прерывании (единственном) у вас выводится изображение. При чём верным решением будет просто выводить экранную область. То есть прерывание не знает о существовании каких-то там режимов и прочего. Оно просто выводит заранее подготовленную информацию из экранной области. Соответственно вы сможете это использовать и в другой программе.
2) Там же вы вводите значение кнопок. Нет разницы сколько их, и какое назначение они несут. Вы просто их опрашиваете, гасите дребезг и обозначаете в соответствующих переменных. Опять же можно использовать многократно.
3) В голове анализируете переменные нажатых клавиш и выводите нужное вам изображение в экранную область.
|
|
|
|
06.07.2010, 19:19
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
Re: Прерывания в прерываниях ATmega8
Сообщение от baiderin
|
Кнопка LESS подключена к пину, который может вызывать внешнее прерывание INT0.
|
А вот этого делать не надо - INT0 имеет более высокий приоритет, чем прерывания таймеров.
И еще, судя по первоначальным наброскам здесь:
https://kazus.ru/forums/showthread.php?t=5361&page=13
сей девайс будет в конечном итоге хохометром. Следовательно, будет запущен еще один таймер. Если измеряемые частоты будут не очень крутые, я бы порекомендовал Фантомасу использовать TMR1 по захвату, замерять период или несколько, усреднять и потом вычислять частоту.
|
|
|
|
06.07.2010, 19:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: Прерывания в прерываниях ATmega8
Автор настаивает на использовании прерываний и только. Похоже, он нехочет менять готовую разводку. Вот Я и посоветовал использовать доступное прерывание от этого пина.
|
|
|
|
06.07.2010, 21:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Прерывания в прерываниях ATmega8
Halex07,
Цитата:
|
я бы порекомендовал Фантомасу использовать TMR1 по захвату, замерять период или несколько, усреднять и потом вычислять частоту.
|
Я никогда не говорил что собираюсь делать по другому. Halex07 вы же проект виделели там же все понятно. Я так и собираюсь сделать.
|
|
|
|
06.07.2010, 22:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Прерывания в прерываниях ATmega8
Ладно всем спасибо за соучастие и помощь.
Halex07,
Спасибо за помощь очень подозреваю что Вы как всегда окажетесь правы
baiderin,
Спасибо
Ваше решение честно говоря понравилось скорее всего так и попробую сделать.
Про флаги тоже помню их и использую.
nml,
Спасибо
На счет дребезга вразумили
SasaVitebsk,
Цитата:
|
Для этого надо в прерывании более низкого порядка (обработчик прерывания от кнопки) просто разрешить прерывание.
|
По правде говоря так и не понял как это реализовать
Я по правде говоря делаю может и не правильно.
Просто логика написания такая. Я видел как это делает один мудрец до которого мне наверное как до Пекина рачки.
Halex07, меня немножко критиковал за такой стиль но он мне всеравно нравится.
Пишет этот мудрец отдельные функции в не main. Например динамическая индикация отдельно, кнопки отдельно, индикация режимов отдельно, таймер 1 с со всеми обработками по ICP1 отдельно, управление реле отдельно.
А в main крутит те или другие функции в круговую или обрабатывает прерывания. Таким образом если необходимо чтото изменить то изменения делаются в отдельной функции практически никак не затрагивая остальных. Вобшем примерно так может объяснил и не правильно но смысл примерно такой.
Последний раз редактировалось 7Fantomas7; 06.07.2010 в 22:51.
|
|
|
|
07.07.2010, 10:12
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: Прерывания в прерываниях ATmega8
Сообщение от 7Fantomas7
|
Пишет этот мудрец отдельные функции в не main. Например динамическая индикация отдельно, кнопки отдельно, индикация режимов отдельно, таймер 1 с со всеми обработками по ICP1 отдельно, управление реле отдельно.
А в main крутит те или другие функции в круговую или обрабатывает прерывания. Таким образом если необходимо чтото изменить то изменения делаются в отдельной функции практически никак не затрагивая остальных. Вобшем примерно так может объяснил и не правильно но смысл примерно такой.
|
Ну и правильно делает. Однако "в не маин" вовсе не значит, что в прерываниях. Скорее всего у него проекты состоят из нескольких файлов, по функциональному смыслу так сказать, которые просто в маин собираются вместе. Тогда при необходимости изменения какой-то функции меняется только один файл, а остальные неизменные кочуют из проекта в проект. А прерывания должны быть как можно короче, и их должно быть не больше, чем действительно необходимо, как выше уже отмечалось. Чем короче прерывание, тем меньше компилятору надо сохранять/восстанавливать контекста, снижается вероятность пересечения прерываний, возрастает скорость работы программы, а соответственно увеличивается скорость реакции программы на внешние воздействия, снижается вероятность возникновения ошибок.
По твоей-же проблеме - тебе нужно только прерывание для индикации. В нем и опрос кнопок делать. Никаких delay для подавления дребезга. И железо твое, ранее рассчитаное на прерывание, никаких изменений не требует для такого метода. Halex07 в примере показал, как это правильно делать. Упрощенно конечно, но тебе важно понять принцип, потому что такой подход позволяет добавлять широкий функционал кнопкам. Например надо задать скажем пемпературу в диапазоне 0-800. Нажимаешь и удерживаешь кнопку "+". Вначале кнопка срабатывает раз в секунду. Если удерживаешь ее 5 секунд, кнопка начинает срабатывать раз в пол секунды, еще пять секунд - и кнопка срабатывает раз в четверть секунды и т.д. А отпустишь - кнопку скорость сбрасывается, и при последующем нажатии весь цикл повторится. Или сделать "запираемую" кнопку, срабатывающую при нажатии/отпускании. Или сделать кнопку, срабатывающую через 5 нажатий. Словом много чего можно придумать, при этом будет меняться только программа, а железо будет неизменным.
|
|
|
Сказали "Спасибо" Someone
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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.
|
|