Форум » Для начинающих. » Помогите с пре- и постделителем » Ответить

Помогите с пре- и постделителем

Dmitro: Избороздил даташит на 18F252 по TMR2 и никак не врублюсь через какое время установится флаг TMR2IF при данном раскладе: MOVLW b'00011110' MOVWF T2CON ; Fosc/4, prescaler 1:16, postscaler 1:4 Если можно - разжуйте ПЛЗ... ЗЫ: разбираюсь в исходнике...

Ответов - 9

Alex: Dmitro пишет: Fosc/4,prescaler 1:16, postscaler 1:41 / ((((Fosc/4)/16)/4)/битность таймера) Это при условии, что таймер считает от 0x00. Если считает не от 0x00, а от другого значения, то в формулу, за место битность таймера, нужно вставить битность таймера-первоночальное значение.

Dmitro: Благодарствую!

lowbyte: Алекс забыл, что 2-ой таймер имеет регистр PR2, который определяет момент его сброса и генерации его флага прерываний. Таким образом, прерывание будет возникать при каждом N-СБРОСЕ этого таймера при совпадении значений таймера и регистра PR2. Величина N - это коэффициент ПОСТСКАЛЕРА.


Alex: lowbyte пишет: Алекс забыл, что 2-ой таймер имеет регистр PR2Да, я этого не учёл. Спасибо Но ТС, в любом случае, его не использует. Значит период у него будет до 0xFF->0x00.

Dmitro: А теперь ну совсем не понял!!!! Вертел-крутил - ну не сходятся времена в программе. изобразил отдельно следущее: movlw b'00011110' movwf T2CON ; предделитель по моему 1:16, TMR2 включен, постделитель 1:4 bcf PIR1, TMR2IF BTFSS PIR1,TMR2IF ; здесь кручу до переполнения BRA $-2 nop ; здесь ставлю точку останова.... .... и получаю в STOPWATCH 16.389 mS !!!!!!!!!!!!!! а расчетные по вышеописаному ~ 64 мксек... Проясните пожалуйста сей чудный момент... Alex, может я чего не понял?

lowbyte: Дмитро! Вы НИ СЛОВА не говорили о частоте ОСЦИЛЛЯТОРА. А теперь употребляете размерность времени. Приведенные Вами установки дают время исполнения 256*16*4=16384 машинных цикла контроллера. Если частота осциллятора 4 МГц, то машцикл = 1мкс. Ну и время исполнения 16,384 мс плюс несколько команд на входе-выходе.

Alex: Dmitro пишет: Проясните пожалуйста сей чудный момент... Alex, может я чего не понял? Берём нашу формулу 1 / ((((Fosc/4)/16)/4)/битность таймера) и подставляем значения при Fosc=4Мгц(к примеру). 1 / ((((4'000'000/4)/16)/4)/256) = 1/61.03515625 = 0,016384 Сек. = 16.384 мс. Всё сходится.... Fosc в формуле - частота осцилятора в герцах. Результат - в секундах. Как уже сказал lowbyte, Вы не указали частоту осцилятора. Для ~64 мс, она получается = ~1/4 Мгц. Скорее всего Вы взяли уже делённую на 4 частоту. И подставили в формулу 1'000'000.

Dmitro: Совершенно верно, взял уже деленную частоту. Про Fosc забыл написать, она действительно 4 Мгц, сорри за невнимательность. Всем большое спасибо за доходчивые ответы!

MAZ: Мне обычно помогает вот эта программа. Особенно при больших расчетах. Того же ШИМ.



полная версия страницы