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

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

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

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

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

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

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

 
Опции темы
Непрочитано 06.07.2010, 15:52  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

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

Цитата:
а что мешает сделать все в одном прерывании по таймеру и индикацию и опрос кнопок и антидребезг. еще и отсчет "точного" времени и еще кучу всего в одном прерывании. даже функцию delay?
Блин третий раз с начала.
Таймер 0 делат прерывания с частотой 125Гц т.е. каждые 0,008 секунд. Это прерывание делает динамическую индикацию.
Антидребезг 0,05 сек у каждой кнопки.
Если кнопки не нажимаются больше чем 5 секунд выходим из функции работы с кнопками. Каждая кнопка устанавливает свой параметр хрен знает сколько времени скажем пару минут. Если эту всю кашу запхать в обработчик прерываний то время выполнения этого обработчика растянется на пару минут. И это при генерации прерываний 125 раз в секунду. Таким образом мы начнем прерывать обработчик прерываний. Ну чтож не понятно. Это не заработает.
Читайте выше объяснял дважды.
Ладно КАК ПРАВИЛЬНО НАПИСАТЬ чтоб прерывание возникало при изменении состояния пина который опрашиваеся в main.
7Fantomas7 вне форума  
Непрочитано 06.07.2010, 16:11  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Сообщение от 7Fantomas7 Посмотреть сообщение
Не прерывание из прерывания. А есть главное прерывание и второстепеное прерывание. Второстепенное прерывание включается когда нет главного прерывания по событию и прерывается главным прерыванием когда таковое случается. А потом продолжает выполняться.
Блин, да все я понимаю.

Не надо прикручивать прерывание там, где оно нафиг не нужно. Как вы будете отслеживать нажатие кнопки? По фронту-спаду? Да их, со скорострельностью МК, будут подхвачены сотни - из-за дребезга.

Ну не стыкуются понятия "прерывание" и "кнопка, опрашиваемая в main"

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

nml,
Цитата:
Не надо прикручивать прерывание там, где оно нафиг не нужно. Как вы будете отслеживать нажатие кнопки? По фронту-спаду? Да их, со скорострельностью МК, будут подхвачены сотни - из-за дребезга.
Ну не стыкуются понятия "прерывание" и "кнопка, опрашиваемая в main"
Все въехал надо было так сразу.
Тогда еще пару вопросов
как правильно оформить
void main(void)
{
while (1)
{
if (mode==0){//ВЫБОР РЕЖИМА
delay_ms (50);//выдержка времени 0,05 сек для подавления дребезга
Чтото сюда написать чтоб возникло прерывание
};
}
mode- это та самая злая кнопка.
и мне откровенно начхать что в конечном счете delay будет 55мс. значит дребезга и тем более не замечу.

Последний раз редактировалось 7Fantomas7; 06.07.2010 в 16:36.
7Fantomas7 вне форума  
Непрочитано 06.07.2010, 16:41  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Мал мал перепутал герцы с миллисекундами.
Опрос кнопок в динамической индикации позволяет избавиться от антидребезговых задержек- что очень хорошо.
Я писал в прошлый раз Вам про флаги, устанавливаемые в прерывании, а опрашиваемые в основном цикле программы. Таким образом можно и с дребезгом побороться и сделать процесс любой длительности.
baiderin вне форума  
Непрочитано 06.07.2010, 16:42  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Можно прицепить кнопки на вход внешнего прерывания, если уж очень хочется.
baiderin вне форума  
Непрочитано 06.07.2010, 16:55  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Вот как-то так

while(1)
{
if(!mode) progr_mode();
else
if(!more) progr_more();
else
if (!less) progr_less();
};
baiderin вне форума  
Сказали "Спасибо" baiderin
7Fantomas7 (06.07.2010)
Непрочитано 06.07.2010, 16:55  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

Не знаю поможет или нет
Делаю так: Если есть свободный таймер то выделяю под подавление дребезга,если нет то можно задержку в другом рабочем уже таймером или взять за основу рабочую программу(которая как известно работает в зациклености,зная выполнение одного прохода).Выделяю структуру с состояниями(как минимум два нажата и отжата).При нажатии уменьшаем состояние начальное до нуля за каждый вызов или проход,пока не будет ноль и уже в где надо смотрем состояние.
Вот на коде так примерно(конечно в зависимости уровней на входах и кнопках,у меня подтянуто к + через резистор,акнопка замыкает на -) :

main.h
Код:
struct knopka_setup {
                      uint open;      //контакт разомкнут
                      uint close;     //контакт замкнут
                    } struct_setup,*ykaz_setup;
                    


struct knopka_razrad {
                        uint open;      //контакт разомкнут
                        uint close;     //контакт замкнут
                    } struct_razrad,*ykaz_razrad;
прерывания
Код:
//Это обработчик кнопок вызывается через 65 мs 
#int_timer0
void timer0()
{
   //на кнопку установка,задержка 65*3=195 мс
   if (input(setup)) 
   { 
      if (ykaz_setup-›open) --ykaz_setup-›open; 
      ykaz_setup-›close=3;    
   } 
   else 
   { 
      if (ykaz_setup-›close) --ykaz_setup-›close; 
      ykaz_setup-›open=3;    
   }
   
   //на кнопку разряд,задержка 65*3=195 мс
   if (input(razrad)) 
   { 
      if (ykaz_razrad-›open) --ykaz_razrad-›open; 
      ykaz_razrad-›close=3;    
   } 
   else 
   { 
      if (ykaz_razrad-›close) --ykaz_razrad-›close; 
      ykaz_razrad-›open=3;    
   }
}
main.c
Код:
 ykaz_setup=&struct_setup;
   ykaz_razrad=&struct_razrad;

//Проверка кнопки setup на нажатие,для обработки уставки
   if(!ykaz_setup-›close)
      ;//setup_fun(); делаем что надо
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 06.07.2010, 17:03  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

baiderin,
Я прекрасно помню что Вы писали и буду это пытаться использовать если не получится так как хочу. Но я всетаки хотел бы сделать так как написано выше. Мне необходимо знать это возможно или нет. Если возможно то как.

baiderin,
Цитата:
Можно прицепить кнопки на вход внешнего прерывания, если уж очень хочется.
А можно взять схему готового тахометра с хексом и не морочить голову, не нужно и вобше Си изучать, а можно купить готовый тахометр китайцы всеравно дешевле сделают. И ненужно и электроникой заниматься.
7Fantomas7 вне форума  
Непрочитано 06.07.2010, 17:13  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Прерывания в прерываниях ATmega8

И сидеть, пить пиво?
Не уж.Я луше посижу, поковыряюсь в программе, но сделаю сам то, что смогу.
Чего и Вам желаю.
Просто прерывания в прерываниях- это плохо прогнозируемая вещь.
Опрос кнопок в динамической индикации, а обработка в основном цикле, это прозрачно и хорошо делится на отдельные понятные куски.
baiderin вне форума  
 

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

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

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:51.


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