Например TDA7294

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





Текущее время: Пт апр 19, 2024 00:36:08

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



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

Карма: -1
Рейтинг сообщений: -1
Зарегистрирован: Сб ноя 12, 2016 09:41:00
Сообщений: 58
Рейтинг сообщения: 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 19:55:21 
Друг Кота
Аватар пользователя

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

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


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

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

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


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 05:50:12 
Это не хвост, это антенна

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

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



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


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Помогите разобраться с прерываниями
СообщениеДобавлено: Пн июл 17, 2017 06:29:57 
Открыл глаза

Карма: -1
Рейтинг сообщений: -1
Зарегистрирован: Сб ноя 12, 2016 09:41:00
Сообщений: 58
Рейтинг сообщения: 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); ВСЁ равно светодиод не выключается


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

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

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

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

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

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

Мой уютный бложик... заходите!


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

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
я то думал основная цель не светодиодом мигать а прерывание на зуб попробовать - как оно работает, а светик просто индикатор...

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

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

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


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

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

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

Мой уютный бложик... заходите!


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

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

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

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

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


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

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

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

Мой уютный бложик... заходите!


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

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

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


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

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

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

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


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

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

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


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

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

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

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


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

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

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


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

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

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

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


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

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


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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Внешние прерывания
СообщениеДобавлено: Ср авг 09, 2017 09:37:28 
Открыл глаза

Карма: -1
Рейтинг сообщений: -1
Зарегистрирован: Сб ноя 12, 2016 09:41:00
Сообщений: 58
Рейтинг сообщения: 0
Хелп ми плиз. Когда я включаю в протеусе, то у меня светодиод не горит, пото нажима. кнопочку, у уменя он загаерается и продолжает почему то гореть не выключаясь, почему он не выходит из прерывания то? я вообще уже какой день мучаюсь понять не могу, вроде всё правильно выставил
/*
* GccApplication5.c
*
* Created: 09.08.2017 10:10:45
* Author : HP
*/
#define F_CPU 8000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

ISR (INT0_vect)
{
PORTC |=(1<<1);
}
int main(void)
{
DDRD = 0x00;
PORTD = 0xFF;
DDRC = 0xFF;
PORTC &=~(1<<1);
GICR |=(1<<6);
MCUCR &=~(1<<ISC01)|(1<<ISC00);
sei();
/* Replace with your application code */
while (1)
{
asm("nop");
}
}


Вложения:
Безымянный.png [183.71 KiB]
Скачиваний: 430
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Внешние прерывания
СообщениеДобавлено: Ср авг 09, 2017 11:05:50 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

Мой уютный бложик... заходите!


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

Часовой пояс: UTC + 3 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


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

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


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