Например TDA7294

Форум РадиоКот • Просмотр темы - Прерывания АVR, Code vision
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт фев 20, 2026 16:00:02

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Прерывания АVR, Code vision
СообщениеДобавлено: Ср ноя 28, 2012 18:51:47 
Встал на лапы

Зарегистрирован: Ср ноя 02, 2011 15:11:49
Сообщений: 95
Рейтинг сообщения: 0
Что это такое и зачем оно нужно, я знаю. А кто может объяснить все тонкости этого процесса, какие приоритеты исполнения они имеют, что делается, если код в первом прерывании не выполнился,а второе прерывание в этот момент наступило, что можно делать в прерываниях, что нельзя? Вот к примеру , делал часы/вольтметр на тини26,4 7SEG LED дисплее, при частоте 32768гц. Так вот , таймер 1, настроен на прерывание с частотой в 1 Гц, в этом прерывании есть переменная СЕК, которая постоянно инкрементируется. Во 0 таймере, частота прерывания равна 256 Гц и он отвечает за динамическую индикацию
Код:
char numbers[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18,0x7F,~0x1C,0x3F,0x2B,0x9,0x2F};
void show(void)
{
 if(ON)
  {   
  PORTA=0x7F;
  PORTB=(1<<d)|(1<<6);   
  TCCR0=0x01;
  PORTA=numbers[digit[d]]; 
  d++  ;
  if(d>3)d=0;
  }
  else
  {
   TCCR0=0x00;
   PORTB=0xF0;
  }
}
. Вот в этой процедуре реализован вольт метр
Код:
void voltage(void)
{
char t;
  volt=read_adc(6)*150/255;
  t=volt-100;
  digit[0]=volt/100;
  digit[1]=t/10;
  digit[2]=t%10;
  digit[3]=11;
}

и если ее вызывать из под прерывания первого счетчика, тоисть 1 раз в секунду, то в этот момент мерцает экран, а если на писать вот так
Код:
while(1)
{
  voltage();
  delay_ms(1000);
}
в основной процедуре, то все отлично пашет. Тоисть лучше весь основной код исполнять из в основного тела программы, а в прерываниях менять только значения переменных и исполнять короткие действия ???


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания АVR, Code vision
СообщениеДобавлено: Ср ноя 28, 2012 18:57:14 
Говорящий с текстолитом
Аватар пользователя

Карма: 16
Рейтинг сообщений: 236
Зарегистрирован: Вт апр 03, 2012 20:36:41
Сообщений: 1663
Откуда: Сочи
Рейтинг сообщения: 0
Пока не завершится одно из прерываний, другое не сработает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания АVR, Code vision
СообщениеДобавлено: Ср ноя 28, 2012 19:11:58 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
Enigm писал(а):
Пока не завершится одно из прерываний, другое не сработает.
если его не разрешить!

ТС, Вы вообще разобрались почему у Вас начинает все мерцать?

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания АVR, Code vision
СообщениеДобавлено: Ср ноя 28, 2012 20:08:37 
Встал на лапы

Зарегистрирован: Ср ноя 02, 2011 15:11:49
Сообщений: 95
Рейтинг сообщения: 0
Я думаю что преобразование АЦП занимало много времени, и прерывание на отображение дин индикации не срабатовало . А как можно разрешить исполнение другого прерывания ?


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Прерывания АVR, Code vision
СообщениеДобавлено: Чт ноя 29, 2012 09:27:59 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
mich91 писал(а):
Я думаю что преобразование АЦП занимало много времени, и прерывание на отображение дин индикации не срабатовало
Все верно. В прерываниях все должно происходить быстро. Никаких задержек. Никаких float и double и никакого деления/умножения (по крайней мере на AVR). В прерывании выставляется флаг, что оно произошло и действий по минимуму, требующих безотлагательной обработки. В основном цикле - проверка всех флагов и обработка всех задач не требовательных ко времени реакции (как например Ваше разделение числа на цифры и вывод в промежуточный буфер индикатора)
mich91 писал(а):
А как можно разрешить исполнение другого прерывания ?
Выставляете флаг I глобальных прерываний. В Си это делается так: sei() или __interrupt_enable() (последнее для IAR)

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания АVR, Code vision
СообщениеДобавлено: Чт ноя 29, 2012 13:30:47 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт янв 05, 2010 14:51:04
Сообщений: 54
Рейтинг сообщения: 0
mich91 писал(а):
Я думаю что преобразование АЦП занимало много времени, и прерывание на отображение дин индикации не срабатовало . А как можно разрешить исполнение другого прерывания ?


Никак. Пока не отработало одно прерывание другое установит флаг, но обработчик будет вызван только по завершении предыдущего. Просто адрес нового прерывания помещается в стек адресов.

P.S. Чем меньше в программе прерываний тем лучше, тем стабильнее и понятнее работает программа. Это закон.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прерывания АVR, Code vision
СообщениеДобавлено: Чт ноя 29, 2012 13:52:09 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
mark13121971 писал(а):
Никак. Пока не отработало одно прерывание другое установит флаг, но обработчик будет вызван только по завершении предыдущего. Просто адрес нового прерывания помещается в стек адресов.
Откуда такие познания? Вы хотя бы слышали про вложенные прерывания?
mark13121971 писал(а):
P.S. Чем меньше в программе прерываний тем лучше, тем стабильнее и понятнее работает программа. Это закон.
Прошу пруфлинк на закон.

_________________
Ставим плюсы: )


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

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


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

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


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

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


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