подстройка RC генератора по часовому кварцу
подстройка RC генератора по часовому кварцу
На 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 предполагается быть тем числом которым закончится подгон. Но ничего не получается. Атмелстудия в плане отладчика пасует. По мне так от нее вообще почти нет толку - куда ни ткни - она не может.
Может у кого есть у кого готовое решение на асме?
Чтобы не завысить частоту беру делитель 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 предполагается быть тем числом которым закончится подгон. Но ничего не получается. Атмелстудия в плане отладчика пасует. По мне так от нее вообще почти нет толку - куда ни ткни - она не может.
Может у кого есть у кого готовое решение на асме?
Re: подстройка RC генератора по часовому кварцу
VAT писал(а): Атмелстудия в плане отладчика пасует. По мне так от нее вообще почти нет толку - куда ни ткни - она не может.
У меня ( да и у других, наверно) есть альтернативное мнение насчет - кто в данном случае не может
Что до УАРТ да с использованием RC - один раз пробовал, не понравилось. Я системные клоки оставил без изменения, а настройку УАРТ подбирал посредством UBRRn Settings . Сначала установил расчетное значение, связался с другим устройством, которое, само собой, было точно закварцовано. Работает. Начал постепенно уменьшать. Заглючило. Отметил это значение, начал пробовать от расчетного ввех. Заглючило. Отметил. В качестве рабочего значения взял середину этого диапазона. Вот так просто без всяких движений вокруг таймера, о котором из объяснения я ничего не понял. Ведь таймеры работают от того же источника тактового сигнала и никаким арбитром быть не могут.
Если для единичного изготовления - мой метод, полагаю, не хуже других. Для серии, конечно, не годится. Недостатком его можно считать то, что подстраивается только УАРТ, а таймеры останутся нескорректированными, так что если нужны временные интервалы с точностью в доли процента - sorry ...
Почему выбран такой странный способ проверки настройки UART - частотомера под рукой не было или хотя бы кварцевого генератора на ЛА3 ?
Re: подстройка RC генератора по часовому кварцу
Ок - я не могу сладить со студией - времени нет. Вот научите меня как задать асинхронному таймеру в симуляторе частоту кварца хотя бы. Я бы тогда эту тему и не открывал может. Подскажите, а то после инициализации я только светодиодами пользуюсь. компорт сымитировать мне тоже не удалось.
Ничего странного.
Мега48 работает на RCгенераторе. на 1мгц. Но есть часовой кварц 32ххх кГц на таймере 2, асинхронный с переполнением на 1/2 секунды.
На него никак 9600 не повесишь. Делителем уарта особо не поиграешь =5 - 9600+8,5%, =6- 9600-7%. Да это и неправильно ибо эта частота нестабильна и прилично, и от температуры и напряжения. Про уход от времени нигде не видел.
Подстраивать правильно именно частоту RC генератора, причем периодически подстраивая, так как она может уплыть такчто не свяжетесь.. Можно по специальной серии пакетов от главного устройства. Но если есть часовой кварц - почему бы не по нему?
Ничего странного.
Мега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 генератора по часовому кварцу
А ведь идея золотая! RC поплывёт если не от питания то от температуры точно. Может вам стоит попробовать отладить Ваш метод в железе а не надеятся на программу эмулятор? Интересно что говорит даташит по поводу регистров калибровки и можно ли постоянно менять их значения?
Не стесняйтесь благодарить тех кто вам помогает.
Re: подстройка RC генератора по часовому кварцу
да никакая это не идея. алгоритм последовательного приближения и тупого наращивания приведены в аппнотах.. гдето там есть и реализация на си. если ктонить конвертнет си в асм было бы здорово.
зависимость он напряжения на вид более значительная чем от температуры.
я в железе и отлаживаю. после программного расчета того что нужно положить в OSCCAL записываю туда правильное число, а расчетное вывожу в компорт и вижу полную лажу..
тут вот еще какой очень важный момент - аппнот почитать нужно - там сказано что зависимость частоты от калибровочного числа псевдомонотонная, поэтому чтобы наверняка повысить частоту нужно прибавить 2 а не 1.
Я 2 и прибавляю но все равно.
зависимость он напряжения на вид более значительная чем от температуры.
я в железе и отлаживаю. после программного расчета того что нужно положить в OSCCAL записываю туда правильное число, а расчетное вывожу в компорт и вижу полную лажу..
тут вот еще какой очень важный момент - аппнот почитать нужно - там сказано что зависимость частоты от калибровочного числа псевдомонотонная, поэтому чтобы наверняка повысить частоту нужно прибавить 2 а не 1.
Я 2 и прибавляю но все равно.
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: подстройка RC генератора по часовому кварцу
Компилятору дайте команду сгенерировать asm-выход и будет здорово.VAT писал(а):если ктонить конвертнет си в асм было бы здорово
Re: подстройка RC генератора по часовому кварцу
вот атмеловские сишные примеры.
Задача вроде несложная, чтобы разбираться в чужих кодах. Кроме того они вроде используют другой режим таймера2 - а я его трогать не хочу вообще - пусть тикает как тикал. Если я буду его перестраивать для настройки RCгенератора - поплывет время.
Задача вроде несложная, чтобы разбираться в чужих кодах. Кроме того они вроде используют другой режим таймера2 - а я его трогать не хочу вообще - пусть тикает как тикал. Если я буду его перестраивать для настройки RCгенератора - поплывет время.
- Вложения
-
- AVR055.zip
- (75.88 КБ) 188 скачиваний
Re: подстройка RC генератора по часовому кварцу
Студия 4.19 build 730VAT писал(а):Вот научите меня как задать асинхронному таймеру в симуляторе частоту кварца хотя бы. компорт сымитировать мне тоже не удалось.
Мега48 работает на RCгенераторе. на 1мгц. Но есть часовой кварц 32ххх кГц на таймере 2, асинхронный с переполнением на 1/2 секунды.
Подстраивать правильно именно частоту RC генератора...Но если есть часовой кварц - почему бы не по нему?
debug->AVR simulator options->установить частоту в МГц. Например, для быстрой проверки работы асинхронного таймера
установить 3.276800. Также можно установить 0.032768, но это долго ждать.
По мне, будет проще обсуждать если будет код.
Re: подстройка RC генератора по часовому кварцу
ок будет - я вроде нашел ошибку. позже.
у меня atmel studiu 6.2 в опциях дебага ничего не нашел про частоту таймера((
у меня atmel studiu 6.2 в опциях дебага ничего не нашел про частоту таймера((
Re: подстройка RC генератора по часовому кварцу
Здесь можно скачать AVR_STUDIO_4.19 На всякий случай, пока не убрали.
Re: подстройка RC генератора по часовому кварцу
вот - должно работать - но не проверял и вряд ли сегодня к этому вернусь.
по идее нужно сделать еще один шаг - вычесть единичку из 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:
по идее нужно сделать еще один шаг - вычесть единичку из 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:
Re: подстройка RC генератора по часовому кварцу
По мне, лучше перейти в более безопасную область значений 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.
Re: подстройка RC генератора по часовому кварцу
Ну так я поэтому и пишу 5 в делитель UART, а не 6. Чтобы не превысить в любом случае 8мгц. У меня получается частота генератора неподеленная 8*921600кГц = 7,373МГц. А начинается подгон с самой нижней возможной.
200 это счетчик, а не OSCCall. В реальном устройстве OSCcall получился 100.
200 это счетчик, а не OSCCall. В реальном устройстве OSCcall получился 100.
Re: подстройка RC генератора по часовому кварцу
а начинается подгон с 5,3 мГц. Чуть подправил сделал цикл не 9, а 8 тактов и константу соответственно не 200, а 225 - будет чуть точнее.
Но это при инициализации.
Теперь надо еще алгоритм доработать, чтобы он и вверх и вниз подгонял, для периодической автоподстройки.
Но это при инициализации.
Теперь надо еще алгоритм доработать, чтобы он и вверх и вниз подгонял, для периодической автоподстройки.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: подстройка RC генератора по часовому кварцу
Я как то делал один небольшой проектик под заказ. При старте МК делал некоторые изменения в EEPROM, а потом уже менялся значительно OSCCALL. Ну вроде как нареканий на работу не было. Я так полагаю что калибровку менять можно сильно, если не пишешь в EEPROM или FLASH. Опять же, если нужны такие записи, думаю можно возвращать значение, записать и потом опять вернуть нужную калибровку. Только OSCCALL нельзя менять сразу намного. Я менял его по одному разряду в цикле до нужного значения.
Для связи по UART, я чего-то никогда не подгонял частоту и все всегда стабильненько связывалось. Не знаю, может везло просто.
Для связи по UART, я чего-то никогда не подгонял частоту и все всегда стабильненько связывалось. Не знаю, может везло просто.

-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: подстройка RC генератора по часовому кварцу
Или пакеты были короткими.Z_h_e писал(а):Не знаю, может везло просто.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: подстройка RC генератора по часовому кварцу
В UART они в любом случае короткие. Стандартная передача 10 бит, которые включают стартовый и стоповый бит. Приемник синхронизируется на каждый стартовый бит. Так что при отклонении частоты до 10 % должно работать.
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: подстройка RC генератора по часовому кварцу
Это слишком оптимистичная оценка. Максимальная ошибка при Н.У. (8бит) не д.б. больше 4,2%, а практически рекомендуемая (шумы, плавание частот в зав-ти от ...) не более 2%.Z_h_e писал(а):при отклонении частоты до 10 % должно работать.
Пример обоснования:
ЗЫ: Приношу свои извинения - не длина пакета, а длина посылки... тяпнисса.
- Вложения
-
- UsartMaxErrorPcnt.png
- (67.1 КБ) 749 скачиваний
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: подстройка RC генератора по часовому кварцу
Да еще какаяЭто слишком оптимистичная оценка.
Кстати, кроме того что я частоту не подгонял и все работало. Я еще как то умудрился подключить некое тестовое устройство к Ком-порту компа без преобразования уровня(лень было добавлять преобразователь), т.е. ТТЛ и все работало на нескольких компах. Комп был в роли приемника и нечего в ответ не передавал. Напряжение 0 для ком-порта по идее должно быть неопределенным состоянием, проверял на нескольких компах, все работало.
-
Pnjom-Penb
- Мучитель микросхем
- Сообщения: 469
- Зарегистрирован: Вс авг 30, 2015 03:52:59
Re: подстройка RC генератора по часовому кварцу
Ага, "да забыли про овраги!" ©Z_h_e писал(а):проверял на нескольких компах, все работало.
О, блин, я понял что тебе помогло! Тоже небось была тяпнисса?


