Easyelectronics.ru

Электроника для всех
Текущее время: 24 сен 2020, 20:23

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Отправка сообщений в сеть CAN с разными периодами.
СообщениеДобавлено: 22 мар 2020, 20:48 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 янв 2014, 23:53
Сообщения: 79
Откуда: Казань
Добрый день!!!

Собрал Can трансивер, на Mega8+MCP2515, для передачи нужных сообщений в Can шину автомобиля. К примеру при ремонте комбинации приборов, чтобы можно было подрыгать стрелками.

Нужно передавать несколько разных сообщений, с разными периодами. Как я поступил : в прерывании 16 битного таймера (по переполнению), с периодом 1 мс инкрементируются несколько переменных (на каждое сообщение одна переменная). В основном цикле проверяю : если время больше или равно заданному, сбрасываю переменную (отсчет начинается заново), отправляю сообщение.

Show


Но такое решение мне не нравится, наверное можно сделать красивее и изящнее.

Также в сети нашел такой вариант :
Код:
static uint32_t s_uptimeTicks = 0;
void SysTick_Handler(void) {

// при условии Tick per second = 1000;
    s_uptimeTicks++;
    if (!(s_uptimeTicks % 5))
        sendCanPkg_1();
    if (!(s_uptimeTicks % 10))
        sendCanPkg_2();
    if (!(s_uptimeTicks % 50))
        sendCanPkg_3();
    if (!(s_uptimeTicks % 200))
        sendCanPkg_4();
}

но не понимаю как он работает, знаю что делению по модулю, но как работает не понимаю.

Если не затруднит помогите советом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отправка сообщений в сеть CAN с разными периодами.
СообщениеДобавлено: 22 мар 2020, 21:00 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 2063
https://wm-help.net/lib/b/book/1369887060/90

1 % 5 = 1
2 % 5 = 2
3 % 5 = 3
4 % 5 = 4
5 % 5 = 0
6 % 5 = 1
...

if (!(s_uptimeTicks % 5))

if ((s_uptimeTicks % 5) == 0)
{
...
}


https://www.ozon.ru/context/detail/id/140891511/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отправка сообщений в сеть CAN с разными периодами.
СообщениеДобавлено: 22 мар 2020, 21:35 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 янв 2014, 23:53
Сообщения: 79
Откуда: Казань
Спасибо, начал понимать.


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

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3685
Откуда: Новосибирск
ILSHAT писал(а):
...

Тут посмотрите.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Отправка сообщений в сеть CAN с разными периодами.
СообщениеДобавлено: 23 мар 2020, 17:25 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 янв 2014, 23:53
Сообщения: 79
Откуда: Казань
Всем большое спасибо за ответы.
Все решилось путем деления по модулю, задержку таким способом больше 500 мс не получить, но оно и не нужно. Код разместил в прерывании таймера, в главном цикле считает не верно.


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


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


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

Сейчас этот форум просматривают: DySprozin


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

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

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