посылать пакеты байтов по расписанию

MZDOS
Offline
Зарегистрирован: 01.03.2014

Нужно посылать в компорт на 115200 бод  пакет из 5 байт 20 раз в секунду, какой функцией это сделать и как связать начало отправки пакета со временем?

В программе не могу постоянно проверять время, тк она занята другими делами.

Garry
Garry аватар
Offline
Зарегистрирован: 07.04.2012

MZDOS пишет:

Нужно посылать в компорт на 115200 бод  пакет из 5 байт 20 раз в секунду, какой функцией это сделать и как связать начало отправки пакета со временем?

В программе не могу постоянно проверять время, тк она занята другими делами.

Задача описана размыто...

Кто будет принимать пакеты?

Нужно ли синхронизировать отправку пакетов с принимающей стороной или просто достаточно раз в секунду отправлять (к вопросу о связать начало отправки пакета со временем)?

Ну сам вопрос про время: какое время подразумевается, локальное время МК или реальное?

Опишите подробней весь комплекс.

 

MZDOS
Offline
Зарегистрирован: 01.03.2014

будет принимать другой МК, синхронизировать не нужно, а отправлять 20 раз в секунду а не 1, время локальное МК

Garry
Garry аватар
Offline
Зарегистрирован: 07.04.2012

MZDOS пишет:

будет принимать другой МК, синхронизировать не нужно, а отправлять 20 раз в секунду а не 1, время локальное МК

План №1 (первое что пришло на ум):

1) Используем прерывание по таймеру.

2) Основная программа отвечает за заполнение пакета данными, выставляет Флаг готовности пакета данных.

3) Функция ISR, которая вызывается в прерывании по таймеру, отвечает за быструю отправку данных (ACHTUNG на слове быструю!) с учетом выставленного Флага, сбрасывает Флаг.

4) Теперь надо понять/выбрать способ быстрой отправки данных из имеющихся интерфейсов приема-передачи данных!

План №2 (похоже более правильный):

1) Используем прерывание по таймеру.

2) Основная программа отвечает за заполнение пакета данными и за их отправку с учетом Флага, после отправки сбрасывает Флаг.

3) Функция ISR, которая вызывается в прерывании по таймеру, отвечает за выставление Флага.

4) Теперь надо понять/выбрать способ быстрой отправки данных из имеющихся интерфейсов приема-передачи данных!

 

Что за камень у вас?

 

Garry
Garry аватар
Offline
Зарегистрирован: 07.04.2012

Упустил, интерфейс передачи данных уже выбран - USART. :)

Главное чтобы камень держал выбранную скорость передачи.

 

Пакет данных - либо структура, либо массив!?

Отправляется через USART так: Serial.wtite(buf, sizeof(buf));где buf - адрес пакета данных.

Про прерывания по таймеру начать можно тут.

MZDOS
Offline
Зарегистрирован: 01.03.2014

Garry пишет:

План №1 (первое что пришло на ум):

1) Используем прерывание по таймеру.

2) Основная программа отвечает за заполнение пакета данными, выставляет Флаг готовности пакета данных.

3) Функция ISR, которая вызывается в прерывании по таймеру, отвечает за быструю отправку данных (ACHTUNG на слове быструю!) с учетом выставленного Флага, сбрасывает Флаг.

4) Теперь надо понять/выбрать способ быстрой отправки данных из имеющихся интерфейсов приема-передачи данных!

План №2 (похоже более правильный):

1) Используем прерывание по таймеру.

2) Основная программа отвечает за заполнение пакета данными и за их отправку с учетом Флага, после отправки сбрасывает Флаг.

3) Функция ISR, которая вызывается в прерывании по таймеру, отвечает за выставление Флага.

4) Теперь надо понять/выбрать способ быстрой отправки данных из имеющихся интерфейсов приема-передачи данных!

Что за камень у вас?

я читал что внутри прерывания нельзя посылать в компорт так как он тоже вызывает прерывание, если знаете как выставить таймер?

Garry пишет:
Упустил, интерфейс передачи данных уже выбран - USART. :) Главное чтобы камень держал выбранную скорость передачи. Пакет данных - либо структура, либо массив!?

Отправляется через USART так: Serial.wtite(buf, sizeof(buf));где buf - адрес пакета данных.

Про прерывания по таймеру начать можно тут.

есть proMicro и 2560, 

пакет байтов структура

Garry
Garry аватар
Offline
Зарегистрирован: 07.04.2012

MZDOS пишет:

если знаете как выставить таймер?

Про прерывания по таймеру начать можно тут.

есть proMicro и 2560, пакет байтов структура

С таймерами не работал, пусть гуру помогут, а пока начните изучать сами.

Если время найду, то буду тестить на 2560.

MZDOS
Offline
Зарегистрирован: 01.03.2014

пока не получается понять

Garry
Garry аватар
Offline
Зарегистрирован: 07.04.2012

MZDOS пишет:

пока не получается понять

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

Там все доступно описано,  в самой статье представлены куски кода, представлен даже zip архив для скачивания. Читайте, копируйте, качайте, тестируйте!