Все микроконтроллеры AVR семейства mega имеют в своем составе 16-ти разрядный таймер/счетчик T1. Он позволяет формировать длительные временные задержки/интервалы и у него большее число режимов работы и прерываний, чем у 8-ми разрядных таймеров. В составе таймера/счетчика Т1 есть блок захвата, который по сигналу компаратора или сигналу на выводе ICP сохраняет значение счетного регистра TCNT1 в регистре ICR1. Эту особенность таймера можно использовать для измерения периода сигналов, длительности импульсов или для ведения лога/журнала событий. Рассмотрим использование прерывания по событию захват для реализации простого частотомера на микроконтроллере AVR.
    Выбирая пример для этой статьи, я колебался между несколькими вариантами. С одной стороны хотелось написать простую программу, чтобы было понятно начинающим, с другой стороны программа должна оправдывать применение событийной системы.
   Думал я, думал и в итоге остановился на термостате. Программа носит учебный характер и не претендует на оптимальность. Некоторые функции в ней не реализованы.
   Вопросы организации программ встраиваемых систем довольно скудно освещены в отечественной литературе. Поэтому у начинающих программистов микроконтроллеров рано или поздно возникают проблемы при написании  больших проектов.
   Стандартный подход к построению микроконтроллерных программ сводится к использованию бесконечного цикла, внутри которого происходит опрос флагов, и вызываются разные функции. Однако, такая программа не наглядна, и ее сложно модифицировать.
   Организация программы в виде событийной системы (event driven system) лишена этих недостатков, позволяет реализовывать сложную логику, и не так “тяжеловесна” как операционные системы (RTOS). В этой статья мы разберемся с принципом ее работы и рассмотрим простой вариант ее реализации.
   Будучи программистом, вам не нужно полностью знать ISO/ANSI C стандарт. Можно создавать довольно сложные приложения на Си, не зная всех деталей. Однако, стандарт – лучший помощник, когда вы разбираетесь в менее очевидных частях языка и исследуете его закоулки.
   Когда вы читаете стандарт, некоторые моменты выглядят совершенно ясными на бумаге, но когда вы компилирует свой код, он так переворачивается, что делает все, кроме того, что вы хотели. Некоторые части стандарта требуют анализа, прежде чем вы полностью поймете их поведение и сможете использовать в своих интересах.

jAVRCalc

14/01/2010 - 23:08
   Некоторое время назад я начал разбираться с программированием мобильных телефонов на J2ME, при этом никаких начальных познаний по языку JAVA у меня не было. Поскольку лучший способ осваивать язык программирования – это написание конкретных приложений, я задался вопросом, а что бы такое сделать?  Так возник jAVRCalc.
Страница 29 из 37