Ildar Belkin
Oct 20 2011, 07:44
Здравствуйте!
Хочу использовать внутренний генератор на PIC16F1824. В datasheet PIC'а написано что внутренний генератор на частоте 4МГц (мне нужна такая тактовая частота) имеет погрешность в диапазоне темперантур от 0 до +60 град. С +-2%. При установки скорости 9600 добавляется погрешность 0.16% USARTa PICa.
Подскажите, кто пробовал или кто знает насколько стабильно будет "общение" по USART между SIM900 и PIC16F1824 (может другой какой с внутренним генератором).
При использовании внешнего кварца и тоже скорости 9600 с тойже погрешностью USARTa 0.16% - все работает без сбоев.
PS. как описано в инструкции PIC имеет внутренний генератор откалиброванный на заводе и даны рекомендации по тюнингу в случае использования асинхронного режима USART.
как мне кажется нестабильность +-2% на 4МГц при установленной скорости USART 9600 вообще не скажется.
Причина вопроса:
1. есть возможность - грех не использовать.
2. Нужны как раз те две ноги PIC для управления нагрузками.
CADiLO
Oct 20 2011, 07:59
PIC16F1824-I/SL имеет 14 ног и стоит $1.2
PIC16F1827-I/SO имеет 18 ног и стоит $1.4
Flash памяти одинаково, RAM в PIC16F1827 больше.
Поставить 16F1827, кварц и не думать что уплывет частота внутреннего генератора. И ножек хватит.
Иногда экономим копейки и ножки чтобы потом потратить гораздо больше на исправление этой экономии.
Slonofil
Oct 20 2011, 08:16
По опыту несерийных изделий: точности должно хватить. Ведь синхронизация выполняется по старт-биту, а он - в каждом байте. Проблема может возникнуть, если Вы планируете передавать десятки и сотни байт за раз в непрерывной посылке. Если "плеваться" АТ-командами, то проблема в основном имеет теоретический характер.
PS. У меня в мелкой серии работают PIC18F45K22 на внутреннем 16МГц генераторе с PLL - параметры вполне стабильны.
...только кварц запускается очень долго.
и лишние детали не увеличат надёжность.
Из опыта - все хорошо до мороза или жары. Так что если IntRC - то ТОЛЬКО при комнатных температурах !!!
Кроме того, опять же, из опыта PIC18F1320 - заводская калибровка при низком питании (3В) с определнной вероятностью выходит за пределы допустимого (правда, тестировалось на 57600).
CADiLO
Oct 20 2011, 08:47
Для встроенного генератора PIC16F1824 если температура будет ниже 0, то уже 5% неточности, выше 60 градусов то 3%.
Зачем играться с погрешностями если можно их избежать.
Ну и время запуска кварца (1024 такта) играет роль только при батарейном питании и выходе из спячки - в остальных случаях пофигу.
Когда изделие делается на коленке - продал и забыл, то еще можно понять такую халтуру.
Но для серийно выпускаемого я бы не стал идти на копеечную экономию с непредсказуемым результатом.
О, пока отвечал, опередили с температурой

Могу добавить что на 9600 точность не проверял, а вот для 115200 если хуже 0.5%, то модуль уже нормально не воспринимает команды.
Время запуска кварца - это далеко не 1024 такта !!!
Кварцевый резонатор - механическая система и время установления колебаний зависит от добротности.
Керамические резонаторы запускаются много быстрее.
и только по установлению колебаний достаточной амплитуды происходит отсчет 1024 периодов.
CADiLO
Oct 20 2011, 09:02
Возьмите презентацию XLP Микрочипа по DeepSleep режиму (ну или апнотесы) где все четко расписано. Вплоть до рекомендации при выходе из спячки на время запуска кварца стартовать на встроенном генераторе, а потом для операций требующих точности переключаться на внешний кварц. Там же и все времена указаны. Думаю что раз Вы из Питера, то на Мастерстве Микрочипа могли и встречаться.
Ну или хотя бы в даташит загляните
http://ww1.microchip.com/downloads/en/DeviceDoc/41419A.pdf5.2.1.3
Oscillator Start-up Timer (OST) If the oscillator module is configured for LP, XT or HS modes, the Oscillator Start-up Timer (OST) counts
1024 oscillations from OSC1. This occurs following a Power-on Reset (POR) and when the Power-up Timer (PWRT) has expired (if configured), or a wake-up from Sleep. During this time, the program counter does not increment and program execution is suspended. The OST ensures that the oscillator circuit, using a quartz crystal resonator or ceramic resonator, has started and is providing a stable system clock to the oscillator module.
In order to minimize latency between external oscillator start-up and code execution, the Two-Speed Clock Start-up mode can be selected (see Section 5.4
”Two-Speed Clock Start-up Mode”).
Ildar Belkin
Oct 20 2011, 09:57
Цитата(CADiLO @ Oct 20 2011, 11:59)

PIC16F1824-I/SL имеет 14 ног и стоит $1.2
PIC16F1827-I/SO имеет 18 ног и стоит $1.4
Flash памяти одинаково, RAM в PIC16F1827 больше.
Поставить 16F1827, кварц и не думать что уплывет частота внутреннего генератора. И ножек хватит.
Иногда экономим копейки и ножки чтобы потом потратить гораздо больше на исправление этой экономии.
А теперь считаем экономику:
6 руб.(разница между пиками) + 1 руб на кондеры + 25 руб кварц (у меня они вообще стоят 35 руб.) = 32 руб. тобишь еще один PIC16F1824-I/SL
Разница получается в 2 раза итого. Т.е. экономия не в тупой разнице между пиками как бы.
Я поэтому и спросил именно про стабильность работы с SIM900, а не про "посоветуйте мне купить 1827 или 1824 для того чтобы работало". Мне интересна сначала техническая сторона вопроса работы USART SIM900. Затем вытекают все остальные нюансы в том числе экономические.
butthead2
Oct 20 2011, 10:13
Даже китайцы еще не додумались из экономии выбрасывать кварцы. Наверно от щедрости ставят
Ildar Belkin
Oct 20 2011, 10:15
А Microchip такой тупой что предлагает встроенный высокочастотный генератор откалиброванный на заводе да и еще дает рекомендации в том числе по USART как с ним работать. Встает вопрос тогда в том а зачем тогда 1824 вообще существует если есть 1827, а нет стойте - зачем 1827 если есть 1828
CADiLO
Oct 20 2011, 10:25
>>>1 руб на кондеры + 25 руб кварц (у меня они вообще стоят 35 руб.)
Кондеры нужны для керамических резонаторов или "советских" кварцев, при высокодобротном кварце они даже вредны для PIC.
Это где Вы такие кварцы по доллару нашли - GEYER что ли или JAUCH с их бахнутыми ценами ???? Или это керамика с золочеными ножками ?
У нас прекрасные кварцы тайваньского SJK HC49S по 0.15 в розницу. Семь лет их возим, ни одной претензии.
Для макета можно и потратиться, а вот для массового производства прийдется подумать о поставщиках с другими ценами.
Это раз.
Техническая сторона. Не гарантирую что модуль будет стабильно общаться при таком решении. Причина озвучена выше.
Это два.
А из технической стороны выплывает и экономическая - если ваша продукция начнет сбоить, то переделка обойдется гораздо дороже чем
>>>6 руб.(разница между пиками) + 1 руб на кондеры + 25 руб кварц (у меня они вообще стоят 35 руб.) = 32 руб. тобишь еще один PIC16F1824-I/SL
Это три.
butthead2
Oct 20 2011, 10:42
Цитата(Ildar Belkin @ Oct 20 2011, 13:15)

А Microchip такой тупой что предлагает встроенный высокочастотный генератор откалиброванный на заводе да и еще дает рекомендации в том числе по USART как с ним работать. Встает вопрос тогда в том а зачем тогда 1824 вообще существует если есть 1827, а нет стойте - зачем 1827 если есть 1828
Есть миллион применений где кварц избыточен, обычного RC маловато, а стабильный и калиброваный - в самый раз.
И USART USARTу рознь. При одинаковой ошибке один может работать, а другой уже не будет. Нужно изучать какие ошибки допускает приемная сторона. А в общем случае если нет 0,5% - однозначно ставить кварц.
Да, я сам использовал пик с USART на RC. Но он был предназначен для начальной настройки девайса в комнатных условиях. И то что проблем никогда не было не говорит о том что все было бы так же гладко при любых внешних условиях.
CADiLO
Oct 20 2011, 10:44
>>> А Microchip такой тупой что предлагает встроенный высокочастотный генератор откалиброванный на заводе да и еще дает рекомендации в том числе по USART как с ним работать
Точность генератора в 2-5% и точность в ноль целых хрен десятых это несколько разные вещи. И стоит изначально понимать где будет слабое место.
Я уже ранее приводил пример с Атмелом - когда ставили кварц 20 мегагерц и после деления, погрешности частоты не хватало для работы с модулем. Решение было простым - ставить "модемный" кварц 18.432 мегагерца, который после деления четко вписывался во ВСЕ скорости обмена.
А ведь тут оба варианта с кварцами, а вы хотите понадеяться на встроенный генератор который температурно зависим.
Давайте посмотрим - 4 000 000 для получения 9600 нужно поделить даже не на целое число, а на 416.6666666
То есть уже имеем погрешность.
если делим на 416, то получим скорость - 9615,38 - это и есть ваши +0.16%
если же округлить вверх и поделить на 418 (на нечетное число ну никак), то получим скорость - 9569,37
итак верхнее число ближе, на нем и остановимся.
теперь допустим уходит частота генератора на 2% вниз - что нормально для комнатной температуры (даже не 5% для мороза)
4 000 000 - 2% = 3 920 000 делим ее 3 920 000 / 416 = скорость 9423
9600 - 9423 = 177 это на 1.8 % ниже допустимой.
И все - прощай обмен. Что будет при минусовых температурах и уходе частоты на 5% можете посчитать сами.
Ildar Belkin
Oct 20 2011, 10:53
Цитата(butthead2 @ Oct 20 2011, 14:42)

Есть миллион применений где кварц избыточен, обычного RC маловато, а стабильный и калиброваный - в самый раз.
И USART USARTу рознь. При одинаковой ошибке один может работать, а другой уже не будет. Нужно изучать какие ошибки допускает приемная сторона. А в общем случае если нет 0,5% - однозначно ставить кварц.
Да, я сам использовал пик с USART на RC. Но он был предназначен для начальной настройки девайса в комнатных условиях. И то что проблем никогда не было не говорит о том что все было бы так же гладко при любых внешних условиях.
Ок. Понятно. вот это по теме. Мне нужны именно такие мнения относительно тех. стороны сабжа. Просто интересно как эти +-2 или пусть там +-5% нестабильности генератора на частоте 4МГц тактового генератора скажутся на USART. И тем более интересно было о нестабильности USART SIM900 - он же тоже должен иметь что-то подобное. Короче говоря, соберу я один тестовый девайс с разведенными дорожками и под кварц в том числе - попробуем погонять его на 3В и темперантурах 0-45 градусов C без кварца. Посмотрим как будет работать. Если будет плохо впаяю кварц.
butthead2
Oct 20 2011, 11:09
Цитата(Ildar Belkin @ Oct 20 2011, 13:53)

Посмотрим как будет работать. Если будет плохо впаяю кварц.
Эксперимент покажет что все работает- неработает на ДАННОМ ЭКЗЕМПЛЯРЕ контроллера.
Для правильного эксперимента нужно сделать не так. Нужно взять контроллер, вывести на ножку частоту и контролировать ее частотомером - для контроля текущей частоты. Через уарт общатся с модулем. И напрмер по нажатию кнопки менять на некоторый шаг тактовую частоту контроллера. И в обе стороны по частотомеру определить при каком отклонении обмен начниает сбоить.
Совет: забудьте о безкварцевой конфигурации, иначе потом в серии будут проблемы, это уже проверено. Причем проблемы будут весьма труднолокализуемые: обмен будет сбоить не каждый раз, а иногда. И много дней уйдет на поиски причин спонтанных отказов.
Лично я только сторонник экономии: например, никогда ключи не ставлю на управление диодами, не тратюсь на ненужное согласование уровней и т.п.
Но это - не тот случай, поверьте.
Frolov Kirill
Oct 20 2011, 11:47
Цитата(GeGeL @ Oct 20 2011, 15:19)

Совет: забудьте о безкварцевой конфигурации, иначе потом в серии будут проблемы, это уже проверено.
Безкварцевая конфигурация -- это, скорей, когда используется часовой кварц, по которому постоянно подстраивается внутренний генератор. Часовой кварц, причём, постоянно работающий (его запуск занимает ещё более значительное время). Безкварцевая конфигурация актуальна только для микропотребляющих приборов с часами реального времени. И смысл отсутствия кварца на XX МГц в ней даже не снижение себестоимости, а экономия энергии.
Вдогонку. Проценты погрешности считать нужно и для самого модема тоже и складывать с погрешностью генератора PIC. В итоге ситуация нерадостная оказывается.
Ildar Belkin
Oct 20 2011, 12:49
Цитата(CADiLO @ Oct 20 2011, 14:25)

>>>1 руб на кондеры + 25 руб кварц (у меня они вообще стоят 35 руб.)
Кондеры нужны для керамических резонаторов или "советских" кварцев, при высокодобротном кварце они даже вредны для PIC.
Это где Вы такие кварцы по доллару нашли - GEYER что ли или JAUCH с их бахнутыми ценами ???? Или это керамика с золочеными ножками ?
У нас прекрасные кварцы тайваньского SJK HC49S по 0.15 в розницу. Семь лет их возим, ни одной претензии.
Для макета можно и потратиться, а вот для массового производства прийдется подумать о поставщиках с другими ценами.
Это раз.
Если заеду в одну из местных контор - сфоткаю ценник с кварцем - вышлю ;-)
Цитата(CADiLO @ Oct 20 2011, 14:25)

Техническая сторона. Не гарантирую что модуль будет стабильно общаться при таком решении. Причина озвучена выше.
Это два.
Это единственное что по теме хотелось бы услышать - что с внутренними генераторами работать будет нестабильно на основании массового опыта. Все. Рассуждения об экономике меня вообще не касаются.
Цитата(CADiLO @ Oct 20 2011, 14:25)

А из технической стороны выплывает и экономическая - если ваша продукция начнет сбоить, то переделка обойдется гораздо дороже чем
>>>6 руб.(разница между пиками) + 1 руб на кондеры + 25 руб кварц (у меня они вообще стоят 35 руб.) = 32 руб. тобишь еще один PIC16F1824-I/SL
Это три.
Абсолютно также можно сказать и обратное что если все будет работать то будет и экономия.
Вообще флуд какой-то. Меня это не интересовало. Я задал в старте - простой вопрос - какая погрешность допустима по SIM900. Судя по ответам такого параметра нет. Раз нет так и вывод один - ставить внешний кварц, чтоб избежать геммороя. ВСЕ...
Я никого не просил учить меня экономике - она меня тут не интересовала.
Косвенно в ветке отвечено, что на практике PICи с внутренним генератором для USART-обмена с SIM900 (в частном случае) использовать крайне не желательно. Мне этого более чем достаточно.
Цитата(butthead2 @ Oct 20 2011, 15:09)

Эксперимент покажет что все работает- неработает на ДАННОМ ЭКЗЕМПЛЯРЕ контроллера.
Для правильного эксперимента нужно сделать не так. Нужно взять контроллер, вывести на ножку частоту и контролировать ее частотомером - для контроля текущей частоты. Через уарт общатся с модулем. И напрмер по нажатию кнопки менять на некоторый шаг тактовую частоту контроллера. И в обе стороны по частотомеру определить при каком отклонении обмен начниает сбоить.
Кстати, да. в этой серии есть такое - программное изменение частоты на лету. Хм.... надо будет поэкспериментировать.
rx3apf
Oct 20 2011, 16:51
Цитата(CADiLO @ Oct 20 2011, 13:02)

Ну или хотя бы в даташит загляните
...
5.2.1.3
Oscillator Start-up Timer (OST) If the oscillator module is configured for LP, XT or HS modes, the Oscillator Start-up Timer (OST) counts
1024 oscillations from OSC1.
Это уже когда генератор заработал и уровень сигнала достиг порога. С этого момента - еще 1024 такта. А полное время - существенно больше. Поэтому в батарейных приложениях бывают сложности.
Цитата(CADiLO @ Oct 20 2011, 14:25)

>>>1 руб на кондеры + 25 руб кварц (у меня они вообще стоят 35 руб.)
Кондеры нужны для керамических резонаторов или "советских" кварцев, при высокодобротном кварце они даже вредны для PIC.
И опять же неправда. Если у генератора нет встроенных конденсаторов, то внешние - необходимы. Согласно даташиту.
Цитата(CADiLO @ Oct 20 2011, 14:44)

Давайте посмотрим - 4 000 000 для получения 9600 нужно поделить даже не на целое число, а на 416.6666666
То есть уже имеем погрешность.
Вы, наверное, удивитесь, но у PC-шных COM-портов тоже вовсе не точные значения...
Согласно даташиту - да. Но согласно практике, на тысячах устройств на PIC работает все без конденсаторов с кварцами, посталяемыми Гаммой, в частности. Вот тут как раз можно и сэкономить.
rx3apf
Oct 20 2011, 17:02
Экономьте, экономьте... Дарю ценную идею - еще можно "съэкономить" на блокировочных кондендансаторах в цепи питания. Их много, а и без них работает. Потребитель будет очень благодарен...
butthead2
Oct 20 2011, 17:11
Цитата(rx3apf @ Oct 20 2011, 19:51)

Вы, наверное, удивитесь, но у PC-шных COM-портов тоже вовсе не точные значения...
Честно говоря очень удивлюсь. В стандартном контроллере rs232 ( интел как его там, запамятовал ) стоял кварц 1,8432МГц. Откуда взяться неточным значениям? Хотя могли уже давно все извратить...
rx3apf
Oct 20 2011, 17:17
Цитата(butthead2 @ Oct 20 2011, 21:11)

Честно говоря очень удивлюсь. В стандартном контроллере rs232 ( интел как его там, запамятовал ) стоял кварц 1,8432МГц. Откуда взяться неточным значениям? Хотя могли уже давно все извратить...
Так то ж в стандартном...Теперь обычно 24 MHz/13. Погрешность незначительна, но тем не менее. Подозреваю, что и у модуля тоже опорник вовсе не кратный...
butthead2
Oct 20 2011, 17:34
Цитата(rx3apf @ Oct 20 2011, 20:17)

Так то ж в стандартном...Теперь обычно 24 MHz/13. Погрешность незначительна, но тем не менее. Подозреваю, что и у модуля тоже опорник вовсе не кратный...
Дык и нецелые коэффициенты деления никто не отменял. А с ними можно загнать погрешность в такие исчезающе малые проценты, что на фоне фронтов физического сигнала никто и не догадается. Да и смысла добиватся менее 0,1% нету - работать и так будет всегда.
Ildar Belkin
Oct 20 2011, 18:07
тогда опять вопрос - 0,1% погрешности - это нормально и работать будет. А сколько уже не будет? 0,2% - уже не будет.
Мне просто интересно - обычно на практике сколько допустимо отклонение. Например, 1% - это много?
Старт-бит, 8 инфобит, стоп-бит. Синхронизация приемника проводится в начале каждого байта по началу старт-бита. Выборка, будем считать, проводится в средине предполагаемого инфобита. Будет сбоить, если в конце байта выборка будет произведена или в предыдущем бите, или в стоповом. Итого: за время передачи 9 бит ошибка не должна превышать полбита (абсолютный максимум !). Итого плюс-минус 5% - критическое значение.
И еще (из практики) - в виду особенности UART PIC, при использовании неточных (целых) кварцев, лучше сделать скорость передачи БОЛЬШЕ рассчетной, чем меньше. Иначе UART PIC дает сбои приема в первую очередь (более чувствителен, чем UART модулей SIMCOM).
rx3apf
Oct 20 2011, 18:26
Цитата(Ildar Belkin @ Oct 20 2011, 22:07)

тогда опять вопрос - 0,1% погрешности - это нормально и работать будет. А сколько уже не будет? 0,2% - уже не будет.
Мне просто интересно - обычно на практике сколько допустимо отклонение. Например, 1% - это много?
Только проверять. Типично UART свободно переваривает отклонение на пару процентов (все должно работать, даже если с обоих сторон уйдет на два процента в разные стороны). Но про модули от SIMCOM рассказывают какие-то страсти-мордасти, мне лично кажущиеся сомнительными. Однако, есть такая неприятная вещь, как автодетект скорости, который и при точном (почти) совпадении скоростей не очень-то стабильно работает. И нисколько не удивлюсь, если при более-менее существенном отклонении возникнут проблемы. По-хорошему, надо зафиксировать скорость (+IPR=), и потом проверять надежность при отклонении скорости передатчика. Ну, и то же самое с включенным автодетектом, чтобы знать наверняка, кто виноват и что делать. Ну, это кому нужно, пусть и делает...
Ildar Belkin
Oct 20 2011, 18:47
Да с автодетектом у SIM900 писали что и так проблемы есть. Я делаю программирование на 9600 (мне достаточно) сразу. Да и вообще записываю это на "постоянку" в &W. Блин ну ладно тогда будет время потестим и это.
Цитата(rx3apf @ Oct 20 2011, 22:26)

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

Я с этим лично столкнулся на sim900. На 115200 не хотел слушать в режиме по умолчанию, пока не дал чуть ЗАНИЖЕННУЮ скорость с PIC.
А на какой _реально_ скорости не захотел работать ? Потому как если это было точно 115200 (с допуском в десятые процента) - то никак не верится. Потому как работает надежно (и от PC, и в самостоятельных устройствах). А если было отклонение - то интересно, на сколько.
Цитата
А автодетект там вобще какой-то странный, не так совсем, как в сим300.
Да, странный. И, например, если не делать паузу между командами, то запросто теряет синхронизацию, проглатывает или искажает символы. Поэтому - отключать обязательно. Но чтобы отключить, надо хотя бы один раз, при первом включении, передать на точно выдержанной скорости.
CADiLO
Oct 21 2011, 06:29
>>>>Это уже когда генератор заработал и уровень сигнала достиг порога. С этого момента - еще 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.
rx3apf
Oct 21 2011, 08:35
Цитата(CADiLO @ Oct 21 2011, 10:29)

>>>>Это уже когда генератор заработал и уровень сигнала достиг порога. С этого момента - еще 1024 такта. А полное время - существенно больше. Поэтому в батарейных приложениях бывают сложности.
Документ где это написано пожалуйста покажите.
Это самоочевидно следует из того раздела даташита, где приведены пороговые уровни OSC1. Ну, если не верите, попробуйте сами скопом посмотреть, сколько пройдет от события до старта.
Цитата
>>>И опять же неправда. Если у генератора нет встроенных конденсаторов, то внешние - необходимы. Согласно даташиту.
Ага - щас.... Встроенные конденсаторы есть у КЕРАМИЧЕСКИХ резонаторов,
У трехвыводных - да.
Цитата
в КВАРЦЕВЫХ они в большинстве случаев не нужны.
Неправда. Впрочем, Вы можете попробовать меня переубедить, приведя ссылку на конкретный даташит, где генератор с кварцевым резонатором нарисован без оных конденсаторов. Лишь в тех вариантах, где уже есть встроенные конденсаторы (скажем, у более поздних AVR, да и то у некоторых ревизий наличие заявлялось, а потом давали отбой в errata).
Цитата
Не удивлюсь ибо де-факто стало для PC портов использовать частоту 18.432 мегагерца. Можете ее поделить и сами удивляйтесь.
А если какой раздолбай китайский на материнке этого не сделал, так только потому что руки вовремя ему не отбили.
Да, на ISA-шных портовках...Уже со времен Winbond-овских MIO (т.е. на четверках с интегированными портами) это делают из 24/13. То же самое относится к USB/COM.
butthead2
Oct 21 2011, 10:06
Цитата(rx3apf @ Oct 21 2011, 11:35)

Неправда. Впрочем, Вы можете попробовать меня переубедить, приведя ссылку на конкретный даташит, где генератор с кварцевым резонатором нарисован без оных конденсаторов. Лишь в тех вариантах, где уже есть встроенные конденсаторы (скажем, у более поздних AVR, да и то у некоторых ревизий наличие заявлялось, а потом давали отбой в errata).
Конденсаторы нужны однознчно. Правда если их не ставить, то паразитная емкость выводов кварца, монтажа и процессора худо-бедно будет выполнять их роль. Но это уже из области опасной "хакерской" экономии - работать будет, но 100% гарантии никто не даст
Цитата(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 - через раз.
ArtemKAD
Oct 22 2011, 09:27
У SIM900 уже ставший классикой аппаратный UART. Каждый принимаемый байт начинает прием с фронта старт-бита (точность определения фронта - 1/8 или 1/16 бита - точнее сложно сказать т.к. обычно есть оба варианта, а уже какой использовать решает разработчик в зависимости от частот) и задача точности - центр последнего бита не должен уйти более чем пол бита в любую сторону. С учетом того, что каждый байт это 10 бит (старт, стоп, 8 бит передачи) получаем разницу частот не больше чем +/- 5% (1/20). Тут конечно не совсем точно - надо учесть точность фиксации фронта - это еще 1/80 или 1/160 - и в принципе для оценки достаточно...
Итого - разница частот для гарантированного приема во всем диапазоне температур и во всем диапазоне питающих процессор напряжений не должна уходить более чем на 3,75% от частоты нулевой ошибки UART. При использовании встроенного калибруемого RC-генератора в современных МК такое возможно. Но особо надо обратить внимание не только на уход частоты, но и на начальную точность заводской калибровки. К примеру на моей любимой Mega48 она оказалась упс ... 10%.
ЗЫ. А вообще решение достаточно не сложное если освоить автоподстройку RC-генератора по принимаемым от SIM900 байтам. И служебная последовательность выдаваемая модулем при включении очень в этом помогает (как минимум на корректной частоте начать обмен).
ЗЗЫ. Вот только это решение не для начинающих. Подводных камней и граблей там хватает...
butthead2
Oct 22 2011, 10:26
Цитата(ArtemKAD @ Oct 22 2011, 12:27)

напряжений не должна уходить более чем на 3,75% от частоты нулевой ошибки UART. При использовании встроенного калибруемого RC-генератора в современных МК такое возможно. Но особо надо обратить внимание не только на уход частоты, но и на начальную точность заводской калибровки. К примеру на моей любимой Mega48 она оказалась упс ... 10%.
Вот и не смущай этих самых начинающих. В мегах например уарт работает по нескольким выборкам, поэтому процентаж нужно уменьшить.
В качестве опорного сигнала можно использовать что то типа нетлайт ( если он стабильной длительности ). Но опять же - не надо морочить начинающим голову.
rx3apf
Oct 22 2011, 15:43
Цитата(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 ?
Цитата(rx3apf @ Oct 22 2011, 19:43)

Хм. Я не очень хорошо знаю PICовый USART, но разве скорость в таком режиме не 8E6/(16*(N+1)) ? Тогда для SPBRG=11 это 41667, а для 10 - 45455. И где тут 57600 ?
Там наверное 10 мгц кварц просто был.
ИМХО более 2% не стоит допускать систематической погрешности, ибо не известно, насколько может отклониться "собеседник". И количество выборок никак тут не спасет - оно только от случайных помех может спасти, да и то если повезет.
Сорри, я ошибся: не в 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%) - ОК, хотя абс. погрешность больше.
rx3apf
Oct 23 2011, 20:42
Цитата(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 опорник делают.
butthead2
Oct 23 2011, 21:10
Цитата(rx3apf @ Oct 23 2011, 23:42)

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

Кондеры нужны для керамических резонаторов или "советских" кварцев, при высокодобротном кварце они даже вредны для PIC.
не знаю насчёт "вредности" для контроллера, но у меня ещё ни разу не получилось сделать стабильное (работающее месяцами в сложных ЭМ условиях) серийное устройство без конденсаторов на кварце, даже если этот кварц высокодобротный.
Вообще-то, все это спокойно считается. Но для расчета необходимо знать частоту сэмплирования 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. Т.е. что бы стоп-бит ещё определялся как стоп-бит.
А кто вам сказал, что все выбрки должны быть правильными?

Вообще-то допустимая прогрешность сильно зависит от логики работы UARTа.
ArtemKAD
May 29 2012, 12:07
Цитата
Поскольку синхронизация запускается каждое слово, то для "нормального" режима ( 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%.
Цитата(=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х, может любой. Это не сложно и не долго.
Цитата(Tahoe @ May 29 2012, 15:36)

А где у меня сказано, про все выборки?
В Ваших "расчетах".
Цитата(Tahoe @ May 29 2012, 15:36)

"Сильно зависит от логики работы" - бесполезная фраза, общие слова. Логика работы UART и так известна. Существуют "особенности реализации", но и там особо не разгуляться.
Угу, и без знания этих особенностей ваши "расчеты" гроша ломаного не стоят.
Цитата(=F8= @ May 29 2012, 17:12)

В Ваших "расчетах".
В каком именно месте? Можно, наконец, от общих слов ( очень дурная манера, кстати ), к конкретике?
Цитата(=F8= @ May 29 2012, 17:12)

Угу, и без знания этих особенностей ваши "расчеты" гроша ломаного не стоят.
Мои расчеты не отменяют необходимости думать ( там даже по-русски написано, что они даны для примера ). Если все-таки немного поработать головой, то станет понятно, что расчеты вполне достаточны. А особенности реализации UART, будут иметь значение _исключительно_ при сэмплировании последнего, 10-го символа.
Цитата(=F8= @ May 29 2012, 17:12)

ваши "расчеты" гроша ломаного не стоят.
Да, забыл, самое главное. Если, опять же, включить голову, то станет понятно, что мои расчеты описыват худший случай. С их помощью получаем минимально допустимую погрешность, не зависящую от реализации конкретного UART. Потому что это расчеты, с точностью до сэмпла и на логику работы им просто плевать.
А вот зная логику работы, можно ещё расслабить тебования к погрешности. Но это уже другая песня.
ArtemKAD
May 29 2012, 14:17
Цитата
Какой-то UART и по трем средним сэмплам сработает, а какой-то FrameError выставит.
Не выставит. Таких UART-ов которые требуют корректности всех 16 семплов для последнего бита сейчас нет. Бывает только в другую сторону - некоторым достаточно единственной точки в центре бита.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.