Auratos 0 23 июля, 2018 Опубликовано 23 июля, 2018 · Жалоба Добрый день. Попала ко мне в руки платка с контроллером PIC18F25K22 и проект для нее. Стоит внешний генератор на 4,9152МГц и включен PLL: #pragma config FOSC = HSMP // частота тактового генератора #pragma config PLLCFG = ON #pragma config PRICLKEN = ON #pragma config FCMEN = OFF ... Стоит задача оценить, с какой максимальной частотой можно с помощью этого контроллера передавать через RS-485 на компьютер данные (число float, 4 байта), если не брать в расчет задержки на выполнение сторонних алгоритмов (чистый проект), а сконцентрироваться только на обмене по сети. В данный момент проект сконфигурирован на скорость 9600 бод: void usart_init(void) { UINT_32 tmp; TRISCbits.TRISC6 = 0; // установить 0 вывод порта А как выход ANSELCbits.ANSC6 = 1; tmp = 4915200; // вычисление частоты USART по формуле SPBRG = Fosc/16 - 1 tmp /= 4; tmp /= 9600; tmp--; //не Fosc, а 4xFosc SPBRG1 = (BYTE)tmp; // устанавливаем частоту USART1 TXSTA1bits.SYNC = 0;// установка асинхронного режима TXSTA1bits.BRGH = 1; RCSTA1bits.SPEN = 1;// включить модуль USART1 PIR1bits.RCIF = 0; // очистить буфер приемника PIE1bits.RCIE = 1; // прерывание от приемника USART разрешено PIE1bits.TXIE = 0; // прерывание от передатчика USART запрещено IPR1bits.RCIP = 0; // приоритет прерывания от приемника USART - низкий IPR1bits.TXIP = 0; // приоритет прерывания от передатчика USART - низкий TXSTA1bits.TX9 = 0; // 8 разрядная передача RCSTA1bits.RX9 = 0; // 8 бит принятых данных RCSTA1bits.CREN = 1; // разрешить прием TXSTA1bits.TXEN = 1; // разрешить передачу } Нашел в даташите табличку со скоростями, настройками USART. Если вкратце, то на скорость влияют только 3 регистра: SYNC, BRGH и BRG16. В данном проект они сконфигурированы так: SYNC = 0, BRGH = 1, BRG16 = 0. Формально можно выставить максимальную скорость 115200 бод. Исходя из формулы V_bit = V_uart * d / (d + 1 + s + p) где: V_uart — скорость UART (например: 9600, 115200), бод; d — количество бит данных; s — количество стоповых бит; p — количество бит четности, p = 1 если бит четности присутствует, или p = 0 если бит четности отсутствует; единица в знаменателе отражает наличие стартового бита. Т.е. 1 бит на скорости 115200 бод будет передаваться в идеале со скоростью: 115200 * 8 / (8 + 1 +1 + 0) = 92160 бит/с = 11520 байт/с = 2880 float/c = 2,88 кГц. Подскажите, пожалуйста, способен ли данный контроллер работать на 115200? На сколько упадет частота с учетом задержек при передаче между байтами/внутри байта? Каким-нибудь ПО можно оценить скорость передачи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
@Ark 3 23 июля, 2018 Опубликовано 23 июля, 2018 · Жалоба Подскажите, пожалуйста, способен ли данный контроллер работать на 115200? Способен. Тактовую частоту лучше скорректировать. Например, взять кварц на 18.432 МГц и включить без PLL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 26 июля, 2018 Опубликовано 26 июля, 2018 · Жалоба Подскажите, пожалуйста, способен ли данный контроллер работать на 115200? На сколько упадет частота с учетом задержек при передаче между байтами/внутри байта? Каким-нибудь ПО можно оценить скорость передачи? 1. 115200 бод - это скорость передачи ОДНОГО БИТА и именно эта скорость является декларируемой в интерфейсах применяющих УАРТ. 2. При вашем кварце получить точно 115200 невозможно - получаемая сетка частот УАРТа допускает ближайшую частоту 111709. Это ошибка -3%. С такой ошибкой УАРТ будет работать с другим устройством, где выставлена скорость 115200 БЕЗ ВСЯКИХ ПРОБЛЕМ. 3. Совершенно непонятно о какой иной "скорости с учетом задержек" Вы пытаетесь рассуждать. Время передачи одного байта (режим 8 бит) равна 10*время передачи бита=86,8 мкс. Задержки между байтами определяются возможностями КОДА обрабатывать входящий и исходящий поток. Причем возможностями кода С ОБЕИХ СТОРОН. Нет и не может быть никаких нормативов по этому поводу. Если с обеих сторон на прием и на передачу работает ДМА, то брутто скорость будет почти не отличима от нетто. Если через прерывания, то зависит от упаковки данных в МК и латентности обработчика прерываний. Если в программном режиме - значит от латентности кода суперлупа (главного цикла). 4. Определить скорость обмена на уровне данных можно с помощью осциллографа и свободного пина, который инвертируется всякий раз, когда завершается прием блока данных. Смотрим осциллографом длительность импульса на этом пине и получаем брутто-скорость обмена. 5. Протокол обмена должен содержать элементы СИХРОНИЗАЦИИ данных, то есть нужно помимо самих данных передавать метки начала блока данных (при фиксированной длине блока), а так же слово верификации этих данных (CRC8, например). Кроме того, интерфейс RS485 может быть как дуплексным, так и полудуплексным. Сиречь, обмен может быть как одновременно в обе стороны, так и поочередно. Во втором случае появляются так же управляющие байты мастера к слейву с целью обозначить направление передачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 27 июля, 2018 Опубликовано 27 июля, 2018 · Жалоба Кроме того, интерфейс RS485 может быть как дуплексным, так и полудуплексным. Сиречь, обмен может быть как одновременно в обе стороны, так и поочередно. Во втором случае появляются так же управляющие байты мастера к слейву с целью обозначить направление передачи. Ремарка: RS485 - полудуплексный и никак иначе. Сигнал направления передачи обязан присутствовать. По этому интерфейсу можно передавать в разных направлениях только поочередно. Полнодуплексные интерфейсы с одновременной передачей в обе стороны - это к примеру RS422 или RS232. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 27 июля, 2018 Опубликовано 27 июля, 2018 · Жалоба Ремарка: Ремарка ошибочна. RS485 - это многоадресный (в т.ч. мультимастерный) дуплекс или полудуплекс С ВОЗМОЖНОСТЬЮ ВЕТВЛЕНИЯ линии RS422 - это дуплекс Р2Р Читаем: https://ru.wikipedia.org/wiki/RS-485 https://ru.wikipedia.org/wiki/EIA-422 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 27 июля, 2018 Опубликовано 27 июля, 2018 · Жалоба Ремарка ошибочна. RS485 - это многоадресный (в т.ч. мультимастерный) дуплекс или полудуплекс С ВОЗМОЖНОСТЬЮ ВЕТВЛЕНИЯ линии RS422 - это дуплекс Р2Р Читаем: https://ru.wikipedia.org/wiki/RS-485 https://ru.wikipedia.org/wiki/EIA-422 Я применяю эти интерфейсы на практике. Прежде чем давать ссылки на статьи, прочитайте что в них написано. Или покажите, как организовать дуплексную связь на одном интерфейсе RS485, который представляет собой физически одну дифференциальную линию. А RS422 - это по сути объединение двух интерфейсов RS485, где один канал передает данные в одну сторону, а другой - в другую. А совместно эти два канала способны обеспечить дуплексную связь между двумя точками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 27 июля, 2018 Опубликовано 27 июля, 2018 · Жалоба Я применяю эти интерфейсы на практике. И я применяю. Но ни Ваши применения, ни мои ничего не доказывают. Прежде чем давать ссылки на статьи, прочитайте что в них написано. Вы полагаете, что я не читал?)))) Можете ограничиться правой главной рамкой из статьи. Внизу этой рамки ПРЯМО указано на наличие и полнодуплексного и полудуплексного режимов, а так же обозначения сигналов для обоих этих случаев. Или покажите, как организовать дуплексную связь на одном интерфейсе RS485, который представляет собой физически одну дифференциальную линию. Это Ваша фантазия. RS485 может иметь как одну, так и две витых пары. И даже в даташитах Аналог девайса на ДУПЛЕКСНУЮ ADM488/489 прямо так и указано про RS485: http://www.analog.com/media/en/technical-d.../ADM488_489.pdf А RS422 - это по сути объединение двух интерфейсов RS485 Это так же Ваша фантазия. Мало того, я так же как и Вы долгое время был в аналогичном заблуждении. ЗЫ. В догон: https://www.maximintegrated.com/en/app-note...ndex.mvp/id/736 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 27 июля, 2018 Опубликовано 27 июля, 2018 · Жалоба Это так же Ваша фантазия. Мало того, я так же как и Вы долгое время был в аналогичном заблуждении. Может Вы сейчас снова находитесь в заблуждении, только уже в другом? Меня статья по первой ссылке ни в чём не убеждает. Она написана такими же людьми, как и мы. И табличка справа противоречит основному тексту. Строка 2: Регламентирует электрические параметры полудуплексной многоточечной дифференциальной линии связи типа «общая шина». Строка примерно 9: В стандарте RS-485 для передачи и приёма данных используется одна витая пара проводов, иногда сопровождаемая экранирующей оплеткой или общим проводом. Для меня лично эти параметры несовместимы с режимом работы "дуплекс". А по этой Вашей ссылке: http://www.analog.com/media/en/technical-d.../ADM488_489.pdf Приведена документация на компонент, который может применяться как в режиме RS485, так и в режиме RS422. Так вот Full Duplex возможен именно в режиме RS422. Вот фрагмент с 14 страницы этого документа: The most significant difference between the RS-422 and RS-485 is that the RS-485 drivers can be disabled, thereby allowing up to 32 receivers to be connected to a single line. Only one driver should be enabled at a time, but the RS- 485 standard contains additional specifications to guarantee device safety in the event of line contention. Для меня это означает, что одновременная передача и прием данных в интерфейсе RS485 невозможна, поэтому для этого интерфейса можно говорить только о полудуплексном режиме применения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 27 июля, 2018 Опубликовано 27 июля, 2018 · Жалоба В стандарте RS-485 для передачи и приёма данных используется одна витая пара проводов, иногда сопровождаемая экранирующей оплеткой или общим проводом. Мне начинает надоедать хождение по кругу: https://www.maximintegrated.com/en/app-note...ndex.mvp/id/736 http://ftp1.digi.com/support/documentation/90000848-88.pdf https://www.moxa.com/doc/manual/OPT8I/OPT8I_HIG_v1.pdf https://www.mikrocontroller.net/attachment/39674/digione.pdf http://dinorte.com.ar/pdf/RS485_RS422_Basics.pdf Нужно еще? Или все они ошибаются? Вот еще Аналог девайс с ЯВНЫМ указанием в заголовке на full duplex RS485 http://www.analog.com/media/en/technical-d...5_4856_4857.pdf Вот у Техаса https://www.ti.com/lit/ds/symlink/iso35.pdf http://www.farnell.com/datasheets/1856006.pdf Вот еще: https://www.surveillance-video.com/media/la...mport/D1315.pdf http://www.8051projects.net/files/public/1...s458_on_avr.pdf Можете сами поискать в интернете по ключевой фразе full duplex RS485 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 28 июля, 2018 Опубликовано 28 июля, 2018 · Жалоба Можете сами поискать в интернете по ключевой фразе full duplex RS485 Я попробовал поискать. Яндекс дает на ключевые слова "RS485 full duplex" - 45 миллионов результатов. А на слова "RS485 half duplex" - всего 30 миллионов результатов. Поэтому Вам присуждается победа по очкам. Хотя с точки зрения интернета full более модно, чем half, поэтому преимущество гарантировано. Однако для установления истины нужен первоисточник, а не вторичные материалы. Я попробовал поискать действующий стандарт TIA/EIA-485. Странно, но быстро найти не удалось, по крайней мере бесплатно. Если у кого то есть, прошу поделиться ссылкой. То что я находил, не может претендовать на абсолютную истину, например: http://www.interfacebus.com/Design_Connector_RS485.html В этом источнике, а также в огромном количестве других материалов в сети в первых строчках описания RS485 явно указано, что это полудуплексный интерфейс. Я допускаю для организации дуплекса применение двух каналов RS485 и понимаю отличия такого варианта от RS422. Но отношу такой вариант скорее к нестандартному использованию RS485. По крайней мере в реальных устройствах такого способа организации связи встречать не приходилось. Может не везло просто. Или наоборот, повезло не встретить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 28 июля, 2018 Опубликовано 28 июля, 2018 · Жалоба Я допускаю... Но отношу... Милейший, как Вы сами понимаете, мне совершенно безразлично что Вы допускаете и куда Вы это допущенное относите. Я, как и Вы, пользуюсь лишь общепринятой терминологией. А эта терминология ДОПУСКАЕТ использование четырехпроводной RS485. Гомерически смешно доказывать это или иное "по очкам". На основании чего я делаю окончательный вывод об ошибочности Вашего начального комментария. Тем более, что он не имел никакого отношения к поставленному ТС вопросу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 28 июля, 2018 Опубликовано 28 июля, 2018 · Жалоба Милейший, как Вы сами понимаете, мне совершенно безразлично что Вы допускаете и куда Вы это допущенное относите. Я, как и Вы, пользуюсь лишь общепринятой терминологией. А эта терминология ДОПУСКАЕТ использование четырехпроводной RS485. Гомерически смешно доказывать это или иное "по очкам". На основании чего я делаю окончательный вывод об ошибочности Вашего начального комментария. Тем более, что он не имел никакого отношения к поставленному ТС вопросу. Мне собственно тоже совершенно безразлично, что Вы пишете, если уж на то пошло. Единственное, что мне интересно, это оригинал стандарта. И не для того, чтобы Вас в чём то убедить, а в том, чтобы убедиться самому. Пока я этого не увидел, я считаю правильным такое утверждение: EIA-485 [TIA-485] Balanced (differential) interface; defines the Physical layer, signaling protocol is not defined. EIA485 is also called the RS485 standard, but the term RS485 is out-dated. EIA-485 specifies bidirectional, half-duplex data transmission. Эту фразу можно увидеть много где, в том числе и в переводе на русский язык. Одна из ссылок в моем предыдущем посте. А это означает, что RS485 - полудуплексный интерфейс, на что я и обратил внимание ТС. А любые допущения к делу не относятся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 28 июля, 2018 Опубликовано 28 июля, 2018 · Жалоба Эту фразу можно увидеть много где, в том числе и в переводе на русский язык. дадада... Все участники альянса выработавшего стандарт ошибаются, а наш упрямый товарисч - нет. Пешы исчо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться