подстройка RC генератора по часовому кварцу

Обсуждаем контроллеры компании Atmel.
VAT
Встал на лапы
Сообщения: 90
Зарегистрирован: Вс дек 20, 2015 21:03:39

подстройка RC генератора по часовому кварцу

Сообщение VAT »

На 9600 частота RC генератора 1МГц (8мгц/8) дает погрешность -7% с делителем 6+1,
Чтобы не завысить частоту беру делитель 5+1 (тут погрешность в +8,5%), но по мне - так безопаснеее. При таком делителе мне нужно догнать частоту RC от минимальной до 921600кГц и остановится - это и будет 9600бод.
Есть асинхронный таймер Т2 тикающий раз в полсекунды по переполнению. По расчетам его младший 0-раряд
должен менять состояние раз в 1,953мс.
т.е . нужно подогнать генератор так,чтобы за это время количество тактовых импульсов прошло 1800. Цикл за который можно успеть перечитать состояние этого разряда таймера2 у меня 8 системных клоков. т.е. 1800/8=225. т.е увеличивай OSCCal пока влезающих клоков не станет >=225 и все. вроде все просто - но ничего не получается.
будет время завтра выложу этот кусок.

Тупым подбором OSCCALL 95-102 обеспечивает связь на 9600, т.е. 98-99 предполагается быть тем числом которым закончится подгон. Но ничего не получается. Атмелстудия в плане отладчика пасует. По мне так от нее вообще почти нет толку - куда ни ткни - она не может.

Может у кого есть у кого готовое решение на асме?
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: подстройка RC генератора по часовому кварцу

Сообщение Jack_A »

VAT писал(а): Атмелстудия в плане отладчика пасует. По мне так от нее вообще почти нет толку - куда ни ткни - она не может.

У меня ( да и у других, наверно) есть альтернативное мнение насчет - кто в данном случае не может :)
Что до УАРТ да с использованием RC - один раз пробовал, не понравилось. Я системные клоки оставил без изменения, а настройку УАРТ подбирал посредством UBRRn Settings . Сначала установил расчетное значение, связался с другим устройством, которое, само собой, было точно закварцовано. Работает. Начал постепенно уменьшать. Заглючило. Отметил это значение, начал пробовать от расчетного ввех. Заглючило. Отметил. В качестве рабочего значения взял середину этого диапазона. Вот так просто без всяких движений вокруг таймера, о котором из объяснения я ничего не понял. Ведь таймеры работают от того же источника тактового сигнала и никаким арбитром быть не могут.
Если для единичного изготовления - мой метод, полагаю, не хуже других. Для серии, конечно, не годится. Недостатком его можно считать то, что подстраивается только УАРТ, а таймеры останутся нескорректированными, так что если нужны временные интервалы с точностью в доли процента - sorry ...
Почему выбран такой странный способ проверки настройки UART - частотомера под рукой не было или хотя бы кварцевого генератора на ЛА3 ?
Изображение
VAT
Встал на лапы
Сообщения: 90
Зарегистрирован: Вс дек 20, 2015 21:03:39

Re: подстройка RC генератора по часовому кварцу

Сообщение VAT »

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

Ничего странного.
Мега48 работает на RCгенераторе. на 1мгц. Но есть часовой кварц 32ххх кГц на таймере 2, асинхронный с переполнением на 1/2 секунды.
На него никак 9600 не повесишь. Делителем уарта особо не поиграешь =5 - 9600+8,5%, =6- 9600-7%. Да это и неправильно ибо эта частота нестабильна и прилично, и от температуры и напряжения. Про уход от времени нигде не видел.
Подстраивать правильно именно частоту RC генератора, причем периодически подстраивая, так как она может уплыть такчто не свяжетесь.. Можно по специальной серии пакетов от главного устройства. Но если есть часовой кварц - почему бы не по нему?
Аватара пользователя
Gaff
Потрогал лапой паяльник
Сообщения: 382
Зарегистрирован: Ср янв 27, 2016 10:19:41
Контактная информация:

Re: подстройка RC генератора по часовому кварцу

Сообщение Gaff »

А ведь идея золотая! RC поплывёт если не от питания то от температуры точно. Может вам стоит попробовать отладить Ваш метод в железе а не надеятся на программу эмулятор? Интересно что говорит даташит по поводу регистров калибровки и можно ли постоянно менять их значения?
Не стесняйтесь благодарить тех кто вам помогает.
VAT
Встал на лапы
Сообщения: 90
Зарегистрирован: Вс дек 20, 2015 21:03:39

Re: подстройка RC генератора по часовому кварцу

Сообщение VAT »

да никакая это не идея. алгоритм последовательного приближения и тупого наращивания приведены в аппнотах.. гдето там есть и реализация на си. если ктонить конвертнет си в асм было бы здорово.

зависимость он напряжения на вид более значительная чем от температуры.

я в железе и отлаживаю. после программного расчета того что нужно положить в OSCCAL записываю туда правильное число, а расчетное вывожу в компорт и вижу полную лажу..

тут вот еще какой очень важный момент - аппнот почитать нужно - там сказано что зависимость частоты от калибровочного числа псевдомонотонная, поэтому чтобы наверняка повысить частоту нужно прибавить 2 а не 1.
Я 2 и прибавляю но все равно.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: подстройка RC генератора по часовому кварцу

Сообщение Pnjom-Penb »

VAT писал(а):если ктонить конвертнет си в асм было бы здорово
Компилятору дайте команду сгенерировать asm-выход и будет здорово. :)
VAT
Встал на лапы
Сообщения: 90
Зарегистрирован: Вс дек 20, 2015 21:03:39

Re: подстройка RC генератора по часовому кварцу

Сообщение VAT »

вот атмеловские сишные примеры.
Задача вроде несложная, чтобы разбираться в чужих кодах. Кроме того они вроде используют другой режим таймера2 - а я его трогать не хочу вообще - пусть тикает как тикал. Если я буду его перестраивать для настройки RCгенератора - поплывет время.
Вложения
AVR055.zip
(75.88 КБ) 188 скачиваний
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: подстройка RC генератора по часовому кварцу

Сообщение akl »

VAT писал(а):Вот научите меня как задать асинхронному таймеру в симуляторе частоту кварца хотя бы. компорт сымитировать мне тоже не удалось.

Мега48 работает на RCгенераторе. на 1мгц. Но есть часовой кварц 32ххх кГц на таймере 2, асинхронный с переполнением на 1/2 секунды.
Подстраивать правильно именно частоту RC генератора...Но если есть часовой кварц - почему бы не по нему?
Студия 4.19 build 730
debug->AVR simulator options->установить частоту в МГц. Например, для быстрой проверки работы асинхронного таймера
установить 3.276800. Также можно установить 0.032768, но это долго ждать.
По мне, будет проще обсуждать если будет код.
VAT
Встал на лапы
Сообщения: 90
Зарегистрирован: Вс дек 20, 2015 21:03:39

Re: подстройка RC генератора по часовому кварцу

Сообщение VAT »

ок будет - я вроде нашел ошибку. позже.
у меня atmel studiu 6.2 в опциях дебага ничего не нашел про частоту таймера((
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: подстройка RC генератора по часовому кварцу

Сообщение akl »

Здесь можно скачать AVR_STUDIO_4.19 На всякий случай, пока не убрали.
VAT
Встал на лапы
Сообщения: 90
Зарегистрирован: Вс дек 20, 2015 21:03:39

Re: подстройка RC генератора по часовому кварцу

Сообщение VAT »

вот - должно работать - но не проверял и вряд ли сегодня к этому вернусь.
по идее нужно сделать еще один шаг - вычесть единичку из OSCСal и проверить не станет ли ближе к 200 в проверке.



;=======таймер настроен на 0,5сек оверфлоу уже все регистры прописались
clr w2 ;задаем начальное значение OSCCal
clr w1 ; обнуляем счетчик
;пауза на успокоение генератора
nop
dec w0
brne RCC_4
;
RCC_0:
lds w0,tcnt2
sbrc w0, 0 ; ждем пока не станет 0
rjmp RCC_0
;
RCC_1:
lds w0,tcnt2
sbrs w0,0 ;2ск
rjmp RCC_1 ;ждем пока не станет =1
rjmp RCC_3 ;2ск
RCC_2:
lds w0,tcnt2 ; 2ck
sbrs w0, 0 ; 2ск . 7бит в "1" находится 250mc, и т д 0бит -1,953мс. нам нужен бит 0
rjmp RCC_4 ;выходим из подсчета
nop ;1ск
nop ;1ck
RCC_3:
inc w1 ;1ck
rjmp RCC_2 ;2ck. (9600= 921600кГц/16/(5+1)), следовательно нужно получить период генератора =1,08507мкс
; итого весь цикл 9ск.

RCC_4:
cpi w1,200 ;должно быть 200. 200*9=1800клоков за 1,953мс
brsh RCC_5 ;
clr w1 ;
inc w2 ; 2 раза изза псевдомонотонности калибровки
inc w2 ;
sts OSCCal,w2 ;
rjmp RCC_1 ;там заодно и пауза будет на успокоение генератора равная фазе "0"

RCC_5:
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: подстройка RC генератора по часовому кварцу

Сообщение akl »

По мне, лучше перейти в более безопасную область значений OSCCAL. Например, 88. Т.к. производитель четко указывает, что нельзя превышать частоту 8,8МГц. А при таком значении OSCCAL получается частота в районе 7.3728МГц
Note that this oscillator is used to time EEPROM and Flash write accesses, and these write times will be affected accordingly. If the EEPROM or Flash are written, do not calibrate to more than 8.8MHz. Otherwise, the EEPROM or Flash write may fail.

OSCCAL_M48.PNG
VAT
Встал на лапы
Сообщения: 90
Зарегистрирован: Вс дек 20, 2015 21:03:39

Re: подстройка RC генератора по часовому кварцу

Сообщение VAT »

Ну так я поэтому и пишу 5 в делитель UART, а не 6. Чтобы не превысить в любом случае 8мгц. У меня получается частота генератора неподеленная 8*921600кГц = 7,373МГц. А начинается подгон с самой нижней возможной.
200 это счетчик, а не OSCCall. В реальном устройстве OSCcall получился 100.
VAT
Встал на лапы
Сообщения: 90
Зарегистрирован: Вс дек 20, 2015 21:03:39

Re: подстройка RC генератора по часовому кварцу

Сообщение VAT »

а начинается подгон с 5,3 мГц. Чуть подправил сделал цикл не 9, а 8 тактов и константу соответственно не 200, а 225 - будет чуть точнее.
Но это при инициализации.
Теперь надо еще алгоритм доработать, чтобы он и вверх и вниз подгонял, для периодической автоподстройки.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: подстройка RC генератора по часовому кварцу

Сообщение Z_h_e »

Я как то делал один небольшой проектик под заказ. При старте МК делал некоторые изменения в EEPROM, а потом уже менялся значительно OSCCALL. Ну вроде как нареканий на работу не было. Я так полагаю что калибровку менять можно сильно, если не пишешь в EEPROM или FLASH. Опять же, если нужны такие записи, думаю можно возвращать значение, записать и потом опять вернуть нужную калибровку. Только OSCCALL нельзя менять сразу намного. Я менял его по одному разряду в цикле до нужного значения.

Для связи по UART, я чего-то никогда не подгонял частоту и все всегда стабильненько связывалось. Не знаю, может везло просто. :dont_know:
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: подстройка RC генератора по часовому кварцу

Сообщение Pnjom-Penb »

Z_h_e писал(а):Не знаю, может везло просто.
Или пакеты были короткими. :roll:
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: подстройка RC генератора по часовому кварцу

Сообщение Z_h_e »

В UART они в любом случае короткие. Стандартная передача 10 бит, которые включают стартовый и стоповый бит. Приемник синхронизируется на каждый стартовый бит. Так что при отклонении частоты до 10 % должно работать.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: подстройка RC генератора по часовому кварцу

Сообщение Pnjom-Penb »

Z_h_e писал(а):при отклонении частоты до 10 % должно работать.
Это слишком оптимистичная оценка. Максимальная ошибка при Н.У. (8бит) не д.б. больше 4,2%, а практически рекомендуемая (шумы, плавание частот в зав-ти от ...) не более 2%.
Пример обоснования:

Изображение

Для Double speed еще жестче, рекомендуемая - не более 1,5%.

ЗЫ: Приношу свои извинения - не длина пакета, а длина посылки... тяпнисса. :oops:
Вложения
UsartMaxErrorPcnt.png
(67.1 КБ) 749 скачиваний
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: подстройка RC генератора по часовому кварцу

Сообщение Z_h_e »

Это слишком оптимистичная оценка.
Да еще какая :shock: . Какие блин 10%, для 10 бит. Внутренние стробы в идеале идут посередине бита. Отклонение строба значит должно быть не более половины длины передачи бита. Т.е. до 5% для 10 бит. Но это конечно в теории. Кроме шумов и всякой другой хрени, внутренние генераторы приемника и передатчика тоже не одинаковые, что может также негативно сказаться.

Кстати, кроме того что я частоту не подгонял и все работало. Я еще как то умудрился подключить некое тестовое устройство к Ком-порту компа без преобразования уровня(лень было добавлять преобразователь), т.е. ТТЛ и все работало на нескольких компах. Комп был в роли приемника и нечего в ответ не передавал. Напряжение 0 для ком-порта по идее должно быть неопределенным состоянием, проверял на нескольких компах, все работало.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Pnjom-Penb
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Re: подстройка RC генератора по часовому кварцу

Сообщение Pnjom-Penb »

Z_h_e писал(а):проверял на нескольких компах, все работало.
Ага, "да забыли про овраги!" © :)))

О, блин, я понял что тебе помогло! Тоже небось была тяпнисса? :beer:
Ответить

Вернуться в «AVR»