Микроконтроллеры | Частотомер на AVR |
|
---|---|---|
Пробывал подавать сигналы с более низкими частотами, паказания стабильны. Вы были правы, скореее всего контроллер теряет импульсы входной частоты. |
|
|
Y@rik: Запрет прерывания по захвату происходит в прерывании по захвату таймера1 Y@rik: Пробовал подавать сигналы с более низкими частотами, показания стабильны. Вы были правы, скорее всего контроллер теряет импульсы входной частоты Мелькнула идейка одна, вполне продуктивная и легко выполнимая, как на си измерять частоты до половины тактовой, в вашем случае - до 4 МГц. Если интересно, могу рассказать, но завтра, сейчас уже полдвенадцатого, пойду-ка я баиньки, что-то притомился за выходные, ездил в Корнуол - 600 миль откатал туда-обратно. |
|
|
GM: Мелькнула идейка одна, вполне продуктивная и легко выполнимая, как на си измерять частоты до половины тактовой, в вашем случае - до 4 МГц. Если интересно, могу рассказать |
|
|
Когда я говорил о запрете захвата, я имел в виду физический запрет захвата, а не запрещение прерывания от него. Сами подумайте, запрет прерываний не запрещает фронтам входного импульса защёлкивать данные в ICR1. Отсюда возникла идея физического запрещения импульсов для схемы захвата. Предполагаю, что у вас входной сигнал подан на вход счётчика0 и на вход схемы захвата. Теперь к входу схемы захвата надо подключить выход элемента 2И-НЕ, на один вход которого подать входной сигнал, а на второй - сигнал разрешения от микроконтроллера. Впрочем, можно поставить ключ или триггер, не важно что именно, лишь бы была возможность отключать сигнал от схемы захвата. Логика работы остаётся практически неизменной, надо только заменить команду запрета прерывания на команду разрешения захвата. Теперь, чтобы начать период отсчёта входных импульсов, вы разрешаете работу схемы захвата на короткое время и дожидаетесь срабатывания схемы захвата (как и раньше), для больших входных частот может проскочить несколько импульсов захвата, это не принципиально, важен самый последний. В прерывании захвата надо немедленно запретить захват и считать значение счётчика0. Абсолютно то же самое надо сделать и в конце периода отсчёта входных импульсов, таким образом, вы будете иметь точные значения для определения N. Задержка, получившаяся при входе в прерывание захвата для считывания счётчика0, не важна, поскольку для точного определения М важна разность двух значений счётчика0, а не их абсолютные значения. Ну вот, вроде бы полностью изложил основы идеи. Расскажите, что получилось. Вы, кстати, на электрониксе обещались доложить о практической точности моего метода и пропали . |
|
|
GM: Сами подумайте, запрет прерываний не запрещает фронтам входного импульса защёлкивать данные в ICR1. |
|
|
Ну да, щелкает и щелкает аппаратно, вы же запретили только прерывание. Чтобы точно сказать как пропускает, надо анализировать код, который генерит си-компайлер. Один из вариантов, например такой. Защелкнули вы конечный фронт входного импульса, начали вычислять N и M. Только считали переменную перенос0, а тут возник новый фронт, прерывание таймера0 по переполнению сработало и добавило 1 к перенос0, но вы-то уже считали предыдущее значение. А эта единица (фактически в 8 разряде) "весит" 256 импульсов. |
|
|
Пробывал реализовать предложенны вами изменнения. |
|
|
Они же там прут со страшной скоростью (до 4 МГц в вашем случае), только прерываний нет, а флаг всё равно взводится. Вы его сбросили, а он тут же взводится (через 0.25 мкс). Поэтому лучше дождаться первого захвата, пропустить его, потом использовать второй. И не надо сбрасывать разрешение после первого захвата, а только после второго. |
|
|
Все казалось заработало, но на 18-ом измерении 9,975е+05. |
|
|
Значит, где-то ещё баг сидит. Давайте посмотрим на числа и частоты. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |