Overflow interrupt firing only once
This may just be a typo in your post, but the line where you enable the Timer Compare interrupt says:

TIMSK0 != (1 &lt;&lt; OCIE0A);


... when it should say ...

TIMSK0 |= (1 &lt;&lt; OCIE0A);


It's subtle, but if that's what your code actually was, then you were comparing TIMSK0 to a constant rather than assigning to it (and therefore never actually enabling the interrupt).

On a sidenote, you can more concisely write:

TIMSK0 |= _BV(OCIE0A);


... instead of ..

TIMSK0 |= (1 &lt;&lt; OCIE0A);


in avr-libc, if you're into that sort of thing :-).