|
|
  |
И снова частотомер на Atmega8., нужен алгоритм |
|
|
|
Jul 11 2008, 16:15
|

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, и точнее, и всяко дешевле.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 11 2008, 16:22
|
Группа: Новичок
Сообщений: 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,хотя надо попробовать.
|
|
|
|
|
Jul 11 2008, 17:29
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

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

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

|
Цитата(Огурцов @ Jul 11 2008, 21:29)  Точных ? Десять ? На копеечном приборе ? Мне кажется, только термостабилизация будет стоить на пару порядков дороже, чем этот "копеечный прибор" ( термостабилизация чего? кварца контроллера? Вы о чём? Вы же не генерите образцовый сигнал а кто Вам сказал что сам измеряемый сигнал будет очёнь стабильным? для копеечного прибора термостабилизация не применяется, а указывается температурный диапазон прибора и indоor use only
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
Jul 12 2008, 09:30
|
Группа: Новичок
Сообщений: 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
|
|
|
|
|
Jul 12 2008, 16:59
|

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

|
Цитата(gte @ Jul 12 2008, 11:01)  И сколько значащих цифр при этом будут реальными? Полагаю не менее шести. Проверял стабильность кварца контроллера используя режим CTC таймера. Исспользовал для измерения частоты не китайский частотомер, не помню как называется , год назад было, так вот частота генерируемая так по памяти из кварца фирмы Siward 7.3728 MHz, LP-3.5S, 30ppm и равнялась 230400 Гц - ошибка в один герц накапливалась в течении 15-ти ... 20-ти секунд.
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
Jul 13 2008, 07:32
|
Частый гость
 
Группа: Участник
Сообщений: 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?
|
|
|
|
|
Jul 13 2008, 09:16
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Jul 13 2008, 09:28
|
Участник

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

|
Цитата(Tiny @ Jul 13 2008, 10:32)  Есть ли выход из данного положения? Можно ли обойтись без кварца на 3.6864MHz? смотрим описание мастера шины и2с , генерим задержки согласно рекомендациям производителя DS1820, заглядываем к атмелу, ставим подтягивающие резисторы, выдерживаем длину кабеля, проверяем работоспобность контроллера, шьём провильно фусы. если нет, создаём новую тему с подробным описанием проблемы и не суём термодатчик в тему измерения частоты.
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
Jul 13 2008, 13:08
|

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

|
Цитата(foxit @ Jul 13 2008, 12:16)  Кварц "10ppm". видел такие часовые и ещё должны быть на другие частоты. и ещё добавлю, что после предделителя я бы использовал бы плиску в качестве ассинхронного счётчика, результаты с счётчика завёл бы на контроллер с которого можно спокойно выводить на индикатор, это добавит максимум 7 баксов стоимости. более подробно посмотрите тут тут
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|