Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: И снова частотомер на Atmega8.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Peeoner
Добрый день всем!
На этом форуме я вобщем новичек.
Вот уже меня достал этот вопрос,бо я лажу-и везде готовые схемы,без самой идеи как оно работает!
Не надо мне готовые варианты нада сама идея!!!
Вобщем в чем суть то вопроса
Сваял так сказать частотомер на 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,пришлось дизасемблить и смотреть....ну просто бесит..что нигде ни кто подробно не описал по человечиски....

Жду коментарием. За любой ответ буду благодарен.
defunct
Цитата(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= тут толкал много интересных идей.

А вообще ваш вариант вполне работоспособен.
Peeoner
Вот участок кода самого цикла измерения,сильно не пинать.
Я варрировал тут с изменением циклов измерения,так как у меня предделитель выставлен на 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
Peeoner
Ну вот все проверил,дествительно глюк именно в преобразование чисел, до 255 оно нормально показуеть а после 255,начинают мелькать цифры,как бы случайная величина образуеться...
вывод цифр на дисплей нормально работает. глюкас в этом алгоритме,который я взял с атмеловского сайта http://www.atmel.ru/Articles/Atmel13_app1.htm а он оказуеться глюконутый! А в инете не одного примера,только этот.
Вот умножение и деление это хорошо,вот только в Avr нет прямого модуля деления и умножения,а как умножать и делить посредством других команд,понятия не имею,опять же литературы не фига нету...
в инете тоже не нарыл.
Может кто хоть название подскажет каких нить книженцей которые скачать моно?
Или у кого готовый алгоритм на ассемлере есть?
Теперь камень предкновения,то што я не умею преобразовать 2байта таймера в 5 цифр...вот пипец.....
zhevak
Цитата(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]; // эта строка -- только пример. Код не рабочий!!!
  }


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

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

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

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

http://elm-chan.org/cc_e.html
=GM=
Цитата(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 разрядов, это отдельная песня.
akl
Цитата(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=, но, думаю, мое сообщение будет не лишнее.
Qwertty
Цитата(Peeoner @ Jul 11 2008, 07:42) *
глюкас в этом алгоритме,который я взял с атмеловского сайта http://www.atmel.ru/Articles/Atmel13_app1.htm а он оказуеться глюконутый! А в инете не одного примера,только этот.

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

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

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

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

Не могу при людно не выразить уважение zltigo.
Четко, сильно, политкорректно. Молодец! Я снова приникся уважением. Respects to you!
zltigo
Цитата(Peeoner @ Jul 11 2008, 17:34) *
Правила читал.

Moderator:
Не сочтите за труд не загромождать форум неформатированными кусками исходников, да и еще немерянного размера. Учитесь пользоваться архиваторами.
Peeoner
Спасибо,понял. Народ почемуто тут везде исходники сует на форуме,во все окно,буду иметь ввиду.
zltigo
Цитата(Peeoner @ Jul 11 2008, 17:45) *
Народ почемуто тут везде исходники сует на форуме,во все окно,буду иметь ввиду.

1. Не такого объема.
2. По крайней мере они форматированные и в 'codebox'
3. Там, где замечаю - не сует smile.gif
=GM=
Цитата(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, и точнее, и всяко дешевле.
Peeoner
Цитата(=GM= @ Jul 11 2008, 19:15) *
Ну-у-у, я имел в виде верные значащие цифры, а не просто цифры.
На ATtiny24 (20 МГц клок) я бы сказал, что можно получить порядка +-2 Гц, с обработкой можно получить точными все 10 цифр частоты. Например, Fx=2 999 999 998 Гц точно, не слабо, э? Причём, достичь такого на копеечном приборе. Интересно, за сколько такой прибор можно купить? Конечно, кое-над-чем придётся потрудиться, но это не смертельно. Да, и делил бы на 300, а не на 1280, и точнее, и всяко дешевле.

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

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

термостабилизация чего? кварца контроллера? Вы о чём? Вы же не генерите образцовый сигнал а кто Вам сказал что сам измеряемый сигнал будет очёнь стабильным? для копеечного прибора термостабилизация не применяется, а указывается температурный диапазон прибора и indоor use only
Огурцов
Цитата(sKWO @ Jul 11 2008, 19:09) *
для копеечного прибора термостабилизация не применяется
Как и слово "точность"...10 разрядов. Половины, в данном случае, было бы более чем достаточно.
gte
Цитата(sKWO @ Jul 11 2008, 23:09) *
термостабилизация чего? кварца контроллера? Вы о чём? Вы же не генерите образцовый сигнал а кто Вам

И сколько значащих цифр при этом будут реальными?
Peeoner
Ну вобщем решил я реализовать метод =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 левых циклов ,о которых я понятия иметь не буду,так как писал на С.
Да и для меня это так сказать практика,и более понятнее что и как береться,и проще с архитектурой разобраться.Хреново что двоичной математики не знаю..
sKWO
Цитата(gte @ Jul 12 2008, 11:01) *
И сколько значащих цифр при этом будут реальными?

Полагаю не менее шести.
Проверял стабильность кварца контроллера используя режим CTC таймера. Исспользовал для измерения частоты не китайский частотомер, не помню как называется , год назад было, так вот частота генерируемая так по памяти из кварца фирмы Siward 7.3728 MHz, LP-3.5S, 30ppm и равнялась 230400 Гц - ошибка в один герц накапливалась в течении 15-ти ... 20-ти секунд.
Огурцов
Цитата(sKWO @ Jul 12 2008, 16:59) *
Полагаю не менее шести.

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

посмотрите это http://electronix.ru/forum/index.php?showt...19&hl=30ppm
Кварц "10ppm". видел такие часовые и ещё должны быть на другие частоты.
Бля ник соседа. Колян простит
Tiny
Извиняюсь, почему-то я разместил свое сообщение не в той ветке, какой собирался. Размещу ее снова, модераторов прошу от сюда удалить, чтобы не мешать.
foxit
Цитата(Tiny @ Jul 13 2008, 10:32) *
Есть ли выход из данного положения? Можно ли обойтись без кварца на 3.6864MHz?

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

и ещё добавлю, что после предделителя я бы использовал бы плиску в качестве ассинхронного счётчика,
результаты с счётчика завёл бы на контроллер с которого можно спокойно выводить на индикатор,
это добавит максимум 7 баксов стоимости. более подробно посмотрите тут тут
Nanobyte
Цитата(foxit @ Jul 13 2008, 13:28) *
...смотрим описание мастера шины и2с , генерим задержки согласно рекомендациям производителя DS1820 ...

Всё-таки, наверное, не I2C, а 1-Wire.
Однако, допуски на задержки там достаточно велики, я менял кварцы +/- 3 мГц без всяких последствий, длина проводов тоже не особенно критична.
Sneg_87
Цитата(akl @ Jul 11 2008, 18:58) *
Как Вам такой алгоритм:


Все вроде бы понятно, кроме "A-коэффициент деления LMX". что это?
akl
Здравствуйте. Имелась в виду LMX2326 в качестве предварительного делителя.
http://www.national.com/ds/LM/LMX2306.pdf
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.