[time-nuts] How to properly characterize 32kHz oscillators manually and with a microcontroller?

Van Horn, David david.vanhorn at backcountryaccess.com
Mon Jun 27 18:14:13 EDT 2016



pete at heypete.com said:
> I'm a little concerned about the speed at which the pulses need to be
> counted. The 32kHz pulses come in every ~30.5 microseconds, and handling an
> interrupt on an ATmega328 running at 16MHz takes about 5.125 microseconds[1]

Huh?

Instruction cycle time is 62.5nS for almost all instructions at that clock.
That’s a pretty long ISR by my standards.

1: Reserve a couple of registers for handling data inside ISRs, avoiding push and pop.
2: Reserve a register for holding SREG during the ISR.

ISR:  	in STEMP,SREG
	At this point you can fearlessly trash SREG and ITEMP and ITEMP2
	Do Stuff using ITEMP and ITEMP2.
	Do as little as practical in the ISR, letting the non-isr code do the heavy lifting.
	Out SREG,STEMP
	RETI

Optionally, set a register (I usually call it "ZERO") to 0x00 to speed up 16 bit operations.
Keep data you need FAST in registers in the low page, rather than in RAM.


	

	


More information about the time-nuts mailing list