Easyelectronics.ru

Электроника для всех
Текущее время: 24 фев 2018, 17:16

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



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 23 ] 
Автор Сообщение
 Заголовок сообщения: обработка прерывания
СообщениеДобавлено: 17 янв 2018, 20:31 
Заглядывает иногда

Зарегистрирован: 10 дек 2013, 15:58
Сообщения: 62
Подскажите пожалуйста сколько времени примерно уйдет на обработку такого прерывания
Код:
unsigned long int volatile bit=0;
unsigned long int volatile bit1=0;
unsigned long int volatile bit2=0;


ISR(INT0_vect)                      // прерывание по CLOCK
  {
if (a==0) {                          // стартовый бит
       if (PIND & (1<<1))
      {a=1;
       c=0;
       }
         }
else
{
bit <<= 1;                           
if (PIND & (1<<1)) bit=bit+1;        // если единичка запихиваем в число

x++;
}
switch (x) {
case 32 : bit1=bit, bit=0; break;     // 4 байта получено
case 35 : bit2=bit, a=0, y=1;
}

период прохождения импульсов 7 us


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 17 янв 2018, 20:37 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1168
Зависит от включенного уровня оптимизации при компиляции сишного кода в машинный. А самое главное - зависит от частоты МК


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 17 янв 2018, 22:31 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 мар 2012, 16:18
Сообщения: 146
А обязательно это делать в прерывании ?
Тем более, что переменная (a) берется снаружи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 17 янв 2018, 22:37 
Заглядывает иногда

Зарегистрирован: 10 дек 2013, 15:58
Сообщения: 62
BusMaster писал(а):
Зависит от включенного уровня оптимизации при компиляции сишного кода в машинный. А самое главное - зависит от частоты МК

частота 8 МГц от внутреннего генератора atmega8


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 17 янв 2018, 22:38 
Старожил

Зарегистрирован: 18 июл 2016, 21:17
Сообщения: 671
Микросекунд 10-15 наверное где то :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 17 янв 2018, 22:40 
Заглядывает иногда

Зарегистрирован: 10 дек 2013, 15:58
Сообщения: 62
zat писал(а):
А обязательно это делать в прерывании ?
Тем более, что переменная (a) берется снаружи.

необходимо за 7 микросекунд определить входной сигнал и обработать его до поступления следующего бита


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 17 янв 2018, 22:42 
Заглядывает иногда

Зарегистрирован: 10 дек 2013, 15:58
Сообщения: 62
bw429 писал(а):
Микросекунд 10-15 наверное где то :)

чьёрт побьери. интересно а как-нибудь можно переработать такой сигнал?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 17 янв 2018, 22:48 
Старожил

Зарегистрирован: 18 июл 2016, 21:17
Сообщения: 671
Надо пробовать, возможно, я и ошибаюсь...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 17 янв 2018, 23:48 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2013, 00:58
Сообщения: 2494
Откуда: Тольятти
По возможности используйте char, а не int, будет чуть быстрее.
Если допустимо повышать частоту, можно после старта записать в OSCCAL число 0xFF, частота поднимется где-то до 14 мгц. Выше только внешним тактированием. Я разгонял до 26 МГц, но понятно, что оверклок это ненадежно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 07:25 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3434
Откуда: Новосибирск
Большинство команд AVR выполняется за 1 такт. Остальные команды выполняются за 2, 3, 4 такта. При частоте кварца 8 МГц один такт выполняется за 1/8000000=0,000000125. 125 наносекунд. 0,000007/0,000000125=56 тактов. Это значит, что вы должны уложиться в 56 тактов. На ассемблере можно посчитать в тактах, сколько будет выполняться прерывание. На ЯВУ результат будет известен только после компилирования и просмотра в дизассемблере результата компилирования.
Итог. На AVR ваша задача не решаема.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 08:02 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2013, 00:58
Сообщения: 2494
Откуда: Тольятти
В таких случаях в начале прерывания я выдаю на ногу порта 1, а перед возвратом 0, и смотрю импульс осциллографом. Задний фронт дрожит, но максимальную длительность видно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 08:11 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3434
Откуда: Новосибирск
Осциллограф не у всех есть. Н всегда стоит на столе. Его еще достать нужно.
Длительность спокойно высчитывается по тактам в дизассемблере. А также в симуляторе, генерируя нужное прерывание и выставляя нужные переменные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 09:16 
Только пришел

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 28
Аппаратные блоки, тот же SPI, не судьба задействовать? К чему этот ногодрыг?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 09:36 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3434
Откуда: Новосибирск
VladislavS писал(а):
Аппаратные блоки, тот же SPI, не судьба задействовать? К чему этот ногодрыг?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 11:22 
Заглядывает иногда

Зарегистрирован: 10 дек 2013, 15:58
Сообщения: 62
посчитал такты в симуляторе, получается больше 90, значит не получится а в реальности как посоветовал iev91 20-22 мкс


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 11:44 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3434
Откуда: Новосибирск
Мы не знаем вашей задачи, а потому не можем посоветовать что-то путное. В целом, что вы хотите сделать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 12:24 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2013, 00:58
Сообщения: 2494
Откуда: Тольятти
Обратите внимание, у вас операции идут через запятую, а не точку с запятой. Компилятор может присвоить переменной самый последний операнд.
http://proguroki.ru/urok4/urok-4-8-operatsiya-zapyataya


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 13:11 
Заглядывает иногда

Зарегистрирован: 10 дек 2013, 15:58
Сообщения: 62
demiurg1978 писал(а):
Мы не знаем вашей задачи, а потому не можем посоветовать что-то путное. В целом, что вы хотите сделать?

есть некое устройство показывает температуру на семисегментниках через драйвер m5451 , ну в целом к нему подключено 8 индикаторов , 34 и 35 биты данных включают либо одну четверку индикаторов либо другую динамически. вот я и хочу выдернуть из посылки данных нужные мне 16 бит для дальнейшего использования уже в другом устройстве.
в прерывании я получаю число 4 байта и три бита указывающие на нужную мне посылку , а дальше дело техники.
сейчас вот сижу и думаю подпаяться 16 проводков непосредственно к сегментникам :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 13:15 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3434
Откуда: Новосибирск
Еще подробнее, что вы хотите получить? Для чего вам эти заморочки? Мелочи, типа, как это сделано, как это вы хотите сделать не интересны. Интересна конечная цель.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 13:26 
Заглядывает иногда

Зарегистрирован: 10 дек 2013, 15:58
Сообщения: 62
demiurg1978 писал(а):
Еще подробнее, что вы хотите получить? Для чего вам эти заморочки? Мелочи, типа, как это сделано, как это вы хотите сделать не интересны. Интересна конечная цель.

дозатор воды , считает литры отображает температуру воды, хочу сделать плюсом регулировку температуры воды


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 13:38 
Старожил
Аватара пользователя

Зарегистрирован: 05 фев 2013, 00:58
Сообщения: 2494
Откуда: Тольятти
Можно повесить прерывание на CLOCK, которое будет выхватывать один бит с линии данных, записывать их в массив и увеличивать индекс. Должно успеть. Я почитал протокол, в нем нет возможности синхронизации, и поэтому может быть сбой и сдвиг на любое количество тактовых импульсов. Если в реальном устройстве между пакетами есть пауза, по которой можно понять, где начало пакета, то задача решаема. Если нет, то я бы не взялся за такую задачу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 15:16 
Заглядывает иногда

Зарегистрирован: 10 дек 2013, 15:58
Сообщения: 62
iev91 писал(а):
Можно повесить прерывание на CLOCK, которое будет выхватывать один бит с линии данных, записывать их в массив и увеличивать индекс. Должно успеть. Я почитал протокол, в нем нет возможности синхронизации, и поэтому может быть сбой и сдвиг на любое количество тактовых импульсов. Если в реальном устройстве между пакетами есть пауза, по которой можно понять, где начало пакета, то задача решаема. Если нет, то я бы не взялся за такую задачу.

пауза между пакетами 5 милисекунд , импульсы на clock подаются так : сначала 36 пустых потом 36 параллельно с данными, пакет 72 импульса . как я понял вы рекомендуете записывать бит не в число а в массив . бля как логично и даже вроде как проще получается:)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: обработка прерывания
СообщениеДобавлено: 18 янв 2018, 20:52 
Заглядывает иногда

Зарегистрирован: 10 дек 2013, 15:58
Сообщения: 62
всем спасибо кто откликнулся, задача решена с помощью массива,


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

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


Кто сейчас на конференции

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB