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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.