Easyelectronics.ru

Электроника для всех
Текущее время: 21 ноя 2019, 09:27

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: PIC18F25K22. Максимальная скорость передачи по USART
СообщениеДобавлено: 23 июл 2018, 16:02 
Только пришел

Зарегистрирован: 29 май 2018, 16:33
Сообщения: 10
Добрый день. Попала ко мне в руки платка с контроллером 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? На сколько упадет частота с учетом задержек при передаче между байтами/внутри байта? Каким-нибудь ПО можно оценить скорость передачи?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC18F25K22. Максимальная скорость передачи по USART
СообщениеДобавлено: 23 июл 2018, 16:56 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2370
PLL как я понимаю из кода сконфигурирован в x4 режиме. С данным кристаллом точно 115200 не сможет. Все формулы на 272 стр ДШ.
Будет режим с ошибкой в 0.03%. Фактическая скорость будет 111709 при SPBRG1 = 10, в том же 8-битном асинхронном режиме.
Или же синхронный если поставить, ~114307 бод будет. SPBRG1 = 42, SYNC = 1, BRG16 = 0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: PIC18F25K22. Максимальная скорость передачи по USART
СообщениеДобавлено: 23 июл 2018, 17:08 
Заглядывает иногда

Зарегистрирован: 26 фев 2018, 03:06
Сообщения: 111
Auratos писал(а):
Т.е. 1 бит на скорости 115200 бод будет передаваться в идеале со скоростью: 115200 * 8 / (8 + 1 +1 + 0) = 92160 бит/с = 11520 байт/с = 2880 float/c = 2,88 кГц.

Подскажите, пожалуйста, способен ли данный контроллер работать на 115200? На сколько упадет частота с учетом задержек при передаче между байтами/внутри байта? Каким-нибудь ПО можно оценить скорость передачи?

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB