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

 
 
 
Reply to this topicStart new topic
> PIC18F25K22. Максимальная скорость передачи по USART
Auratos
сообщение Jul 23 2018, 10:21
Сообщение #1


Участник
*

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



Добрый день. Попала ко мне в руки платка с контроллером 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? На сколько упадет частота с учетом задержек при передаче между байтами/внутри байта? Каким-нибудь ПО можно оценить скорость передачи?
Go to the top of the page
 
+Quote Post
@Ark
сообщение Jul 23 2018, 18:17
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 688
Регистрация: 13-05-16
Пользователь №: 91 710



Цитата(Auratos @ Jul 23 2018, 13:21) *
Подскажите, пожалуйста, способен ли данный контроллер работать на 115200?

Способен.
Тактовую частоту лучше скорректировать.
Например, взять кварц на 18.432 МГц и включить без PLL.

Go to the top of the page
 
+Quote Post
Марк_Я
сообщение Jul 26 2018, 05:14
Сообщение #3


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

Группа: Свой
Сообщений: 178
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656



Цитата(Auratos @ Jul 23 2018, 13:21) *
Подскажите, пожалуйста, способен ли данный контроллер работать на 115200? На сколько упадет частота с учетом задержек при передаче между байтами/внутри байта? Каким-нибудь ПО можно оценить скорость передачи?

1. 115200 бод - это скорость передачи ОДНОГО БИТА и именно эта скорость является декларируемой в интерфейсах применяющих УАРТ.
2. При вашем кварце получить точно 115200 невозможно - получаемая сетка частот УАРТа допускает ближайшую частоту 111709. Это ошибка -3%. С такой ошибкой УАРТ будет работать с другим устройством, где выставлена скорость 115200 БЕЗ ВСЯКИХ ПРОБЛЕМ.
3. Совершенно непонятно о какой иной "скорости с учетом задержек" Вы пытаетесь рассуждать. Время передачи одного байта (режим 8 бит) равна 10*время передачи бита=86,8 мкс.
Задержки между байтами определяются возможностями КОДА обрабатывать входящий и исходящий поток. Причем возможностями кода С ОБЕИХ СТОРОН. Нет и не может быть никаких нормативов по этому поводу. Если с обеих сторон на прием и на передачу работает ДМА, то брутто скорость будет почти не отличима от нетто. Если через прерывания, то зависит от упаковки данных в МК и латентности обработчика прерываний. Если в программном режиме - значит от латентности кода суперлупа (главного цикла).
4. Определить скорость обмена на уровне данных можно с помощью осциллографа и свободного пина, который инвертируется всякий раз, когда завершается прием блока данных. Смотрим осциллографом длительность импульса на этом пине и получаем брутто-скорость обмена.
5. Протокол обмена должен содержать элементы СИХРОНИЗАЦИИ данных, то есть нужно помимо самих данных передавать метки начала блока данных (при фиксированной длине блока), а так же слово верификации этих данных (CRC8, например). Кроме того, интерфейс RS485 может быть как дуплексным, так и полудуплексным. Сиречь, обмен может быть как одновременно в обе стороны, так и поочередно. Во втором случае появляются так же управляющие байты мастера к слейву с целью обозначить направление передачи.
Go to the top of the page
 
+Quote Post
amiller
сообщение Jul 27 2018, 02:40
Сообщение #4


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

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Цитата(Марк_Я @ Jul 26 2018, 09:14) *
Кроме того, интерфейс RS485 может быть как дуплексным, так и полудуплексным. Сиречь, обмен может быть как одновременно в обе стороны, так и поочередно. Во втором случае появляются так же управляющие байты мастера к слейву с целью обозначить направление передачи.

Ремарка: RS485 - полудуплексный и никак иначе. Сигнал направления передачи обязан присутствовать. По этому интерфейсу можно передавать в разных направлениях только поочередно. Полнодуплексные интерфейсы с одновременной передачей в обе стороны - это к примеру RS422 или RS232.
Go to the top of the page
 
+Quote Post
Марк_Я
сообщение Jul 27 2018, 05:47
Сообщение #5


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

Группа: Свой
Сообщений: 178
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656



Цитата(amiller @ Jul 27 2018, 05:40) *
Ремарка:

Ремарка ошибочна.
RS485 - это многоадресный (в т.ч. мультимастерный) дуплекс или полудуплекс С ВОЗМОЖНОСТЬЮ ВЕТВЛЕНИЯ линии
RS422 - это дуплекс Р2Р
Читаем: https://ru.wikipedia.org/wiki/RS-485
https://ru.wikipedia.org/wiki/EIA-422
Go to the top of the page
 
+Quote Post
amiller
сообщение Jul 27 2018, 06:21
Сообщение #6


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

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Цитата(Марк_Я @ Jul 27 2018, 09:47) *
Ремарка ошибочна.
RS485 - это многоадресный (в т.ч. мультимастерный) дуплекс или полудуплекс С ВОЗМОЖНОСТЬЮ ВЕТВЛЕНИЯ линии
RS422 - это дуплекс Р2Р
Читаем: https://ru.wikipedia.org/wiki/RS-485
https://ru.wikipedia.org/wiki/EIA-422

Я применяю эти интерфейсы на практике.
Прежде чем давать ссылки на статьи, прочитайте что в них написано.
Или покажите, как организовать дуплексную связь на одном интерфейсе RS485, который представляет собой физически одну дифференциальную линию.
А RS422 - это по сути объединение двух интерфейсов RS485, где один канал передает данные в одну сторону, а другой - в другую.
А совместно эти два канала способны обеспечить дуплексную связь между двумя точками.
Go to the top of the page
 
+Quote Post
Марк_Я
сообщение Jul 27 2018, 06:38
Сообщение #7


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

Группа: Свой
Сообщений: 178
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656



Цитата(amiller @ Jul 27 2018, 09:21) *
Я применяю эти интерфейсы на практике.

И я применяю. Но ни Ваши применения, ни мои ничего не доказывают.
Цитата(amiller @ Jul 27 2018, 09:21) *
Прежде чем давать ссылки на статьи, прочитайте что в них написано.

Вы полагаете, что я не читал?))))
Можете ограничиться правой главной рамкой из статьи. Внизу этой рамки ПРЯМО указано на наличие и полнодуплексного и полудуплексного режимов, а так же обозначения сигналов для обоих этих случаев.
Цитата(amiller @ Jul 27 2018, 09:21) *
Или покажите, как организовать дуплексную связь на одном интерфейсе RS485, который представляет собой физически одну дифференциальную линию.

Это Ваша фантазия. RS485 может иметь как одну, так и две витых пары. И даже в даташитах Аналог девайса на ДУПЛЕКСНУЮ ADM488/489 прямо так и указано про RS485:
http://www.analog.com/media/en/technical-d.../ADM488_489.pdf
Цитата(amiller @ Jul 27 2018, 09:21) *
А RS422 - это по сути объединение двух интерфейсов RS485

Это так же Ваша фантазия. Мало того, я так же как и Вы долгое время был в аналогичном заблуждении.
ЗЫ. В догон:
https://www.maximintegrated.com/en/app-note...ndex.mvp/id/736
Go to the top of the page
 
+Quote Post
amiller
сообщение Jul 27 2018, 07:33
Сообщение #8


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

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Цитата(Марк_Я @ Jul 27 2018, 10:38) *
Это так же Ваша фантазия. Мало того, я так же как и Вы долгое время был в аналогичном заблуждении.

Может Вы сейчас снова находитесь в заблуждении, только уже в другом?
Меня статья по первой ссылке ни в чём не убеждает. Она написана такими же людьми, как и мы. И табличка справа противоречит основному тексту.
Строка 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 невозможна, поэтому для этого интерфейса можно говорить только о полудуплексном режиме применения.
Go to the top of the page
 
+Quote Post
Марк_Я
сообщение Jul 27 2018, 09:12
Сообщение #9


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

Группа: Свой
Сообщений: 178
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656



Цитата(amiller @ Jul 27 2018, 10:33) *
В стандарте 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
Go to the top of the page
 
+Quote Post
amiller
сообщение Jul 28 2018, 08:20
Сообщение #10


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

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Цитата(Марк_Я @ Jul 27 2018, 13:12) *
Можете сами поискать в интернете по ключевой фразе 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. По крайней мере в реальных устройствах такого способа организации связи встречать не приходилось. Может не везло просто. Или наоборот, повезло не встретить...
Go to the top of the page
 
+Quote Post
Марк_Я
сообщение Jul 28 2018, 09:15
Сообщение #11


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

Группа: Свой
Сообщений: 178
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656



Цитата(amiller @ Jul 28 2018, 11:20) *
Я допускаю...
Но отношу...

Милейший, как Вы сами понимаете, мне совершенно безразлично что Вы допускаете и куда Вы это допущенное относите.
Я, как и Вы, пользуюсь лишь общепринятой терминологией. А эта терминология ДОПУСКАЕТ использование четырехпроводной RS485. Гомерически смешно доказывать это или иное "по очкам".
На основании чего я делаю окончательный вывод об ошибочности Вашего начального комментария. Тем более, что он не имел никакого отношения к поставленному ТС вопросу.
Go to the top of the page
 
+Quote Post
amiller
сообщение Jul 28 2018, 10:36
Сообщение #12


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

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Цитата(Марк_Я @ Jul 28 2018, 13:15) *
Милейший, как Вы сами понимаете, мне совершенно безразлично что Вы допускаете и куда Вы это допущенное относите.
Я, как и Вы, пользуюсь лишь общепринятой терминологией. А эта терминология ДОПУСКАЕТ использование четырехпроводной 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 - полудуплексный интерфейс, на что я и обратил внимание ТС. А любые допущения к делу не относятся.


Go to the top of the page
 
+Quote Post
Марк_Я
сообщение Jul 28 2018, 13:45
Сообщение #13


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

Группа: Свой
Сообщений: 178
Регистрация: 19-09-07
Из: М.О. г.Фрязино
Пользователь №: 30 656



Цитата(amiller @ Jul 28 2018, 13:36) *
Эту фразу можно увидеть много где, в том числе и в переводе на русский язык.

дадада... Все участники альянса выработавшего стандарт ошибаются, а наш упрямый товарисч - нет.
Пешы исчо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th April 2024 - 23:14
Рейтинг@Mail.ru


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