Easyelectronics.ru

Электроника для всех
Текущее время: 18 июл 2018, 19:38

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



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

Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Скоростной опрос датчиков на прерываниях.
СообщениеДобавлено: 13 мар 2018, 22:36 
Старожил

Зарегистрирован: 16 окт 2013, 01:27
Сообщения: 598
Проект запустил в производство, ну а решением теперь могу поделиться :)

Итак дано куча датчиков на портах (8 штук) скорость опроса превышает 10 кгц, причем могут включаться и выключаться в произвольном порядке.
долго игрался с разными решениями пока не пришел к такому обработчику прерывания.
EXTI->CR1 был настроен на "FALL down" & "Rise Up"

Все выводы настроены на прерывания.
Ну и вот что получилось:
Код:
INTERRUPT_HANDLER(EXTI_PORTC_IRQHandler, 5)
{
 
if (!(GPIOC->IDR & (u8)(GPIO_PIN_7))) {
         if (!flag_ch[0]) {elec_div[0]++; flag_ch[0]=1;}
         }
else {flag_ch[0]=0;}

if (!(GPIOC->IDR & (u8)(GPIO_PIN_6))) {
         if (!flag_ch[1]) {elec_div[1]++; flag_ch[1]=1;}
         }
else {flag_ch[1]=0;}         
   
if (!(GPIOC->IDR & (u8)(GPIO_PIN_5))) {
         if (!flag_ch[2]) {elec_div[2]++; flag_ch[2]=1;}
         }
else {flag_ch[2]=0;}   

if (!(GPIOC->IDR & (u8)(GPIO_PIN_3))) {
         if (!flag_ch[3]) {elec_div[3]++; flag_ch[3]=1;}
         }
else {flag_ch[3]=0;}   

if (!(GPIOC->IDR & (u8)(GPIO_PIN_4))) {
         if (!flag_ch[4]) {elec_div[4]++; flag_ch[4]=1;}
         }
else {flag_ch[4]=0;}

_asm("IRET");
}



В коде нет ничего сложного - пользуйтесь.

P\S
elec_div[ ] - это счетчики на сработку изменения состояния выводов (сработка датчика) в основной программе идет обработка данных и корреляция параметров установки.
flag_ch[] - флаг состояния вывода (защелка)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Скоростной опрос датчиков на прерываниях.
СообщениеДобавлено: 13 мар 2018, 23:11 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1945
Гкхм. Датчиков чего и куда датчиков? В том смысле, что че за интерфейс и че за датчики? По коду - вообще чето ниче не понятно, скорость там нифига не скоростная. Лучше читать состояние порта ЗА ОДИН РАЗ в промежуточную переменную, а потом уже разобрать в ней биты. Причем, лучше не использовать массив, ибо его индексация тоже дает накладные расходы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Скоростной опрос датчиков на прерываниях.
СообщениеДобавлено: 13 мар 2018, 23:26 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 1330
По мне так просто набор букв.


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

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


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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