Easyelectronics.ru • Просмотр темы - Скоростной опрос датчиков на прерываниях.

Easyelectronics.ru

Электроника для всех
Текущее время: 18 авг 2018, 07:45

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

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

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

Итак дано куча датчиков на портах (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
Сообщения: 2114
Гкхм. Датчиков чего и куда датчиков? В том смысле, что че за интерфейс и че за датчики? По коду - вообще чето ниче не понятно, скорость там нифига не скоростная. Лучше читать состояние порта ЗА ОДИН РАЗ в промежуточную переменную, а потом уже разобрать в ней биты. Причем, лучше не использовать массив, ибо его индексация тоже дает накладные расходы.


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

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


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

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


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

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


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

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

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