реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> 3 PICа по RS485
Артемko
сообщение Feb 10 2016, 12:12
Сообщение #1





Группа: Участник
Сообщений: 6
Регистрация: 10-02-16
Пользователь №: 90 408



Всем здравствуйте!
Недавно начал разбираться с МК , точнее с их передачей данных на другие МК, остановился на USART, такой вопрос:
Мне нужно обмениваться данными между 3 МК, но мне не понятно, допустим 1 передает, а 2 других принимают, как передатчик понимает, что приемник готов принять данные?
Вдруг случится так, что в регистр передатчика я уже записал какие либо данные, а другие МК еще не успели включиться на прием(МК включился с задержкой), как это решается?
Будет ли передатчик ждать появления приемника и как он это поймет?
Не могли бы направить в какую сторону мне рыть по правильному алгоритму обмена.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Feb 10 2016, 16:26
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 167
Регистрация: 21-05-10
Пользователь №: 57 439



Эти проблемы решаются протоколом.
Например. Одно устройство мастер и оно всем посылает сообщения с инструкциями, после чего переключается на прием, чтобы принять ответ.

Допустим устройство 2 должно переслать пакет устройству 3. Мастер устройство 1 посылает команду устройству 2. Устройство 2 после обработки команды переключается на передачу и передает требуемый пакет.
Go to the top of the page
 
+Quote Post
Артемko
сообщение Feb 11 2016, 06:01
Сообщение #3





Группа: Участник
Сообщений: 6
Регистрация: 10-02-16
Пользователь №: 90 408



Цитата(Tarbal @ Feb 10 2016, 19:26) *
Эти проблемы решаются протоколом.
Например. Одно устройство мастер и оно всем посылает сообщения с инструкциями, после чего переключается на прием, чтобы принять ответ.

Допустим устройство 2 должно переслать пакет устройству 3. Мастер устройство 1 посылает команду устройству 2. Устройство 2 после обработки команды переключается на передачу и передает требуемый пакет.


Понятно. А вот если я записал в регистр передатчика 1 байт и продолжаю выполнять свою программу дальше, судя из описания на микроконтроллер передача начнется немедленно, а что если в тот момент когда я записывал на микроконтроллере приемнике еще даже питания нету или его код еще не дошел до строчки включения приемника uart , будет ли передатчик ждать подключения приемника или этот байт просто пропадет куда то? Как происходит эта синхронизация?
Go to the top of the page
 
+Quote Post
theBMV
сообщение Feb 11 2016, 08:22
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940



Вы сейчас говорите о контроле потока. Существуют разные методы контроля: программные (например XON XOFF) и аппаратные (например CTS/RTS в RS-232), в которых сигналы готов/занят передаются по отдельным проводам. В случае простого полудуплексного RS-485 никто конечно же никого ждать не будет.
Go to the top of the page
 
+Quote Post
Артемko
сообщение Feb 11 2016, 13:57
Сообщение #5





Группа: Участник
Сообщений: 6
Регистрация: 10-02-16
Пользователь №: 90 408



Цитата(theBMV @ Feb 11 2016, 11:22) *
Вы сейчас говорите о контроле потока. Существуют разные методы контроля: программные (например XON XOFF) и аппаратные (например CTS/RTS в RS-232), в которых сигналы готов/занят передаются по отдельным проводам. В случае простого полудуплексного RS-485 никто конечно же никого ждать не будет.

Вот это я и хотел узнать... Спасибо

Сообщение отредактировал Артемko - Feb 11 2016, 13:58
Go to the top of the page
 
+Quote Post
Артемko
сообщение Mar 16 2016, 14:19
Сообщение #6





Группа: Участник
Сообщений: 6
Регистрация: 10-02-16
Пользователь №: 90 408



Еще раз здравствуйте!
Появился у меня тут новый вопрос. Вот к примеру есть приемник и передатчик UART, идет передача- всё нормально, передача заканчивается- и тут приемник должен освободить буфер для приема новых данных, мы копируем содержимое буфера в какую либо переменную и буфер пуст. На это ушло у нас допустим 10 тактов. А передатчик тем самым временем готовит новую партию данных сразу после отправки и допустим он эти данные закинул за 8 тактов, это получается буфер приемника еще не готов и произойдет рассинхронизация? Что делать в этом случае, добавлять задержку перед посылкой очередного байта?
Go to the top of the page
 
+Quote Post
Baser
сообщение Mar 16 2016, 14:51
Сообщение #7


Просто Che
*****

Группа: Свой
Сообщений: 1 225
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Ждать не нужно.
В приемнике УАРТа есть сдвиговый регистр, который принимает байт и есть регистр приемника, из которого вы читаете байт, когда он весь принят и переписан УАРТом в регистр приемника. Прерывание возникает когда принятый байт уже в регистре приемника и сдвиговый регистр пустой и готов принимать следующий байт. У вас есть время в один байт, чтобы прочесть принятый байт, иначе возникнет ошибка Overrun.
В ПИКах кроме того есть фифо на прием, от одного до четырех байт.


А вообще, вам лучше скачать с сайта Микрочипа примеры и в них поразбираться, сразу большая часть вопросов отпадет sm.gif
Go to the top of the page
 
+Quote Post
Артемko
сообщение Mar 17 2016, 05:35
Сообщение #8





Группа: Участник
Сообщений: 6
Регистрация: 10-02-16
Пользователь №: 90 408



Цитата(Baser @ Mar 16 2016, 17:51) *
Ждать не нужно.
В приемнике УАРТа есть сдвиговый регистр, который принимает байт и есть регистр приемника, из которого вы читаете байт, когда он весь принят и переписан УАРТом в регистр приемника. Прерывание возникает когда принятый байт уже в регистре приемника и сдвиговый регистр пустой и готов принимать следующий байт. У вас есть время в один байт, чтобы прочесть принятый байт, иначе возникнет ошибка Overrun.
В ПИКах кроме того есть фифо на прием, от одного до четырех байт.


А вообще, вам лучше скачать с сайта Микрочипа примеры и в них поразбираться, сразу большая часть вопросов отпадет sm.gif


Спасибо, да байта для чтения вполне должно быть достаточно... А на сайте микрочипа на оффициальном?
Go to the top of the page
 
+Quote Post
Siargy
сообщение Mar 17 2016, 07:12
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 28-01-10
Из: Минск
Пользователь №: 55 126



возьмите к примеру проект бутлоадера на уарт. там сразу и рабочий протокол будет.

например мастер посылает пакет, заканчивающийся контрольной суммой
ведомый отвечает <ок> если пакет принят.

http://ww1.microchip.com/downloads/en/AppNotes/01310a.pdf


--------------------
Святло ў цемры заўседы свеціць
Go to the top of the page
 
+Quote Post
Baser
сообщение Mar 17 2016, 11:00
Сообщение #10


Просто Che
*****

Группа: Свой
Сообщений: 1 225
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Артемko @ Mar 17 2016, 07:35) *
А на сайте микрочипа на оффициальном?

Конечно. Документацию лучше читать в оригинале, меньше ошибок sm.gif

Цитата(Siargy @ Mar 17 2016, 09:12) *
возьмите к примеру проект бутлоадера на уарт. там сразу и рабочий протокол будет.

Думаю, для начинающего тяжеловато будет, там описание краткое и картинок нет rolleyes.gif

Какое у вас семейство ПИКов?
Вот для 8-битных можете посмотреть:
Asynchronous Communications with the PICmicro® USART
Там и описание и код есть.

з.ы. глянул код, он там на асме. Да, старая Апликуха. Ну хоть почитайте описание. И поищите что-нибудь новее.
Хотя знание ассемблера никогда не повредит, хотя сейчас программировать нужно на Си, время ускоряется... sm.gif
Go to the top of the page
 
+Quote Post
Артемko
сообщение Mar 21 2016, 06:09
Сообщение #11





Группа: Участник
Сообщений: 6
Регистрация: 10-02-16
Пользователь №: 90 408



Цитата(Baser @ Mar 17 2016, 14:00) *
Конечно. Документацию лучше читать в оригинале, меньше ошибок sm.gif


Думаю, для начинающего тяжеловато будет, там описание краткое и картинок нет rolleyes.gif

Какое у вас семейство ПИКов?
Вот для 8-битных можете посмотреть:
Asynchronous Communications with the PICmicro® USART
Там и описание и код есть.

з.ы. глянул код, он там на асме. Да, старая Апликуха. Ну хоть почитайте описание. И поищите что-нибудь новее.
Хотя знание ассемблера никогда не повредит, хотя сейчас программировать нужно на Си, время ускоряется... sm.gif


У меня пики 8 битные, pic18. Ассемблер я знаю, но давно им не пользовался и еще сейчас с ним разбираться не очень хочется, понадобится много времени на продумывание кода... Спасибо. в принципе мне бы алгоритм, а как написать я разберусь. Пишу всё дело в МИКРОС , там есть встроенная библиотека, но там тупо передача и прием, а мне нужно, чтоб еще адрес распознавался, 9 бит... Спасибо, читаю мануал, там вроде есть, как делается, буду пробывать.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 21 2016, 06:20
Сообщение #12


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 7 368
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Откуда взялось это идиотское "пробЫвать" у каждого третьего? Вы, что, в школах не учились? Задрали уже!
Предлагаю банить на день за такое написание. Включая модераторов (есть).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th May 2017 - 15:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01437 секунд с 7
ELECTRONIX ©2004-2016