This post is a description of a possible addition to the Tiny Core for managing time: the *ticks* function.

There are currently four time-related functions: *millis*, *micros*, *delay*, and *delayMicroseconds*. Because timer 0 is typically used for the time functions, for this and future posts, “timer 0″ is always used to reference the timer used for the time functions.

Like *millis* and *micros*, the *ticks* function returns an *unsigned long*. Unlike the existing functions, the value returned by *ticks* is unit-less. Utility functions can be used to convert a ticks-value to various units: *ticks2us* (convert ticks to microseconds), *ticks2ms* (to milliseconds), and *ticks2s* (to seconds). Other utility functions can be used to convert from various units to a ticks-value: *us2ticks*, *ms2ticks*, *s2ticks*.

The current time-related functions are carefully crafted to eliminate all mathematical error. Unfortunately, that is not possible with *ticks*. At some processor speeds converting a ticks-value introduces an error. Except in extreme circumstances (like trying to convert a very small ticks-value to a small number of microseconds) the error is much smaller than the error from the internal oscillator or an external resonator. Typically, only if the application needs the accuracy of a crystal will the ticks-value conversion be a concern.

The *ticks* function is smaller and uses less SRAM than the current time functions. Theoretically, the interrupt service routine will be fast enough that timer 0 can be configured for very high frequency PWM. If only tick-values are used at run-time, the overall program size will be a bit smaller and a bit faster. For the kinds of ATtiny applications that are typically develop, *ticks* is a very welcome addition.