roboforum.ru

Технический форум по робототехнике.

Замер времени\кол-ва тактов

Замер времени\кол-ва тактов

User » 21 ноя 2007, 03:33

Ситуация следующая: есть атмега8, выставленная код визардом cvavr на 4 mhz. подскажите каким образом можно узнать сколько тактов уже выполнено, и соответственно считать кол-во мс между какими то событиями. Проще всего мне это видится какой то глобальной переменной, которая каждый такт увеличивается на еденицу.(а там уже от частоты и считать) Видимо это нужно сделать через прерывания, через таймер. Никак немогу понять как...
Даташит читал , avr123.nm.ru читал. Первое почти что темный лес, ибо я новичек. Второе - что то похожее есть, но как это переделать на мою задачу - не ясно.
Подскажите пожалуйста. Если можно с примером кода. (cvavr)

Re: Замер времени\кол-ва тактов

avr123.nm.ru » 21 ноя 2007, 08:47

User писал(а):подскажите каким образом можно узнать сколько тактов уже выполнено, и соответственно считать кол-во мс между какими то событиями.

Даташит читал , avr123.nm.ru читал. (cvavr)


http://www.avr123.nm.ru/z3.htm - измереение времени между событиями в симуляторе VMLAB.

Re: Замер времени\кол-ва тактов

User » 21 ноя 2007, 09:05

метод с delay не есть гуд, потому как в этот момент контроллер "висит" (на сколько я понимаю).
Сформулирую вопрос иначе:
Подскажите как мне сделать прерывание,срабатывающее каждые N тактов кварца(внутреннего, в данном случае).
Например... 30000. т.е. 30 khz.

Далее я буду инкременировать в этом прерывании какую-то переменную, и отсюда уже можно будет считать... ну например кол-во мс с момента какого либо события.

Реально ли такое сделать, и будет ли оно работать? или может я чего не понимаю, и есть какие подводные камни?

Re: Замер времени\кол-ва тактов

avr123.nm.ru » 21 ноя 2007, 09:46

User писал(а):метод с delay не есть гуд, потому как в этот момент контроллер "висит"


Там метод измерения времени между событиями ! Делэй там в коде примера и к МЕТОДУ измерения не относится.

Добавлено спустя 1 минуту 38 секунд:
User писал(а):как мне сделать прерывание,срабатывающее каждые N тактов кварца(внутреннего, в данном случае).
Например... 30000. т.е. 30 khz.


http://www.avr123.nm.ru/z6.htm - использование таймера в AVR.

Re: Замер времени\кол-ва тактов

User » 21 ноя 2007, 11:16

Уважаемый, я понимаю что вам капают деньги за прокрутку баннеров на сайте,тем не менее - спасибо. но может быть у кого нибудь есть код под codevision?

Re: Замер времени\кол-ва тактов

rig » 21 ноя 2007, 14:09

Этот курс прочитал каждый кто находится на этом форуме один раз как минимум, Сам периодически лажу туда. а чтоб денежки не капали, если в этом проблема - Можно скачать курс одним архивом.
Про таймеры там очень хорошо расписано. Несколько дней разбирался теперь ноу проблем. Кстати кодевижен сам может вам помочь, если воспользоватца мастером.

Re: Замер времени\кол-ва тактов

avr123.nm.ru » 21 ноя 2007, 14:29

В задаче 6 я рекомендую использовать мастер компилятора ICC так как настройка
таймеров там сделана ИМХО лучше чем в CVAVR.

Полученый код настройки таймера затем вставляется в текст программы на CVAVR.

А про денюжки - это ПАРАНОЯ !
http://www.medportal.ru/terms/11386/

Re: Замер времени\кол-ва тактов

User » 22 ноя 2007, 07:23

Хочется самостоятельно разобратся с cvavr.
Логика моих рассуждений следующая. Поправьте если где ошибся?

Создаем проект в cvavr, выбираем атмега8, частота 4 mhz.
Заходим в папку timers -> timer0. источник: system clock.
clock value: 500 khz.
Ставим галку overflow interrupt, т.е. по переполнению таймера вызывать прерывание. Timer value=0. Это я так понимаю начало отсчета. В таком режиме считает от 0 до 255.

Значит теперь 500 000 раз в секунду (т.е. с частотой 500 khz) к нашему таймеру будет прибавлятся еденица.
По достижении 255 - он будет сбрасываться в ноль, и далее по кругу.
Прерывание вызывается по переполнению таймера, т.е. 500 000 / 255 ~ 1960 раз в секунду будет срабатывать прерывание.
это чуть меньше 0.5 мс.

т.е., прерывание будет вызыватся каждые ~0.5 мс. Если в коде я напишу

Код: Выделить всёРазвернуть
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
a++;   // a - глобально обьявлена как int, выше.

}


То a/2 - я получаю количество мс прошедших с момента старта.

Верно ли я посчитал? (ессно 500 000 / 255 = не ровно 1960, т.е. будет некая погрешность. тут надо просто подобрать делитель, но это потом. пока без учета погрешности - верно?)

Будет ли такое работать и реально отсчитывать время, совпадающее с астрономическим (при точно подобранном делителе)?

Поправьте если что не верно, может я чего не понимаю...?

p.s.
А про денюжки - это ПАРАНОЯ !
http://www.medportal.ru/terms/11386/

Угу, pop-up окна вестимо за бесплатно появляются :)
Вы поймите, я ничего не имею против. Вы написали курс, потратили время - вы в праве что то за это получить.
Просто хотелось бы ответов на вопросы, а не просто ссылку в которой на тему топика не так уж и много объяснено.
Последний раз редактировалось Vooon 22 ноя 2007, 14:43, всего редактировалось 1 раз.
Причина: добавил CODE

Re: Замер времени\кол-ва тактов

rig » 22 ноя 2007, 08:50

User писал(а):Прерывание вызывается по переполнению таймера, т.е. 500 000 / 255 ~ 1960 раз в секунду будет срабатывать прерывание.

(1/500 000) * 256 - счетчик прибавляется каждые 1/500 000 сек перрывание будет по переполнению тоесть переходе 255->0 (255=0xFF)
если начать считать не с 0 а с к примеру 100 то прерываие будет каждые
(1/500 000)*(256-100)

если начать считать с 255=0xFF (1/500 000)*(256-255) =1/500 000

User писал(а):Будет ли такое работать и реально отсчитывать время, совпадающее с астрономическим (при точно подобранном делителе)?

с кварцем с точностью кварца иначе с точностью генератора (внутреннего, RC).

Re: Замер времени\кол-ва тактов

User » 22 ноя 2007, 10:31

Спасибо! все понятно.

А на сколько такой алгоритм кушает процессорное время? ощутимо? (ну, скажем мегу8 на 4 мгц)

Re: Замер времени\кол-ва тактов

rig » 22 ноя 2007, 10:40

нисколько, это аппаратно выполяется

Re: Замер времени\кол-ва тактов

Digit » 22 ноя 2007, 11:24

User писал(а):
А про денюжки - это ПАРАНОЯ !
http://www.medportal.ru/terms/11386/

Угу, pop-up окна вестимо за бесплатно появляются :)
Вы поймите, я ничего не имею против. Вы написали курс, потратили время - вы в праве что то за это получить.
Просто хотелось бы ответов на вопросы, а не просто ссылку в которой на тему топика не так уж и много объяснено.


User, ты не прав. Всплывающие окна и реклама - это ограничения бесплатного хостинга (если ты заметил, курс на бесплатном лежит). Но совсем бесплатно бывает только как с робофорумом - у доброго человека сервер есть... :good: А на остальных "бесплатных" ресурсах стоимость хостинга оплачивают посетители, которым показывают рекламу...
И вообще, как малые дети! Не нравятся всплывающие окна - заблокируй их софтом. Не нравится реклама - поставь баннеро-резку! 8) В чем проблемы то?! :fool: :pardon:

Re: Замер времени\кол-ва тактов

User » 23 ноя 2007, 04:07

Ок, вопрос снят. Всем спасибо.

Digit писал(а):User, ты не прав. Всплывающие окна и реклама - это ограничения бесплатного хостинга (если ты заметил, курс на бесплатном лежит). Но совсем бесплатно бывает только как с робофорумом - у доброго человека сервер есть... :good: А на остальных "бесплатных" ресурсах стоимость хостинга оплачивают посетители, которым показывают рекламу...
И вообще, как малые дети! Не нравятся всплывающие окна - заблокируй их софтом. Не нравится реклама - поставь баннеро-резку! 8) В чем проблемы то?! :fool: :pardon:

Народ.ру, на сколько я помню - вешает только баннер. pop-up окон принудительных у них нет. достаточно зайти на любой другой сайт на народ.ру и убедиться в этом. кто и как оплачивает хостинг - я отлично знаю. Окна блокируются оперой,баннерорезка стоит.
Только мое сообщение несло несколько иной смысл, чем вы подумали. имхо в данном случае "ответ-ссылка" это ответ ради накручивания баннера, а не ради помощи. потому как инфа там содержится не точно по теме, хоть и где то близко к ней.
Собственно, я призывал отвечать на вопрос, а не баннеры крутить. Если б ссылка была на то, о чем я спрашивал - вопросов бы не возникло. Ну да ладно, это уже оффтопик. Дальше спорить смысла не вижу.

Еще раз всем спасибо.


Rambler\'s Top100 Mail.ru counter