|
частота прерывания от таймера, Не пинать сильно! |
|
|
|
 |
Ответов
(1 - 10)
|
Jul 5 2007, 17:01
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 9-03-07
Из: г. Днепропетровск
Пользователь №: 26 009

|
Цитата(BigCoster @ Jul 5 2007, 19:42)  Подскажите как посчитать время прерываний от таймера, для шагового двигателя нужно 25мс. Перерыл все что у меня было из книжек, не найду... Понимаю что вопрос не умный, но делать нечего. Уже нашел ответ поправте если не правильно: при 16Мгц и восимибитном таймере, если туда ничего не записывать составит 191,25мкс.
Сообщение отредактировал BigCoster - Jul 5 2007, 17:06
|
|
|
|
|
Jul 5 2007, 17:19
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 9-03-07
Из: г. Днепропетровск
Пользователь №: 26 009

|
Цитата(GetSmart @ Jul 5 2007, 20:01)  Смотря какой процессор. 51-ых много разных. В старых AT89 для этой цели подошёл бы 16-битный таймер. Записывать в таймер нужно число F(такт)/12/(1000/25мс) = F(такт)/480. А потом в прерывании по переполнению таймера записывать снова это же число в таймер. В новых процах деление на 12 заменяется на меньшее число.
Забыл совсем, записывать в таймер нужно число = 65536-(подсчитанное значение) Процессор AT89C51 В 16-битный таймер влезет только 65535, что соответствует FFFFh это наверное значит что время переполнения таймера будет несколько больше чем 25 большое спасибо за формулу, но не пойму что такое 1000?
Сообщение отредактировал BigCoster - Jul 5 2007, 17:20
|
|
|
|
|
Jul 5 2007, 17:35
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(BigCoster) В 16-битный таймер влезет только 65535, что соответствует FFFFh это наверное значит что время переполнения таймера будет несколько больше чем 25 С кварцем 24 МГц макс.период = 30 Гц. (33 мс) Цитата(BigCoster) но не пойму что такое 1000? Это чтобы 25мс преобразовать в Гц.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 5 2007, 17:49
|

Участник

Группа: Свой
Сообщений: 71
Регистрация: 9-03-07
Из: г. Днепропетровск
Пользователь №: 26 009

|
Вывел формулу!!! X=65535-t*F(кварца)/12, где X-число записываемое в таймер (dec), t-нужное время (c.), F(кварца)- частота резонатора (Гц) Так?  Еще вопрос, можно ли изменить направление счета таймера? чтоб записывать в тайиер число не 65535 - ... , а в нормльном виде?
Сообщение отредактировал BigCoster - Jul 5 2007, 18:01
|
|
|
|
|
Jul 8 2007, 12:33
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 1-05-06
Из: Одесса
Пользователь №: 16 644

|
Цитата(BigCoster @ Jul 5 2007, 20:01)  Уже нашел ответ поправте если не правильно: при 16Мгц и восимибитном таймере, если туда ничего не записывать составит 191,25мкс. Не правильно. Чтобы так было, нужно однократно записать "0" в THx, тогда в каждое переполнение 8битного счетчика TLx аппаратно этот 0 из THx копируется в TLx и взводится запрос и флаг прерывания. И не 191,25мкс получится, а: 256/(16/12)=192 мкс
|
|
|
|
|
Jul 20 2007, 08:11
|

Местный
  
Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704

|
Цитата(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-битный таймер/счетчик)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|