Wednesday, March 26, 2014

XMEGA delay Library Test

Test result of delay libraries.

// Test environment:
// ATxmega256A3BU, Atmel Studio 6.2
// T = 297 K, Vcc = 3.340 V


// delay routines - ASF
// RC2M PLL x16 @32M
delay_ms( 100 );    // error: +19.0 %
delay_us( 100 );    // error: +14.5 %
delay_us( 50 );     // error: +14.8 %
delay_us( 5 );      // error: - 1.0 %
delay_us( 1 );      // error: -87.7 %

// RC32M @32M
delay_ms( 100 );    // error: +62.2 %
delay_us( 100 );    // error: +13.6 %
delay_us( 50 );     // error: +13.4 %
delay_us( 5 );      // error: - 2.1 %
delay_us( 1 );      // error: -87.9 %



// 'delay.h' - AVR GCC
// RC32M @32M
_delay_ms( 100 );   // error: - 2.8 %
_delay_us( 100 );   // error: - 2.7 %
_delay_us( 50 );    // error: - 2.5 %
_delay_us( 5 );     // error: - 0.3 %
_delay_us( 1 );     // error: + 9.5 %

// RC32M @32M - DFLL auto calibration enabled
_delay_ms( 100 );   // error: + 0.05%
_delay_us( 100 );   // error: + 0.2 %
_delay_us( 50 );    // error: + 0.3 %
_delay_us( 5 );     // error: + 2.6 %
_delay_us( 1 );     // error: +12.5 %

// RC2M PLL x16 @32M - DFLL auto calibration enabled
_delay_ms( 100 );   // error: - 0.1 %
_delay_us( 100 );   // error: + 0.1 %
_delay_us( 50 );    // error: + 0.2 %
_delay_us( 5 );     // error: + 2.5 %
_delay_us( 1 );     // error: +12.5 %




So best choice will be...

Use DFLL auto calibration for both,

Internal  2 MHz RC oscillator -> PLL x16 -> System Clock @32 MHz
(Calibration reference: TOSC, high quality 32.768 kHz. A.K.A watch crystal)

Internal 32 MHz RC oscillator -> for USB 
(Calibration reference: USB start of frame)

No comments:

Post a Comment