Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Приём команд по USART 
V
    Опции темы
ProgramerForever
  Дата 15.5.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: нет
Всего: 5



Делаю некое подобие осциллографа (точнее, самописца). Захотел сделать управление устройством с компьютера.
Самый простой способ - команда вместе с параметрами упаковывается в 1 байт. А на стороне контроллера делаем getchar() - и то, что приняли, то и выполняем. Но.
Минусы:
-= Число команд ограничено 255ю.
-= Нужно запоминать что какой байт означает.
-= Если придёт какая-то помеха, то контроллер её выполнет, что приведёт к непредсказуемым последствиям.
Если делать команды более понятные человеку (например, "setcountchanells 3"), то сразу решаются вышеперечисленные проблемы. Но я не совсем представляю, как их обрабатывать..

Приходит в голову только так: хранить команды в char-массивах. Принимать по байту, и сравнивать. Приняли команду - принимаем параметр. До конца строки (#13 или #10#13 , не помню точно). А потом выполнять.

Может как-нибудь по-другому, и попроще можно сделать? Это же придётся городить огород ещё тот.
PM MAIL WWW ICQ   Вверх
Mazzi
Дата 15.5.2010, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Твоя задача стара как COM-порт. smile 
В общем тебе нужно использовать протокол. Желательно какой нибудь стандартный, например Modbus, поскольку там уже всё продумано до тебя. Но можно и самописный.
При создании своего протокола желательно придерживаться простых правил:

1) посылка начинается с заголовка
2) затем идёт длина посылки в байтах
3) передаваемые данные
4) контрольная сумма

Если контрольная сумма неверна, команду просто следует игнорировать.
Если же посылка принята нормально, то следует послать в ответ посылку квитирующую принятые данные. Отсутствие этой посылки даст знать, что посылка не дошла, и её следует послать ещё раз.


Это сообщение отредактировал(а) Mazzi - 15.5.2010, 18:30


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
ProgramerForever
  Дата 15.5.2010, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: нет
Всего: 5



Да, наверное так и буду делать (запрос-ответ) с контрольными суммами. В ущерб скорости. Всё равно я делаю прибор для школьного эксперимента, а там тысячи выборок в секунду не важны.
готовый не буду юзать: сложно это. просто в дипломе напишу, что "есть в мире подобные протоколы, например Modbus".
Фрейм = Заголовок(признак начала) - Длина_данных - Данные - Контрольная сумма.

1) Что выбрать в качестве начала пакета?
2) Какой длины заголовка будет достаточно?
3) Контрольную сумму вычислять от данных?
4) Какой алгоритм контрольной суммы лучше использовать? (чтобы была простая реализация и, опционально, высокая скорость)
PM MAIL WWW ICQ   Вверх
ProgramerForever
  Дата 21.5.2010, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: нет
Всего: 5



Сделал так:

Запрос:
с_CPX
Ответ:
OKD

с_ - заголовок
C - номер команды
P - параметр команды
X - контрольная сумма (C Xor P)

OK - заголовок ответа
D - возвращаемые данные
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0390 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.