=GM= 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Разница М2-М1 всё время где-то 1033-1034, это приемлемо, по крайней мере согласуется с количеством импульсов входной частоты за 1 сек. А вот разница N2-N1=0, как это может быть? И как можно получить конечную частоту, деля на 0? Скорее всего, неверный формат вывода. N1, N2, М1, М2 - целые числа формата long, значит формат вывода должен быть %li, а не %i. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба 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 :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Теперь мне не нравится, что ntick1 всё время равен 0, так не должно быть. Хотя N2=ntick2<<16. И почему такая разница во времени между циклами измерения? Для 12 МГц клока составит 65536*83нс=5,461 мс. Признавайтесь, куда у вас подключена нога захвата :-)? И ещё, попробуйте поставить все операторы sprintf после вычисления Fx, возможно они вносят неоднородную задержку в цикл измерения. Не забудьте ввести доп.переменные ntick3, 4... чтобы не затирать начало А потом перейдём к решению "нюанса". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Признавайтесь, куда у вас подключена нога захвата :-)? Входной меандр подключен к Т0. ICP висит в воздухе... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Входной меандр подключен к Т0. ICP висит в воздухе... Ну вот, приплыли :-). Не обижайтесь, шутю я, у всех бывает. У вас в ICR1 стоял 0х0000 по умолчанию, вот вы его и считывали. Нога должна быть физически подключена к генератору и Т0. Иначе захват не будет работать. Далее, таймер0 и захват должны быть настроены на срабатывание от одного фронта, скажем 1-0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба А DDR соответствующих ножек влияет? Подтяжка? Сейчас вывод тини26 подключен напрямую к T0 меге и все. Надо добавить соединение с ICP? (пока что делаю на т.н. Breadboard пластиковая макетка с дырочками). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Да, надо соединить Т0 и ICP с генератором меандра. ICP настроить на ввод, подтяжка не нужна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Появилась стабильность :) Значения 1018.8184 - 1018.8183 около того. Наверное, можно списать на погрешность кварца генератора и частотомера, хотя один из вариантов прошлого (:)) периодически показывал значения очень близкие к расчетному +0.00030 или около того. Однако периодически происходят выбросы 1024.125... К сожалению перешел на другое рабочее место, где самодельный переходник USB-USART не определяется, посему не могу предоставить никакой отладочной информации, сам считываю с дисплейчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Ну, я рад за вас. Выбросы происходят из-за того самого "нюанса", который теперь стоит обсудить. Дело в том, что между считыванием ICR1 и считыванием nover есть временной зазор, если прерывание TOV1 попадёт на него, то nover изменится на 1, хотя не должно. Вот такой нюанс. Подумайте сами, как его можно разрешить, завтра обсудим. Кстати, нельзя ли взглянуть на схему генератора струны? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 15 июня, 2010 Опубликовано 15 июня, 2010 · Жалоба Автогенератор в институте, и схемы от него нет, даже боюсь его развинчивать, но постараюсь что нибудь добыть когда там буду. Может быть запретить прерывания перед считыванием ICR1? :) up: выбросы бывают и в меньшую сторону, около 1013 Гц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 16 июня, 2010 Опубликовано 16 июня, 2010 · Жалоба Может быть запретить прерывания перед считыванием 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 16 июня, 2010 Опубликовано 16 июня, 2010 · Жалоба 4) Проверить наличие переноса из таймера1. При наличии переноса добавить единицу к Т6. 5) Проверить наличие второго захвата, если нет захвата перейти к п.4. Вот так видимо? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 16 июня, 2010 Опубликовано 16 июня, 2010 · Жалоба Не понял, по-подробнее можно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ps1x 0 16 июня, 2010 Опубликовано 16 июня, 2010 (изменено) · Жалоба Ваш пост из того топика. Изменено 16 июня, 2010 пользователем rezident Нарушение п.3.4 Правил форума. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 21 июня, 2010 Опубликовано 21 июня, 2010 · Жалоба Ну что, ps1x, есть подвижки? В принципе, я нашёл решение для си, надо проверить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться