|
SIM900: максимально допустимая погрешность к скорости передачи USART |
|
|
|
 |
Ответов
(30 - 44)
|
Oct 20 2011, 19:29
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(GeGeL @ Oct 20 2011, 22:52)  Я с этим лично столкнулся на sim900. На 115200 не хотел слушать в режиме по умолчанию, пока не дал чуть ЗАНИЖЕННУЮ скорость с PIC. А на какой _реально_ скорости не захотел работать ? Потому как если это было точно 115200 (с допуском в десятые процента) - то никак не верится. Потому как работает надежно (и от PC, и в самостоятельных устройствах). А если было отклонение - то интересно, на сколько. Цитата А автодетект там вобще какой-то странный, не так совсем, как в сим300. Да, странный. И, например, если не делать паузу между командами, то запросто теряет синхронизацию, проглатывает или искажает символы. Поэтому - отключать обязательно. Но чтобы отключить, надо хотя бы один раз, при первом включении, передать на точно выдержанной скорости.
|
|
|
|
|
Oct 21 2011, 06:29
|

Гуру
     
Группа: Свой
Сообщений: 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.
--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
|
|
|
|
|
Oct 21 2011, 08:35
|
Гуру
     
Группа: Участник
Сообщений: 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
|
|
|
|
|
Oct 21 2011, 10:06
|
Местный
  
Группа: Участник
Сообщений: 301
Регистрация: 22-07-09
Пользователь №: 51 470

|
Цитата(rx3apf @ Oct 21 2011, 11:35)  Неправда. Впрочем, Вы можете попробовать меня переубедить, приведя ссылку на конкретный даташит, где генератор с кварцевым резонатором нарисован без оных конденсаторов. Лишь в тех вариантах, где уже есть встроенные конденсаторы (скажем, у более поздних AVR, да и то у некоторых ревизий наличие заявлялось, а потом давали отбой в errata). Конденсаторы нужны однознчно. Правда если их не ставить, то паразитная емкость выводов кварца, монтажа и процессора худо-бедно будет выполнять их роль. Но это уже из области опасной "хакерской" экономии - работать будет, но 100% гарантии никто не даст
|
|
|
|
|
Oct 22 2011, 06:12
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 22 2011, 10:26
|
Местный
  
Группа: Участник
Сообщений: 301
Регистрация: 22-07-09
Пользователь №: 51 470

|
Цитата(ArtemKAD @ Oct 22 2011, 12:27)  напряжений не должна уходить более чем на 3,75% от частоты нулевой ошибки UART. При использовании встроенного калибруемого RC-генератора в современных МК такое возможно. Но особо надо обратить внимание не только на уход частоты, но и на начальную точность заводской калибровки. К примеру на моей любимой Mega48 она оказалась упс ... 10%. Вот и не смущай этих самых начинающих. В мегах например уарт работает по нескольким выборкам, поэтому процентаж нужно уменьшить. В качестве опорного сигнала можно использовать что то типа нетлайт ( если он стабильной длительности ). Но опять же - не надо морочить начинающим голову.
|
|
|
|
|
Oct 22 2011, 16:05
|
Частый гость
 
Группа: Участник
Сообщений: 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% не стоит допускать систематической погрешности, ибо не известно, насколько может отклониться "собеседник". И количество выборок никак тут не спасет - оно только от случайных помех может спасти, да и то если повезет.
|
|
|
|
|
Oct 23 2011, 21:10
|
Местный
  
Группа: Участник
Сообщений: 301
Регистрация: 22-07-09
Пользователь №: 51 470

|
Цитата(rx3apf @ Oct 23 2011, 23:42)  Ну, про возможные проблемы при 115200 уже было сказано (раньше-то речь была про 57600). Да и погрешность весьма солидная. Но да, действительно странно, что при большем отклонении в минус работоспособность сохраняется. Это тем более странно, что реально у модуля (SIM900) скорость завышена на ~0.2% (специально сейчас скопом посмотрел). Наверное, там тоже из 24/13 опорник делают. Почему именно 24/13? В продвинтуых уартах можно задать дробный коэффициент деления и получить небольшую погрешность практически из любой опорной частоты. Вот и в симке из каких нибудь 100МГц нецелым делением получается погрешность 0,2%
|
|
|
|
|
May 15 2012, 07:52
|
Участник

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

|
Цитата(CADiLO @ Oct 20 2011, 13:25)  Кондеры нужны для керамических резонаторов или "советских" кварцев, при высокодобротном кварце они даже вредны для PIC. не знаю насчёт "вредности" для контроллера, но у меня ещё ни разу не получилось сделать стабильное (работающее месяцами в сложных ЭМ условиях) серийное устройство без конденсаторов на кварце, даже если этот кварц высокодобротный.
|
|
|
|
|
May 28 2012, 15:43
|
Местный
  
Группа: Свой
Сообщений: 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. Т.е. что бы стоп-бит ещё определялся как стоп-бит.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|