|
|
  |
SIM900: максимально допустимая погрешность к скорости передачи USART |
|
|
|
May 29 2012, 12:07
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Цитата Поскольку синхронизация запускается каждое слово, то для "нормального" режима ( 16х ), максимально допустимый разбег частот будет: 1/( WORD_LNGTH * Fsmpl ) = 1/(10*16) = 1/160 = 0.00625, оно же 0,625%. Т.е. с момента синхронизации, UART-приемник сделает 160 сэмплирований и если последний сэмпл успевает "вписаться", то все будет стабильно работать. Не совсем верно. Для того, что-бы работало стабильно достаточно что-бы три средних семпла последнего бита по мажоритарке(2 из 3) вписались в последний бит. Т.е. допустим уход на 7 (8 минус один на ошибку синхронизации) семплов на 160. Или 7/160=0,04375. Цитата Если взять частоту сэмплирования 8х, то допустимая погрешность "расслабится" в два раза: 1/(10*8) = 1/80 = 0.0125, оно же 1,25% На самом деле не расслабится - там 3(4 минус 1 на синхронизацию 1-го фронта) из 80. Или +/-3,75%.
|
|
|
|
|
May 29 2012, 12:36
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(=F8= @ May 29 2012, 12:09)  А кто вам сказал, что все выбрки должны быть правильными?  А где у меня сказано, про все выборки? Цитата(=F8= @ May 29 2012, 12:09)  Вообще-то допустимая прогрешность сильно зависит от логики работы UARTа. "Сильно зависит от логики работы" - бесполезная фраза, общие слова. Логика работы UART и так известна. Существуют "особенности реализации", но и там особо не разгуляться. Цитата(ArtemKAD @ May 29 2012, 16:07)  Для того, что-бы работало стабильно достаточно что-бы три средних семпла последнего бита по мажоритарке(2 из 3) вписались в последний бит. А вот это как раз и есть одна из "особенностей реализации". Какой-то UART и по трем средним сэмплам сработает, а какой-то FrameError выставит. В любом случае, я лишь описал то, чего автор никак не мог добиться - логика работы и способ подсчета погрешности. Цитата(ArtemKAD @ May 29 2012, 16:07)  На самом деле не расслабится - там 3(4 минус 1 на синхронизацию 1-го фронта) из 80. Или +/-3,75%. "Там", это где? Или речь за абсолютно любую реализацию? Если последнее, то это не верно. Я, например, разные реализации встречал. А проверить мое утверждение про AVR, про разницу в толерантности при 16х и при 8х, может любой. Это не сложно и не долго.
|
|
|
|
|
May 29 2012, 13:12
|
Знающий
   
Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954

|
Цитата(Tahoe @ May 29 2012, 15:36)  А где у меня сказано, про все выборки? В Ваших "расчетах". Цитата(Tahoe @ May 29 2012, 15:36)  "Сильно зависит от логики работы" - бесполезная фраза, общие слова. Логика работы UART и так известна. Существуют "особенности реализации", но и там особо не разгуляться. Угу, и без знания этих особенностей ваши "расчеты" гроша ломаного не стоят.
|
|
|
|
|
May 29 2012, 13:31
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(=F8= @ May 29 2012, 17:12)  В Ваших "расчетах". В каком именно месте? Можно, наконец, от общих слов ( очень дурная манера, кстати ), к конкретике? Цитата(=F8= @ May 29 2012, 17:12)  Угу, и без знания этих особенностей ваши "расчеты" гроша ломаного не стоят. Мои расчеты не отменяют необходимости думать ( там даже по-русски написано, что они даны для примера ). Если все-таки немного поработать головой, то станет понятно, что расчеты вполне достаточны. А особенности реализации UART, будут иметь значение _исключительно_ при сэмплировании последнего, 10-го символа. Цитата(=F8= @ May 29 2012, 17:12)  ваши "расчеты" гроша ломаного не стоят. Да, забыл, самое главное. Если, опять же, включить голову, то станет понятно, что мои расчеты описыват худший случай. С их помощью получаем минимально допустимую погрешность, не зависящую от реализации конкретного UART. Потому что это расчеты, с точностью до сэмпла и на логику работы им просто плевать. А вот зная логику работы, можно ещё расслабить тебования к погрешности. Но это уже другая песня.
|
|
|
|
|
May 29 2012, 14:54
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Цитата Цитата А кто вам сказал, что все выбрки должны быть правильными? В каком именно месте? Можно, наконец, от общих слов ( очень дурная манера, кстати ), к конкретике? Вот тут: Цитата то для "нормального" режима ( 16х ), максимально допустимый разбег частот будет: 1/( WORD_LNGTH * Fsmpl ) = 1/(10*16) = 1/160 = 0.00625, оно же 0,625%. Т.е. с момента синхронизации, UART-приемник сделает 160 сэмплирований и если последний сэмпл успевает "вписаться", то все будет стабильно работать. Ваш расчет исходит из того, что правильными должны оставаться все 160 сэмплов. Цитата Точнее есть такие программеры, которые делают на ПЛИС мосты на несколько UART Там скорее сделают вариант с одной точкой - по фронту смещенного тактового фиксируют в сдвиговый регистр точечное значение по центру каждого бита.
|
|
|
|
|
May 29 2012, 15:11
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(ArtemKAD @ May 29 2012, 18:54)  Ваш расчет исходит из того, что правильными должны оставаться все 160 сэмплов. Разумеется. Когда что-то объясняют, идут от общего к частному. Так что в данном случае, даже не могу себя упрекнуть за не верную формулировку. Но если уж читать, то читать до конца: Цитата(Tahoe @ May 28 2012, 19:43)  В реальности, если выход сэмплера работает на мажоритарную схему, можно даже считать не 160 сэмплирований, а, например, 158 или 153. Т.е. что бы стоп-бит ещё определялся как стоп-бит. Ребят, вы три страницы мусолили, но не могли толком описать, как расчитывать погрешность. А теперь пытаетесь того, кто все подробно разжевал, на чем-то подловить? Как-то это глупо и не продуктивно. Цитата(ArtemKAD @ May 29 2012, 18:54)  Там скорее сделают вариант с одной точкой Я говорю о примере из жизни. Причем формально, программер написавший такой код был прав. А если хочется "разминки для ума", то предлагаю подумать, как реализовано сэмплирование и как считать погрешность, в случае, когда STOP_BIT=1,5
|
|
|
|
|
May 29 2012, 20:33
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Цитата Ребят, вы три страницы мусолили, но не могли толком описать, как расчитывать погрешность. По моему я вполне объяснил. И было это объяснение на предыдущей странице: http://electronix.ru/forum/index.php?s=&am...st&p=985845Цитата Каждый принимаемый байт начинает прием с фронта старт-бита (точность определения фронта - 1/8 или 1/16 бита - точнее сложно сказать т.к. обычно есть оба варианта, а уже какой использовать решает разработчик в зависимости от частот) и задача точности - центр последнего бита не должен уйти более чем пол бита в любую сторону. С учетом того, что каждый байт это 10 бит (старт, стоп, 8 бит передачи) получаем разницу частот не больше чем +/- 5% (1/20). Тут конечно не совсем точно - надо учесть точность фиксации фронта - это еще 1/80 или 1/160 - и в принципе для оценки достаточно... Итого - разница частот для гарантированного приема во всем диапазоне температур и во всем диапазоне питающих процессор напряжений не должна уходить более чем на 3,75% от частоты нулевой ошибки UART. Цитата Но если уж читать, то читать до конца До конца там можно не читать. Сэмплер на мажоритарку или нет вообще не суть важно. Цитата Я говорю о примере из жизни. Причем формально, программер написавший такой код был прав. Формально программер был чайником который полез в область в которой он чуть больше нуля. Прежде чем писать код для UART-а он был обязан взять учебник по основам метрологии и понять что такой "допуск" и зачем он нужен.
|
|
|
|
|
May 29 2012, 22:07
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(ArtemKAD @ May 30 2012, 00:33)  По моему я вполне объяснил. И было это объяснение на предыдущей странице: http://electronix.ru/forum/index.php?s=&am...st&p=985845Это, кстати, был один из немногих толковых постов в этой теме. Проблема в том, что это лишь пол-дела. SIM900 соединяется с внешним UART, а не с таким же SIM900. Соотв., методика расчета погрешности нужна общая, а не заточеная под один конец приема. Цитата(ArtemKAD @ May 30 2012, 00:33)  Формально программер был чайником который полез в область в которой он чуть больше нуля. Прежде чем писать код для UART-а он был обязан взять учебник по основам метрологии и понять что такой "допуск" и зачем он нужен. А причем тут учебник по метрологии и допуски? Его дело было соблюсти стандарты/рекомендации и в этом к нему никаких претензий нет. Оптимально он это сделал или нет - дело десятое. Пусть лучше не оптимально, но работает, чем криво посчитать погрешность и получить супер-оптимизированный продукт, работающий только с частью оборудования.
|
|
|
|
|
May 30 2012, 08:25
|
Профессионал
    
Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364

|
Цитата Проблема в том, что это лишь пол-дела. SIM900 соединяется с внешним UART, а не с таким же SIM900. Соотв., методика расчета погрешности нужна общая, а не заточеная под один конец приема. А нам и нужен один конец - тот который мы делаем. Т.к. если бы у нас была связь двух SIM900 проблема их связи была бы проблемой разработчиков SIM900. Цитата Его дело было соблюсти стандарты/рекомендации и в этом к нему никаких претензий нет. В тех самых стандартах/рекомендациях сказано, что значение бита соответствует значению уровня в центре временного промежутка соответствующего этому биту. Не уровень на всем промежутке, а только в его центре.
|
|
|
|
|
May 30 2012, 14:37
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(ArtemKAD @ May 30 2012, 12:25)  А нам и нужен один конец - тот который мы делаем. Я оценил шутку. "ATZ" модуль распознает, а вот мы "OK" нет. Пол-UARTа...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|