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

 
 
> И снова частотомер на 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
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 32)
defunct
сообщение Jul 11 2008, 00:10
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Peeoner @ Jul 11 2008, 02:45) *
Пишу на ассемблере,
....
тут чюдеса когда значение в Т1 больше 255,почемуто не корректно просходит преобразование двоичного числа в десятичное...один алгорит нарыл преобразования,а все остальное бред какойто...возникли сомнения -правильно ли у меня преобразование 2х 8битных регистров с T1 в десятичный код?

Если проблема только с преобразованием, то это пустяки.
Алгоритм преобразования - собирать остатки от деления на 10 пока частное не 0.
Алгоритм деления на 10 16-ти разрадного числа используя только умножение и сдвиг:

y = (x * 0xCCCD) >> 19

Общие рекомендации для продожения беседы, smile.gif
1. Проверьте порядок доступа к спаренным регистрам ( L регистр должен читаться перед H)
2. Ознакомьтесь с режимом таймера Input Capture, возможно пригодится или натолкнет на новую идею.
3. Поищите по форуму еще ;> =GM= тут толкал много интересных идей.

А вообще ваш вариант вполне работоспособен.
Go to the top of the page
 
+Quote Post
Peeoner
сообщение Jul 11 2008, 00:23
Сообщение #3





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



Вот участок кода самого цикла измерения,сильно не пинать.
Я варрировал тут с изменением циклов измерения,так как у меня предделитель выставлен на 1280,в этом примере 8МГЦ/1024 и тактируем Т0, то что тут команды поставлены немного не корректно,т е T1 подстичает еще 5-10имульсов,для теста не критично,подправлю когда все будет нормально работать.
С Input Capture негодиться,бо там низкая частота,а сам по себе таймер считает намного быстрее(вроде)..хотя я подумаю,10 разрядов было бы интересно заполнить,но там матиматека нифиговая получиться...
Код
;Инициализация таймера 0
  
  ldi tmp,(1<<toie0)
  out timsk,tmp

;Инициализация 16 битноо таймера 1
ldi tmp,0x07;07
mov lw,tmp
ldi tmp,0x03
out tifr,tmp
ldi tmp,0x9c;9c ;запись в регистр таймера периода счета
out tcnt0,tmp
ldi tmp,0x03;02
mov k,tmp
ldi tmp,0x00 ;подготовка константы для остановки t1

out tccr0,k  ;Тактовые импульсы с кварца /1024
out tccr1b,lw;Подключения входа таймера к внешнему источнику
ser nxx

sei ;разрешение прерываний


  loop:
  rjmp loop

tim0:     ;Прерывания от таймера формирующего пириод измерения



push nxx    ;Сохранение регистров в стеке (станет необходимым
in nxx,sreg    ;когда основная программа будет выполнять
push nxx       ;какие-либо действия)


out tccr1b,tmp ;Остановка 16 битного счетчика импульсо

in lw,tcnt1l     ;Копируем младший байт со счетчика входных импульсов
in hi,tcnt1h     ;Копируем старший байт

ldi tmp,0x00      
out tcnt1l,tmp   ;Очищяем счетчик импульсов
out tcnt1h,tmp   ;

out tccr0,tmp    ;Останавливаем таймер периода счета
out tcnt0,tmp    ;очищяем таймер периода счета

;Преобразуем двоичное 16битное число в десятичное


;.def lw=r17
;.def hi=r18
;************************************************************************
;Преобразуем двоичное 16битное число в десятичное вида
;{0x0(цифра 10000)} {тысячи,сотни} {десятки,единицы}
;************************************************************************
;
;
;
;
;
;.def    lw   =r17           ;двоичное значение, младший байт
;.def    hi   =r18           ;двоичное значение, старший байт
;.def    dig0   =r18           ;BCD значение, цифры 1 и 0
;.def    dig1   =r19           ;BCD значение, цифры 3 и 2
;.def    dig2   =r20           ;BCD значение, цифра 4
;Примечание: Переменные hi и dig0 должны размещаться в одном
;регистре.
;*************************************************************************

BCD5:
        ldi     dig2, -1
BCD5_loop_1:
        inc     dig2
        subi    lw, low(10000)
        sbci    hi, high(10000)
        brsh    BCD5_loop_1
        subi    lw, low(-10000)
        sbci    hi, high(-10000)
        ldi     dig1, -0x11
BCD5_loop_2:
        subi    dig1, -0x10
        subi    lw, low(1000)
        sbci    hi, high(1000)
        brsh    BCD5_loop_2
        subi    lw, low(-1000)
        sbci    hi, high(-1000)
BCD5_loop_3:
        inc     dig1
        subi    lw, low(100)
        sbci    hi, high(100)
        brsh    BCD5_loop_3
        subi    lw, -100
        ldi     dig0, -0x10
BCD5_loop_4:
        subi    dig0, -0x10
        subi    lw, 10
        brsh    BCD5_loop_4
        subi    lw, -10
        add     dig0,lw


Сообщение отредактировал zltigo - Jul 11 2008, 15:17
Go to the top of the page
 
+Quote Post
Peeoner
сообщение Jul 11 2008, 03:42
Сообщение #4





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



Ну вот все проверил,дествительно глюк именно в преобразование чисел, до 255 оно нормально показуеть а после 255,начинают мелькать цифры,как бы случайная величина образуеться...
вывод цифр на дисплей нормально работает. глюкас в этом алгоритме,который я взял с атмеловского сайта http://www.atmel.ru/Articles/Atmel13_app1.htm а он оказуеться глюконутый! А в инете не одного примера,только этот.
Вот умножение и деление это хорошо,вот только в Avr нет прямого модуля деления и умножения,а как умножать и делить посредством других команд,понятия не имею,опять же литературы не фига нету...
в инете тоже не нарыл.
Может кто хоть название подскажет каких нить книженцей которые скачать моно?
Или у кого готовый алгоритм на ассемлере есть?
Теперь камень предкновения,то што я не умею преобразовать 2байта таймера в 5 цифр...вот пипец.....

Сообщение отредактировал Peeoner - Jul 11 2008, 03:45
Go to the top of the page
 
+Quote Post
zhevak
сообщение Jul 11 2008, 05:45
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(Peeoner @ Jul 11 2008, 09:42) *
Теперь камень предкновения,то што я не умею преобразовать 2байта таймера в 5 цифр...вот пипец.....

Может все-таки перейти на Си?
Смотрите как просто:

Код
  char mystring[10];
  unsigned int counter;
  
  counter = 12345; // число 12345 -- только как пример
[b]  sprintf(mystring, "", counter);[/b]
  
  // Вывод числа на МЭЛТ
  for (i = 0; i < strlen(mystring); i++)
  {
     МЭЛТ = mystring[i]; // эта строка -- только пример. Код не рабочий!!!
  }


Жирным выделена строка, которая делает преобразование, которое наводит на Вас ужас.
Все просто и красиво. Более того, программу напишите намного быстрее, чем на ассеблере.
Работать программа будет не чуть не медленнее, т.к. счетом занимается аппаратура, а не программный код.

Не хочу оскорблять Ваши религиозные чувства относительно языков программирования, просто предлагаю рассматреть и другие варианты решения задачи.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Jul 11 2008, 10:21
Сообщение #6


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Цитата(Peeoner @ Jul 11 2008, 07:42) *
...Вот умножение и деление это хорошо,вот только в Avr нет прямого модуля деления и умножения,а как умножать и делить посредством других команд,понятия не имею,опять же литературы не фига нету...

Вообще-то у ATmega есть команды умножения и деления, но это так, к слову ...

А вот здесь есть куча подпрограмм на экологически чистом ассемблере:

http://elm-chan.org/cc_e.html


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 11 2008, 12:33
Сообщение #7


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Peeoner @ Jul 10 2008, 22:45) *
Почитав это http://electronix.ru/forum/index.php?showt...29796&st=75, я пришол в УЖАС!!! 07.gif

Посмотрел вашу ссылку, там моя переписка с Яrik'ом (кстати, он довёл-таки точность измерения частоты 1 МГц программой на си до 1 Гц), никакого ужаса не заметил, зато почитав ваши сообщения, понял, что вы учились в олбанской школе и были там хорошистом или даже отличником. Потом посмотрел вашу программу и тут пришёл в тихий ужас: нет ни одного завершённого фрагмента, просто какие-то куски кода.

По делу. Алгоритм измерения частоты методом ворот достаточно примитивен. Берёте некий счётчик, открываете его на некоторый период времени - счётчик начинает считать приходящие импульсы, закрываете - перестаёт считать. Если окно было открыто на 1 секунду, то искомая частота в герцах равна количеству импульсов в счётчике. Если окно открыто на 0.1с, то частота в десятках герц и т.д. Если окно некратно таких числам, то придётся каждый раз пересчитывать, поэтому все стараются выставить кратное окно. У вас, кстати, длительность окна не кратна, надо пересчитывать. Да и длительность какая-то смехотворная - порядка 40 мс, подойдёт только для оценки величины частоты. Видите ли, частотомер это точный измерительный прибор, и разработчики всегда стараются выжать максимум из разрабатываемого устройства, так они устроены. А уж что выводить на дисплей, 5-6-7-8-9-10 разрядов, это отдельная песня.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
akl
сообщение Jul 11 2008, 12:58
Сообщение #8


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

Группа: Свой
Сообщений: 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
Qwertty
сообщение Jul 11 2008, 12:59
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(Peeoner @ Jul 11 2008, 07:42) *
глюкас в этом алгоритме,который я взял с атмеловского сайта http://www.atmel.ru/Articles/Atmel13_app1.htm а он оказуеться глюконутый! А в инете не одного примера,только этот.

Этот алгоритм используют сотни людей, и У ВСЕХ он работает нормально. Тем более, что он очень простой. Просто применять его нужно правильно.
Go to the top of the page
 
+Quote Post
Peeoner
сообщение Jul 11 2008, 15:09
Сообщение #10





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



Цитата
Посмотрел вашу ссылку, там моя переписка с Яrik'ом (кстати, он довёл-таки точность измерения частоты 1 МГц программой на си до 1 Гц), никакого ужаса не заметил, зато почитав ваши сообщения, понял, что вы учились в олбанской школе и были там хорошистом или даже отличником. Потом посмотрел вашу программу и тут пришёл в тихий ужас: нет ни одного завершённого фрагмента, просто какие-то куски кода.

По делу. Алгоритм измерения частоты методом ворот достаточно примитивен. Берёте некий счётчик, открываете его на некоторый период времени - счётчик начинает считать приходящие импульсы, закрываете - перестаёт считать. Если окно было открыто на 1 секунду, то искомая частота в герцах равна количеству импульсов в счётчике. Если окно открыто на 0.1с, то частота в десятках герц и т.д. Если окно некратно таких числам, то придётся каждый раз пересчитывать, поэтому все стараются выставить кратное окно. У вас, кстати, длительность окна не кратна, надо пересчитывать. Да и длительность какая-то смехотворная - порядка 40 мс, подойдёт только для оценки величины частоты. Видите ли, частотомер это точный измерительный прибор, и разработчики всегда стараются выжать максимум из разрабатываемого устройства, так они устроены. А уж что выводить на дисплей, 5-6-7-8-9-10 разрядов, это отдельная песня.

Ну в албанской школе не учюся,давно уже отучился,грамматика на форуме ,думаю, это не столь критично.Да и коменты в тексте программы чисто для себя,что бы не пришлось думать "а што же я тут делал" кода прога поваляеться пол года на компе,и придеться что то править.
Код в програме завершен,я просто привел кусок который относиться к циклу измерения,просто незнаю нужен ли весь код,вроде и так понятно
А на диспелй выводить цифры,ни какой песни нету,все достаточно легко,как по мне проще чем число преобразовать)))
Я прекрасно понимаю что частотомер точный прибор,но мне не нужно сверх точности.
Вот скажем на частоте в 3 000 МГЦ,поделеную на 1280 какую вы точность получите???? Используя обычный китайский КВАРЦ на 8мгц...
Я все же подумаю над идеей =GM= ...
Устройство для себя разрабатывалось.
>Этот алгоритм используют сотни людей, и У ВСЕХ он работает нормально. Тем более, что он очень простой. Просто применять его нужно правильн
Ну может конешно и я ошибся,поверю вам наслово. А вы его сами применяли хоть раз???
А по поводу С--напишите 100 строчек кода,откомпильте и посмотрите сколько hex файл у вас бедет весить,а потом напишите на ассемблере и сравните! А всякая оптимизация и прочее не дают особого эффекта

Сообщение отредактировал Peeoner - Jul 11 2008, 15:16
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 11 2008, 15:22
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Peeoner @ Jul 11 2008, 17:09) *
Ну в албанской школе не учюся,давно уже отучился,грамматика на форуме ,думаю, это не столь критично.

Moderator:
Всему есть предел. Настойчиво рекомендую ознакомится с правилами данного форума.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Peeoner
сообщение Jul 11 2008, 15:34
Сообщение #12





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



Правила читал.Вроде не че такого не сказал,забаните,сам разберусь.

Сообщение отредактировал Peeoner - Jul 11 2008, 15:44
Go to the top of the page
 
+Quote Post
zhevak
сообщение Jul 11 2008, 15:37
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(zltigo @ Jul 11 2008, 21:22) *
Moderator:
Всему есть предел. Настойчиво рекомендую ознакомится с правилами данного форума.

Не могу при людно не выразить уважение zltigo.
Четко, сильно, политкорректно. Молодец! Я снова приникся уважением. Respects to you!


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 11 2008, 15:41
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Peeoner @ Jul 11 2008, 17:34) *
Правила читал.

Moderator:
Не сочтите за труд не загромождать форум неформатированными кусками исходников, да и еще немерянного размера. Учитесь пользоваться архиваторами.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Peeoner
сообщение Jul 11 2008, 15:45
Сообщение #15





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



Спасибо,понял. Народ почемуто тут везде исходники сует на форуме,во все окно,буду иметь ввиду.

Сообщение отредактировал Peeoner - Jul 11 2008, 15:47
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 11 2008, 15:51
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Peeoner @ Jul 11 2008, 17:45) *
Народ почемуто тут везде исходники сует на форуме,во все окно,буду иметь ввиду.

1. Не такого объема.
2. По крайней мере они форматированные и в 'codebox'
3. Там, где замечаю - не сует smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 11 2008, 16:15
Сообщение #17


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Peeoner @ Jul 11 2008, 14:09) *
А на диспелй выводить цифры, никакой песни нету, все достаточно легко, как по мне проще чем число преобразовать)))

Ну-у-у, я имел в виде верные значащие цифры, а не просто цифры.

Цитата(Peeoner @ Jul 11 2008, 14:09) *
Я прекрасно понимаю что частотомер точный прибор, но мне не нужно сверхточности. Вот скажем на частоте в 3 000 МГw, поделеную на 1280 какую вы точность получите???? Используя обычный китайский КВАРЦ на 8мгц...

На ATtiny24 (20 МГц клок) я бы сказал, что можно получить порядка +-2 Гц, с обработкой можно получить точными все 10 цифр частоты. Например, Fx=2 999 999 998 Гц точно, не слабо, э? Причём, достичь такого на копеечном приборе. Интересно, за сколько такой прибор можно купить? Конечно, кое-над-чем придётся потрудиться, но это не смертельно. Да, и делил бы на 300, а не на 1280, и точнее, и всяко дешевле.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Peeoner
сообщение Jul 11 2008, 16:22
Сообщение #18





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



Цитата(=GM= @ Jul 11 2008, 19:15) *
Ну-у-у, я имел в виде верные значащие цифры, а не просто цифры.
На ATtiny24 (20 МГц клок) я бы сказал, что можно получить порядка +-2 Гц, с обработкой можно получить точными все 10 цифр частоты. Например, Fx=2 999 999 998 Гц точно, не слабо, э? Причём, достичь такого на копеечном приборе. Интересно, за сколько такой прибор можно купить? Конечно, кое-над-чем придётся потрудиться, но это не смертельно. Да, и делил бы на 300, а не на 1280, и точнее, и всяко дешевле.

ну все вы меня заинтреговали вашим методом...доделаю эту хрень буду пробовать.
коэфициент деления можно установить от 992 до 32767,хотя надо попробовать.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Jul 11 2008, 17:29
Сообщение #19


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(=GM= @ Jul 11 2008, 16:15) *
На ATtiny24 (20 МГц клок) я бы сказал, что можно получить порядка +-2 Гц, с обработкой можно получить точными все 10 цифр частоты. Например, Fx=2 999 999 998 Гц точно, не слабо, э? Причём, достичь такого на копеечном приборе. Интересно, за сколько такой прибор можно купить?

Точных ? Десять ? На копеечном приборе ?
Мне кажется, только термостабилизация будет стоить на пару порядков дороже, чем этот "копеечный прибор" (
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jul 11 2008, 19:09
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(Огурцов @ Jul 11 2008, 21:29) *
Точных ? Десять ? На копеечном приборе ?
Мне кажется, только термостабилизация будет стоить на пару порядков дороже, чем этот "копеечный прибор" (

термостабилизация чего? кварца контроллера? Вы о чём? Вы же не генерите образцовый сигнал а кто Вам сказал что сам измеряемый сигнал будет очёнь стабильным? для копеечного прибора термостабилизация не применяется, а указывается температурный диапазон прибора и indоor use only


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Jul 11 2008, 19:41
Сообщение #21


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(sKWO @ Jul 11 2008, 19:09) *
для копеечного прибора термостабилизация не применяется
Как и слово "точность"...10 разрядов. Половины, в данном случае, было бы более чем достаточно.
Go to the top of the page
 
+Quote Post
gte
сообщение Jul 12 2008, 07:01
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613



Цитата(sKWO @ Jul 11 2008, 23:09) *
термостабилизация чего? кварца контроллера? Вы о чём? Вы же не генерите образцовый сигнал а кто Вам

И сколько значащих цифр при этом будут реальными?
Go to the top of the page
 
+Quote Post
Peeoner
сообщение Jul 12 2008, 09:30
Сообщение #23





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



Ну вобщем решил я реализовать метод =GM=,как бы вроде с методом все понятно,подправте если не так понял.Использую 3

таймера: T0-считаю M(количество импульсов входной частоты)
T1-считаю N(тактовую частоту кварца,в данном случае 8Мгц) T2-использую для подсчета (формирования прерывания) Tизм.

На платке соединяю вход таймера T0 и ICP1(вход узла захвата).

1.Инициализирую все что мне нужно. Разрешаю прерывания от всех таймеров,и модуля захвата.
2.Жду какого нить прерывания в бесконечном цикле.

3.Поступает прерывание от ICP1.
Запрещаю прерывание от модуля захвата.
Запускаю T2 счетчик времени измерения.
Смотрю метку-это начальное или конечное время.
Переписую значения из T0,T1 в регистры как M1,N1 или M2,N2
Занимаюсь расчетом предыдущего измерения,считаю по формуле M=M2-M1;N=N2-N1 Fx=(Fо*M)/N и вывожу данные на дисплей.

4. Поступает прерывание от Т2,т.е. истекло время измерения.Разререшаю прерывание от ICP1. Записую "метку",что это у

меня будет конечные значения.Выхожу в бесконечный цикл.

теперь касаемо самих расчетов.К примеру у меня частота кварца 8мгц,на вход я подаю 4Мгц(это для оценки),в реале даже при деление на 1000,мне до 3ГГц с головой хватит!
т2-второй счетчик 8 битный,поэтому логично подавать на него 8000/1024=7825Гц.Тогда период измерения Tизм=0.127795521...Е-3 С=0.128E-3 C.
F0=8 000 000Гц
T0=0.125E-6 c
Tx=0,25E-6 c
N=1024
M=512
Считаем.
Fx=(F0*M)/N=(8 000 000 *512)/1024=4 000 000Гц. Вроде верна формула.
Теперь проблемы...
Ну 16битный счетчик посчитает 1024 имульса без переполнения,а вот 8 битный-2раза переполниться,надо обрабатывать прерывание от него,и записывать в регистр скоко он раз переполнился,можем потерять +-4 значение в счетчике,пока бум обрабатывать прерывание
И самое интересное операция с умножением и делением!
Что бы обеспечить точность в 10 знаков,нужно варрировать 32 битными величинами!И к тому же я не понимаю,откуда 10 знаков?? это что после герц еще 3 знака??
В моем случае при предделителе в 1000,я получю 4000.000Мгц,те с точностью до 1кгц,неплохо вобщем))) Для большей точности надо варрировать 32битами...
Но AVR как то 8битная!!!
Ну вот к примеру мы считаем Fx=(7А1200h*200h)/400h=3D0900h
Интересно как счиатать такие величины посредством 8 битных регистров?
Разбивать побайтно,перемножать.Корректировать с четом сдвигов и прочего,и так для каждого значения???
Операция умножения имееться в AVR ке,а вот деления я не нарыл,алгоритм деления нарыл.
А вот как варрировать с 32 битными величинами,ну или в моем случае с 3 байтами,я как то не представляю.Память что ли подключать?

Подам я пока что на T0 -измеряемый сигнал,и отсчет времени буду вести по Т2,а там уже подумаю...
Я понимаю что на С проще. Но меня совесть загрызет если AVR-ка будет делать 10-15 левых циклов ,о которых я понятия иметь не буду,так как писал на С.
Да и для меня это так сказать практика,и более понятнее что и как береться,и проще с архитектурой разобраться.Хреново что двоичной математики не знаю..

Сообщение отредактировал Peeoner - Jul 12 2008, 09:46
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jul 12 2008, 16:59
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(gte @ Jul 12 2008, 11:01) *
И сколько значащих цифр при этом будут реальными?

Полагаю не менее шести.
Проверял стабильность кварца контроллера используя режим CTC таймера. Исспользовал для измерения частоты не китайский частотомер, не помню как называется , год назад было, так вот частота генерируемая так по памяти из кварца фирмы Siward 7.3728 MHz, LP-3.5S, 30ppm и равнялась 230400 Гц - ошибка в один герц накапливалась в течении 15-ти ... 20-ти секунд.


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Jul 12 2008, 20:16
Сообщение #25


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(sKWO @ Jul 12 2008, 16:59) *
Полагаю не менее шести.

Ну Вы же сами пишете "30ppm". Что означает 4,52 десятичных цифр. А для шести, наверно, д.б. _1_ ppm, так ведь ?

Сообщение отредактировал Огурцов - Jul 12 2008, 20:18
Go to the top of the page
 
+Quote Post
Tiny
сообщение Jul 13 2008, 07:32
Сообщение #26


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

Группа: Участник
Сообщений: 82
Регистрация: 10-07-06
Пользователь №: 18 720



Такой вопрос.
CodeVision, пример из пакета \cvavreval\examples\DS1820
Термометр с использованием Dallas Semiconductor DS1820, кварц 3.6864MHz
В программе используются библиотеки для работы с DS1820. Насколько я поинмаю, для обработки получаемых данных от DS1820 нужны определенные интервалы времени.
Я сделал проектик на Mega 16. Такого кварца у меня нет. Есть 4МГц, 4,5МГц и выше. Внутренние частоты МК - 1, 2, 4, 8. Попробывал в Протеусе симуляцию на 4 МГц. Работает. Но в реальном устройстве - нет.
Попробывал подключить внешнюю RC-цепь (4,2К 22пФ), выставив соответсвующие фюзы. Опять же на индикаторах ерунда.
Есть ли выход из данного положения? Можно ли обойтись без кварца на 3.6864MHz?
Go to the top of the page
 
+Quote Post
foxit
сообщение Jul 13 2008, 09:16
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 17-04-07
Пользователь №: 27 098



Цитата(Огурцов @ Jul 12 2008, 23:16) *
Ну Вы же сами пишете "30ppm". Что означает 4,52 десятичных цифр. А для шести, наверно, д.б. _1_ ppm, так ведь ?

посмотрите это http://electronix.ru/forum/index.php?showt...19&hl=30ppm
Кварц "10ppm". видел такие часовые и ещё должны быть на другие частоты.
Бля ник соседа. Колян простит

Сообщение отредактировал foxit - Jul 13 2008, 09:16
Go to the top of the page
 
+Quote Post
Tiny
сообщение Jul 13 2008, 09:20
Сообщение #28


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

Группа: Участник
Сообщений: 82
Регистрация: 10-07-06
Пользователь №: 18 720



Извиняюсь, почему-то я разместил свое сообщение не в той ветке, какой собирался. Размещу ее снова, модераторов прошу от сюда удалить, чтобы не мешать.
Go to the top of the page
 
+Quote Post
foxit
сообщение Jul 13 2008, 09:28
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 17-04-07
Пользователь №: 27 098



Цитата(Tiny @ Jul 13 2008, 10:32) *
Есть ли выход из данного положения? Можно ли обойтись без кварца на 3.6864MHz?

смотрим описание мастера шины и2с , генерим задержки согласно рекомендациям производителя DS1820,
заглядываем к атмелу, ставим подтягивающие резисторы, выдерживаем длину кабеля, проверяем работоспобность контроллера, шьём провильно фусы. если нет, создаём новую тему с подробным описанием проблемы и не суём термодатчик в тему измерения частоты.
Причина редактирования: Излишнее цитирование.
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jul 13 2008, 13:08
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(foxit @ Jul 13 2008, 12:16) *
Кварц "10ppm". видел такие часовые и ещё должны быть на другие частоты.

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


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Jul 14 2008, 14:47
Сообщение #31


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Цитата(foxit @ Jul 13 2008, 13:28) *
...смотрим описание мастера шины и2с , генерим задержки согласно рекомендациям производителя DS1820 ...

Всё-таки, наверное, не I2C, а 1-Wire.
Однако, допуски на задержки там достаточно велики, я менял кварцы +/- 3 мГц без всяких последствий, длина проводов тоже не особенно критична.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
Sneg_87
сообщение Oct 13 2009, 04:12
Сообщение #32


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 12-10-09
Пользователь №: 52 882



Цитата(akl @ Jul 11 2008, 18:58) *
Как Вам такой алгоритм:


Все вроде бы понятно, кроме "A-коэффициент деления LMX". что это?
Причина редактирования: Излишнее цитирование.


--------------------
coding, кодинг, koDinГ, copyriting, printing ....
Go to the top of the page
 
+Quote Post
akl
сообщение Oct 14 2009, 03:00
Сообщение #33


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

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



Здравствуйте. Имелась в виду LMX2326 в качестве предварительного делителя.
http://www.national.com/ds/LM/LMX2306.pdf
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st August 2025 - 19:59
Рейтинг@Mail.ru


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