Wenn du den wert über den AD Wandler einliest, braucht das Zeit, sehr viel zeit. Wenn du nur ausliest ob ein Pin gerade auf High oder Low ist geht das viel schneller. Optimal ist es wenn du in einem Interrupt (z.B. steigende Flanke) deine Zählervariable hochzählst.

PS. Die rechenleistung von dem Atmega sollte ohne Probleme dafür ausreichen.

Und könntest du eventuell dein geändertes Programm noch mal hochstellen, dann hat die nachwelt auch noch was davon