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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Таймеры, Как расчитать
SergeyM
сообщение Jun 13 2005, 12:40
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 1-05-05
Из: Снежинск
Пользователь №: 4 654



Помогите люди добрые.
Существует наверное какая нибудь формула для расчета прерываний от таймера. Ну чтобы расчитать время через которое будет происходить срабатывание таймера.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 13 2005, 13:45
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(SergeyM @ Jun 13 2005, 18:40)
Помогите люди добрые.
Существует наверное какая нибудь формула для расчета прерываний от таймера. Ну чтобы расчитать время через которое будет происходить срабатывание таймера.
*

Гм. Странный вопрос. Длительность и время имеют одну размерность, а частота это обратно-пропорциональная времени величина. T=1/F.
так что формула рассчета будет примерно такова t=CCRx/F. Где t - это временной интервал между прерываниями (в секундах), CCRx - это код записанный в регистр сравнения плюс единица (для учета состояния таймера 0x0000), F - это частота тактирования таймера (уже после всех встроенных делителей), в Герцах. Естественно должны быть разрешены прерывания, возникающие при совпадении регистра сравнения CCRx и счетчика таймера. Если используете прерывания от переполнения, то вместо CCRx подставьте код максимальной разрядности таймера. Для 8-ми разрядного таймера - 256, для 16-ти разрядного - 65536
P.S. Сорри, CCRx это у MSP430. У AVR эти регистры OCRn называются.
Go to the top of the page
 
+Quote Post
Beavius
сообщение Jun 13 2005, 16:07
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 11-06-05
Пользователь №: 5 921



>>> t=CCRx/F. Где t - это временной интервал между прерываниями (в секундах), CCRx - это код записанный в регистр сравнения плюс единица (для учета состояния таймера 0x0000), F - это частота тактирования таймера (уже после всех встроенных делителей), в Герцах.

IMHO неправильно...
формула должна быть такая t=(255-CCRx)/F
CCRx (в tiny это TCNT0)

если я неправ поправьте...
Go to the top of the page
 
+Quote Post
vvs157
сообщение Jun 13 2005, 17:19
Сообщение #4


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

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(SergeyM @ Jun 13 2005, 15:40)
Помогите люди добрые.
Существует наверное какая нибудь формула для расчета прерываний от таймера. Ну чтобы расчитать время через которое будет происходить срабатывание таймера.
*


Во-первых не ясно, а что на входе формулы? Частота кварца, тактовая частота МК или ище чего? А во-вторых это зависит от типа МК.
Go to the top of the page
 
+Quote Post
GedasL
сообщение Jun 13 2005, 17:22
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 21-04-05
Пользователь №: 4 376



AVRCalc
http://www.elektronik-projekt.de/include.p...p&contentid=184
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 13 2005, 19:13
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Beavius @ Jun 13 2005, 22:07)
IMHO неправильно...
формула должна быть такая t=(255-CCRx)/F
CCRx (в tiny это TCNT0)
*

Я не работал с AVR, поэтому могу ошибаться с названиями регистров. Но ваша формула будет верна только для 8-ми битного таймера, и только для режима (если он такой есть?) обратного отсчета, когда таймер считает от максимального значения к нулю. К тому же вы видимо невнимательно читали мое сообщение.
Цитата(rezident)
код записанный в регистр сравнения плюс единица (для учета состояния таймера 0x0000),

Если уж так хотите точности, то уточню так: t=(CCRx+1)/F, где CCRx код записанный в регистр сравнения, а режим таймера - счет вверх от 0x000 до CCR0 или до переполнения. AVR не знаю, а MSP430 оба таких режима поддерживает. У MSP430 есть еще режим UP/DOWN в этом случае могут быть сгенерированы даже три прерывания: от CCR0, от CCRx и при переходе в состояние 0x0000. Так что в этом случае нужно бы еще уточнить, интервал какого именно прерывания интересует? Интервал от CCRx может отличаться, от интервала прерываний по CCR0 и переполнения (обнуления).
Извиняюсь, что возможно зря влез в тему, не зная AVR, но в заголовке не был указан МК про таймер которого спрашивали. Я подумал, что вопрос больше теоретический smile.gif
Go to the top of the page
 
+Quote Post
LeoLabs
сообщение Jun 14 2005, 01:06
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 5-03-05
Пользователь №: 3 082



Цитата(SergeyM @ Jun 13 2005, 19:40)
Помогите люди добрые.
Существует наверное какая нибудь формула для расчета прерываний от таймера. Ну чтобы расчитать время через которое будет происходить срабатывание таймера.
*

И еще в довесок всем предыдущим формулам ошибка, которая может быть вызвана другими прерываниями, когда флаг переполнения счетчика таймера устанавливается во время работы другого прерывания. поэтому результирующая формула:
t = (OCRx * K)/F + delta
, где OCRx - код в регистре сравнения, К - коэффициент деления (тактирования таймера), F - частота в герцах, delta - время погрешности от 0 до максимальной продолжительности какого-либо прерывания.
Go to the top of the page
 
+Quote Post
rmo
сообщение Jun 14 2005, 03:28
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 25
Регистрация: 25-05-05
Пользователь №: 5 364



Очень удобно AVRCalc.
Можно задавать в ms,гц как угодно
Go to the top of the page
 
+Quote Post
yung
сообщение Jun 14 2005, 04:46
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669



Прикольно, я сейчас как рекламный агент от ImageCraft, уже во второй теме подряд их компилятор советую. В ApplicationBuilder там все легко настраивается, получаешь готовый код - кстати, очень похоже на AVRCalc , но намного удобнее. Я смотрю, в основном все пользуются иаром, неужели в нем нет настроек для UART, таймеров, портов и т.п.?
Go to the top of the page
 
+Quote Post
LeoLabs
сообщение Jun 14 2005, 06:22
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 5-03-05
Пользователь №: 3 082



Цитата(yung @ Jun 14 2005, 11:46)
Прикольно, я сейчас как рекламный агент от ImageCraft, уже во второй теме подряд их компилятор советую. В ApplicationBuilder там все легко настраивается, получаешь готовый код - кстати, очень похоже на AVRCalc , но намного удобнее. Я смотрю, в основном все пользуются иаром, неужели в нем нет настроек для UART, таймеров, портов и т.п.?
*

есть, но отдельной прогой - это пожалуй недостаток, один из немногих.
А по поводу что лучше ICC или IAR - этому можно посвятить отдельную тему.
а про точность ApplicationBuilder - моя реплика несколько раньше есть. не стоит полностью на софт полагаться.
Go to the top of the page
 
+Quote Post
ksinet
сообщение Jun 14 2005, 07:13
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 25
Регистрация: 18-04-05
Из: Украина, Черкасы
Пользователь №: 4 269



[quote=LeoLabs,Jun 14 2005, 09:22]
[/quote]
есть, но отдельной прогой - это пожалуй недостаток, один из немногих.
*

[/quote]

Кстати, ИАР начал бесплатно раздавть MakeApp для Атмел АВР. Скоре всего даже буржуи не захотели покупать его за 200 баксов. А вообще хорошая программка, только она не поддреживает оччень много новых чипов. Забросили они это дело.
Go to the top of the page
 
+Quote Post
SergeyM
сообщение Jun 14 2005, 12:10
Сообщение #12


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 1-05-05
Из: Снежинск
Пользователь №: 4 654



Вопрос возник из за того что в книгах пишут:
"при коэффициенте деления (х) и началных значениях таймера (у) прерывания будут выполняться каждые (z) секунд", но ниразу не написали как выбрать коэффициент деления и задать начальные значения таймера. Поэтому я и решил задать вопрос в форум
Go to the top of the page
 
+Quote Post
boban
сообщение Jun 16 2005, 08:59
Сообщение #13





Группа: Участник
Сообщений: 7
Регистрация: 13-04-05
Пользователь №: 4 090



Цитата(rezident @ Jun 13 2005, 22:13)
Если уж так хотите точности, то уточню так: t=(CCRx+1)/F, где CCRx код записанный в регистр сравнения, а режим таймера - счет вверх от 0x000 до CCR0 или до переполнения.


Сейчас я натолкнулся на эти грабельки blink.gif
Первый раз работаю с AVR, до этого было только семейство МК51.

У меня АTMega48 (88/128)... и вроде все делаю правильно и логично:

// инициализация т/с0
TCCR0A = 2; // WGM01..WGM00=10
// Mode2: CTC (Clear Timer on Compare Match)

TCCR0B = 5; // WGM02=0 (для CTC) и таймер запущен
// CS02..CS00=101 CLK/1024 (From prescaler)

OCR0A = 108; // значение в регистр совпадения, соотв. 10мс
// 11,0592МГц/1024=10800 отсчетов в секунду

TIMSK0 = 2; // устан. прерывания по совпадению A

И пусть даже я не учёл эту "+1" (было бы число 107 в OCR0A), но прерывания генерятся не через 10мс как мне нуна, а через 115мс Не могу пока врубиться, в чём здесь лыжи... cranky.gif
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 16 2005, 09:12
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(boban @ Jun 16 2005, 12:59)
И пусть даже я не учёл эту "+1" (было бы число 107 в OCR0A), но прерывания генерятся не через 10мс как мне нуна, а через 115мс  Не могу пока врубиться, в чём здесь лыжи... cranky.gif
*

fuse-биты прошиты на работу от кварца? CKDIV прошит единичкой?


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
boban
сообщение Jun 16 2005, 09:23
Сообщение #15





Группа: Участник
Сообщений: 7
Регистрация: 13-04-05
Пользователь №: 4 090



vet, в первый раз я пишу для АТМеги. Не изменял я вроде fuse-биты и CKDIV... т.к. не знаю, что это sad.gif Там видимо то значение, которое записывается по умолчанию.

А что, не от моего внешнего кварца 11,0592МГц всё это дело тактируется сейчас?
Go to the top of the page
 
+Quote Post

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

 


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


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