dvs1985 0 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба Все пытаюсь сделать программу для измерения ширины импульса. Мне посоветовали следующий алгоритм: 1. Настроить таймеры и компаратор 2. Включить прерывание по нарастающему фронту 3. По сработке прерывания запустить таймер 4. Переключить срабатывание прерывания по фронту 5. Сбросить флаг прерывания компаратора 6. Когда сработает прерывание по ниспадающему фронту - остановить таймер Подскажите, это правильный алгоритм? Не могу понять также, как посчитать сам интервал таймером.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба Все пытаюсь сделать программу для измерения ширины импульса. Мне посоветовали следующий алгоритм: 1. Настроить таймеры и компаратор 2. Включить прерывание по нарастающему фронту 3. По сработке прерывания запустить таймер 4. Переключить срабатывание прерывания по фронту 5. Сбросить флаг прерывания компаратора 6. Когда сработает прерывание по ниспадающему фронту - остановить таймер Подскажите, это правильный алгоритм? Не могу понять также, как посчитать сам интервал таймером.. А какой формы сигнал: прмоугольник, пила, синус...? Максимальная частота, амплитуда? Если речь идет о компараторе, то, полагаю, что сигнал аналоговый. Тогда нужно копать в сторону захвата. Т.е. компаратор можно настроить так, чтобы он запускал/останавливал таймер. Таким образом измерение сведется к чтению регистров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvs1985 0 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба Импульс - прямоугольный. Длительность любая, насколько хватит регистров. Амплитуда - 5 вольт. Частота очень небольшая - это тестовая программа, т.е. пускается одиночный импульс и измеряется его длительность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvs1985 0 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба Можно ли сделать так к примеру: Компаратор включает таймер, тот начинает считать число переполнений, которые происходят примерно допустим в 0,1 секунду, и затем это число переполнений умножается на 0,1 секунды и выводится.. Это будет правильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба Подскажите, это правильный алгоритм? Не могу понять также, как посчитать сам интервал таймером.. Такой алгоритм имеет право быть. Только необходимо определиться с параметрами импульса и точностью измерений. Например, приведенный Вам алгоритм не сможет замерить длительность "очень коротких" импульсов - если импульс закончится до того, как программа выйдет из прерывания, инициирующего начало измерений. Как считать интервал? Зависит от длительности и требуемой точности измерения. Например, можно измерять импульс по счетному регистру (зная, что каждая единица = Х мс или = Х мкс), можно считать ещё и переполнения таймера, расширяя программным путём счетный регистр таймера... P.S. А, можно считать только переполнения таймера, если импульс очень длинный... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvs1985 0 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба Например, можно измерять импульс по счетному регистру (зная, что каждая единица = Х мс или = Х мкс), можно считать ещё и переполнения таймера, расширяя программным путём счетный регистр таймера... А можно об этом попобробнее? Что значит каждая единица = Х мс? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба А можно об этом попобробнее? Ваш МК тактируется от некоторого источника, например, кварц 10МГц. Таймер Вы запускаете с пределителем равным 1, тогда каждая единица в счетном регистре 0,1 мкс Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvs1985 0 7 июля, 2008 Опубликовано 7 июля, 2008 (изменено) · Жалоба Единица это имеется в виду тик таймера? То есть таймер тикнул, значение регистра изменилось на 1? можно считать ещё и переполнения таймера, расширяя программным путём счетный регистр таймера.. Каким образом происходит расширение счетного регистра? Изменено 7 июля, 2008 пользователем dvs85 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба Значение счетного регистра изменяются в зависимости от режима работы таймера, частоты источника тактирования и пределителя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvs1985 0 7 июля, 2008 Опубликовано 7 июля, 2008 (изменено) · Жалоба Значение счетного регистра изменяются в зависимости от режима работы таймера, частоты источника тактирования и пределителя. То есть если частота кварца 4000000, предделитель = 1, режим работы по сравнению с регистром сравнения. Что из этого получается? Мне написали как расчитывать, только я никак понять не могу как это применить Написано так (24 бит * К) / 4 МГц Может кто расшифрует, что это значит? Изменено 7 июля, 2008 пользователем dvs85 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба Единица это имеется в виду тик таймера? То есть таймер тикнул, значение регистра изменилось на 1? Что Вы понимаете под "тик таймера"? Обычно - это прерывание от таймера... Каким образом происходит расширение счетного регистра? Таймер имеет счетный регистр (8 бит или 16). Пусть, счетный регистр - 8 бит, тогда если подсчитывать число переполнений таймера в восьмибитном регистре (или ячейке памяти), мы расширяем программным путём его значение - оно становится 16-тибитным: старшие 8 бит -в ячейке памяти или регистре (число переполнений), младшие 8 бит - счетный регистр таймера. По-аналогии, подсчет в 16-тибитном слове числа переполнений таймера, имеющего 16-тибитный счетный регистр, расширяем счетный регистр до 32 бит. То есть если частота кварца 4000000, предделитель = 1, режим работы по сравнению с регистром сравнения. Что из этого получается? Это что за режим - не понимаю? Каждые 1/4000000=0.25 мкс к счетному регистру таймера будет прибавляться (вычитаться) единица. Дальнейшее поведение зависит от режима таймера: normal, PWM, fast PWM, CTC - и всё это в разновидностях... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvs1985 0 7 июля, 2008 Опубликовано 7 июля, 2008 (изменено) · Жалоба В общем, что нужно сделать чтобы посчитать короткие импульсы (я так понимаю, если будет возможность считать короткие импульсы, то будет и возможность считать и импульсы подлинее)? А то я не совсем понял, что програмно нужно сделать.. Э то что за режим - не понимаю? Каждые 1/4000000=0.25 мкс к счетному регистру таймера будет прибавляться (вычитаться) единица. Дальнейшее поведение зависит от режима таймера: normal, PWM, fast PWM, CTC - и всё это в разновидностях... Я пытался сделать в режиме сброса при совпадении Изменено 7 июля, 2008 пользователем dvs85 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба В общем, что нужно сделать чтобы посчитать короткие импульсы (я так понимаю, если будет возможность считать короткие импульсы, то будет и возможность считать и импульсы подлинее)? А то я не совсем понял, что програмно нужно сделать.. Вы, в начале, отпределитесь какие (по длительности) импульсы Вы хотите принимать и с какой точностью - это и будет определять: каким методом (алготитмом) длительность будет определяться... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvs1985 0 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба Длительность от мсек до минут.. точность - сотые мсек Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 7 июля, 2008 Опубликовано 7 июля, 2008 · Жалоба Длительность от мсек до минут.. точность - сотые мсек У Вас - что? Устройство исключительно для определения длительности импульсов? Уж очень требования - широкие... Тагда, наверное, так: Таймер1, пределитель 1, normal (от 0 до FFFF). Ловить начало импульса на ICR1. Подсчитывать программно переполнения таймера. Ловить конец импульса на ICR1. По двум значениям регистра захвата и числу переполнений вычислять длительность. P.S. Пределитель 1 - не догма, можно и 8 или 64 (может быть). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться