Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Xmega
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
zombi
Достаточно ли для запуска авто-подстройки частоты от внешнего часового кварца этого кода:
Код
    ldi    RTMPA,OSC_RC32MCREF_bm|OSC_RC2MCREF_bm
    sts    (OSC_DFLLCTRL),RTMPA; set ref. ext. clk

    ldi    RTMPA,DFLL_ENABLE_bm
    sts    (DFLLRC2M_CTRL),RTMPA; enable DFLL RC2
    sts    (DFLLRC32M_CTRL),RTMPA; enable DFLL RC32
_Артём_
Вопрос уже обсуждался месяца 4 назад: link

P.S. Вы бы хоть псевдокодом каким писали (лениво в ассемблере разбтраться).
zombi
Цитата(_Артём_ @ Jan 23 2012, 00:56) *
P.S. Вы бы хоть псевдокодом каким писали (лениво в ассемблере разбтраться).

Что за псевдокод???
В чем умею и чему доверяю в том и пишу.

Вопрос в силе!
Проверяю DFLL так:

Прерывания запрещаю.
На пине формирую меандр.
Грею хмегу термофеном (от комнатной температуры до ~70C) и наблюдаю на пине плавное повышение понижение частоты с повышением температуры независимо от присутствия кода в моём первом посте.
Или для запуска автоподстройки нужно что-то еще или я что-то делаю не правильно !!!???
_Артём_
Цитата(zombi @ Jan 22 2012, 23:43) *
Что за псевдокод???
В чем умею и чему доверяю в том и пишу.

Ну...ваше право.


Цитата(zombi @ Jan 22 2012, 23:43) *
Вопрос в силе!


link

По ссылке
Цитата
Чтобы выполнялась автоматическая калибровка внутреннего генератора частоты 2МГц или 32МГц, необходимо включить в работу оба этих генератора и обе схемы ФАПЧ.
Попробуйте включить второй генератор и схему Фапч....

У меня тогда заработало.

Цитата(zombi @ Jan 22 2012, 23:43) *
Что за псевдокод???
В чем умею и чему доверяю в том и пишу.

Вопрос в силе!
Проверяю DFLL так:

Прерывания запрещаю.
На пине формирую меандр.
Грею хмегу термофеном (от комнатной температуры до ~70C) и наблюдаю на пине плавное повышение частоты с повышением температуры независимо от присутствия кода в моём первом посте.
Или для запуска автоподстройки нужно что-то еще или я что-то делаю не правильно !!!???

Проверял примерно также.
Причина неработоспособности - глюки в хмеге.
zombi
Цитата(_Артём_ @ Jan 23 2012, 01:56) *
Проверял примерно также.
Причина неработоспособности - глюки в хмеге.

Какие глюки? И как с оными боролись?
_Артём_
Цитата(zombi @ Jan 23 2012, 00:23) *
Какие глюки?

Глюк такой (или это фича?):
Есть два блока DFLL 32MHz и DFLL 2MHz.
Допустим, что в программе используется как источник только 32 МГц (или только 2 МГц). У меня так и было. Тогда по логике включаем DFLL 2(или 32) МГц и получаем точную частоту (так в APNote вроде и описывалось), Но включаем и видим - автоподстройка не работает.

Цитата(zombi @ Jan 23 2012, 00:23) *
И как с оными боролись?

Цитата
Чтобы выполнялась автоматическая калибровка внутреннего генератора частоты 2МГц или 32МГц, необходимо включить в работу оба этих генератора и обе схемы ФАПЧ.
Попробуйте включить второй генератор и схему Фапч....

Включаем второй DFLL (нам не нужный) и видим - автоподстройка работает.
Чем плохо: устройство долно быть экономичным (у меня), но приходится включать лишний блок (DFLL 2MHz и генератор 2МГц). которые тоже потребляют. Это не глюк?
Пример кода есть на работе, завтра наверное доберусь.

P.S. К слову попадался мне файл avrxmega_appnotes.rar (где брал не помню, наверное на сайте Атмела), где все основные приёмы работы с периферией описаны и примеры кода прилагаются. Очень помогает. Правда в нескольких из этих апнот - ошибка (точнее баги хмег), из-за которых работает не так или не всегда. Как раз наш случай.
zombi
Цитата(_Артём_ @ Jan 23 2012, 03:10) *
Включаем второй DFLL (нам не нужный) и видим - автоподстройка работает.

Включаю оба intRC генератора 2 и 32 MHz.
Выбираю RC32M в качестве системной синхронизации.
Разрешаю/запрешаю DFLL.
Формирую на пине меандр 4MHz.
И наблюдаю вот такую картину :
при комнатной температуре на пине 4.076MHz
грею мк до ~80C частота падает до 3.995MHz
охлаждаю, опять 4.076MHz

Причём с разрешенными или запрещенными DFLL частота на пине меняется абсолютно одинаково!!!
Т.е. автоподстройка не работает вообще.
Может я не правильно тестирую работу DFLL?
_Артём_
Я также проверял.
Вот пример кода (но не факт что рабочего - давно это, вроде оно)
CODE
void InitRTC()
{
CLKSYS_XOSC_Config(OSC_FRQRANGE_2TO9_gc, false, OSC_XOSCSEL_32KHz_gc);
//TODO: remove this or change access method when new compiler is ready.
volatile uint8_t * p;

//Set internal 32kHz oscillator as clock source for RTC.
p = &CLK.RTCCTRL;
*p = CLK_RTCSRC_TOSC32_gc | CLK_RTCEN_bm;
//// DFLL var XPlain tranning
CLKSYS_Enable( OSC_XOSCEN_bm );
do {} while ( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 );
// RTC var 0
//Configure RTC period to 1 second.
CLKSYS_RTC_ClockSource_Enable(CLK_RTCSRC_TOSC32_gc);
RTC_Initialize(3, 0x0000, 0x0000, RTC_PRESCALER_DIV1_gc);

//Enable overflow interrupt.
RTC_SetIntLevels(RTC_OVFINTLVL_MED_gc, RTC_COMPINTLVL_OFF_gc);
}

void EnableCorrection(void)
{
InitRTC();
////CLKSYS_AutoCalibration_Enable(OSC_RC32MCREF_bm, true);
////CLKSYS_AutoCalibration_Enable(OSC_RC2MCREF_bm, true);
OSC.DFLLCTRL=1;
DFLLRC2M.CTRL|=1;
CLKSYS_AutoCalibration_Enable( OSC_RC2MCREF_bm, true );

/* Due to an errata on ATxmega128A1 we need to enable the 32MHz internal RC oscillator
* and the Autocalibration for the 32MHz internal RC oscillator in order for the calibration
* to work correctly on the 2 MHz internal RC oscillator*/

CLKSYS_Enable( OSC_RC32MEN_bm );
do {} while ( CLKSYS_IsReady( OSC_RC32MRDY_bm ) == 0 );
CLKSYS_AutoCalibration_Enable( OSC_RC32MCREF_bm, true);
}

int main ()
{
EnableCorrection();
}
zombi
Цитата(_Артём_ @ Jan 23 2012, 17:28) *
Я также проверял.
Вот пример кода (но не факт что рабочего - давно это, вроде оно)

Спасибо _Артём_ Вы натолкнули меня на прочтение нового DS а не того которым я пользовался (старый переведённый на русский).
А в новом четко сказано что для работы DFLL от внешнего кварца нужно просто разрешить XOSC в режиме "32.768 kHz TOSC".
Пол дня блин убил.

Но теперь всё заработало. УРА. yeah.gif

PS. Особой разницы автоподстройки от внешнего кварца или от внутреннего RC32K не увидел. В обоих случаях ~0.2%.
Молодцы Атмел, хороший внутренний RC32K сделали!!!
_Артём_
Цитата(zombi @ Jan 23 2012, 22:51) *
Спасибо _Артём_ Вы натолкнули меня на прочтение нового DS а не того которым я пользовался (старый переведённый на русский).
А в новом четко сказано что для работы DFLL от внешнего кварца нужно просто разрешить XOSC в режиме "32.768 kHz TOSC".

Пожалуста.
Это к какой ревизи относится? ("новом четко сказано что ....").
Получается что это
Цитата
Both DFLLs and both oscillators has to be enabled for one to work


уже не нужно? (Есть некоторое кол-во xm256a3 rev. A - надо в дело пустить)

Цитата(zombi @ Jan 23 2012, 22:51) *
PS. Особой разницы автоподстройки от внешнего кварца или от внутреннего RC32K не увидел. В обоих случаях ~0.2%.
Молодцы Атмел, хороший внутренний RC32K сделали!!!

0.2% - это хорошо. Молодцы ли? Ведь с другой стороны посмотреть: плохой RTC32k сделали, что от него толка нет.
И кстати, 0.2% в каком диапазоне температур?
P.S. Код не приведёте? (Штоб було).
zombi
Цитата(_Артём_ @ Jan 24 2012, 01:12) *
уже не нужно? (Есть некоторое кол-во xm256a3 rev. A - надо в дело пустить)

Не совсем понял о чём Вы.
У меня xmega64A1 rev.H
Цитата(_Артём_ @ Jan 24 2012, 01:12) *
0.2% - это хорошо. Молодцы ли? Ведь с другой стороны посмотреть: плохой RTC32k сделали, что от него толка нет.

Почему нет толка??? для автоподстройки RC2/RC32 самое оно!!!
Цитата(_Артём_ @ Jan 24 2012, 01:12) *
И кстати, 0.2% в каком диапазоне температур?

От комнатной до ~80C. Грею обычным строительным термофеном BOSH GHG660LCD.
Цитата(_Артём_ @ Jan 24 2012, 01:12) *
P.S. Код не приведёте? (Штоб було).

О.к. завтра выложу. Коротенькую спец прогу для теста наваял, но правда на асме!
_Артём_
Цитата(zombi @ Jan 24 2012, 00:57) *
Не совсем понял о чём Вы.

Об этом:
Цитата
Both DFLLs and both oscillators has to be enabled for one to work

Посмотрел в ерате и увидел что относится к xmega64-256A3 rev.A(в более поздних не упоминается)

Цитата(zombi @ Jan 24 2012, 00:57) *
Почему нет толка??? для автоподстройки RC2/RC32 самое оно!!!

Нет смысла ставить часовой кварц, если точность одинаковая (хотя сколько ppm у вас кварц, может потому и одинаково). Но если не ставить то экономия.

Цитата(zombi @ Jan 24 2012, 00:57) *
Не совсем понял о чём Вы.
От комнатной до ~80C. Грею обычным строительным термофеном BOSH GHG660LCD.

Радует. Диапазон широкий.

Цитата(zombi @ Jan 24 2012, 00:57) *
О.к. завтра выложу. Коротенькую спец прогу для теста наваял, но правда на асме!


Разберёмся.
zombi
Вот прога.
CODE
.NOLIST
.include "ATxmega64A1def.inc"
.LIST
.cseg
.org 0x0000
;----------------------------------
;RTC en
ldi R16,CLK_RTCSRC_TOSC_gc|CLK_RTCEN_bm
sts (CLK_RTCCTRL),R16
;----------------------------------
;XOSC sel
ldi R16,OSC_XOSCSEL_32KHz_gc
sts (OSC_XOSCCTRL),R16
;----------------------------------
;Clock en
ldi R16,OSC_RC2MEN_bm|OSC_RC32MEN_bm|OSC_XOSCEN_bm
sts (OSC_CTRL),R16
;wait ready
lds R17,(OSC_STATUS)
cp R17,R16
brne PC-3
;----------------------------------
;CLKsys RC32M
ldi R16,CCP_IOREG_gc
sts (CPU_CCP),R16
ldi R16,CLK_SCLKSEL_RC32M_gc
sts (CLK_CTRL),R16
;----------------------------------
;DFLL en
ldi R16,OSC_RC32MCREF_bm|OSC_RC2MCREF_bm
sts (OSC_DFLLCTRL),R16
ldi R16,DFLL_ENABLE_bm
sts (DFLLRC2M_CTRL),R16
sts (DFLLRC32M_CTRL),R16
;----------------------------------
;PQ.3->
ldi R16,0x08
sts (PORTQ_DIRSET),R16
;----------------------------------
;Loop 8t
sts (PORTQ_OUTTGL),R16
rjmp PC+1
sts (PORTQ_OUTTGL),R16
rjmp PC-5
;----------------------------------


Цитата(_Артём_ @ Jan 24 2012, 04:58) *
Об этом:
Посмотрел в ерате и увидел что относится к xmega64-256A3 rev.A(в более поздних не упоминается)

Для моей хмеги надо обязательно оба DFLL включать.
Цитата(_Артём_ @ Jan 24 2012, 04:58) *
Нет смысла ставить часовой кварц, если точность одинаковая

Может и нету смысла, но по одному чипу судить сложно. А к внешнему кварцу доверия больше.
Цитата(_Артём_ @ Jan 24 2012, 04:58) *
(хотя сколько ppm у вас кварц, может потому и одинаково)

Не знаю. Я оный из сдохшей PиCишки выпаял.
_Артём_
Цитата(zombi @ Jan 24 2012, 11:04) *
Вот прога.


Спасибо.

Цитата(zombi @ Jan 24 2012, 11:04) *
Для моей хмеги надо обязательно оба DFLL включать.

Это хуже ну да ладно.


Цитата(zombi @ Jan 24 2012, 11:04) *
А к внешнему кварцу доверия больше.


Кварц по-идее лучше.

Цитата
Не знаю. Я оный из сдохшей PиCишки выпаял.

Может и качество автоподстройки потому одинаковое, что кварц чёрт знает какой.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.