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

 
 
> частота прерывания от таймера, Не пинать сильно!
BigCoster
сообщение Jul 5 2007, 16:42
Сообщение #1


Участник
*

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



Подскажите как посчитать время прерываний от таймера,
для шагового двигателя нужно 25мс.
Перерыл все что у меня было из книжек, не найду...
Понимаю что вопрос не умный, но делать нечего.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
GetSmart
сообщение Jul 5 2007, 17:01
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Смотря какой процессор. 51-ых много разных. В старых AT89 для этой цели подошёл бы 16-битный таймер. Записывать в таймер нужно число F(такт)/12/(1000/25мс) = F(такт)/480. А потом в прерывании по переполнению таймера записывать снова это же число в таймер. В новых процах деление на 12 заменяется на меньшее число.

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


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
BigCoster
сообщение Jul 5 2007, 17:01
Сообщение #3


Участник
*

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



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

Уже нашел ответ поправте если не правильно:
при 16Мгц и восимибитном таймере, если туда ничего не записывать составит 191,25мкс.

Сообщение отредактировал BigCoster - Jul 5 2007, 17:06
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 5 2007, 17:19
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Вас надо пнуть посильней smile.gif чтоб сказали уже какой процессор.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
BigCoster
сообщение Jul 5 2007, 17:19
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 5 2007, 17:35
Сообщение #6


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



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

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


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
BigCoster
сообщение Jul 5 2007, 17:49
Сообщение #7


Участник
*

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



Вывел формулу!!! rolleyes.gif

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

Так? 07.gif

Еще вопрос, можно ли изменить направление счета таймера?
чтоб записывать в тайиер число не 65535 - ... , а в нормльном виде?

Сообщение отредактировал BigCoster - Jul 5 2007, 18:01
Go to the top of the page
 
+Quote Post
Omen_13
сообщение Jul 5 2007, 18:06
Сообщение #8


Силовик-затейник
****

Группа: Модераторы
Сообщений: 766
Регистрация: 18-02-07
Из: Столица солнечного Башкортостана
Пользователь №: 25 467



мечтать не вредно... я перед записью в таймер расчитанное число банально инвертирую, т.е. вычитание делать не надо


--------------------
"Вперёд на мины, ордена потом!"
"инжинер/разработчик создает нечто, в отличии от многих других профессий. В этом есть сходность с художниками или музыкантами"(с)CodeWarrior1241
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 5 2007, 18:21
Сообщение #9


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Да, мечтать не вредно. Да и при константной длительности прерывания и вычитать ничего не надо. Надо только записать в младший байт таймера число, а затем в старший другое число. И всё. Это 2 команды. Очень желательно при этом остановить таймер, а после перезаписи запустить снова. Но только если есть другие, более приоритетные прерывания. Если их нет, и младший байт меньше 254, то таймер не надо останавливать.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
62256
сообщение Jul 8 2007, 12:33
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 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 мкс
Go to the top of the page
 
+Quote Post
ALexx
сообщение Jul 20 2007, 08:11
Сообщение #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-битный таймер/счетчик)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 18:59
Рейтинг@Mail.ru


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