Например TDA7294

 Форум РадиоКот • Просмотр темы - Помогите разобраться с прерываниями
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Чт июл 20, 2017 23:36:05



Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Помогите разобраться с прерываниями
СообщениеДобавлено: Вс июл 16, 2017 20:03:16 
Первый раз сказал Мяу!

Карма: -4
Зарегистрирован: Сб ноя 12, 2016 10:41:00
Сообщений: 38
Рейтинг сообщения: 0
Хочу щажечь свтоедиод, типо когда идёт нуль,( ну кнопку нажимаю), то вызывается прерывания , где должен гореть светик, и конечно когда я отпускаю кнопку, прога выходит из прерывания и светик не горит. но когда всё проверил в протеусе, почему то программа в прерывания заходит, но не выходит. почему так
#include <avr/io.h>
#include <avr/interrupt.h>
ISR (INT0_vect)
{
PORTA |=(1«0);
}

int main(void)
{
DDRA =0xFF;
PORTA = 0x00;
DDRD = 0x08;
PORTD = 0xFF;

/* Replace with your application code */
while (1)
{
MCUCR &=~(1«0); // делаю так чтобы прерывания работало по низкому уровню. типо когда на инте0 будет 0, только тогда перейдё на прерывания
GICR |=(1«6); //включаю инт0 .
asm("sei");

}
}


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Вс июл 16, 2017 20:55:21 
Вымогатель припоя
Аватар пользователя

Карма: 10
Зарегистрирован: Пт ноя 11, 2016 06:48:09
Сообщений: 546
Откуда: край интернета... самый край :(
Рейтинг сообщения: 0
он из прерывания выходит но ты об этом не знаешь — кто тебе светодиод выключит? (где соответствующая команда?)
ещё: настройку прерываний достаточно делать 1 раз (не в цикле)

_________________
Если устройство заработало (догорело) или вопрос решен (закрыт) — отпишись, это важно не только тебе.


Вернуться наверх
 Профиль  
 
От идеи до готового устройства! Нужен только EasyEDA!

Бесплатный инструмент для проектирования печатных плат - нарисуй свою плату прямо сейчас!

Дешевле уже некуда: всего $2, за 10 ПП размером 10х10см!

Электронные компоненты: Экономия до 50%, бесплатная доставка при одновременном заказе печатной платы и компонентов!

Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Вс июл 16, 2017 20:58:03 
Первый раз сказал Мяу!

Карма: -4
Зарегистрирован: Сб ноя 12, 2016 10:41:00
Сообщений: 38
Рейтинг сообщения: 0
он из прерывания выходит но ты об этом не знаешь — кто тебе светодиод выключит? (где соответствующая команда?)
ещё: настройку прерываний достаточно делать 1 раз (не в цикле)

ааа, точно, окей, завтра утром посмотрю, спасибо


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 06:50:12 
Грызет канифоль

Карма: 3
Зарегистрирован: Ср июн 25, 2008 16:19:44
Сообщений: 289
Рейтинг сообщения: 0
Код:
   int main(void)
   {
      DDRA =0xFF;
      PORTA = 0x00;
      DDRD = 0x08;
      PORTD = 0xFF;

      MCUCR &=~(1«0);
      GICR |=(1«6);
      asm("sei");



      while (1)
      {
         // глухой цикл должен быть здесь. При вашем варианте по кругу постоянно идет инициализация внешнего прерывания.
      }
   }


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 07:29:57 
Первый раз сказал Мяу!

Карма: -4
Зарегистрирован: Сб ноя 12, 2016 10:41:00
Сообщений: 38
Рейтинг сообщения: 0
Код:
   int main(void)
   {
      DDRA =0xFF;
      PORTA = 0x00;
      DDRD = 0x08;
      PORTD = 0xFF;

      MCUCR &=~(1«0);
      GICR |=(1«6);
      asm("sei");



      while (1)
      {
         // глухой цикл должен быть здесь. При вашем варианте по кругу постоянно идет инициализация внешнего прерывания.
      }
   }

переделал, в валй(1) написал так PORTA &=~(1<<0); ВСЁ равно светодиод не выключается


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 09:37:36 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 92
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 10438
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
почти все проблемы кроются в алгоритме.
вот у вас: нажали кнопку - возникло прерывание - зажгли светодиод - вышли из прерывания. что происходит, когда кнопку не нажали? в главном цикле все время светодиод гасится - так? т.е. если кнопку нажали, то сначала в прерывании его включили, а когда вышли из обработчика - тут же выключили...
зачем вообще прерывания?

как у вас настроен режим прерываний? по вашему коду не понятно, лезть в даташит лениво... если у вас, например, срабатывание по низкому уровню, то работа будет такой: все время, пока кнопка нажата, будет возникать прерывание, т.е. вошли, зажгли, вышли и тут же снова вошли. может получиться так, что момент, когда в главном цикл что-то гасится, вообще будет очень коротким, что и не заметишь.

самое простое и, для начала, самое правильное - не применять прерывания.
Код:
 while(1){
   if(PIND & _BV(PD3)){ // проверяем кнопку на PD3 - разберитесь, где у вас она на самом деле
      // кнопка не нажата - гасим
   } else {
      // кнопка нажата - зажигаем
   }
}

_________________
я свою работу за вас делать не буду!


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 09:54:54 
Вымогатель припоя
Аватар пользователя

Карма: 10
Зарегистрирован: Пт ноя 11, 2016 06:48:09
Сообщений: 546
Откуда: край интернета... самый край :(
Рейтинг сообщения: 0
я то думал основная цель не светодиодом мигать а прерывание на зуб попробовать - как оно работает, а светик просто индикатор...

Добавлено after 3 minutes 46 seconds:
если от кнопки светик зажигать то и контроллер не нужен... :)

Добавлено after 8 minutes 47 seconds:
я бы и рад копнуть глубже, но урок по телепатическому определению микроконтроллера в своё время прогулял...

_________________
Если устройство заработало (догорело) или вопрос решен (закрыт) — отпишись, это важно не только тебе.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 10:31:24 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 92
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 10438
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Ivanoff-iv писал(а):
прерывание на зуб попробовать - как оно работает, а светик просто индикатор...
всему своё время. объяснить, почему прерывание для мигания светиком будет со всякими "странными" участками кода будет на данном уровне освоения МК слишком сложно, как мне кажется. но если охота, то в прерывании ставить volatile-флаг, а в главном цикле его анализировать вышеприведенным методом, как я пример показал, только не забывать всякий раз этот флаг сбрасывать.

_________________
я свою работу за вас делать не буду!


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 19:34:35 
Первый раз сказал Мяу!

Карма: -4
Зарегистрирован: Сб ноя 12, 2016 10:41:00
Сообщений: 38
Рейтинг сообщения: 0
я то думал основная цель не светодиодом мигать а прерывание на зуб попробовать - как оно работает, а светик просто индикатор...

Добавлено after 3 minutes 46 seconds:
если от кнопки светик зажигать то и контроллер не нужен... :)

Добавлено after 8 minutes 47 seconds:
я бы и рад копнуть глубже, но урок по телепатическому определению микроконтроллера в своё время прогулял...

вот именно я хочу понять, после того как я отжал кнопку он же должен выйти из прерывания и выполнять программу, в которой я гашу светоидиод, но он не выполняет, я не знаю почему.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 19:37:52 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 92
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 10438
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
narius985 писал(а):
после того как я отжал кнопку он же должен выйти из прерывания
из прерывания он выходит сразу после того, как выполнит обработчик, в вашем коде нет ничего, что заставило бы "его" ждать отжатия кнопки. а далее - см. мои сообщения выше - в зависимости от настройки процесс либо будет непрерывно повторяться, либо нет.

_________________
я свою работу за вас делать не буду!


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 20:47:00 
Друг Кота
Аватар пользователя

Карма: 43
Зарегистрирован: Вт апр 24, 2007 08:45:40
Сообщений: 3826
Откуда: Minsk
Рейтинг сообщения: 0
Сама идея - пока нажата кнопка, МК вертится в прерывании по уровню , как собака за собственным хвостом - ущербна. Никакой полезной работы при этом не выполняется. Опрос кнопок проводят обычные люди по таймеру, попутно решая вопрос с дребезгом. Если уж - кровь из носу - реакция нужна молниеносная, наносекунды - организовываем прерывание по перепаду, но тогда уж отслеживать отпускание кнопки нужно в ветке, на которую попадаем из прерывания . Вопрос о том, как из прерывания попасть сразу ( мгновенная реакция ведь нужна! ) на нужную ветку, многократно обсуждался в форуме, но это вопрос не новичкового уровня. Я так думаю.
Кстати, интересный вопрос: если попав в прерывание по falling edge мы внутри его меняем условие на rising edge - вроде можем поймать и отпускание кнопки, но я думаю, это трюкачество не достойно серьезного проекта.

_________________
Изображение


Последний раз редактировалось Jack_A Пн июл 17, 2017 20:54:18, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 20:52:08 
Грызет канифоль

Карма: 3
Зарегистрирован: Ср июн 25, 2008 16:19:44
Сообщений: 289
Рейтинг сообщения: 0
Вопрос о том, как из прерывания попасть сразу ( мгновенная реакция ведь нужна! ) на нужную ветку, многократно обсуждался в форуме, но это вопрос не новичкового уровня. Я так думаю.

Эта проблема решается просто. Допустимое время реакции системы?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 20:58:24 
Друг Кота
Аватар пользователя

Карма: 43
Зарегистрирован: Вт апр 24, 2007 08:45:40
Сообщений: 3826
Откуда: Minsk
Рейтинг сообщения: 0
Я знаю, как оно решается. Допустим, < 1 mks. Можем подменить адрес возврата. Но могут быть неочевидные проблемы.
Я говорю о том, что это не уровень, заданный ТС в его вопросе.

_________________
Изображение


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 21:08:20 
Вымогатель припоя
Аватар пользователя

Карма: 10
Зарегистрирован: Пт ноя 11, 2016 06:48:09
Сообщений: 546
Откуда: край интернета... самый край :(
Рейтинг сообщения: 0
по идее пока нажата кнопка светик будет быстро-быстро мигать - т.к. завершив прерывание, мк выйдет обратно в основной цикл и, если мне не изменяет выполнит там хотя бы одну команду (в этом на 100% не уверен) прежде чем опять уйдёт в прерывание, (по крайней мере разбирал один проект с прерыванием по низкому уровню и, как утверждает автор удержание 0 на прерывающей ноге не блокировало остальную программу полностью).
при отпущенной кнопке МК будет тушить и тушить светодиод.
но это по идее, а почему происходит не так, можно попытаться узнать разглядывая регистры, например проверить что GICR |=(1«6); //действительно включаю инт0 . , но ТС партизан не колется, какой мк пытает, а для разных мк такая запись может означать разное.

Добавлено after 2 minutes 45 seconds:
пытался на днях в обработчике захвата сменить условие захвата - с первого раза не взлетело, а второго раза и не понадобилось, нашел способ удобнее.

_________________
Если устройство заработало (догорело) или вопрос решен (закрыт) — отпишись, это важно не только тебе.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 21:10:05 
Грызет канифоль

Карма: 3
Зарегистрирован: Ср июн 25, 2008 16:19:44
Сообщений: 289
Рейтинг сообщения: 0
Я знаю, как оно решается. Допустим, < 1 mks. Можем подменить адрес возврата. Но могут быть неочевидные проблемы.
Я говорю о том, что это не уровень, заданный ТС в его вопросе.

Подмена вектора - это уже работа на ассемблере. Но даже в этом случае подмена вектора - выстрелить себе в ногу. Не нужны такие извраты. Если реакция должна быть мгновенной, работаем в прерывании. Если нет, ставим признак обработки прерывания. Если же у вас долгие циклы в программе - это уже ваши проблемы. Учитесь дробить процессы.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 21:33:13 
Друг Кота
Аватар пользователя

Карма: 43
Зарегистрирован: Вт апр 24, 2007 08:45:40
Сообщений: 3826
Откуда: Minsk
Рейтинг сообщения: 0
Demiurg писал(а):
Если же у вас долгие циклы в программе - это уже ваши проблемы. Учитесь дробить процессы.

Спасибо за добрый совет. Если бы он лет хотя бы 20 назад - цены бы ему не было. :)) :) "Дающий вовремя - дает вдвойне " © Насчет подмены адреса выхода - это зависит исключительно от контекста задачи, и там сразу будет видно - в ногу или в другое место. :(

_________________
Изображение


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 21:40:09 
Грызет канифоль

Карма: 3
Зарегистрирован: Ср июн 25, 2008 16:19:44
Сообщений: 289
Рейтинг сообщения: 0
Вы никогда не знаете, в какой момент времени сработало прерывание. Кроме одного единственного случая, в глухом цикле. Именно поэтому, подмена возврата - изврат.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 21:50:09 
Друг Кота
Аватар пользователя

Карма: 43
Зарегистрирован: Вт апр 24, 2007 08:45:40
Сообщений: 3826
Откуда: Minsk
Рейтинг сообщения: 0
Я не собираюсь схоластически спорить на пустом месте вне конкретной задачи - тем более в теме топикстартера, которому эти проблемы пока - за далеким горизонтом.

_________________
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: Тихон и гости: 7


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y