посылать пакеты байтов по расписанию
- Войдите на сайт для отправки комментариев
Сб, 01/03/2014 - 16:07
Нужно посылать в компорт на 115200 бод пакет из 5 байт 20 раз в секунду, какой функцией это сделать и как связать начало отправки пакета со временем?
В программе не могу постоянно проверять время, тк она занята другими делами.
Нужно посылать в компорт на 115200 бод пакет из 5 байт 20 раз в секунду, какой функцией это сделать и как связать начало отправки пакета со временем?
В программе не могу постоянно проверять время, тк она занята другими делами.
Задача описана размыто...
Кто будет принимать пакеты?
Нужно ли синхронизировать отправку пакетов с принимающей стороной или просто достаточно раз в секунду отправлять (к вопросу о связать начало отправки пакета со временем)?
Ну сам вопрос про время: какое время подразумевается, локальное время МК или реальное?
Опишите подробней весь комплекс.
будет принимать другой МК, синхронизировать не нужно, а отправлять 20 раз в секунду а не 1, время локальное МК
будет принимать другой МК, синхронизировать не нужно, а отправлять 20 раз в секунду а не 1, время локальное МК
План №1 (первое что пришло на ум):
1) Используем прерывание по таймеру.
2) Основная программа отвечает за заполнение пакета данными, выставляет Флаг готовности пакета данных.
3) Функция ISR, которая вызывается в прерывании по таймеру, отвечает за быструю отправку данных (ACHTUNG на слове быструю!) с учетом выставленного Флага, сбрасывает Флаг.
4) Теперь надо понять/выбрать способ быстрой отправки данных из имеющихся интерфейсов приема-передачи данных!
План №2 (похоже более правильный):
1) Используем прерывание по таймеру.
2) Основная программа отвечает за заполнение пакета данными и за их отправку с учетом Флага, после отправки сбрасывает Флаг.
3) Функция ISR, которая вызывается в прерывании по таймеру, отвечает за выставление Флага.
4) Теперь надо понять/выбрать способ быстрой отправки данных из имеющихся интерфейсов приема-передачи данных!
Что за камень у вас?
Упустил, интерфейс передачи данных уже выбран - USART. :)
Главное чтобы камень держал выбранную скорость передачи.
Пакет данных - либо структура, либо массив!?
Отправляется через USART так: Serial.wtite(buf, sizeof(buf)); , где buf - адрес пакета данных.
Про прерывания по таймеру начать можно тут.
План №1 (первое что пришло на ум):
1) Используем прерывание по таймеру.
2) Основная программа отвечает за заполнение пакета данными, выставляет Флаг готовности пакета данных.
3) Функция ISR, которая вызывается в прерывании по таймеру, отвечает за быструю отправку данных (ACHTUNG на слове быструю!) с учетом выставленного Флага, сбрасывает Флаг.
4) Теперь надо понять/выбрать способ быстрой отправки данных из имеющихся интерфейсов приема-передачи данных!
План №2 (похоже более правильный):
1) Используем прерывание по таймеру.
2) Основная программа отвечает за заполнение пакета данными и за их отправку с учетом Флага, после отправки сбрасывает Флаг.
3) Функция ISR, которая вызывается в прерывании по таймеру, отвечает за выставление Флага.
4) Теперь надо понять/выбрать способ быстрой отправки данных из имеющихся интерфейсов приема-передачи данных!
Что за камень у вас?
я читал что внутри прерывания нельзя посылать в компорт так как он тоже вызывает прерывание, если знаете как выставить таймер?
Отправляется через USART так: Serial.wtite(buf, sizeof(buf)); , где buf - адрес пакета данных.
Про прерывания по таймеру начать можно тут.
пакет байтов структура
если знаете как выставить таймер?
Про прерывания по таймеру начать можно тут.
есть proMicro и 2560, пакет байтов структура
С таймерами не работал, пусть гуру помогут, а пока начните изучать сами.
Если время найду, то буду тестить на 2560.
пока не получается понять
пока не получается понять
Пока нет времени, да и примеры бы я использовал из той ссыли, что выше давал.
Там все доступно описано, в самой статье представлены куски кода, представлен даже zip архив для скачивания. Читайте, копируйте, качайте, тестируйте!