Bei der Verwendung der US-Einheit wird ja folgende Version verwendet:
Code:
ISR(TIMER2_COMP_vect)
{
   //TCNT2 += 0x25;
   count36kHz++;
   if(!count36kHz) timebase++;
}

/**
 * initialises the Ultrasonic module
 * this function is automaticly called by Chirp
 */
void InitUltrasonics(void)
{
   // Change Oscillator-frequency of Timer 2
   // to 40kHz, no toggling of IO-pin:
   TCCR2  = (1 << WGM21) | (1 << CS20);
   OCR2   = 100;              // 40kHz @8MHz crystal
   TIMSK |= (1 << OCIE2);     // OCIE2:  Timer/Counter2 Output Compare Match Interrupt Enable

   ADCSRA = (0 << ADEN);      // deactivate ADC
   ACSR  |= (1 << ACIS1);     // Comparator Interrupt on Falling Output Edge

   ADMUX  = 0x03;             // connect ADC3-input with comparator
   SFIOR |= (1 << ACME);      // connect ADC multiplexer to comparator
   DDRD  &= ~(1 << 6);        // use Port D Pin 6 as input (AIN0)
}
Hierbei ergibt sich:
4000 kHz / 100 (OCR2) = 40 kHz (Warum 4 MHz anstelle 8 MHz? Wo spielt der Faktor 2 hinein?)

Das mit den Timern wird nirgends sauber erklärt. Robin Gruber verweist auch nur auf das Datenblatt. Auch im wiki-Artikel Timer gibt es keine klare Erklärung. Teilweise sind sogar Fehler enthalten.