Die gleiche tiefgehende Analyse bitte für die erweiterte Ultraschall-Funktion mit 40 kHz:
Code:
   // 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
Hierbei wird ja die Zeile mit dem Addieren von 0x25 gestrichen. Nun verstehe ich endlich warum.

Code:
ISR(TIMER2_COMP_vect)
{
   //TCNT2 += 0x25; //gestrichen!!!
   count36kHz++;
   if(!count36kHz) timebase++;
}
Das mit dem count36kHz++ erscheint mir inzwischen völlig unlogisch. Gehört das hier nicht auch weg??? Diese Funktion wird doch alle 100 Takte aufgerufen, also ist count36kHz während der Ultraschallphase ein 80 kHz-Counter. Sehe ich das richtig?