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

 
 
> И снова частотомер на Atmega8., нужен алгоритм
Peeoner
сообщение Jul 10 2008, 23:45
Сообщение #1





Группа: Новичок
Сообщений: 10
Регистрация: 2-07-08
Пользователь №: 38 711



Добрый день всем!
На этом форуме я вобщем новичек.
Вот уже меня достал этот вопрос,бо я лажу-и везде готовые схемы,без самой идеи как оно работает!
Не надо мне готовые варианты нада сама идея!!!
Вобщем в чем суть то вопроса
Сваял так сказать частотомер на Atmega8+LMXxxxx пределитель,с выводом на МЭЛТ MT10T7-7.
Тут запортачка с самим принципом измерения!
Пишу на ассемблере,писать на С для таких контролеров,как по мне это полное извращение!
И так.
Использую 2 таймера-8битный Т0,и 16 битный Т1.
Измерительная частота поступает сразу на вход Т1(PD5).
После инициализацие портов,дисплея и LMX,инициализирую таймеры--
на Т0 пускаю сигнал с кварца,поделенный на 8, вход T1 подкл к источнику сигнала.
А забыл-в Т0 записую константу,что бы прерывание от него наступило после 100 импульсов поступивших на него.
Потом запускаю бесконечный цикл.
Наступает прирывани через 100имульсов тактируемые частотой 1МГЦ(8МГЦ/8).
Останавлваем Т1,изымаем даные с регистров,преобразуем 16бит в 5 десятичных знаков,выводим на экран. запускаем таймеры-счетчики,возвращаемся в бесконечный цикл.

Так вот в чем глюк! Когда тестил прогу,тестил ее на частах до 2х Мгц,т е 8 бит 16битного счетчика,потом прикурил LMX,тут чюдеса когда значение в Т1 больше 255,почемуто не корректно просходит преобразование двоичного числа в десятичное...один алгорит нарыл преобразования,а все остальное бред какойто...возникли сомнения -правильно ли у меня преобразование 2х 8битных регистров с T1 в десятичный код?
бо в инете токо один пример нарыл,остальное для школы 11 класса!

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

Почитав это http://electronix.ru/forum/index.php?showt...29796&st=75 ,я пришол в УЖАС!!! 07.gif
Мне хватит и 5 разрядов.
Сразу скажу частоту мерять до 3 ГГц,точность +-0.5МГЦ не критично!
Схема собрана,работает,но вот с алгоритмом измерения походу не то.

Посмотрел тут схемы,почемуто народ использует 8 битный таймер-счетчик...да и прошивы все hex,пришлось дизасемблить и смотреть....ну просто бесит..что нигде ни кто подробно не описал по человечиски....

Жду коментарием. За любой ответ буду благодарен.

Сообщение отредактировал Peeoner - Jul 10 2008, 23:59
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
akl
сообщение Jul 11 2008, 12:58
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 4-04-07
Из: Ижевск
Пользователь №: 26 773



Цитата(Peeoner @ Jul 11 2008, 04:45) *
...везде готовые схемы,без самой идеи как оно работает!
Не надо мне готовые варианты нада сама идея!!!
И так.
...И как реализуют алгоритм на одном 8 битном таймере? ведь прерывание,изьятие из регистра и запись,это погрешность ,и приличная!

Почитав это http://electronix.ru/forum/index.php?showt...29796&st=75 ,я пришол в УЖАС!!! 07.gif
Мне хватит и 5 разрядов.
Сразу скажу частоту мерять до 3 ГГц,точность +-0.5МГЦ не критично!
Схема собрана,работает,но вот с алгоритмом измерения походу не то.

...нигде ни кто подробно не описал по человечиски....

Жду коментарием. За любой ответ буду благодарен.



Цитата(defunct @ Jul 11 2008, 05:10) *
...
2. Ознакомьтесь с режимом таймера Input Capture, возможно пригодится или натолкнет на новую идею.
3. Поищите по форуму еще ;> =GM= тут толкал много интересных идей.

А вообще ваш вариант вполне работоспособен.


Как Вам такой алгоритм:
Тизм=Тх*Nx*A и Тизм=to*nox, где Тизм- принятое время измерения; Тх-период измеряемой частоты;
Nx-целое число периодов измеряемой частоты; to-период тактовой частоты микроконтроллера Fo;
nox-целое число периодов тактовой частоты микроконтроллера Fo; A-коэффициент деления LMX.
Делаем преобразование
Тх*Nx*A=to*nox

Тх=to*nox/Nx*A или

Fx=Fo*Nx*A/nox!!!

Для примера:
Принимаем время измерения примерно 0.25 сек.
Fo=8'000'000 Hz
Принимаем A=234'560.
Допустим, что измеряется Fx=3'210'987'000 Hz

3'210'987'000 Hz/234'560=13'698.405xxx Hz-> 1'000'000мкс/13'698.405xxx=73.049ххх мкс
за время измерения пройдет 250000/73.049ххх=3422.351ххх периодов Nx.
Дожидаемся окончания текущего периода Nx=3423-> 73.049ххх*3423=250073.049ххх мкс и nox=200379.
Подставляем в выражение
Fx=8'000'000*3423*234560/200379=3'210'987'037 Hz.
Достоинством данного метода, особенно для любительских условий, является:
-Fo-может меняться в широких пределах. Просто она должна быть известна
-отсутствие жесткого требования выдержки измерительного интервала, кратного единице времени
-легкая реализация на любом микроконтроллере.
Загрубить полученный результат можно всегда.
Пристальнее рассмотрите возможности Input Capture, на которые обращает внимание =GM=
Удачи!
PS Пока писал Вам ответил =GM=, но, думаю, мое сообщение будет не лишнее.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Peeoner   И снова частотомер на Atmega8.   Jul 10 2008, 23:45
- - defunct   Цитата(Peeoner @ Jul 11 2008, 02:45) Пишу...   Jul 11 2008, 00:10
- - Peeoner   Вот участок кода самого цикла измерения,сильно не ...   Jul 11 2008, 00:23
- - Peeoner   Ну вот все проверил,дествительно глюк именно в пре...   Jul 11 2008, 03:42
|- - zhevak   Цитата(Peeoner @ Jul 11 2008, 09:42) Тепе...   Jul 11 2008, 05:45
|- - Nanobyte   Цитата(Peeoner @ Jul 11 2008, 07:42) ...В...   Jul 11 2008, 10:21
|- - Qwertty   Цитата(Peeoner @ Jul 11 2008, 07:42) глюк...   Jul 11 2008, 12:59
- - =GM=   Цитата(Peeoner @ Jul 10 2008, 22:45) Почи...   Jul 11 2008, 12:33
|- - Sneg_87   Цитата(akl @ Jul 11 2008, 18:58) Как Вам ...   Oct 13 2009, 04:12
- - Peeoner   ЦитатаПосмотрел вашу ссылку, там моя переписка с Я...   Jul 11 2008, 15:09
|- - zltigo   Цитата(Peeoner @ Jul 11 2008, 17:09) Ну в...   Jul 11 2008, 15:22
||- - zhevak   Цитата(zltigo @ Jul 11 2008, 21:22) Moder...   Jul 11 2008, 15:37
|- - =GM=   Цитата(Peeoner @ Jul 11 2008, 14:09) А на...   Jul 11 2008, 16:15
|- - Peeoner   Цитата(=GM= @ Jul 11 2008, 19:15) Ну-у-у,...   Jul 11 2008, 16:22
|- - Огурцов   Цитата(=GM= @ Jul 11 2008, 16:15) На ATti...   Jul 11 2008, 17:29
|- - sKWO   Цитата(Огурцов @ Jul 11 2008, 21:29) Точн...   Jul 11 2008, 19:09
|- - Огурцов   Цитата(sKWO @ Jul 11 2008, 19:09) для коп...   Jul 11 2008, 19:41
|- - gte   Цитата(sKWO @ Jul 11 2008, 23:09) термост...   Jul 12 2008, 07:01
|- - sKWO   Цитата(gte @ Jul 12 2008, 11:01) И скольк...   Jul 12 2008, 16:59
|- - Огурцов   Цитата(sKWO @ Jul 12 2008, 16:59) Полагаю...   Jul 12 2008, 20:16
|- - foxit   Цитата(Огурцов @ Jul 12 2008, 23:16) Ну В...   Jul 13 2008, 09:16
|- - sKWO   Цитата(foxit @ Jul 13 2008, 12:16) Кварц ...   Jul 13 2008, 13:08
- - Peeoner   Правила читал.Вроде не че такого не сказал,забанит...   Jul 11 2008, 15:34
|- - zltigo   Цитата(Peeoner @ Jul 11 2008, 17:34) Прав...   Jul 11 2008, 15:41
- - Peeoner   Спасибо,понял. Народ почемуто тут везде исходники ...   Jul 11 2008, 15:45
|- - zltigo   Цитата(Peeoner @ Jul 11 2008, 17:45) Наро...   Jul 11 2008, 15:51
- - Peeoner   Ну вобщем решил я реализовать метод =GM=,как бы вр...   Jul 12 2008, 09:30
- - Tiny   Такой вопрос. CodeVision, пример из пакета \c...   Jul 13 2008, 07:32
|- - foxit   Цитата(Tiny @ Jul 13 2008, 10:32) Есть ли...   Jul 13 2008, 09:28
|- - Nanobyte   Цитата(foxit @ Jul 13 2008, 13:28) ...смо...   Jul 14 2008, 14:47
- - Tiny   Извиняюсь, почему-то я разместил свое сообщение не...   Jul 13 2008, 09:20
- - akl   Здравствуйте. Имелась в виду LMX2326 в качестве пр...   Oct 14 2009, 03:00


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 18:04
Рейтинг@Mail.ru


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