xmega_tutorial.jpg

Bewertung:  / 3
SchwachSuper 
  • xmega_block_diagram3D

Im Vergelich zu der Atmega Famile wird der CPU-Takt der Xmegas nicht in den Fusebits eingestellt, sondern per Software. Auch wenn es, auf Grund des doch relativ komplexen Clocksystems, auf den ersten Blick etwas kompliziert aussieht, hat das ganze einen großen Vorteil, da man die Einstellungen nicht seperat vornehmen muss und man sich nicht mehr aus dem Controller aussperren kann, wenn man die Fuse falsch einstellt.

Grundlegend bietet der Xmega ein sehr umfangreiches System um den CPU-Takt für den Controller zu generieren. Dabei hat man die Möglichkeit einen internen Takt von 32KHz, 2MHz oder 32MHz oder einen ULP Oszillator für den Watchdog und eine PLL mit einem Multiplikator von x1-x31 zu verwenden. Außerdem kann den Conroller auch durch einen externen Taktgeber oder einen 0,4MHz bis 16MHz Quarz versorgen.

  • xmega_clock_prescaler

Nach der Auswahl des Takts kann dieser mit dem Clock Prescaler um einen Faktor von 2, 4, 8, ..., 2048 herunter skaliert werden. Die internen Oszillatoren können für eine höhere Genauigkeit im laufenden Betrieb kalibriert werden. Dies erfolgt über Kalibrationswerte, die im Signaturregister des Xmegas stehen. Diese Signaturregister werden bei der Herstellung in den Controller geschrieben.

Features             

  • Internal 32 kHz, 2 MHz, and 32 MHz oscillators
  • External crystal oscillator or clock input
  • Internal PLL with multiplication factor 1x to 31x
  • Safe clock source switching
  • External oscillator failure detection
  • 1x to 2048x system clock prescaler option
  • Automatic runtime calibration of internal oscillators
  • Driver source code included
  • xmega_clock_system

Für die Konfiguration der Clock liefer Atmel einen "XMEGA Clock System driver. Mit Hilfe dieses Treibers kann man relativ einfach den Systemtakt anpassen. Die Treiber Dateien kann man am Ende des Artikels downloaden.
Folgendes Beispiel konfiguriert den Takt des Xmegas mit Hilfe eines externen 16Mhz Quarzes und der internen PLL auf einen Systemtakt von 32MHz.

Xmega Tutorial - Clock
#include "clksys_driver.h"
 
...
 
//############################################################### init_clock
void init_clock( void )
{
 /* konfiguriere Taktquelle */
 CLKSYS_XOSC_Config(OSC_FRQRANGE_12TO16_gc,false,OSC_XOSCSEL_XTAL_16KCLK_gc);
 /* aktiviere Taktquelle */
 CLKSYS_Enable( OSC_XOSCEN_bm );
 /* konfiguriere PLL, Taktquelle, Faktor */
 CLKSYS_PLL_Config( OSC_PLLSRC_XOSC_gc, 2 ); 
 /* aktiviere PLL */
 CLKSYS_Enable( OSC_PLLEN_bm );
 /* konfiguriere Prescaler */
 CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc );
 /* warte bis takt stabil */ 
 do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 );
 /* wähle neue Taktquelle */
 CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc );
 /* deaktiviere internen Oszillator */
 CLKSYS_Disable( OSC_XOSCEN_bm );
} 
 
...

Die XMega Familie besitzt im Gegensatz zu den Atmegas eine interne PLL, mit welcher der Takt einer internen oder externen Taktquelle um den Faktor 1 – 31 erhöht werden kann. Praktisch kann mit Hilfe der PLL und einem externen 16Mhz Quarz der Atmega auch mit mehr als 32MHz betrieben werden. Zuverlässig läuft dies aber nur bis 50Mhz.

Ausgabe der Taktfrequenz

Der Xmega bietet die Möglichkeit den internen Controllertakt an verschiedenen Pins auszugeben. Die Taktfrequenz kann über das Register CLKEVOUT direkt auf einen Pin des Controllers ausgegeben werden. Im folgenden Beispiel wird der Takt des Xmegas auf den Pin 7 des Port C ausgegeben. Welche weiteren Pins für die Ausgabe verwendet werden können, findet man in dem jeweiligem Datenblatt des Controllers.

Xmega Tutorial - Taktausgabe
#include "clksys_driver.h"
 
PORTCFG.CLKEVOUT = PORTCFG_CLKOUT_PC7_gc;
 

Die XMega Familie besitzt im Gegensatz zu den Atmegas eine interne PLL, mit welcher der Takt einer internen oder externen Taktquelle um den Faktor 1 – 31 erhöht werden kann. Praktisch kann mit Hilfe der PLL und einem externen 16Mhz Quarz der Atmega auch mit mehr als 32MHz betrieben werden. Zuverlässig läuft dies aber nur bis 50Mhz.

Ein ausführliches Beispiel zum Testen der vorgestellten Funktionen findet ihr unter Downloads. Weiterhin findet ihr die von Atmel zu dem Thema zur Verfügung gestellte Appnote im Anhang des Artikels unter Links.

Viel Spass beim Testen.

Hinweis:
Das Tutorial wird nach und nach von mir ergänzt. Wenn ihr Fehler in dem Tutorial findet würde ich mich freuen wenn ihr mir diese mitteilt, damit ich diese korrigieren kann. Wenn jemand eigene Tips, Informationen oder Code-Schnipsel hat kann er mir diese gern zusenden, damit ich sie anschließend in das Tutorial einbinden kann.

Links

 
Atmel Appnote
Xmega Clock
AVR1003: Using the XMEGA™ Clock System (pdf)
AVR1003: Using the XMEGA Clock System (Software)

Downloads

Kommentar hinzufügen

Neuste Beiträge

30/08/2016
Es gibt nun endlich ein Update für die Tinyg CNC Controller Hardware und der dazu gehörenden PC Software...
03/09/2015
In den letzten Monaten habe ich lange das CAD Programm und meinen kleinen Ultimaker 3D Drucker gequält....
15/05/2015
Zuerst wurde eine kleine Katze am Computer konstruiert. Der erste Druck mit 0,3mm Schichtstärke war...
06/05/2015
Da beim Ultimaker keine Beleuchtung des Arbeitstisches vorgesehen ist, muss ich mir hier selber eine...