Микроконтроллеры | Ликбез по программированию PIC |
|
---|---|---|
SAK: ....Т. е. после выполнения каждых 256 команд происходит приращение значения счетчика таймера. .... Неужели заданный аппаратным таймером период прерываний =20мс. зависит от количества выполняемых команд? |
|
|
Vlad_Petr: Что касается "..не успели.." , если я правильно понял Вы неправильно поняли. SAK абсолютно прав. Представьте таймер без предделителя. И загрузку значения счётчика в конце процедуры прерывания. Причём процедура прерывания выполняется, скажем, от 20 до 40 тактов, в зависимости от условий. Так вот, в этом случае, следующее прерывание возникнет не через счётчик тактов после текущего, как бы мы хотели, а через счётчик+20 или счётчик+40 тактов! |
|
|
Zandy: Годится! Это можно быстренько сляпать. Какой критерий выберем? Что будем считать, длительность полупериода (периода) или количество периодов (полупериодов) за фиксированное время? Если подойдет, то будем считать кол-во периодов за ед. времени. Если F=50+/- 25% (можно изменить соотношение, например на 10%), то с/д горит постоянно, при дальнейшем снижении до +/- 50% (25%)мигает с частотой 1 Гц. При еще большем снижении частоты - гаснет. Для простоты можнго считать, что на вход подается последовательность положительных импульсов с частотой следования 50 Гц, скважность от 0,1 -0,5 (в принципе - по барабану). Впрочем это только предложение. Возможно есть другие задачи. |
|
|
АНТОХА, а для чего счетчик в конце обработчика грузить? В таких случаях, вообще-то, счетчик готовят заранее в предыдущем вызове обработчика, в текущем вызове немедленно, первыми же командами разбираются с таймером (сбрасывают сигнал прерывания, грузят новое значение счетчика), и уж потом, параллельно с работой таймера, готовят нужные данные для будущего прерывания. Любую задачу в 90% случаев можно перестроить под такую работу. Плюс ко всему у "грузить в конце" есть еще один, практически неустранимый недостаток - если в обработчике, не дай бог, есть команды условных переходов, время работы обработчика перестает быть величиной постоянной и тут учитывай/не учитывай вход/выход - программа будет врать. В этом плане, кстати, система прерываний AVR реализована более корректно - там анализа источника прерываний не требуется, поскольку векторы прерываний индивидуальны на каждый источник |
|
|
chav1961: АНТОХА, а для чего счетчик в конце обработчика грузить? |
|
|
Вижу, что процесс идёт полным ходом. Отлично! Splav56: F=50+/- 25% |
|
|
picmaniac: А зачем такой большой допуск? Это не для контроля частоты сети. Это может быть полезно для контроля частоты вращения. |
|
|
Splav56: будем считать кол-во периодов за ед. времени |
|
|
picmaniac: Если, допустим, выбрать длительность интервала 1 сек., то поместится туда всего лишь 50 периодов. Стало быть, точность не выше 2%, так? Делать интервал больше? По-моему лучше при столь низкой частоте длительность периода измерять - заполнять измеряемый временной интервал импульсами с достаточно высокой частотой, и затем их подсчитывать. Тогда можно добиться высокой точности, особенно с хорошим кварцованным тактовым генератором В принципе о точности речи пока не было, но если нужна бОльшая точность, то, думаю, это справедливо. Я не против измерения длительности периода. |
|
|
Мне кажется в обучающих целях надо сделать точность поболее, чтобы научиться работать с двухбайтовым числом. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |