здравствуйте
хочу получить интервал в 1 сек с помощью таймера TCNT0 атмега 8 с кварцем 4 мгц
Ставлю предделитель на 4 .
использую прерывание по переполнению с исходным числом 6.
запускаю счетчте на 40 000 на выходе которого должен быит по идее 1 гц но увы частотьа гораздо ниже
в чем может быть причина?
моя логика верна?
спасибо заранее.
А фьюзы выставлены на меге для работы с кварцем?
Заводские установки меги - внутренний генератор и как раз на 1 Мгц...
После деления на 4 получается невесть что.
ЗЫ для большей точности можно взять часовой кварц... 32768 Гц
zsxdcf писал(а):использую прерывание по переполнению с исходным числом 6. запускаю счетчте на 40 000
Это как так? у вас прерывание по переполнению или по совпадению? И в каком режиме таймер работает?
И если че, то (6+1) * 40 000 * 4 = 1 120 000 Гц. А у Вас 4 МГц.
P.S. Используйте таймер Т1 - он 16-битный (макс значение 65535)
Pink-Pank писал(а):Предделитель основного тактового сигнала
Вы меня запутали
А как управлять этим основным предделителем?
Если вы имеете в виду переключение частот 1/2/4/8 Мгц, управляемое фьюзами, так это никакого отношения к предделителю не имеет и не делением частоты регулируется.
В TCNT0 заносится -1-M-∆, где ∆-учёт задержки обработки и занесения M. Затем счётчик переполнений N декрементируется до 0. Комментирован пример более реальной частоты кварца.
Я использую генератор кода CVAVR.
там ставится галочки на предделитель TCNTO и указывается какая частота поступает на вход таймера
Так вот при кварце 4 мгц и делителе 4 на вхо поступает 1 мгц и чтобы получить 1 сек с учетом разрядности таймера( он как известно 8 разрадный) нужно поделить взодную частоту на 1 000 000
Таймер делит на 256-6=250 ,а счетчик на 40 000 и вроде все дела но увы не получается в протеусе частота гораздо ниже и на практике к стати тоже.
во задача!?
Предделитель таймера действительно нельзя установить на деление на 4. Можно, например, на 64. При начальном значении счетчика, равном 6, получим частоту прерываний по переполнению: 4000000/64/(256-6) = 250 Гц. В прерывании заведите программный счетчик ещё на 250. И получите 1 Гц. Как-то так:
Pink-Pank писал(а):нет, не фьюзами. ) Программно. Почитайте документацию
Уф.. Сдаюс. Весь даташит на 8 мегу прочесал, нету доступа к основному предделителю. В 88 кстати есть. Не томите, скажите, какой регистр за это отвечает?
zsxdcf писал(а):Так вот при кварце 4 мгц и делителе 4 на вхо поступает 1 мгц
Еще раз говорю, такого не бывает. При кварце в 4 МГц на вход таймера можно подать ТОЛЬКО 4 МГц, 0,5 МГц, 62,5 кГц, 15625 Гц и 3906 Гц
Определитесь с источником тактирования МК. В коде у Вас:
Clock frequency : 8,000000 MHz - соотв. делитель У Вас настраивается на 8. И частота тактирования таймера предполагается 1 Мгц. Частота прерываний переполнений 1000000/250=4кГц. Программно делите на 40000 = 1/10 Гц. Все сходится - меньше 1 Гц.
А в теме Вы пишете 4 МГц. Я Вам дал пример для 1 Гц и 4МГц. Для CodeVision TCCR0=0x03; - делим на 64 - тактирование таймера 62500 Гц.
Делим на 250 (256-6) = 250 Гц. Далее программный счетчик еще на 250 - 1 Гц.
P.S. Естественно, смена уровня на ножке "PORTB ^= 1;" будет вызываться с частотой 1Гц, а меандр на ножке будет 0.5Гц.
Можно померить частоту короткого импульса:
вместо PORTB ^= 1;
записать:
PORTB |= 1;
PORTB &= ~1;