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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> AVR, измерение частоты по INT0
Zelepuk
сообщение Nov 12 2010, 05:33
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Есть интересный девайс http://www.avrhobby.ru/index.php?option=co...k&Itemid=53

Интересно, какая максимальная частота, которая может быть "поймана" таким способом?

Я думаю так, если частота процессора 16Мгц, то 1/16000000 = 6,25*10^8 с. Тогда период измеряемого сигнала должен быть больше 4*6,25*10^8 с (4 такта на обработку прерывания). Тогда выходит что измеряемая частота может принимать значения до 4 Мгц.

По-моему жирновато... что я упустил?
Go to the top of the page
 
+Quote Post
add
сообщение Nov 12 2010, 06:20
Сообщение #2


Местный
***

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



Цитата(Zelepuk @ Nov 12 2010, 08:33) *
(4 такта на обработку прерывания).

По-моему жирновато... что я упустил?

Как это у Вас получилось 4 такта? "По-моему жирновато".
зы: тем более там делайла.. Да еще обработку события в майне сколько тиков. 200-300кГц наверное это максимум, если не меньше.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 12 2010, 06:36
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Zelepuk @ Nov 12 2010, 09:33) *
(4 такта на обработку прерывания).

Ага, а в прерывании, конечно же, ничего делать не надо? И возвращаться из него - тоже biggrin.gif
Ладно, возвращаться необязательно, но стек подправить придеццо.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 12 2010, 06:50
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Вообще как производить такие расчёты производительности? Возможно какая-то метода есть?
Поделитесь или распишите, если не сложно, для конкретно моего примера.

Заранее спасибо.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 12 2010, 07:33
Сообщение #5


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Zelepuk @ Nov 12 2010, 10:50) *
Вообще как производить такие расчёты производительности? Возможно какая-то метода есть?
Поделитесь или распишите, если не сложно, для конкретно моего примера.

Заранее спасибо.

1. Составляете программу на ассемблере - самый быстрый кусок + минимальная оболочка
2. Смотрите в симуляторе количество циклов при разных значениях port stimulus, или в протеусе.
Вот и вся метода.
Либо альтернатива - то же самое в голове, но для этого надо все помнить.
Далее по схеме - непонятно, можно измерительный сигнал заводить одновременно на Т0 и ICP и без шума и пыли получать те самые 4 мгц.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 12 2010, 07:59
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Zelepuk @ Nov 12 2010, 08:33) *
Тогда выходит что измеряемая частота может принимать значения до 4 Мгц. ... что я упустил?
Всё зависит от того, что же и каким методом Вы желаете измерить?
Если сигнал периодический и его период (частота) не изменяется за некоторый интервал времени (время измерения), то можно подсчитать число импульсов и затем время измерения разделить на подсчитанное число импульсов. При необходимости, можно предусмотреть пределитель, внешний по отношению к МК, и при расчетах учитывать.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 12 2010, 10:18
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(Палыч @ Nov 12 2010, 10:59) *
Всё зависит от того, что же и каким методом Вы желаете измерить?
Если сигнал периодический и его период (частота) не изменяется за некоторый интервал времени (время измерения), то можно подсчитать число импульсов и затем время измерения разделить на подсчитанное число импульсов. При необходимости, можно предусмотреть пределитель, внешний по отношению к МК, и при расчетах учитывать.

Способ указан в старте. Да, просто считаем кол-во импульсов за время 5 сек.



Но, меня сейчас очень интересует вот что.
Мы считаем кол-во импульсов за 5 сек. Тогда, для частоты в 50Гц мы получим 250 импульсов (250/5 = 50), несложно посчитать, что погрешность измерения составит 0,1 Гц (дробное значение)
Тоже самое для напряжения. При точности в 10 (значащих 8) бит мы получаем погрешность в 0.86 вольта (при амплитуде в 220) - опять дробное.

Как можно записывать и выводить данные на экран в вормате десятичной дроби (используя float) ?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 12 2010, 10:43
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Zelepuk @ Nov 12 2010, 13:18) *
Как можно записывать и выводить данные на экран в вормате десятичной дроби (используя float) ?

Плавающая запятая в МК - большая проблема, но, во многих случаях от плавающей запятой можно отказаться в пользу фиксированной.
Пример. Пусть за теже 5 секунд мы насчитали 248 импульсов. Вычисляем частоту до десятых Гц (т.е. значение получаем умноженным на 10) F= 248 * 10 /5 + 5/2= 248*2 + 3 = 499 . Т.е. измерели частоту и получили 49,9 Гц. Работать с целыми числами гораздо удобнее - нужно лишь при выводе учитывать, что последняя цифра - это десятые доли, а не единицы; предпоследняя - единицы и т.д.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 12 2010, 10:58
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



спасибо огромное.
Стало быть о fft (крохотном) на AVR можно забыть?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 12 2010, 12:03
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Zelepuk @ Nov 12 2010, 13:58) *
Стало быть о fft (крохотном) на AVR можно забыть?
"Крохотный fft" - это float? О float в подобной задаче лучше забыть. Использование плавающей запятой "сожрет" кучу ресурсов МК (и памяти, и времени), которых и так не богато.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 12 2010, 12:21
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(Палыч @ Nov 12 2010, 15:03) *
"Крохотный fft" - это float? О float в подобной задаче лучше забыть. Использование плавающей запятой "сожрет" кучу ресурсов МК (и памяти, и времени), которых и так не богато.

я имел ввиду Фурье...
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 12 2010, 13:03
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Zelepuk @ Nov 12 2010, 15:21) *
я имел ввиду Фурье...
Зачем же отказываться? Только рассчеты, наверное, лучше производить с массштабированными числами - умноженными на 10^N или 2^N (фиксированная запятая). В этом случае тоже проблемы будут... Например, при умножении таких чисел результат умножения нужно будет делить на множитель (сдвигать), при делении - умножать (сдвигать) делимое... При необходимости - использовать long или даже long long (если транслятор позволяет).
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Nov 12 2010, 13:16
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(Палыч @ Nov 12 2010, 15:03) *
"Крохотный fft" - это float? О float в подобной задаче лучше забыть. Использование плавающей запятой "сожрет" кучу ресурсов МК (и памяти, и времени), которых и так не богато.

Память - да ни фига подобного, "базовая" 32-битная плавучка (четыре действия и преобразование форматов) сожрала у меня где-то полтысячи слов программной памяти и чуть-чуть на аккумуляторы. Вот с быстродействием - под вопросом, в реальном времени целочисленная будет быстрее.

Цитата(Zelepuk @ Nov 12 2010, 13:18) *
Способ указан в старте. Да, просто считаем кол-во импульсов за время 5 сек.

Мы считаем кол-во импульсов за 5 сек. Тогда, для частоты в 50Гц мы получим 250 импульсов (250/5 = 50), несложно посчитать, что погрешность измерения составит 0,1 Гц (дробное значение)

А если посчитать еще разок, чуть внимательнее ? А вообще-то такие вещи делаются через ICP, и тогда хоть тысячные Hz десять раз в секунду (тут раньше упрется в джиттер, и младшие разряды начнут мельтешить).

Цитата
Как можно записывать и выводить данные на экран в вормате десятичной дроби (используя float) ?

Умножаем на целую степень 10, округляем, выводим целое число, устанавливая точку в соответствующей позиции вывода.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 12 2010, 13:26
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Большое спасибо всем за ответы!

Но я немного не понимаю каким образом AVR работает с "неформатными" данными. Скажем как работает с 32 битными данными, если его регистры 8 битные?
Точнее физика понятно, но как это отражается в коде? Или парится ненадо, если пишешь на С, и всё делает компилятор?
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Nov 12 2010, 13:40
Сообщение #15


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(Zelepuk @ Nov 12 2010, 16:26) *
Но я немного не понимаю каким образом AVR работает с "неформатными" данными. Скажем как работает с 32 битными данными, если его регистры 8 битные?
Точнее физика понятно, но как это отражается в коде? Или парится ненадо, если пишешь на С, и всё делает компилятор?

Компилятор сам разберется. А я пишу на asm, тут тоже не сложно - разрядность прекрасно масштабируется (перенос-заем, это работает и на 4-битных, и на 32-битных, и на на деревянных счетах).
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 - 17:54
Рейтинг@Mail.ru


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