|
Таймеры, Как расчитать |
|
|
|
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МГц всё это дело тактируется сейчас?
|
|
|
|
|
Jun 16 2005, 09:33
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(boban @ Jun 16 2005, 13:23) vet, в первый раз я пишу для АТМеги. Не изменял я вроде fuse-биты и CKDIV... т.к. не знаю, что это  Там видимо то значение, которое записывается по умолчанию. А что, не от моего внешнего кварца 11,0592МГц всё это дело тактируется сейчас? По умолчанию - от внутренней RC-цепочки ~8МГц (CKSEL=0010), и включен делитель на 8 (CKDIV=0), в итоге около 1 МГц.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
Jun 16 2005, 12:38
|
Группа: Участник
Сообщений: 7
Регистрация: 13-04-05
Пользователь №: 4 090

|
Цитата(vet @ Jun 16 2005, 12:33) По умолчанию - от внутренней RC-цепочки ~8МГц (CKSEL=0010), и включен делитель на 8 (CKDIV=0), в итоге около 1 МГц. Цитата(yung @ Jun 16 2005, 12:37) Настраиваются эти биты не в программе, а в программаторе - поищи, я не знаю, чем пользуешься. И поответственней с ними, внимательно прочти datasheet. Похоже... только жаль, что поздно до меня (нас) дошли енти особенности...  Чегой-то мы уже напортачили... Во-первых, программатора АТМеги48 у нас нет, программируем какой-то хренькой для программирования АТМеги8 через LPT-порт компьютера. Во-вторых, вроде сначала программировалось, только с таймером были баги... а потом нашли злоклятую кнопочку "Advanced", где и выбирается всякая хрень. И покляцали не разобравшись... и Ext Clock и др... Сейчас вообще АТМега перестала реагировать  Пишет ошибки всякие при попытке запрограммировать. Уже и лечить пробовали подачей внешнего меандра от генератора (из-за того, что выбирали Ext Clock)... чего-то не получается Могли ли мы бесповоротно испортить всё?
|
|
|
|
|
Jun 16 2005, 12:51
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Вы, видимо, запрограммировали кристалл на тактирование от внешнего генератора, распространённая ошибка. Перепрограммировать можно AVReal-ом, как - описано в документации к нему.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
Jun 16 2005, 13:20
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(boban @ Jun 16 2005, 15:38) Во-первых, программатора АТМеги48 у нас нет, программируем какой-то хренькой для программирования АТМеги8 через LPT-порт компьютера. Во-вторых, вроде сначала программировалось, только с таймером были баги... а потом нашли злоклятую кнопочку "Advanced", где и выбирается всякая хрень. И покляцали не разобравшись... и Ext Clock и др... Сейчас вообще АТМега перестала реагировать  Пишет ошибки всякие при попытке запрограммировать. Уже и лечить пробовали подачей внешнего меандра от генератора (из-за того, что выбирали Ext Clock)... чего-то не получается Могли ли мы бесповоротно испортить всё? Вообще говоря, это (клацать по фьюзам не того кристалла) категорически не рекомендуется. На одном и том же месте у разных кристаллов могут оказаться совсем разные по "небезопасности" фьюзы. Но в данном случае (мега8 - мега48) единственная доступная по SPI опасная вещь - это RSTDISBL, но она у этих кристаллов на одном месте, так что отбить reset 48-ой, трогая другие фьюзв меги8-ой невозможно. Если это не трогали, то тогда шансы поднять кристалл велики. У 48-ой, правда, есть некая reserved позиция в CKSEL... Кто такая и с чем едят - не знаю. А так - самое противное, что могло быть - это External clock либо внутренний 128-килогерцовій RC вкупе с активным CKDIV - больно сильно надо опускать тактировку программатора (-o16 для avreal, см. описание AVReAl )
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jun 16 2005, 16:29
|
Участник

Группа: Свой
Сообщений: 41
Регистрация: 16-02-05
Пользователь №: 2 688

|
Народ, че вы паритесь с этими фузами? Уже говорил и еще раз скажу параллельный программатор есть спасение от 99% неправильного обращения с этими фузами. Прошил чегото не того, завалил проц, а у нас "реаниматор" в виде ПП. По стоимости менее $5, по времени максимум 2 вечера. Короче рекомендую очень полезная вещь в хозяйстве.
|
|
|
|
|
Jun 17 2005, 07:24
|
Группа: Участник
Сообщений: 7
Регистрация: 13-04-05
Пользователь №: 4 090

|
Спасибо всем отозвавшимся! А на данный момент решение такое: выпаять нах эту 48-ю АТмегу и поставить классическую АТмега8... все равно код занимает более 4к. И как только раньше не заметил?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|