4 мс не будет возможно с прерыванием OVERFLOW:
F_CPU = 8 000 000 Гц
F_OVERFLOW = 1 / 0,004 с = 250 Гц
CYCLES_PER_OVERFLOW = F_CPU / F_OVERFLOW = 32 000, т. Е. Переполнение должно происходить каждые 32 000 тактовых циклов ЦП
CYCLES_PER_TIMER_TICK = 32,000 / 256 = 125 = значение предварительного масштабирования
125 недоступен в качестве прескалера, но вы можете использовать 128, если это достаточно близко для вашей цели (4,096 мс).
Если нет, вы можете использовать прерывание сравнения по таймеру вместо переполнения int. - Или сменить F_CPU ...
После того, как вы получите прерывание каждые 4 мс, вы можете увеличивать глобальную переменную для каждого прерывания, и каждый раз, когда значение переменной достигает 250, проходит еще одна секунда, и переменная может быть сброшена в 0 для подсчета в течение следующей секунды.