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