Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/65: Рейтинг темы: голосов - 65, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
1

UART тройник

14.08.2014, 14:46. Показов 12088. Ответов 30
Метки нет (Все метки)

Подкинул мне мой знакомый халтурку. Он собирает модель самоходного игрушечного робота на гусеницах, из запчастей купленных в хоббийном нигазине. И понадобился ему так называемый "UART тройник", то есть ему нужно по безпроводному модему отправлять и получать данные из управляемой модели.
На роботе установлен "мозг" который управляет самим шасси, мозг управляется по серийному порту, а так же отправляет обратно разные данные из телеметрии.
Также он туда хочет присобачить обычную камеру видео-наблюдения, которая также управляется серийным портом.
Для управления роботом и камерой, будет использоваться один безпроводовий канал через UART-модем.
И мне нужно сабацать два устройства "UART тройник", одно будет в роботе смешивать два UART канала, от камеры и мозгов, а другое на пульте управления разъединять замешанные канали.
У меня очень мало идей как это организовать. Думал взять АВРку из четырьмя UART портами и сообразить что то на ардуино.
Но понятия не имею из чего начать? Подскажите колеги, как бы поступили вы, из чего начать?

<Изображение удалено>
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.08.2014, 14:46
Ответы с готовыми решениями:

UART
Если у меня одно устройство всегда UART-передатчик, а второе всегда UART-приёмник, то будет-ли...

UART
Если есть два AVR контролера, которые должны между собой общаться по UART (именно по UART не SPI...

Правильный UART
Раз уж я тут зарегистрировался... Значит так, у меня в универе есть такой преподаватель, который...

MikroPascal и UART
Делаю пример из хелпа паскаля. UART1_Init(9600); // Initiotyze UART module...

30
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
14.08.2014, 15:47 2
Думал взять АВРку из четырьмя UART портами
Я бы тоже так поступил.
0
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
14.08.2014, 16:07 3
[QUOTE="YTYOUT"][QUOTE="Цитата:[/QUOTE]
Думал взять АВРку из четырьмя UART портами
Я бы тоже так поступил.
Хехе, а что кодить? Как слить, а потом разделить данные, по какому принципу?
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
14.08.2014, 16:21 4
1. передавать данные через радио парами байт. первый байт - номер канала (0х01 или 0х02), второй байт - данные. Периодически передавать синхропоследовательность 0x00 0x00
2. Использовать девятибитный байт. Девятым битом кодровать номер канала
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
14.08.2014, 16:23 5
У тебя восемь бит или 9 бит. Как минимум два младшие ( старшие) "лишние". Вот их и используй как префиксы.
0
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
14.08.2014, 16:51 6
Цитата Сообщение от Stiit.mi
1. передавать данные через радио парами байт. первый байт - номер канала (0х01 или 0х02), второй байт - данные. Периодически передавать синхропоследовательность 0x00 0x00
2. Использовать девятибитный байт. Девятым битом кодровать номер канала
При этом скорость между девайсами упадет в два разы, если попарно?
Постоянно туда-сюда будут ганятся данные только между мозгами и приемо-передатчиком и только изредка будет передаваться сигнал поворота камеры. Короче закодить первый UART как 0х01, а второй как 0х02?
А на станцие управления просто вылавливать 0х01 и 0х02, и данные сливать в нужный порт?
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
14.08.2014, 17:00 7
Так , их всего два ? Тогда режим мультиплексирования (9 бит), описан в каждом DS
0
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
14.08.2014, 17:07 8
Цитата Сообщение от YTYOUT
Так , их всего два ? Тогда режим мультиплексирования (9 бит), описан в каждом DS
Устройства два, шасси из мозгами и камера наблюдения из управлением, все как нарисовано в начале поста.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
14.08.2014, 17:10 9
Ну и 9 бит имеет два состояния
0
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 206
14.08.2014, 17:55 10
Ставьте АВРку.
Динные с двух UART портов могут поступать одновременно - нужна буферизация.
Также нет гарантии, что скорость UART всех устройств на роботе удастся сконфигурировать под одну скорость.
При необходимости будет возможность расширить количество каналов для смешивания.

Динные на модем можно отправлять пачками по 2 байта, номер канала+байт данных. Но в этом случае скорость обмена падает в 2 раза.
Можно передавать в режиме 9 бит, 1 бит на номер канала + 8 бит на данные. Но в этом случае количество каналов будет ограничено двумя.
0
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
14.08.2014, 18:19 11
Цитата Сообщение от Ftopyx
...Также нет гарантии, что скорость UART всех устройств на роботе удастся сконфигурировать под одну скорость.
....
Как нет гарантии того, что протоколы совпадут хотя бы частично. В одном случае могут передаваться ASCII, в другом HEX. Длина посылки скорее всего тоже разная.
Принимать от компа на одной скорости, рассовывать по своим буферам и делиться с девайсами на своих скоростях и по своему протоколу. В обратную сторону аналогично.
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
14.08.2014, 18:45 12
Не надо использовать 9 бит: однажды может понадобиться подсоединить к PC - наплачетесь.

Мультиплексирование - есть много методов, с ходу я бы сделал esc-последовательности, как в PPP:
1. Резервируем несколько специальных символов (желательно из тех, что редко используются) - скажем, 0xF0..0xFF.
2. Символ 0xF0 - включение нулевого канала, 0xF1 - первого и т.д, т.е. если на uart3 пришёл такой символ - последующие отправляем на соответствующий порт, ну и наоборот, если на комп по WiFi пришёл такой код - значит, данные с соответствующего порта
3. Символ 0xFF - escape. Скажем, последовательность 0xFF 0x03 используется для передачи байта данных 0xF3.

Динные обычно будут идти по очереди с разных портов, а не чередоваться "байт оттуда, байт отсюда" - изрядно выиграем в передаваемом объёме.

Ну или эстеты могут сделать вообще нормальную передачу пакетами, с длиной, номером канала и контрольной суммой для каждого пакета, как это сделано в IP.
0
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
15.08.2014, 19:07 13
Еще возникло несколько вопросов по даной теме, но они скорей по части программирования.
1)Есть например кусок строки присланой в серийный порт:"101 off mishka 17 1" -это чисто от фонаря придуманая строка. Но каждое слово/цифра что то означают, например: 101-строка в которую записывать, off-подчеркивание выключено, mishka-сама строка которую нужно записать н 101 ...
Как мне это правильно обработать, если символи могут быть все время произвольной длинны?
2)Все то самое, только строки имеют указатели:" $ 101 # off ST# mishka BP# 17 L# 1"
Понимаю что такое легче обработать, но как розпихать данные по указателях в свои переменные? Какую програмную конструкцию использовать?
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
15.08.2014, 19:55 14
А я в своих велосипедах вешал кучу железяк на один UART и просто в девятибитном режиме работал. У МК это вообще элементарно реализуется, а в компьютере просто четность надо у каждого байта проверять и правильно выставлять модель "четности" (либо можно свой модуль ядра написать, т.к. тот, что есть, не умеет произвольно задавать 9 бит).

Но работало все четко: если девятый бит не установлен, команда считается "широковещательной" и ее все слушают (скажем, одно и то же всем сразу передать, либо выбрать адрес нужного МК), а вот когда уже девятый бит установлен, никто, кроме активного МК, в диалоге не участвует. Адрес зашивал во флеш МК при помощи отдельной команды (поочередно вешал на шину все устройства по-одиночке, а потом давал команду установки номера). Удобно, однако. Потому что вариант с CAN-шиной был бы значительно дороже (CAN-контроллеры для компьютера дорогие, а USB-шные CANы не всегда работают нормально).
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
15.08.2014, 19:59 15
Как мне это правильно обработать, если символи могут быть все время произвольной длинны?
Складывать пришедшие данные в буфер и посимвольно обрабатывать в зависимости от контекста. Ничего сложного.
Вот только придется разделитель какой-нибудь придумать.
0
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
15.08.2014, 20:47 16
Цитата Сообщение от Iddy_Im
А я в своих велосипедах вешал кучу железяк на один UART и просто в девятибитном режиме работал. У МК это вообще элементарно реализуется, а в компьютере просто четность надо у каждого байта проверять и правильно выставлять модель "четности" (либо можно свой модуль ядра написать, т.к. тот, что есть, не умеет произвольно задавать 9 бит)....
Ну как бе компа нету, тройник соединитель на роботе и тройник розеденитиль на пульте управления.
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
15.08.2014, 21:44 17
Ну и в чем проблема? Если у вас вообще разные линии UART, то какой смысл там делать сплиттер-делитель? Команды просто разные используете - и всe!
0
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 2,309
15.08.2014, 22:52 18
Лучше конечно делать не UART... Медленный он, для видео надо что-то быстрее.

И если надо по одному каналу слать данные разной принадлежности, то надо делать протокол с пакетами.
А пакет - это заголовок и "хвост".
К примеру формат пакета может быть таким:
Первый байт: 0х55 - заголовок
Второй байт: длина пакета в байтах (словах)
Третий и так далее байты: данные
Последний байт: 0хFF - хвост

В данных можно зарезервировать байт (или несколько) под ID устройства, которому эти данные предназначаются.
Заголовок, хвост и длина пакета нужны для того, чтобы определить целостность полученных данных. Если по UART прилетает байт и он не является заголовком - то не обрабатываем его.

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

Кароч - так надежнее. Но это только если шиной пользуется куча устройств. С двумя устройствами лучше конечно 9 бит использовать.

Есть еще вариант с 9-бит посылкой. К примеру когда 9-ый бит равен нулю - то значит остальные 8 - ID устройства, которому предназначены данные. Если 9-ый бит равен 1 - то это данные для устройства, ID которого был в последней посылке с 9-ым битом равным 0.
0
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 225
15.08.2014, 22:53 19
То есть можна не заморочеватся из разработкой такого девайса, а просто повесить два уарт порта на один канал модема?
Так не выйдет, потому что устройства работают на разних скоростях и одно устройство (камера) не настраевается, она только принимает команды. У камеры свой протокол управления.
У меня тут уже вырисовалась идея как заставить все работать.
На роботе "тройник", будет просто слушать не пришла ли команда управления для камеры. А контролер будет преобразововать команду для нужной скорости камери и отправлять в камеру.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
15.08.2014, 23:59 20
1)Есть например кусок строки присланой в серийный порт:"101 off mishka 17 1" -это чисто от фонаря придуманая строка. Но каждое слово/цифра что то означают, например: 101-строка в которую записывать, off-подчеркивание выключено, mishka-сама строка которую нужно записать н 101 ...
Как мне это правильно обработать, если символи могут быть все время произвольной длинны?
2)Все то самое, только строки имеют указатели:" $ 101 # off ST# mishka BP# 17 L# 1"
Понимаю что такое легче обработать, но как розпихать данные по указателях в свои переменные? Какую програмную конструкцию использовать?
Ох , и задолбаешься ты их расшифровывать . Перефразируя известное выражение "Команда должна быть как -выстрел" Коротко и ясно.
Один байт "поддерживает" 255 команд. Сядь распиши на листке все команды, которые тебе необходимы и проставь им числа от 1- до 255.
И заметь , что большинство склоняется к использованию 9-го бита, который и разделит команды .
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2014, 23:59

Помощь в написании контрольных, курсовых и дипломных работ здесь.

UART строка
Здравствуйте уважаемые форумчане! Имеются: 1)кривые руки 2)Microsoft Visual C# 2010 Express...

Проблема с UART
Здраствуйте! Хочу общатся с МК через UART, но возникли проблемы... использую st232bn и МК...

Проблема с UART
День добрый. Продолжаю изучать AVR и наткнулся на проблему при изучении UART(работаю с платой...

UART To USB
Что значит преобразователь UART to USB Например этот http://www.getchip.net/posts/040-uartrs ......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.