Добрый день дорогие форумчане.
Возникла бредовая идея, которую я пытаюсь реализовать. Идея состоит в том что на одной плате находятся 4 МК. Один из них отвечает за коммуникацию с ПК по HID USB, и должен передавать принятые данные в остальные 3 МК. Эти 3 МК, в свою очередь, могут отправлять данные обратно в ПК. Может кто занимался такими вещами? На первый взгляд это UART, но как выполнить арбитраж шины и можно ли на одну шину UART подключить 3 МК?
Передача данных между МК
Сообщений 1 страница 14 из 14
Поделиться12016-07-06 12:54:33
Поделиться22016-07-06 15:58:59
если задержки между опросами всех МК нестрашны, то простой протокол: стартовый байт, посылка Хбайт (фиксированное значение), контрольная сумма посылки, стоповый байт
у меня так мега128 с 3 МК на разных платах общается, токовая петля на usart
только оптроны побыстрее поставьте, чтобы хотя бы на 200 кгц работали, обычные pc817 только до 80 кгц, потому работают уверенно только на 4800 Бод
Поделиться32016-07-06 16:39:59
Может кто занимался такими вещами? На первый взгляд это UART, но как выполнить арбитраж шины и можно ли на одну шину UART подключить 3 МК?
Поделиться42016-07-06 17:11:17
если задержки между опросами всех МК нестрашны, то простой протокол: стартовый байт, посылка Хбайт (фиксированное значение), контрольная сумма посылки, стоповый байт
у меня так мега128 с 3 МК на разных платах общается, токовая петля на usart
только оптроны побыстрее поставьте, чтобы хотя бы на 200 кгц работали, обычные pc817 только до 80 кгц, потому работают уверенно только на 4800 Бод
Да там и опросов то никаких нет. С ПК будет передаваться 36 байт по USB. Дальше контроллер USB тупо транслирует это все на 3 МК. Каждый из них из этого массива выбирает то, что ему нужно. Я пытался сделать это все на RS485, но столкнулся с большой проблемой. Программа на ПК очень быстро делает выборки и должна каждую выборку отсылать в МК, но как только она встречает строку передачи, то тупо все зависает. RS232 не успевает отрабатывать на скорости 115200. Пишу на Delphi.
Решил перейти на HID USB, хотя там скорость поменьше будет. Да, все три МК на одной плате стоят. Конечно RS485 был бы лучше, исчезает один контроллер. Вместо 4-х остается 3.
Поделиться52016-07-06 17:13:46
sva-don написал(а):
Может кто занимался такими вещами? На первый взгляд это UART, но как выполнить арбитраж шины и можно ли на одну шину UART подключить 3 МК?
Может так.
О, спасибочки. Думаю то, что нужно. Вот только как это будет выглядеть в железе? Я имею ввиду как одна нога будет влиять на другую? Мне кажется, что ногу Rx надо подтянуть к питанию, для надежности.
Поделиться62016-07-06 17:35:51
Вот только как это будет выглядеть в железе?
Так-же, как и в Протеусе.
Я имею ввиду как одна нога будет влиять на другую? Мне кажется, что ногу Rx надо подтянуть к питанию, для надежности.
Никак. Принцип работы 9-битного USART исключает коллизии, при правильном подходе.
В единицу времени, работают только мастер и слейв с текущим адресом, все остальные молчат. Посмотрите исходник, там всё прокомментировано.
Поделиться72016-07-06 18:38:59
Программа на ПК очень быстро делает выборки и должна каждую выборку отсылать в МК, но как только она встречает строку передачи, то тупо все зависает.
Ну так просто надо немного изменить алгоритм, нужно сделать ожидание ответа/разрешение на отправку.
Поделиться82016-07-07 08:31:11
sva-don написал(а):
Программа на ПК очень быстро делает выборки и должна каждую выборку отсылать в МК, но как только она встречает строку передачи, то тупо все зависает.
Ну так просто надо немного изменить алгоритм, нужно сделать ожидание ответа/разрешение на отправку.
К сожалению этого нельзя делать. Там скорость очень важна. Это выборки из звука обработанные FFT и моим алгоритмом. ЦМУ. Если задержка, то музыка и цвет разбегаются в восприятии. 
Поделиться92016-07-27 22:41:53
Доброго времени.
Помогите решить задачу.
If Dmod.0 = 1 Then Print ; Urms ; " " ; Irms - вот строка программы передачи данных по UART , в зависимости от величины числа переменной Urms скажем от 0-100 меняет свое знакоместо переменная Irms , можно ли каким то образом задать знакоместо переменной Irms ?
Поделиться102016-07-27 23:06:37
если я верно понял:
или задать это в Fuses (всегда будет одна длина, но вырастет код и есть требование к типу переменной), или высчитывать позицию и отображать сперва пробелы через SPC (извратно и неудобно)
Поделиться112016-07-27 23:26:02
Может я не правильно задал вопрос, мне нужно при передачи данных по UART задать знакоместо (без использования пробела) как на LCD .
Отредактировано olegkaras (2016-07-27 23:26:51)
Поделиться122016-07-27 23:46:49
я вам про это и говорю:
или фиксированно задать длину переменной, или после него выдавать нужное количество пробелов
Поделиться132016-07-27 23:54:31
Если я выложу исходник , Вы сможете задать длину переменной?
Поделиться142016-07-28 08:01:56
мне бы выспаться))))