Hab gerad mal bißchen mit dem Timer1 rumgespielt

Code:
#include <avr/io.h>         
uint16_t i=0;
 
int main (void) 
{           
   TCCR1B = (1<<CS12) | (1<<CS10); )
   DDRC = 0xff;   
  PORTC = 0xFF;  

   while (1==1)
   {
     if (TCNT1 == 0x3FF) {i++;}
     if (i==95)  {PORTC=0x00;}
   }
  
  return 0;
}


Wenn ich anstatt
if (i=95) {PORTC=0x00;}
if (i=94) {PORTC=0x00;}
schreibe, gehen die LEDs sofort an.

Also:
<95: LEDs leuchten sofort nach Programmübertragung
>95: LEDs leuchten mit Verzögerung von ca. 5s
Dadrüber gehe es anscheinend linear weiter, also 200 dauert doppelt so lange wie 100, 400 doppelt so lange wie 200 etc.



Die 1 Hz-LED hab ich so versucht zu realisieren:

Ich zähle eine Zählvariable pro Timerdurchlauf um 1 hoch. Dann sollen alle LED ab- bzw. ausgeschaltet werden --> Blinken

Code:
while (1==1)
   {
    if (TCNT1 == 0x3FF) {i++;}
	if (i==1000) 
	    {
		  if (PORTC==0x00) {PORTC=0xFF;} 
		  if (PORTC==0xFF) {PORTC=0x00;}
		  i=0;
	   }
   }
Es leuchtet aber gar nichts. Bei dem if (i==1000) habe ich alle möglichen Werte probiert. Meine erste Rechnung ergab 15,3 Timerdruchläufe pro Sekunde. Also habe ich (if i==15) gemacht
Wo ist mein Denkfehler?