Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 3 PICа по RS485
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Артемko
Всем здравствуйте!
Недавно начал разбираться с МК , точнее с их передачей данных на другие МК, остановился на USART, такой вопрос:
Мне нужно обмениваться данными между 3 МК, но мне не понятно, допустим 1 передает, а 2 других принимают, как передатчик понимает, что приемник готов принять данные?
Вдруг случится так, что в регистр передатчика я уже записал какие либо данные, а другие МК еще не успели включиться на прием(МК включился с задержкой), как это решается?
Будет ли передатчик ждать появления приемника и как он это поймет?
Не могли бы направить в какую сторону мне рыть по правильному алгоритму обмена.
Tarbal
Эти проблемы решаются протоколом.
Например. Одно устройство мастер и оно всем посылает сообщения с инструкциями, после чего переключается на прием, чтобы принять ответ.

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

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


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

Вот это я и хотел узнать... Спасибо
Артемko
Еще раз здравствуйте!
Появился у меня тут новый вопрос. Вот к примеру есть приемник и передатчик UART, идет передача- всё нормально, передача заканчивается- и тут приемник должен освободить буфер для приема новых данных, мы копируем содержимое буфера в какую либо переменную и буфер пуст. На это ушло у нас допустим 10 тактов. А передатчик тем самым временем готовит новую партию данных сразу после отправки и допустим он эти данные закинул за 8 тактов, это получается буфер приемника еще не готов и произойдет рассинхронизация? Что делать в этом случае, добавлять задержку перед посылкой очередного байта?
Baser
Ждать не нужно.
В приемнике УАРТа есть сдвиговый регистр, который принимает байт и есть регистр приемника, из которого вы читаете байт, когда он весь принят и переписан УАРТом в регистр приемника. Прерывание возникает когда принятый байт уже в регистре приемника и сдвиговый регистр пустой и готов принимать следующий байт. У вас есть время в один байт, чтобы прочесть принятый байт, иначе возникнет ошибка Overrun.
В ПИКах кроме того есть фифо на прием, от одного до четырех байт.


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


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


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

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

http://ww1.microchip.com/downloads/en/AppNotes/01310a.pdf
Baser
Цитата(Артем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
Артемko
Цитата(Baser @ Mar 17 2016, 14:00) *
Конечно. Документацию лучше читать в оригинале, меньше ошибок sm.gif


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

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

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


У меня пики 8 битные, pic18. Ассемблер я знаю, но давно им не пользовался и еще сейчас с ним разбираться не очень хочется, понадобится много времени на продумывание кода... Спасибо. в принципе мне бы алгоритм, а как написать я разберусь. Пишу всё дело в МИКРОС , там есть встроенная библиотека, но там тупо передача и прием, а мне нужно, чтоб еще адрес распознавался, 9 бит... Спасибо, читаю мануал, там вроде есть, как делается, буду пробывать.
ViKo
Откуда взялось это идиотское "пробЫвать" у каждого третьего? Вы, что, в школах не учились? Задрали уже!
Предлагаю банить на день за такое написание. Включая модераторов (есть).
Siargy
Цитата(ViKo @ Mar 21 2016, 09:20) *
Предлагаю банить на день за такое написание.

к вашэму нещастью это не форум грамарнацы
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.