Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

238 Часть 111. Практическое программирование микроконтроллеров АVR ведь требуется еще и выполнять какие-то действия, а их нужно успеть совершить в промежутке между прерываниями (поэтому и увеличение тактовой частоты не поможет). Есть также довольно-таки сложный способ подгонки значений времени путем до­ бавления рассчитанных по величинам фактического убегания часов программных задержек в определенное время (ежесуточно, например). Но все такие «костыли» сложны в реализации, отвлекают от главного и, главное, с легкостью при необхо­ димости могут быть заменены аппаратными усовершенствованиями. Для этого достаточно завести контроллер от внешнего точного генератора. Фирма Epson выпускает такие генераторы с точностью от ± 25 ррм (миллионных долей) в диапазоне температур -20 + 70 °С. Продукция китайских производителей не­ сколько похуже, но тоже подтягивается к этим величинам1 • Генераторы эти не смертельно дороги, так что в критичных случаях их можно использовать вместо обычного кварца в тактировании контроллера. Эго равно касается и обсуждаемых часовых функций, и применения МК в качестве периодомера и частотомера (см. далее), и просто как генератора частоты или импульсов заданной длительно­ сти. Точности атомных часов вы, разумеется, таким способом не достигнете (и МК для подобного уровня решений вообще мало приспособлены), но огромное боль­ шинство задач даже из области научного эксперимента вполне решаются. А что касается внешних RTC, то вопросы их погрешности мы обсудим в главе 13 . Частотомер и периодомер Частота может измеряться, как известно, двумя способами: либо подсчетом числа импульсов измеряемой частоты за определенный промежуток времени, либо, на­ оборот, подсчетом числа импульсов известной частоты за период (или несколько периодов) измеряемого сигнала. В первом случае мы получаем именно значение частоты (если промежуток времени равен 1 с, то сразу в герцах), а во втором - об­ ратную величину, значение периода. Первый способ удобнее для измерения высо­ ких частот, второй - низких. Заметим, что в Arduino операции, аналогичные функциям частотомера и периодо­ мера, отсутствуют, имеется только измерение длительности импульса в виде функ­ ции pul sern ( ) . Если вам любопытно узнать, как к задачам измерения периодов и частот можно пристроить Arduino, то можете ознакомиться со статьей автора [ 1 5] . С помощью контроллеров МК частоту можно измерять несколькими путями. И сначала мы займемся методом прямого измерения (по способу частотомера) дос­ таточно высокой частоты, причем с подстройкой измерительного интервала для получения более точного результата прямо в физических величинах - герцах. 1 Поистине безбрежный выбор таких генераторов разных фирм имеется в интернет-магазине «Electronic component» (electronic-component.org ), а также в магазине «Кварц» (quartzl .com).

RkJQdWJsaXNoZXIy MTExODQxMg==