Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Передача данных между МК


Передача данных между МК

Сообщений 1 страница 14 из 14

1

Добрый день дорогие форумчане.
Возникла бредовая идея, которую я пытаюсь реализовать. Идея состоит в том что на одной плате находятся 4 МК. Один из них отвечает за коммуникацию с ПК по HID USB, и должен передавать принятые данные в остальные 3 МК. Эти 3 МК, в свою очередь, могут отправлять данные обратно в ПК. Может кто занимался такими вещами? На первый взгляд это UART, но как выполнить арбитраж шины и можно ли на одну шину UART подключить 3 МК?
http://s5.uploads.ru/t/NqORp.jpg

0

2

если задержки между опросами всех МК нестрашны, то простой протокол: стартовый байт, посылка Хбайт (фиксированное значение), контрольная сумма посылки, стоповый байт
у меня так мега128 с 3 МК на разных платах общается, токовая петля на usart
только оптроны побыстрее поставьте, чтобы хотя бы на 200 кгц работали, обычные pc817 только до 80 кгц, потому работают уверенно только на 4800 Бод

0

3

sva-don написал(а):

Может кто занимался такими вещами? На первый взгляд это UART, но как выполнить арбитраж шины и можно ли на одну шину UART подключить 3 МК?

Может так.

0

4

Александр Д. написал(а):

если задержки между опросами всех МК нестрашны, то простой протокол: стартовый байт, посылка Хбайт (фиксированное значение), контрольная сумма посылки, стоповый байт
у меня так мега128 с 3 МК на разных платах общается, токовая петля на usart
только оптроны побыстрее поставьте, чтобы хотя бы на 200 кгц работали, обычные pc817 только до 80 кгц, потому работают уверенно только на 4800 Бод

Да там и опросов то никаких нет. С ПК будет передаваться 36 байт по USB. Дальше контроллер USB тупо транслирует это все на 3 МК. Каждый из них из этого массива выбирает то, что ему нужно. Я пытался сделать это все на RS485, но столкнулся с большой проблемой. Программа на ПК очень быстро делает выборки и должна каждую выборку отсылать в МК, но как только она встречает строку передачи, то тупо все зависает. RS232 не успевает отрабатывать на скорости 115200. Пишу на Delphi.
Решил перейти на HID USB, хотя там скорость поменьше будет. Да, все три МК на одной плате стоят. Конечно RS485 был бы лучше, исчезает один контроллер. Вместо 4-х остается 3.

0

5

sasha_1973 написал(а):

sva-don написал(а):
Может кто занимался такими вещами? На первый взгляд это UART, но как выполнить арбитраж шины и можно ли на одну шину UART подключить 3 МК?
Может так.

О, спасибочки. Думаю то, что нужно. Вот только как это будет выглядеть в железе? Я имею ввиду как одна нога будет влиять на другую? Мне кажется, что ногу Rx надо подтянуть к питанию, для надежности.

0

6

sva-don написал(а):

Вот только как это будет выглядеть в железе?


Так-же, как и в Протеусе.

sva-don написал(а):

Я имею ввиду как одна нога будет влиять на другую? Мне кажется, что ногу Rx надо подтянуть к питанию, для надежности.


Никак. Принцип работы 9-битного USART исключает коллизии, при правильном подходе.

В единицу времени, работают только мастер и слейв с текущим адресом, все остальные молчат. Посмотрите исходник, там всё прокомментировано.

0

7

sva-don написал(а):

Программа на ПК очень быстро делает выборки и должна каждую выборку отсылать в МК, но как только она встречает строку передачи, то тупо все зависает.

Ну так просто надо немного изменить алгоритм, нужно сделать ожидание ответа/разрешение на отправку.

0

8

RDW написал(а):

sva-don написал(а):

    Программа на ПК очень быстро делает выборки и должна каждую выборку отсылать в МК, но как только она встречает строку передачи, то тупо все зависает.

Ну так просто надо немного изменить алгоритм, нужно сделать ожидание ответа/разрешение на отправку.

К сожалению этого нельзя делать. Там скорость очень важна. Это выборки из звука обработанные FFT и моим алгоритмом. ЦМУ. Если задержка, то музыка и цвет разбегаются в восприятии.  :nope:

0

9

Доброго времени.
Помогите решить задачу.

If Dmod.0 = 1 Then Print ; Urms ; " " ; Irms - вот строка программы передачи данных по UART , в зависимости от величины числа переменной Urms скажем от 0-100 меняет свое знакоместо переменная Irms , можно ли каким то образом задать знакоместо переменной Irms ?

0

10

если я верно понял:
или задать это в Fuses (всегда будет одна длина, но вырастет код и есть требование к типу переменной), или высчитывать позицию и отображать сперва пробелы через SPC (извратно и неудобно)

0

11

Может я не правильно задал вопрос, мне нужно при передачи данных по UART задать знакоместо (без использования пробела) как на LCD .

Отредактировано olegkaras (2016-07-27 23:26:51)

0

12

я вам про это и говорю:
или фиксированно задать длину переменной, или после него выдавать нужное количество пробелов

0

13

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

0

14

мне бы выспаться))))

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Передача данных между МК