|
Таймеры, Как расчитать |
|
|
|
Jun 13 2005, 13:45
|
Гуру
     
Группа: Свой
Сообщений: 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 называются.
|
|
|
|
|
Jun 13 2005, 16:07
|
Группа: Новичок
Сообщений: 3
Регистрация: 11-06-05
Пользователь №: 5 921

|
>>> t=CCRx/F. Где t - это временной интервал между прерываниями (в секундах), CCRx - это код записанный в регистр сравнения плюс единица (для учета состояния таймера 0x0000), F - это частота тактирования таймера (уже после всех встроенных делителей), в Герцах.
IMHO неправильно... формула должна быть такая t=(255-CCRx)/F CCRx (в tiny это TCNT0)
если я неправ поправьте...
|
|
|
|
|
Jun 13 2005, 17:19
|
Профессионал
    
Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960

|
Цитата(SergeyM @ Jun 13 2005, 15:40) Помогите люди добрые. Существует наверное какая нибудь формула для расчета прерываний от таймера. Ну чтобы расчитать время через которое будет происходить срабатывание таймера. Во-первых не ясно, а что на входе формулы? Частота кварца, тактовая частота МК или ище чего? А во-вторых это зависит от типа МК.
|
|
|
|
|
Jun 13 2005, 19:13
|
Гуру
     
Группа: Свой
Сообщений: 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, но в заголовке не был указан МК про таймер которого спрашивали. Я подумал, что вопрос больше теоретический
|
|
|
|
|
Jun 14 2005, 01:06
|

Участник

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

|
Цитата(SergeyM @ Jun 13 2005, 19:40) Помогите люди добрые. Существует наверное какая нибудь формула для расчета прерываний от таймера. Ну чтобы расчитать время через которое будет происходить срабатывание таймера. И еще в довесок всем предыдущим формулам ошибка, которая может быть вызвана другими прерываниями, когда флаг переполнения счетчика таймера устанавливается во время работы другого прерывания. поэтому результирующая формула: t = (OCRx * K)/F + delta , где OCRx - код в регистре сравнения, К - коэффициент деления (тактирования таймера), F - частота в герцах, delta - время погрешности от 0 до максимальной продолжительности какого-либо прерывания.
|
|
|
|
|
Jun 14 2005, 03:28
|
Участник

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

|
Очень удобно AVRCalc. Можно задавать в ms,гц как угодно
|
|
|
|
|
Jun 14 2005, 04:46
|
Местный
  
Группа: Свой
Сообщений: 207
Регистрация: 25-03-05
Из: Рязань
Пользователь №: 3 669

|
Прикольно, я сейчас как рекламный агент от ImageCraft, уже во второй теме подряд их компилятор советую. В ApplicationBuilder там все легко настраивается, получаешь готовый код - кстати, очень похоже на AVRCalc , но намного удобнее. Я смотрю, в основном все пользуются иаром, неужели в нем нет настроек для UART, таймеров, портов и т.п.?
|
|
|
|
|
Jun 14 2005, 06:22
|

Участник

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

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

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

|
[quote=LeoLabs,Jun 14 2005, 09:22] [/quote] есть, но отдельной прогой - это пожалуй недостаток, один из немногих. [/quote] Кстати, ИАР начал бесплатно раздавть MakeApp для Атмел АВР. Скоре всего даже буржуи не захотели покупать его за 200 баксов. А вообще хорошая программка, только она не поддреживает оччень много новых чипов. Забросили они это дело.
|
|
|
|
|
Jun 16 2005, 08:59
|
Группа: Участник
Сообщений: 7
Регистрация: 13-04-05
Пользователь №: 4 090

|
Цитата(rezident @ Jun 13 2005, 22:13) Если уж так хотите точности, то уточню так: t=(CCRx+1)/F, где CCRx код записанный в регистр сравнения, а режим таймера - счет вверх от 0x000 до CCR0 или до переполнения. Сейчас я натолкнулся на эти грабельки Первый раз работаю с 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мс Не могу пока врубиться, в чём здесь лыжи...
|
|
|
|
|
Jun 16 2005, 09:12
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(boban @ Jun 16 2005, 12:59) И пусть даже я не учёл эту "+1" (было бы число 107 в OCR0A), но прерывания генерятся не через 10мс как мне нуна, а через 115мс Не могу пока врубиться, в чём здесь лыжи...  fuse-биты прошиты на работу от кварца? CKDIV прошит единичкой?
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
Jun 16 2005, 09:23
|
Группа: Участник
Сообщений: 7
Регистрация: 13-04-05
Пользователь №: 4 090

|
vet, в первый раз я пишу для АТМеги. Не изменял я вроде fuse-биты и CKDIV... т.к. не знаю, что это  Там видимо то значение, которое записывается по умолчанию. А что, не от моего внешнего кварца 11,0592МГц всё это дело тактируется сейчас?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|