|
|
  |
Частотомер на Atmega8 (CVAVR) |
|
|
|
Jun 15 2010, 12:03
|

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

|
Разница М2-М1 всё время где-то 1033-1034, это приемлемо, по крайней мере согласуется с количеством импульсов входной частоты за 1 сек. А вот разница N2-N1=0, как это может быть? И как можно получить конечную частоту, деля на 0?
Скорее всего, неверный формат вывода. N1, N2, М1, М2 - целые числа формата long, значит формат вывода должен быть %li, а не %i.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jun 15 2010, 12:50
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Код reset aN1=65536 M1=98 ntick1=0 ntick2=1 N2=12582912 M2=1158 ntick1=0 ntick2=192 F=1016.187438Hz
N1=0 M1=205 ntick1=0 ntick2=0 N2=12451840 M2=1262 ntick1=0 ntick2=190 F=1018.644653Hz
N1=0 M1=52 ntick1=0 ntick2=0 N2=12451840 M2=1109 ntick1=0 ntick2=190 F=1018.644653Hz
N1=0 M1=155 ntick1=0 ntick2=0 N2=12517376 M2=1213 ntick1=0 ntick2=191 F=1014.270141Hz
N1=0 M1=3 ntick1=0 ntick2=0 N2=12451840 M2=1058 ntick1=0 ntick2=190 F=1016.717163Hz
N1=0 M1=105 ntick1=0 ntick2=0 N2=12517376 M2=1162 ntick1=0 ntick2=191 F=1013.311462Hz
N1=0 M1=208 ntick1=0 ntick2=0 N2=12451840 M2=1266 ntick1=0 ntick2=190 F=1019.608398Hz
N1=0 M1=56 ntick1=0 ntick2=0 N2=12451840 M2=1113 ntick1=0 ntick2=190 F=1018.644653Hz
N1=0 M1=159 ntick1=0 ntick2=0 N2=12451840 M2=1216 ntick1=0 ntick2=190 F=1018.644653Hz Действительно, только %li
|
|
|
|
|
Jun 15 2010, 14:05
|

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

|
Теперь мне не нравится, что ntick1 всё время равен 0, так не должно быть. Хотя N2=ntick2<<16.
И почему такая разница во времени между циклами измерения? Для 12 МГц клока составит 65536*83нс=5,461 мс.
Признавайтесь, куда у вас подключена нога захвата :-)?
И ещё, попробуйте поставить все операторы sprintf после вычисления Fx, возможно они вносят неоднородную задержку в цикл измерения. Не забудьте ввести доп.переменные ntick3, 4... чтобы не затирать начало
А потом перейдём к решению "нюанса".
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jun 15 2010, 14:58
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Цитата(=GM= @ Jun 15 2010, 18:05)  Признавайтесь, куда у вас подключена нога захвата :-)? Входной меандр подключен к Т0. ICP висит в воздухе...
|
|
|
|
|
Jun 15 2010, 15:35
|

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

|
Цитата(ps1x @ Jun 15 2010, 13:58)  Входной меандр подключен к Т0. ICP висит в воздухе... Ну вот, приплыли :-). Не обижайтесь, шутю я, у всех бывает. У вас в ICR1 стоял 0х0000 по умолчанию, вот вы его и считывали. Нога должна быть физически подключена к генератору и Т0. Иначе захват не будет работать. Далее, таймер0 и захват должны быть настроены на срабатывание от одного фронта, скажем 1-0.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jun 15 2010, 19:22
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Появилась стабильность  Значения 1018.8184 - 1018.8183 около того. Наверное, можно списать на погрешность кварца генератора и частотомера, хотя один из вариантов прошлого (  ) периодически показывал значения очень близкие к расчетному +0.00030 или около того. Однако периодически происходят выбросы 1024.125... К сожалению перешел на другое рабочее место, где самодельный переходник USB-USART не определяется, посему не могу предоставить никакой отладочной информации, сам считываю с дисплейчика.
|
|
|
|
|
Jun 15 2010, 19:36
|

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

|
Ну, я рад за вас. Выбросы происходят из-за того самого "нюанса", который теперь стоит обсудить. Дело в том, что между считыванием ICR1 и считыванием nover есть временной зазор, если прерывание TOV1 попадёт на него, то nover изменится на 1, хотя не должно. Вот такой нюанс. Подумайте сами, как его можно разрешить, завтра обсудим. Кстати, нельзя ли взглянуть на схему генератора струны?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jun 15 2010, 20:21
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Автогенератор в институте, и схемы от него нет, даже боюсь его развинчивать, но постараюсь что нибудь добыть когда там буду. Может быть запретить прерывания перед считыванием ICR1?  up: выбросы бывают и в меньшую сторону, около 1013 Гц.
|
|
|
|
|
Jun 16 2010, 10:10
|

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

|
Цитата(ps1x @ Jun 15 2010, 19:21)  Может быть запретить прерывания перед считыванием ICR1?  Всё равно между захватом и запретом можем пропустить переполнение tov1 или tov0, хотя и реже. Расскажу, как работает код Код 1 TIFR=(1<<ICF1); //сбросим флаг захвата 2 while((TIFR&0x20)==0x20); //ждём начала измерения 3 ntick1=ICR1; //запомним ICR1 и TCNT0 4 mtick1=TCNT0; //в начале измерения 5 ntick2=nover; 6 mtick2=mover&0x00FF; 1. Сбросили флаг захвата, это понятно, чтобы будущее содержимое ICR1 и TCNT0 было синхронизировано. 2. Ждём захвата, чтобы текущее содержимое системного времени в TCNT1 защёлкнулось в ICR1 и чтобы содержимое TCNT0 соответствовало защёлкнутому времени. 3-4. Сохраняем содержимое ICR1 и TCNT0 в памяти для дальнейшего использования. 5. Сохраняем старшую часть 32-битного счётчика nover в памяти для дальнейшего использования. Заметьте, я специально оттянул время запоминания nover подальше от захвата п.2, чтобы дать время сработать возможному прерыванию и скорректировать nover. 6. Сохраняем старшую часть 32-битного счётчика mover в памяти для дальнейшего использования. Тут статика, никаких особенностей. Тут можно посмотреть варианты решения http://electronix.ru/forum/index.php?showtopic=16900
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|