|
|
  |
Xmega, DFLL |
|
|
|
Jan 22 2012, 21:43
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(_Артём_ @ Jan 23 2012, 00:56)  P.S. Вы бы хоть псевдокодом каким писали (лениво в ассемблере разбтраться). Что за псевдокод??? В чем умею и чему доверяю в том и пишу. Вопрос в силе! Проверяю DFLL так: Прерывания запрещаю. На пине формирую меандр. Грею хмегу термофеном (от комнатной температуры до ~70C) и наблюдаю на пине плавное повышение понижение частоты с повышением температуры независимо от присутствия кода в моём первом посте. Или для запуска автоподстройки нужно что-то еще или я что-то делаю не правильно !!!???
|
|
|
|
|
Jan 22 2012, 21:56
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(zombi @ Jan 22 2012, 23:43)  Что за псевдокод??? В чем умею и чему доверяю в том и пишу. Ну...ваше право. Цитата(zombi @ Jan 22 2012, 23:43)  Вопрос в силе! linkПо ссылке Цитата Чтобы выполнялась автоматическая калибровка внутреннего генератора частоты 2МГц или 32МГц, необходимо включить в работу оба этих генератора и обе схемы ФАПЧ. Попробуйте включить второй генератор и схему Фапч.... У меня тогда заработало. Цитата(zombi @ Jan 22 2012, 23:43)  Что за псевдокод??? В чем умею и чему доверяю в том и пишу.
Вопрос в силе! Проверяю DFLL так:
Прерывания запрещаю. На пине формирую меандр. Грею хмегу термофеном (от комнатной температуры до ~70C) и наблюдаю на пине плавное повышение частоты с повышением температуры независимо от присутствия кода в моём первом посте. Или для запуска автоподстройки нужно что-то еще или я что-то делаю не правильно !!!??? Проверял примерно также. Причина неработоспособности - глюки в хмеге.
|
|
|
|
|
Jan 22 2012, 23:10
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(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 (где брал не помню, наверное на сайте Атмела), где все основные приёмы работы с периферией описаны и примеры кода прилагаются. Очень помогает. Правда в нескольких из этих апнот - ошибка (точнее баги хмег), из-за которых работает не так или не всегда. Как раз наш случай.
|
|
|
|
|
Jan 23 2012, 13:22
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(_Артём_ @ Jan 23 2012, 03:10)  Включаем второй DFLL (нам не нужный) и видим - автоподстройка работает. Включаю оба intRC генератора 2 и 32 MHz. Выбираю RC32M в качестве системной синхронизации. Разрешаю/запрешаю DFLL. Формирую на пине меандр 4MHz. И наблюдаю вот такую картину : при комнатной температуре на пине 4.076MHz грею мк до ~80C частота падает до 3.995MHz охлаждаю, опять 4.076MHz Причём с разрешенными или запрещенными DFLL частота на пине меняется абсолютно одинаково!!! Т.е. автоподстройка не работает вообще. Может я не правильно тестирую работу DFLL?
|
|
|
|
|
Jan 23 2012, 14:28
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Я также проверял. Вот пример кода (но не факт что рабочего - давно это, вроде оно) 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(); }
Сообщение отредактировал IgorKossak - Jan 23 2012, 15:37
Причина редактирования: [codebox], бездумное цитирование
|
|
|
|
|
Jan 23 2012, 20:51
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(_Артём_ @ Jan 23 2012, 17:28)  Я также проверял. Вот пример кода (но не факт что рабочего - давно это, вроде оно) Спасибо _Артём_ Вы натолкнули меня на прочтение нового DS а не того которым я пользовался (старый переведённый на русский). А в новом четко сказано что для работы DFLL от внешнего кварца нужно просто разрешить XOSC в режиме "32.768 kHz TOSC". Пол дня блин убил. Но теперь всё заработало. УРА.  PS. Особой разницы автоподстройки от внешнего кварца или от внутреннего RC32K не увидел. В обоих случаях ~0.2%. Молодцы Атмел, хороший внутренний RC32K сделали!!!
|
|
|
|
|
Jan 23 2012, 22:12
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(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. Код не приведёте? (Штоб було).
|
|
|
|
|
Jan 23 2012, 22:57
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(_Артём_ @ 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. Код не приведёте? (Штоб було). О.к. завтра выложу. Коротенькую спец прогу для теста наваял, но правда на асме!
|
|
|
|
|
Jan 24 2012, 00:58
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(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)  О.к. завтра выложу. Коротенькую спец прогу для теста наваял, но правда на асме! Разберёмся.
|
|
|
|
|
Jan 24 2012, 09:04
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Вот прога. 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ишки выпаял.
|
|
|
|
|
Jan 24 2012, 11:45
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(zombi @ Jan 24 2012, 11:04)  Вот прога. Спасибо. Цитата(zombi @ Jan 24 2012, 11:04)  Для моей хмеги надо обязательно оба DFLL включать. Это хуже ну да ладно. Цитата(zombi @ Jan 24 2012, 11:04)  А к внешнему кварцу доверия больше. Кварц по-идее лучше. Цитата Не знаю. Я оный из сдохшей PиCишки выпаял. Может и качество автоподстройки потому одинаковое, что кварц чёрт знает какой.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|