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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> SIM900: максимально допустимая погрешность к скорости передачи USART
rx3apf
сообщение Oct 20 2011, 19:29
Сообщение #31


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(GeGeL @ Oct 20 2011, 22:52) *
Я с этим лично столкнулся на sim900. На 115200 не хотел слушать в режиме по умолчанию, пока не дал чуть ЗАНИЖЕННУЮ скорость с PIC.

А на какой _реально_ скорости не захотел работать ? Потому как если это было точно 115200 (с допуском в десятые процента) - то никак не верится. Потому как работает надежно (и от PC, и в самостоятельных устройствах). А если было отклонение - то интересно, на сколько.
Цитата
А автодетект там вобще какой-то странный, не так совсем, как в сим300.

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

Go to the top of the page
 
+Quote Post
CADiLO
сообщение Oct 21 2011, 06:29
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 6 023
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988



>>>>Это уже когда генератор заработал и уровень сигнала достиг порога. С этого момента - еще 1024 такта. А полное время - существенно больше. Поэтому в батарейных приложениях бывают сложности.

Документ где это написано пожалуйста покажите.

>>>И опять же неправда. Если у генератора нет встроенных конденсаторов, то внешние - необходимы. Согласно даташиту.

Ага - щас.... Встроенные конденсаторы есть у КЕРАМИЧЕСКИХ резонаторов, в КВАРЦЕВЫХ они в большинстве случаев не нужны.
Мы в свое время в PIC ставили HS генератор и просто кварц на выводы. И никаких проблем. А если интересна теория, то у Analog Device был в свое время хороший документ на эту тему. Да и в старой бумажной книжке микрочипа эта тема тоже поднималась.
Но если на принцип хотите пойти, то за бутылку "Закарпатского" коньяка я этот документ найду.

>>>Вы, наверное, удивитесь, но у PC-шных COM-портов тоже вовсе не точные значения...

Не удивлюсь ибо де-факто стало для PC портов использовать частоту 18.432 мегагерца. Можете ее поделить и сами удивляйтесь.
А если какой раздолбай китайский на материнке этого не сделал, так только потому что руки вовремя ему не отбили.

>>>Да с автодетектом у SIM900 писали что и так проблемы есть. Я делаю программирование на 9600 (мне достаточно) сразу. Да и вообще записываю это на "постоянку" в &W.

Поэтому SIMCOM и рекомендует сразу после автодетекта перейти на постоянную скорость. В SIM900 значение команды IPR запишется автоматическм.

>>>Я с этим лично столкнулся на sim900. На 115200 не хотел слушать в режиме по умолчанию, пока не дал чуть ЗАНИЖЕННУЮ скорость с PIC. А автодетект там вобще какой-то странный, не так совсем, как в сим300. Было принято решение на старте пика каждый раз давать AT+IPR=57600 (чтобы "чистый" модуль фиксировать на эту скорость) наскорости чуть НИЖЕ 115200, а затем переключать UART PIC на скорость чуть ВЫШЕ 57600, и далее все шло ОК.

Так ведь в даташите и сказано что максимальная скорость для автодетекта 57600. 115200 не гарантируется. Но скажу что если 115200 совпадает до 0.5% то все детектится. Опять же - PIC16F887 c кварцем 18.432 мегагерц без проблем работает с модулем в автодетекте на 115200. На 20 мегагерцах только до 57600.







--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Oct 21 2011, 08:35
Сообщение #33


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(CADiLO @ Oct 21 2011, 10:29) *
>>>>Это уже когда генератор заработал и уровень сигнала достиг порога. С этого момента - еще 1024 такта. А полное время - существенно больше. Поэтому в батарейных приложениях бывают сложности.

Документ где это написано пожалуйста покажите.

Это самоочевидно следует из того раздела даташита, где приведены пороговые уровни OSC1. Ну, если не верите, попробуйте сами скопом посмотреть, сколько пройдет от события до старта.

Цитата
>>>И опять же неправда. Если у генератора нет встроенных конденсаторов, то внешние - необходимы. Согласно даташиту.

Ага - щас.... Встроенные конденсаторы есть у КЕРАМИЧЕСКИХ резонаторов,

У трехвыводных - да.

Цитата
в КВАРЦЕВЫХ они в большинстве случаев не нужны.

Неправда. Впрочем, Вы можете попробовать меня переубедить, приведя ссылку на конкретный даташит, где генератор с кварцевым резонатором нарисован без оных конденсаторов. Лишь в тех вариантах, где уже есть встроенные конденсаторы (скажем, у более поздних AVR, да и то у некоторых ревизий наличие заявлялось, а потом давали отбой в errata).

Цитата
Не удивлюсь ибо де-факто стало для PC портов использовать частоту 18.432 мегагерца. Можете ее поделить и сами удивляйтесь.
А если какой раздолбай китайский на материнке этого не сделал, так только потому что руки вовремя ему не отбили.

Да, на ISA-шных портовках...Уже со времен Winbond-овских MIO (т.е. на четверках с интегированными портами) это делают из 24/13. То же самое относится к USB/COM.

Сообщение отредактировал rx3apf - Oct 21 2011, 08:36
Go to the top of the page
 
+Quote Post
butthead2
сообщение Oct 21 2011, 10:06
Сообщение #34


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 22-07-09
Пользователь №: 51 470



Цитата(rx3apf @ Oct 21 2011, 11:35) *
Неправда. Впрочем, Вы можете попробовать меня переубедить, приведя ссылку на конкретный даташит, где генератор с кварцевым резонатором нарисован без оных конденсаторов. Лишь в тех вариантах, где уже есть встроенные конденсаторы (скажем, у более поздних AVR, да и то у некоторых ревизий наличие заявлялось, а потом давали отбой в errata).

Конденсаторы нужны однознчно. Правда если их не ставить, то паразитная емкость выводов кварца, монтажа и процессора худо-бедно будет выполнять их роль. Но это уже из области опасной "хакерской" экономии - работать будет, но 100% гарантии никто не даст
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Oct 22 2011, 06:12
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Цитата(rx3apf @ Oct 20 2011, 23:29) *
А на какой _реально_ скорости не захотел работать ? Потому как если это было точно 115200 (с допуском в десятые процента) - то никак не верится. Потому как работает надежно (и от PC, и в самостоятельных устройствах). А если было отклонение - то интересно, на сколько.


Использовался SIM900 (версию FW уже не помню) со сброшенными параметрами AT&F
PIC18F1320 (кварц 8MHz ровно) после появления STATUS=1 выдерживал паузу 1 сек и давал AT+IPR=57500
bsf TXSTA, BRGH ;On UART async, go RX, TX 8 bit
При SPBRG=.11 все ОК, при .10 - через раз.

Сообщение отредактировал GeGeL - Oct 22 2011, 06:16
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Oct 22 2011, 09:27
Сообщение #36


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



У SIM900 уже ставший классикой аппаратный UART. Каждый принимаемый байт начинает прием с фронта старт-бита (точность определения фронта - 1/8 или 1/16 бита - точнее сложно сказать т.к. обычно есть оба варианта, а уже какой использовать решает разработчик в зависимости от частот) и задача точности - центр последнего бита не должен уйти более чем пол бита в любую сторону. С учетом того, что каждый байт это 10 бит (старт, стоп, 8 бит передачи) получаем разницу частот не больше чем +/- 5% (1/20). Тут конечно не совсем точно - надо учесть точность фиксации фронта - это еще 1/80 или 1/160 - и в принципе для оценки достаточно...
Итого - разница частот для гарантированного приема во всем диапазоне температур и во всем диапазоне питающих процессор напряжений не должна уходить более чем на 3,75% от частоты нулевой ошибки UART. При использовании встроенного калибруемого RC-генератора в современных МК такое возможно. Но особо надо обратить внимание не только на уход частоты, но и на начальную точность заводской калибровки. К примеру на моей любимой Mega48 она оказалась упс ... 10%.

ЗЫ. А вообще решение достаточно не сложное если освоить автоподстройку RC-генератора по принимаемым от SIM900 байтам. И служебная последовательность выдаваемая модулем при включении очень в этом помогает (как минимум на корректной частоте начать обмен).
ЗЗЫ. Вот только это решение не для начинающих. Подводных камней и граблей там хватает...
Go to the top of the page
 
+Quote Post
butthead2
сообщение Oct 22 2011, 10:26
Сообщение #37


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 22-07-09
Пользователь №: 51 470



Цитата(ArtemKAD @ Oct 22 2011, 12:27) *
напряжений не должна уходить более чем на 3,75% от частоты нулевой ошибки UART. При использовании встроенного калибруемого RC-генератора в современных МК такое возможно. Но особо надо обратить внимание не только на уход частоты, но и на начальную точность заводской калибровки. К примеру на моей любимой Mega48 она оказалась упс ... 10%.

Вот и не смущай этих самых начинающих. В мегах например уарт работает по нескольким выборкам, поэтому процентаж нужно уменьшить.
В качестве опорного сигнала можно использовать что то типа нетлайт ( если он стабильной длительности ). Но опять же - не надо морочить начинающим голову.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Oct 22 2011, 15:43
Сообщение #38


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(GeGeL @ Oct 22 2011, 10:12) *
Использовался SIM900 (версию FW уже не помню) со сброшенными параметрами AT&F
PIC18F1320 (кварц 8MHz ровно) после появления STATUS=1 выдерживал паузу 1 сек и давал AT+IPR=57500
bsf TXSTA, BRGH ;On UART async, go RX, TX 8 bit
При SPBRG=.11 все ОК, при .10 - через раз.

Хм. Я не очень хорошо знаю PICовый USART, но разве скорость в таком режиме не 8E6/(16*(N+1)) ? Тогда для SPBRG=11 это 41667, а для 10 - 45455. И где тут 57600 ?
Go to the top of the page
 
+Quote Post
pau62
сообщение Oct 22 2011, 16:05
Сообщение #39


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

Группа: Участник
Сообщений: 116
Регистрация: 22-10-11
Из: Россия
Пользователь №: 67 897



Цитата(rx3apf @ Oct 22 2011, 19:43) *
Хм. Я не очень хорошо знаю PICовый USART, но разве скорость в таком режиме не 8E6/(16*(N+1)) ? Тогда для SPBRG=11 это 41667, а для 10 - 45455. И где тут 57600 ?

Там наверное 10 мгц кварц просто был.

ИМХО более 2% не стоит допускать систематической погрешности, ибо не известно, насколько может отклониться "собеседник". И количество выборок никак тут не спасет - оно только от случайных помех может спасти, да и то если повезет.
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Oct 23 2011, 10:34
Сообщение #40


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Сорри, я ошибся: не в dec, а в hex: 0x10 и 0x11
Кварц на 8MHz
При SPBRG=0x10: B=8E3/(4*(N+1) = 117.647 (+2.12%) - глючит прием данных от PIC к SIM900
При SPBRG=0x11: B=8E3/(4*(N+1) = 111.111 (-3.55%) - ОК, хотя абс. погрешность больше.

Сообщение отредактировал GeGeL - Oct 23 2011, 10:34
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Oct 23 2011, 20:42
Сообщение #41


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(GeGeL @ Oct 23 2011, 14:34) *
При SPBRG=0x10: B=8E3/(4*(N+1) = 117.647 (+2.12%) - глючит прием данных от PIC к SIM900
При SPBRG=0x11: B=8E3/(4*(N+1) = 111.111 (-3.55%) - ОК, хотя абс. погрешность больше.

Ну, про возможные проблемы при 115200 уже было сказано (раньше-то речь была про 57600). Да и погрешность весьма солидная. Но да, действительно странно, что при большем отклонении в минус работоспособность сохраняется. Это тем более странно, что реально у модуля (SIM900) скорость завышена на ~0.2% (специально сейчас скопом посмотрел). Наверное, там тоже из 24/13 опорник делают.
Go to the top of the page
 
+Quote Post
butthead2
сообщение Oct 23 2011, 21:10
Сообщение #42


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 22-07-09
Пользователь №: 51 470



Цитата(rx3apf @ Oct 23 2011, 23:42) *
Ну, про возможные проблемы при 115200 уже было сказано (раньше-то речь была про 57600). Да и погрешность весьма солидная. Но да, действительно странно, что при большем отклонении в минус работоспособность сохраняется. Это тем более странно, что реально у модуля (SIM900) скорость завышена на ~0.2% (специально сейчас скопом посмотрел). Наверное, там тоже из 24/13 опорник делают.

Почему именно 24/13? В продвинтуых уартах можно задать дробный коэффициент деления и получить небольшую погрешность практически из любой опорной частоты. Вот и в симке из каких нибудь 100МГц нецелым делением получается погрешность 0,2%
Go to the top of the page
 
+Quote Post
Anton_A
сообщение May 15 2012, 07:52
Сообщение #43


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 3-01-12
Пользователь №: 69 168



Цитата(CADiLO @ Oct 20 2011, 13:25) *
Кондеры нужны для керамических резонаторов или "советских" кварцев, при высокодобротном кварце они даже вредны для PIC.
не знаю насчёт "вредности" для контроллера, но у меня ещё ни разу не получилось сделать стабильное (работающее месяцами в сложных ЭМ условиях) серийное устройство без конденсаторов на кварце, даже если этот кварц высокодобротный.
Go to the top of the page
 
+Quote Post
Tahoe
сообщение May 28 2012, 15:43
Сообщение #44


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Вообще-то, все это спокойно считается. Но для расчета необходимо знать частоту сэмплирования UART. На примере Атмела, AVR умеет работать с частотой сэмплирования Fsmpl=16х ( нормальный режим ) и Fsmpl=8х ( U2X или как там этот бит называется, когда baudrate в два раза выше, при той же тактовой ). Теперь берем длину одного слова, например, WORD_LNGTH = 1 старт бит + 8 бит данные + 1 стоп бит = 10 бит. Поскольку синхронизация запускается каждое слово, то для "нормального" режима ( 16х ), максимально допустимый разбег частот будет: 1/( WORD_LNGTH * Fsmpl ) = 1/(10*16) = 1/160 = 0.00625, оно же 0,625%. Т.е. с момента синхронизации, UART-приемник сделает 160 сэмплирований и если последний сэмпл успевает "вписаться", то все будет стабильно работать. Если взять частоту сэмплирования 8х, то допустимая погрешность "расслабится" в два раза: 1/(10*8) = 1/80 = 0.0125, оно же 1,25%

Кстати, именно по этой причине, все нормальные UART-ты требуют тактовую частоту в 4-8-16-32 раз бОльшую, чем актуальный baudrate - что бы обеспечить работу сэмплера.

В реальности, если выход сэмплера работает на мажоритарную схему, можно даже считать не 160 сэмплирований, а, например, 158 или 153. Т.е. что бы стоп-бит ещё определялся как стоп-бит.
Go to the top of the page
 
+Quote Post
=F8=
сообщение May 29 2012, 08:09
Сообщение #45


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



А кто вам сказал, что все выбрки должны быть правильными? sm.gif Вообще-то допустимая прогрешность сильно зависит от логики работы UARTа.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:20
Рейтинг@Mail.ru


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