Hi
Nutze bitte oben den CODE-Button, dann sieht der Code wesentlich leserlicher aus. 
Was du machst ist ziemlich umständlich...
Timer sind dazu gedacht, dass sie neben dem Hauptprogramm laufen und sich dann melden, wenn ein entsprechendes Event aufgetreten ist.
Du startest einen Timer und frägst ihn permanent auf seinen Wert ab, anstatt ihn ackern zu lassen und sich von selbst via Interrupt zu melden oder über die OCx Pins das Signal nach außen weiterzuleiten.
Ich habe so einen Code noch nie genauer analysiert und kann dir auf die schnelle auch nicht sagen was daran falsch ist. Vielleicht liegt das Problem darin, dass du den Registerwert von TCNT1 ständig ausliest. Obwohl das laut dem Datenblatt keine Probleme machen dürfte (nur beim Schreiben kanns die geben).
Mit der von dir angegebenen Formel werde ich auch nicht schlau was du damit machen willst.
Okay, versuche einmal systematisch nur anhand des Datenblatts vorzugehen. Irgendwelche vorgefertigten Formeln sind zwar schön und gut, aber da tippt man meist irgendetwas ein ohne den tieferen Zusammenhang verstanden zu haben.
Überlege dir zuerst was du mit dem Timer machen willst. Danach wählst du den Timer (8 oder 16 Bit) aus.
Danach überlegst du dir wie du den Timer verwenden willst. Soll er einen externen Takt (PWM) erzeugen oder nur intern softwareseitig helfen?
Wenn du einen ext. Takt willst dann musst du über das TCCRx Register und die COMx Bits die entsprechenden OCx Pins zuschalten. Willst du nur softwareseitig mit dem Timer arbeiten und einen software Interrupt auslösen dann musst du im TIMSK-Register das entsprechende Bit setzen.
War jetzt sehr allgemein, aber ich weis nicht wo genau dein Problem liegt.
Zu der Sache mit dem Exception-Handling noch
Code:
try{
// irgendwas
} exception ( // Ausnahme ) { // MIST! }
Der Code ist zwar nicht umständlich aber er braucht wie vorher schon sagte eben mehr Speicher.
Lesezeichen