Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ucos pic (18f452) timer ?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Lagman
В ucos-ii для pic18fxxx (18f452) тики идут каждые 10 мс при частоте кварца в 4МГц таймер программируется на счетный режим числом 55456.
Подскажите пожалуйста откуда получается магическое чило TMR0H = 0xD8 TMR0L = 0xA0 ( 55456 или 65535 - 55456 = 10079) для кварца в 4 МГц, я понимаю что это прерывание будет каждые 10мс, но ведь получается что переполнение происходит при переполнении таймера (FFFF в 0000) я получаю число 10000 т.е. 400000(Мгц)/4(по даташиту Fosc/4)*0,01 (10мс)= 10000 (65535-10000=55535), откуда берутся дополнительные +79 (10079-10000). И как мне расчитать это число для кварца в 8МГц, и 8МГц+PLL т.е. 32МГц?
P.S. Смотрю на исходник PICOS18 (www.picos18) и вижу что простым увеличением на 2 или на 8 ничего не получится.
gmax
Цитата(Lagman @ Nov 1 2005, 22:21)
откуда берутся дополнительные +79 (10079-10000). И как мне расчитать это число для кварца в 8МГц, и 8МГц+PLL т.е. 32МГц?

За время между моментом возникновения ПЕРЕПОЛНЕНИЯ(!) (ну и, само собой, прерывания) до загрузки числа в регистры таймера, последний успевает насчитать вышеуказанные +79.
Как расчитать:
для 8 МГц:
значение для загрузки = (0x10000 - (10e-2) / (Fosc / 4)) + 79
Для 32 МГц придется включать Prescaller. С ним рассчет будет сложнее.
А с какой точнотью нужно время-то мерять? Неужели +/- n*10 мкс так важны?
greg
Цитата(Lagman @ Nov 2 2005, 00:21)
В ucos-ii для pic18fxxx (18f452) тики идут каждые 10 мс при частоте кварца в 4МГц таймер программируется на счетный режим числом 55456.
Подскажите пожалуйста откуда получается магическое чило TMR0H = 0xD8 TMR0L = 0xA0 ( 55456 или 65535 - 55456 = 10079) для кварца в 4 МГц, я понимаю что это прерывание будет каждые 10мс, но ведь получается что переполнение происходит при переполнении таймера (FFFF в 0000) я получаю число 10000 т.е. 400000(Мгц)/4(по даташиту Fosc/4)*0,01 (10мс)= 10000 (65535-10000=55535), откуда берутся дополнительные +79 (10079-10000). И как мне расчитать это число для кварца в 8МГц, и 8МГц+PLL т.е. 32МГц?
P.S. Смотрю на исходник PICOS18 (www.picos18) и вижу что простым увеличением на 2 или на 8 ничего не получится.
*


Для частоты 8 MHz, число загрузки определяется следующим образом:
10000us/(1/(8000000MHz/4)) = 10000us/0,5us = 20000 (0x4E20); Следовательно, число загрузки таймера 0xFFFF-0x4E20 = 0xB1DF (TMR0H=0xB1,TMR0L=0xDF); Для частоты 32 Mz необходимо подключить на вход таймера предделитель, например с коэффициентом деления 2, а расчёт как указано выше. Успехов !
Lagman
Спасибо.
Про расчет таймера я как раз все понял, вот сижу прикидую где еще +79 (для 4МГц) берется, завтра по даташиту буду смотреть сколько тратится времени на загрузку таймера, прерывание и выход из него.

Конечно точности большой не надо, не ракету делаю smile.gif, но всеже хочется понять, планируется организовать зарядку аккумуляторов ( и не только) и выдерживать их определенное время (около 2часов) под зарядкой, вот и пытаюсь понять сколько составит ошибка на 2-х часах.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.