Hallo AsuroNeu,
auch dir erst einmal ein "Willkommen im Forum".

Ich fange mal mit 'Zweitens' an.
Der Timer zählt immer bis 255.

Wenn der Timer bei dem numerischen Wert 145 angekommen ist passiert nur etwas.
Dann nämlich wird durch die Initialisierung:
TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20)

-- WGM20 und WGM21 setzen den Timer in den "Fast PWM"-Mode
-- COM20 und COM21 setzen im "Fast PWM"-Mode einen 'Output Compare Mode'
==>> auf 'Set OC2 on Compare Match, clear OC2 at TOP

dieser 'Compare Match' ausgelöst.
Verglichen wird der Zählerwert (0 bis 255) mit dem in OCR2 hinterlegten Wert 145.

Somit zählt der Timer zwar natürlich auch bis zu dem numerischen Wert 145, aber er muss dafür nicht 145 mal takten.
Schliesslich wird ja im Interrupt, wenn der numerische Timerwert also gerade von 255 auf 0 geht als erstes diese ominöse 37 auf die 0 addiert.
Somit benötigt die Timerhardware nur 145 - 37 = 108 Takte um auf den numerischen Wert 145 zu kommen.
Jetzt fehlen aber immer noch 3 Zeiteinheiten, um in die Mitte von deinen ausgerechneten 222 Takten zu gelangen.
Diese 3 Zeiteinheiten vergehen aber schon 'von alleine' durch die Addition der 37.
--> Und damit hätten wir nun 108 + 3 = 111 <== die Mitte

Warum ist die Mitte relevant?

In der Mitte wird über die Initialisierung auf:
==>> 'Set OC2 on Compare Match, clear OC2 at TOP

eingestellt,
dass Pin OC2 bei 'Compare Match' (145 in OCR2) gesetzt wird (5 Volt)
dass Pin OC2 bei 'TOP' (numerischer Wert bei 255 angekommen) gelöscht wird (0 Volt)

Und erst wenn beide 'Zählzeiten' abgelaufen sind haben wir eine volle Periode unseres Signals.


Frage 'Erstens' ist damit wohl beantwortet. Ja, brauchen wir noch .

Möglicherweise hilft dir auch dieser Erklärungsversuch etwas weiter. (Schau dort mal bei "Achtung: Es wird nun kompliziert, aber die Initialisierung ist hier das A und O." nach.)

Gruß Sternthaler