Zur Mathematik:
Der Timer hat am Eingang den Quarztakt von 3,6864MHz. Dieser wird mit dem Prescaler (Vorteiler) nochmals verringert, einstellbar sind beim Timer0 des M8 die Werte 1:1 (direkte Weitergabe), 1:8, 1:64, 1:256 und 1:1024 (nur bei jedem 1024sten Takt zählt der Timer weiter).

Bei Prescaler 1024 wird dein Timer also mit 3686400/1024= 3600 Hz getaktet.

Ein 8bit-Timer kann von 0 bis 255 zählen, also 256 Schritte. Daher läuft er bei 3600 Hz Eingangstakt 3600/256 = 14 mal pro Sekunde über, was einer Periode von 71Hz entspricht. So viel willst du aber nicht haben. Also musst du in der ISR den Timer mit einem Wert vorladen, damit er nicht bei 0 beginnt, sondern bei einem größeren Wert.
Du willst 50ms Periode erreichen, was 20Hz entspricht (1/0,05). Für 20 Hz muss der Timer quasi den Takt durch 3600/20= 180 teilen, also schon alle 180 Takte einen Interrupt auslösen. Damit er dies macht, wird er mit 256-180= 76 vorgeladen. Dann zählt er immer von 76 bis 256 durch, und zwar in genau 50ms.



Zu avrcalc:
In der mittleren Abteilung den Quarztakt einstellen.
Unten erfolgen dann die Timerberechnungen.
Zunächst links den Prescaler* auswählen. Dann im rechten Eingabefeld die gewünschte Zeit (50ms) und daneben die Einheit (mSec) eingeben. Dann "UpDate", und in den grauen Feldern erscheinen die Ergebnisse. Du brauchst hier den Wert "or reload timer every ISR w/" bei "TCNT0=". Da steht dann 0x4c, was dezimal 76 ergibt.

Falls man den richtigen Wert nicht kennt, einfach durchprobieren. Wenn ein Prescaler für die gewünschte Zeit nicht möglich ist, erscheint ??? in der Ausgabe. Und manchmal lässt sich eine Zeit nicht exakt erreichen (zb 51ms). Das kann man ganz links bei "actual timer ISR" sehen, wo der tatsächlich erzeugte Wert gezeigt wird.