ATxmega32a4 und Quarz?

Gast #1762325
Lesenswert?

Hallo,
Ich bin gerade dabei einen Print mit einem ATxmega32a4 zu entwerfen. Bis 
jetzt habe ich immer den Meag328p verwendet. Bei dem war es so, dass ich 
für die serielle Kommunikation einen externen Quarz verwendet habe, da 
der interne zu ungenau ist.
Wie ist es nun bei dem XMega32a4? Sind da die internen Frequenzen genau 
bzw. genau genug, um Bussystem wie UART, DMX, DALI... zu realisieren? 
Laut Datenblatt sind die Genauigkeiten beim XMega um einiges besser, 
aber reicht das?
Vielen Dank für eure Infos!

mfg
Andy
Gast #1832168
Lesenswert?

Hallo,
Ich probiere gerade beim ATxmega32A4 den externen Quarz zu 
konfigurieren. Leider gibt es dabei Probleme. Hat irgendwer von euch 
schon mal einen externen Quarz bei dem uC konfiguriert und kann mir den 
Code dazu geben?
Danke für eure Hilfe!

mfg
Andy
Gast #1832792
Lesenswert?

Servus,


Andy schrieb:
> Ich probiere gerade beim ATxmega32A4 den externen Quarz zu
>
> konfigurieren. Leider gibt es dabei Probleme.

CodeVisionAVR
CodeWizardAVR V2.04.8 Evaluation
16Mhz Quarz!!!


// System Clocks initialization
void system_clocks_init(void) // wird hier aufgerufen
{
unsigned char n,s;

// Save interrupts enabled/disabled state
s=SREG;
// Disable interrupts
cli();

// External 16000,000 kHz oscillator initialization
OSC.XOSCCTRL=OSC_FRQRANGE_12TO16_gc | OSC_XOSCSEL_XTAL_16KCLK_gc;
// Enable the external oscillator
OSC.CTRL|=OSC_XOSCEN_bm;

// System Clock prescaler A division factor: 1
// System Clock prescalers B & C division factors: B:1, C:1
// ClkPer4: 16000,000 kHz
// ClkPer2: 16000,000 kHz
// ClkPer:  16000,000 kHz
// ClkCPU:  16000,000 kHz
n=(CLK.PSCTRL & (~(CLK_PSADIV_gm | CLK_PSBCDIV1_bm | CLK_PSBCDIV0_bm))) 
|
  CLK_PSADIV_1_gc | CLK_PSBCDIV_1_1_gc;
CCP=CCP_IOREG_gc;
CLK.PSCTRL=n;

// Wait for the external oscillator to stabilize
while ((OSC.STATUS & OSC_XOSCRDY_bm)==0);

// Select the system clock source: External Osc. or Clock
n=(CLK.CTRL & (~CLK_SCLKSEL_gm)) | CLK_SCLKSEL_XOSC_gc;
CCP=CCP_IOREG_gc;
CLK.CTRL=n;

// Disable the unused oscillators: 2 MHz, 32 MHz, internal 32 kHz, PLL
OSC.CTRL&= ~(OSC_RC2MEN_bm | OSC_RC32MEN_bm | OSC_RC32KEN_bm | 
OSC_PLLEN_bm);

// Peripheral Clock output: Disabled
PORTCFG.CLKEVOUT=(PORTCFG.CLKEVOUT & (~PORTCFG_CLKOUT_gm)) | 
PORTCFG_CLKOUT_OFF_gc;

// Restore interrupts enabled/disabled state
SREG=s;
// Restore optimization for size if needed
}

Gruß xmega

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren