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

 
 
 
Reply to this topicStart new topic
> arm lpc2132 как замерить время?
yzhastik
сообщение Dec 20 2010, 16:16
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 20-12-10
Пользователь №: 61 759



как в программе определить разницу времени между двумя моментами? (порядки около микросекунд)

Сообщение отредактировал yzhastik - Dec 20 2010, 16:18
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 20 2010, 16:47
Сообщение #2


Гуру
******

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



Использовать таймер? laughing.gif
Go to the top of the page
 
+Quote Post
yzhastik
сообщение Dec 20 2010, 16:58
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 20-12-10
Пользователь №: 61 759



Цитата(rezident @ Dec 20 2010, 23:47) *
Использовать таймер? laughing.gif


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

заранее спасибо!
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 20 2010, 19:20
Сообщение #4


Гуру
******

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



Я конечно тоже извиняюсь, а самостоятельно найти примеры на сайте производителя (NXP) или на сайте компиляторописателя (Keil) вы не пробовали?
Sample Code Bundle for LPC213x/LPC214x Peripherals using Keil's MDK-ARM
LPC2100 Insider's Guide Example Programs
Go to the top of the page
 
+Quote Post
yzhastik
сообщение Dec 21 2010, 02:43
Сообщение #5





Группа: Новичок
Сообщений: 5
Регистрация: 20-12-10
Пользователь №: 61 759



Цитата(rezident @ Dec 21 2010, 02:20) *
Я конечно тоже извиняюсь, а самостоятельно найти примеры на сайте производителя (NXP) или на сайте компиляторописателя (Keil) вы не пробовали?
Sample Code Bundle for LPC213x/LPC214x Peripherals using Keil's MDK-ARM
LPC2100 Insider's Guide Example Programs


большое спасибо!
я честно и долго искал (на обоих на сайтах в том числе), но ничего подобного не находил, вероятно изза невнимательности...
Go to the top of the page
 
+Quote Post
Danis
сообщение Dec 21 2010, 02:50
Сообщение #6


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(yzhastik @ Dec 20 2010, 22:16) *
как в программе определить разницу времени между двумя моментами? (порядки около микросекунд)


Если есть 2-х канальный осциллограф, то можно и без таймеров посмотреть. Например, при запуске/прохождении первого и второго «момента» инвертировать некий пин МК.


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
yzhastik
сообщение Dec 21 2010, 12:49
Сообщение #7





Группа: Новичок
Сообщений: 5
Регистрация: 20-12-10
Пользователь №: 61 759



оказалось что никакой из вышеуказанных хелпов мне не помог...
переформулирую:
мне важно численно знать сколько времени прошло между двумя моментами

то есть если бы я писал прогу в обычном С, я бы сделал так:
Код
time_t t1;
double times;
t1 = time(NULL);
// чтото делаю
times = difftime(time(NULL),t1);
// потом этот times дальше использую


а как мне сделать тоже самое только в этом C?

PS это все мне нужно для лабораторной работы (я студент), так что у меня нет ничего кроме среды mVision

Сообщение отредактировал yzhastik - Dec 21 2010, 12:52
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 21 2010, 13:10
Сообщение #8


Гуру
******

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



Для определения длительности временного промежутка достаточно взять разность значений между двумя интересующими событиями. Запустите таймер и считывайте значения его счетчика в интересующие вас моменты времени. Для вычисления промежутка времени достаточно взять беззнаковую разность этих значений, поделив ее на тактовую частоту таймера. (T2-T1)/Fclk. Где T1 это значение счетчика таймера в момент времени t1, а T2 соответствующее значение в момент времени t2 (t2 ≥ t1), Fclk - частота тактирования таймера в Гц. Максимальный промежуток времени при этом ограничивается периодом переполнения счетчика таймера. Для расширения диапазона отсчета временных интервалов можно увеличить разрядность счетчика программно. Для этого нужно разрешить прерывания от переполнения таймера и при возникновении этого прерывания инкрементировать некую переменную (назовем ее, например, TimerOVF). Тогда временные промежутки будут вычисляться как ((TimerOVFT2+T2)-(TimerOVFT1+T1))/Fclk, где TimerOVFT1, T1 и TimerOVFT2, T2 значения переменной и счетчика таймера соответственно в моменты времени t1 и t2.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 21 2010, 13:19
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(rezident @ Dec 21 2010, 19:10) *
Для определения длительности временного промежутка достаточно взять разность значений между двумя интересующими событиями. Запустите таймер и считывайте значения его счетчика в интересующие вас моменты времени. Для вычисления промежутка времени достаточно взять беззнаковую разность этих значений, поделив ее на тактовую частоту таймера. (T2-T1)/Fclk. Где T1 это значение счетчика таймера в момент времени t1, а T2 соответствующее значение в момент времени t2 (t2 ≥ t1), Fclk - частота тактирования таймера в Гц. Максимальный промежуток времени при этом ограничивается периодом переполнения счетчика таймера. Для расширения диапазона отсчета временных интервалов можно увеличить разрядность счетчика программно. Для этого нужно разрешить прерывания от переполнения таймера и при возникновении этого прерывания инкрементировать некую переменную (назовем ее, например, TimerOVF). Тогда временные промежутки будут вычисляться как ((TimerOVFT2+T2)-(TimerOVFT1+T1))/Fclk, где TimerOVFT1, T1 и TimerOVFT2, T2 значения переменной и счетчика таймера соответственно в моменты времени t1 и t2.

а вход-выход в п/п обработки прерывания не внесет еще бОльшие погрешности, чем 1/Fclk ? хотя.. такты входа-выхода можно и посчитать, наверное
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 21 2010, 13:33
Сообщение #10


Гуру
******

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



Цитата(toweroff @ Dec 21 2010, 21:19) *
а вход-выход в п/п обработки прерывания не внесет еще бОльшие погрешности, чем 1/Fclk ? хотя.. такты входа-выхода можно и посчитать, наверное
LPC2132 может работать на частоте до 60МГц, а топикстартеру нужно временное разрешение в единицы мкс. Запас по разрешающей способности больше, чем на порядок.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 21 2010, 13:47
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(rezident @ Dec 21 2010, 19:33) *
LPC2132 может работать на частоте до 60МГц, а топикстартеру нужно временное разрешение в единицы мкс. Запас по разрешающей способности больше, чем на порядок.

вот что значит невнимательность sm.gif
я как-то сразу начал думать в сторону порядков CCLK
Go to the top of the page
 
+Quote Post
yzhastik
сообщение Dec 21 2010, 15:05
Сообщение #12





Группа: Новичок
Сообщений: 5
Регистрация: 20-12-10
Пользователь №: 61 759



rezident, спасибо за методику!

но тем не менее как это сделать в программе до сих пор непонятно (как инициализировать, как считывать значения...)
хелпы разбераю, но переправить под себя не могу... может кому нибудь не лень будет написать готовый код за большое спасибо? sm.gif
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Dec 23 2010, 14:28
Сообщение #13


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(yzhastik @ Dec 21 2010, 18:49) *
я писал прогу в обычном С, я бы сделал так:

Ой-ой. Это у нас теперь "обычный Си"? А господин Керниган в курсе? sm.gif

Цитата(yzhastik @ Dec 21 2010, 21:05) *
кому нибудь не лень будет написать готовый

Лень. И в воспитательно-методических целях вредно sm.gif
Раздел про таймеры юзер мануала придётся всё-таки прочитать. Если догадаться, что match и capture в данном случае не нужны совсем, читать придётся меньше десятка страниц.

Лучше я расскажу методику № 2.

Настраиваем таймер, чтобы он инкрементировался каждую микросекунду. Запускаем.
Перед стартом измеряемой функции запоминаем значение счётчика таймера, а по окончанию - вычитаем запомненное значение из текущего. Готово!

Вариант имеет плюс - прерывание по переполнению не нужно, можно мерять весьма короткие интервалы, и минус - насколько мне известно, поведение арифметических действий при переполнении в стандарте Си не оговорена.
В данном конкретном случае всё хорошо, если счётчик таймера и переменная для сохранения - беззнаковые, одинаковой разрядности (для LPC2132 - unsigned long).


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:43
Рейтинг@Mail.ru


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