Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Автоподстройка RC-генератора от часового кварца
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
_Артём_
Добрый день.

Пытаюсь использовать часовой кварц подключённый к ногам Xmeg-и.
Используется внутренний 2 MHz RC генератор.
DFLL включается/отключается по 1/0 на входе PF0.
На выход PE3 выводится шим частотой 125 кГц.

CODE
#include "avr_compiler.h"
#include "clksys_driver.h"
#include "pmic_driver.h"
#include "TC_driver.h"
#include "rtc_driver.h"
#include <ioavr.h>
#include <inavr.h>

int main() {
CLKSYS_XOSC_Config(OSC_FRQRANGE_2TO9_gc, false, OSC_XOSCSEL_32KHz_gc);
// настройка выхода PE3 и таймера на вывод шим: 125 кГц
//Enable output on PE3.
PORTE.DIR = 0x08;
//Set the TC period.
TC_SetPeriod(&TCE0, 0x0F);
//Configure the TC for single slope mode.
TC0_ConfigWGM(&TCE0, TC_WGMODE_SS_gc);
//Enable Compare channel A.
TC0_EnableCCChannels(&TCE0, TC0_CCDEN_bm);
//Start timer by selecting a clock source.
TC0_ConfigClockSource(&TCE0, TC_CLKSEL_DIV1_gc);
//Output new compare value.
TC_SetCompareD(&TCE0, 8);

// настройка RTC от часового кварца
volatile uint8_t * p;
p = &CLK.RTCCTRL;
*p = CLK_RTCSRC_TOSC32_gc | CLK_RTCEN_bm;
// RTC var 0
//Configure RTC period to 1 second.
//CLKSYS_RTC_ClockSource_Enable(CLK_RTCSRC_TOSC32_gc);
RTC_Initialize(1023, 0x0000, 0x0000, RTC_PRESCALER_DIV1_gc);
RTC_Initialize(RTC_CYCLES_1S - 1, 0x0000, 0x0000, RTC_PRESCALER_DIV1_gc);
RTC_SetIntLevels(RTC_OVFINTLVL_MED_gc, RTC_COMPINTLVL_OFF_gc);
PMIC.CTRL |= PMIC_MEDLVLEN_bm;
sei();

}

unsigned char CorrentEnableState=0;
#pragma vector = RTC_OVF_vect
__interrupt void RTCOverflowISR()
{
if (CorrentEnableState) {
if ((PORTF.IN&1)==0) {// выключение коррекции по 0 на входе PF0
CorrentEnableState=0;
CLKSYS_AutoCalibration_Disable(DFLLRC2M);
}
}
else {
if (PORTF.IN&1) {// включение коррекции по 1 на входе PF0
CorrentEnableState=1;
CLKSYS_AutoCalibration_Enable(OSC_RC2MCREF_bm, true);
}
}
}


подача 0/1 не влияет на выходную частоту шима (получалась 126,2 кГц), т.е. подстройка не работает. В чём может быть дело?
Спасибо.
bob1
Добрый. В ошибках некоторых хмег: Чтобы выполнялась автоматическая калибровка внутреннего генератора частоты 2МГц или 32МГц, необходимо включить в работу оба этих генератора и обе схемы ФАПЧ.
Попробуйте включить второй генератор и схему Фапч....
_Артём_
Цитата(bob1 @ Aug 30 2011, 16:15) *
Добрый. В ошибках некоторых хмег: Чтобы выполнялась автоматическая калибровка внутреннего генератора частоты 2МГц или 32МГц, необходимо включить в работу оба этих генератора и обе схемы ФАПЧ.
Попробуйте включить второй генератор и схему Фапч....


Спасибо. попробую включить оба.
Не подскажете, как выбрать в качестве опоры блока DFLL часовой кварц?
bob1
Цитата(_Артём_ @ Aug 30 2011, 20:32) *
Не подскажете, как выбрать в качестве опоры блока DFLL часовой кварц?

OSC.DFLLCTRL=OSC_RC32MCREF_bm|OSC_RC2MCREF_bm.

_Артём_
Цитата(bob1 @ Aug 30 2011, 18:12) *
OSC.DFLLCTRL=OSC_RC32MCREF_bm|OSC_RC2MCREF_bm.

Спасибо ещё раз, совсем атмел запутал своими глюками.
zombi
Сорри что вклиниваюсь, просто не хочу плодить темы.
У меня вопрос насколько точен и стабилен у ATxмег "32 kHz Ultra Low Power Internal Oscillator" ?
Юрий_СВ
Цитата(zombi @ Sep 1 2011, 20:42) *
Сорри что вклиниваюсь, просто не хочу плодить темы.
У меня вопрос насколько точен и стабилен у ATxмег "32 kHz Ultra Low Power Internal Oscillator" ?


Цитата
The Ultra Low-power 32 kHz internal RC oscillator (ULP32K) is mainly used for
system purposes, such as startup delays, the Watchdog Timer and various internal
timings. It can be used for the Real-time Clock module, but is not available as a
system clock source. With a frequency accuracy of 30%, it is not intended as such
either.
zombi
Цитата
frequency accuracy of 30%

Т.е. для нормальных часов врядли сгодится crying.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.