Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: частота прерывания от таймера
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
BigCoster
Подскажите как посчитать время прерываний от таймера,
для шагового двигателя нужно 25мс.
Перерыл все что у меня было из книжек, не найду...
Понимаю что вопрос не умный, но делать нечего.
GetSmart
Смотря какой процессор. 51-ых много разных. В старых AT89 для этой цели подошёл бы 16-битный таймер. Записывать в таймер нужно число F(такт)/12/(1000/25мс) = F(такт)/480. А потом в прерывании по переполнению таймера записывать снова это же число в таймер. В новых процах деление на 12 заменяется на меньшее число.

Забыл совсем, записывать в таймер нужно число = 65536-(подсчитанное значение)
BigCoster
Цитата(BigCoster @ Jul 5 2007, 19:42) *
Подскажите как посчитать время прерываний от таймера,
для шагового двигателя нужно 25мс.
Перерыл все что у меня было из книжек, не найду...
Понимаю что вопрос не умный, но делать нечего.

Уже нашел ответ поправте если не правильно:
при 16Мгц и восимибитном таймере, если туда ничего не записывать составит 191,25мкс.
GetSmart
Вас надо пнуть посильней smile.gif чтоб сказали уже какой процессор.
BigCoster
Цитата(GetSmart @ Jul 5 2007, 20:01) *
Смотря какой процессор. 51-ых много разных. В старых AT89 для этой цели подошёл бы 16-битный таймер. Записывать в таймер нужно число F(такт)/12/(1000/25мс) = F(такт)/480. А потом в прерывании по переполнению таймера записывать снова это же число в таймер. В новых процах деление на 12 заменяется на меньшее число.

Забыл совсем, записывать в таймер нужно число = 65536-(подсчитанное значение)

Процессор AT89C51
В 16-битный таймер влезет только 65535, что соответствует FFFFh
это наверное значит что время переполнения таймера будет несколько больше чем 25
большое спасибо за формулу, но не пойму что такое 1000?
GetSmart
Цитата(BigCoster)
В 16-битный таймер влезет только 65535, что соответствует FFFFh
это наверное значит что время переполнения таймера будет несколько больше чем 25
С кварцем 24 МГц макс.период = 30 Гц. (33 мс)

Цитата(BigCoster)
но не пойму что такое 1000?
Это чтобы 25мс преобразовать в Гц.
BigCoster
Вывел формулу!!! rolleyes.gif

X=65535-t*F(кварца)/12, где X-число записываемое в таймер (dec), t-нужное время (c.), F(кварца)- частота резонатора (Гц)

Так? 07.gif

Еще вопрос, можно ли изменить направление счета таймера?
чтоб записывать в тайиер число не 65535 - ... , а в нормльном виде?
Omen_13
мечтать не вредно... я перед записью в таймер расчитанное число банально инвертирую, т.е. вычитание делать не надо
GetSmart
Да, мечтать не вредно. Да и при константной длительности прерывания и вычитать ничего не надо. Надо только записать в младший байт таймера число, а затем в старший другое число. И всё. Это 2 команды. Очень желательно при этом остановить таймер, а после перезаписи запустить снова. Но только если есть другие, более приоритетные прерывания. Если их нет, и младший байт меньше 254, то таймер не надо останавливать.
62256
Цитата(BigCoster @ Jul 5 2007, 20:01) *
Уже нашел ответ поправте если не правильно:
при 16Мгц и восимибитном таймере, если туда ничего не записывать составит 191,25мкс.

Не правильно. Чтобы так было, нужно однократно записать "0" в THx, тогда в каждое переполнение 8битного счетчика TLx аппаратно этот 0 из THx копируется в TLx и взводится запрос и флаг прерывания.
И не 191,25мкс получится, а: 256/(16/12)=192 мкс
ALexx
Цитата(BigCoster @ Jul 5 2007, 19:42) *
Подскажите как посчитать время прерываний от таймера,
для шагового двигателя нужно 25мс.
Перерыл все что у меня было из книжек, не найду...
Понимаю что вопрос не умный, но делать нечего.


Использую следующую конструкцию:
Код
#define XTAL            11059200L
#define TIMER_F(x)        65536-((XTAL/12)/(x))        // Timer interrupt Freq


У Вас 25 мс... Что это период или время импульса/паузы ??
25мс -> 40 Гц Вот пример инициализации таймера на 40 Гц, т.е прерывания будут возникать с периодом 25 мс:
Код
  TL0=(TIMER_F(40)&0x00ff);
  TH0=(TIMER_F(40)>>8);


Естественно, в данном случае, таймер должен быть настроен на работу в режиме 1 (16-битный таймер/счетчик)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.