Хочется самостоятельно разобратся с cvavr.
Логика моих рассуждений следующая. Поправьте если где ошибся?
Создаем проект в cvavr, выбираем атмега8, частота 4 mhz.
Заходим в папку timers -> timer0. источник: system clock.
clock value: 500 khz.
Ставим галку overflow interrupt, т.е. по переполнению таймера вызывать прерывание. Timer value=0. Это я так понимаю начало отсчета. В таком режиме считает от 0 до 255.
Значит теперь 500 000 раз в секунду (т.е. с частотой 500 khz) к нашему таймеру будет прибавлятся еденица.
По достижении 255 - он будет сбрасываться в ноль, и далее по кругу.
Прерывание вызывается по переполнению таймера, т.е. 500 000 / 255 ~ 1960 раз в секунду будет срабатывать прерывание.
это чуть меньше 0.5 мс.
т.е., прерывание будет вызыватся каждые ~0.5 мс. Если в коде я напишу
- Код: Выделить всё • Развернуть
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
a++; // a - глобально обьявлена как int, выше.
}
То a/2 - я получаю количество мс прошедших с момента старта.
Верно ли я посчитал? (ессно 500 000 / 255 = не ровно 1960, т.е. будет некая погрешность. тут надо просто подобрать делитель, но это потом. пока без учета погрешности - верно?)
Будет ли такое работать и реально отсчитывать время, совпадающее с астрономическим (при точно подобранном делителе)?
Поправьте если что не верно, может я чего не понимаю...?
p.s.
Угу, pop-up окна вестимо за бесплатно появляются
Вы поймите, я ничего не имею против. Вы написали курс, потратили время - вы в праве что то за это получить.
Просто хотелось бы ответов на вопросы, а не просто ссылку в которой на тему топика не так уж и много объяснено.