Свежие обсуждения
Микроконтроллеры

Алгоритм автоопределения скорости UART?

Здравствуйте всем!
Господа, кто знает, каким образом можно реализовать сабж? Может у кого есть пример для PIC и еще на asm-е то вообще супер. Спасибо.

 

Если имеется в виду подобие того, как это реализовано в Hayes-модемах - так там любая строчка в командном режиме начинается с буквы "A" или "a". Достаточно просто измерить длительность старт-бита. Если Ваша ситуация аналогична (гарантированно "изолированный" старт-бит в первом же байте принимаемых данных) - измеряйте длительность старт-бита и от нее пляшите. Если нет - плюньте на затею: возня не стоит результата.

 

chav1961: как это реализовано в Hayes-модемах Именно так и будет происходить обмен, посредством АТ команд. Стартовый/стоповый биты сопровождают каждый байт в посылке. Использую аппаратный UART, скорость приема/передачи задается генератором частоты обмена BRG конкретно константой "SPBRG" и битом "BRGH".
Аппаратный UART не дает данных о длительности стартового/стопового битов => измерять необходимо программно, но измерив длительность стартового бита и изменив скорость приемопередатчика мы потеряем 1-й байт в посылке что не есть гут.
Вообще спасибо за идею, если реализовать при соединении 1-2 контрольных посылки, для измерения скорости, то все может получиться

 

AlexAlcoa: но измерив длительность стартового бита и изменив скорость приемопередатчика мы потеряем 1-й байт
А Вы продолжайте принимать программно весь байт и ничего не потеряете, если у Вас, конечно, следующий байт с той же скоростью.

 

AlexAlcoa: измерив длительность стартового бита и изменив скорость приемопередатчика мы потеряем 1-й байт в посылке что не есть гут.

Насколько я знаю, там используется ещё одна нога микроконтроллера, прицепленная на RX для измерения длительности первого бита.
Правда это не поможет не потерять первый байт при изначально неверной скорости

 

Программный UART...

 

По ходу пьесы измерять внутр. таймером интервалы переброса из 0 в 1 и наоборот. Измеренные интервалы должны быть кратны, с учетом джиттера, а минимальный интервал соответствует времени передачи бита.

 

Смотри документ AN851 "FLASH Bootloader for PIC16 and PIC18 Devices" от Microchip там полностью описан алгоритм авто - определения скорости USART. Т.е. если твое устройство не знает, с какой скоростью с ним будут связываться, то оно самостоятельно настраивается на скорость передатчика.

 

Wladimir_TS: Программный UART Не, аппаратный работает стабильнее. К тому же MK занят выполнением основной задачи, отвлекаться на программный UART нет времени.
Vlad_Petr: измерять внутр. таймером интервалы Так и думал сделать, TMR1 свободен.
Catcatcat: документ AN851 "FLASH Bootloader for PIC16 and PIC18 Devices" Спасибо за инф.то что надо!

PS. К стати кто ни будь пользуется бутлоадом? Какие впечатления?

 

2 AlexAlcoa - для дистанционного обновления прошивки вещь незаменимая, с использованием шифрования конечно