реклама на сайте
подробности

 
 
> Вычисление делителя для таймера.
Jenya7
сообщение Jan 23 2017, 15:48
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Я хочу чтоб таймер посто тикал. Каждый тик 1 милисекунда. А я буду считывать каунтер (TIM7->CNT) и буду знать сколько милисекунд он нащелкал.
Вычисления такие. Частота кристала CPU = 72 мега. Делитель = 2 (иначе не влезем в размер прескейлер регистра). 1/72M = 13.8ns. 1ms/13.8ns/2 = 36231.
Следовательно
Код
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;    
TIM_TimeBaseStructure.TIM_Prescaler = 36231;  
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV2;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure);
TIM_Cmd(TIM7,ENABLE);

Правильно ли я вычисляю?

Сообщение отредактировал Jenya7 - Jan 23 2017, 16:22
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ohmjke
сообщение Jan 23 2017, 19:59
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 116
Регистрация: 27-01-10
Из: СПб
Пользователь №: 55 094



Странно считаете - либо включайте логику, либо не округляйте 13,(8) (периодическую дробь) так грубо до 13,8.
При расчетах Вы сначала возводите 72M в -1 степень, а потом проделываете еще раз то же самое (плюс деление на 2) - не кажется странным, что в итоге получается что-то, не отличающееся в 2 раза?
Итого - делитель нужен 36000, значит в регистр пишем 35999 (т.к. 0 соответствует делению на 1).

Сообщение отредактировал ohmjke - Jan 23 2017, 20:02
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 24 2017, 08:13
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(ohmjke @ Jan 24 2017, 00:59) *
Странно считаете - либо включайте логику, либо не округляйте 13,(8) (периодическую дробь) так грубо до 13,8.
При расчетах Вы сначала возводите 72M в -1 степень, а потом проделываете еще раз то же самое (плюс деление на 2) - не кажется странным, что в итоге получается что-то, не отличающееся в 2 раза?
Итого - делитель нужен 36000, значит в регистр пишем 35999 (т.к. 0 соответствует делению на 1).

я понял. спасибо.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 20:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01398 секунд с 7
ELECTRONIX ©2004-2016