Учебный курс. 16 разрядный таймер/счетчик Т1. Прерывание по событию захват. Простой частотомер на AVR
16/02/2010 - 04:11
Pavel Bobkov
Все микроконтроллеры AVR семейства mega имеют в своем составе 16-ти разрядный таймер/счетчик T1. Он позволяет формировать длительные временные задержки/интервалы и у него большее число режимов работы и прерываний, чем у 8-ми разрядных таймеров. В составе таймера/счетчика Т1 есть блок захвата, который по сигналу компаратора или сигналу на выводе ICP сохраняет значение счетного регистра TCNT1 в регистре ICR1. Эту особенность таймера можно использовать для измерения периода сигналов, длительности импульсов или для ведения лога/журнала событий. Рассмотрим использование прерывания по событию захват для реализации простого частотомера на микроконтроллере AVR.
Организация программ. Событийная система - практический пример
09/02/2010 - 03:40
Pavel Bobkov
Выбирая пример для этой статьи, я колебался между несколькими вариантами. С одной стороны хотелось написать простую программу, чтобы было понятно начинающим, с другой стороны программа должна оправдывать применение событийной системы.
Думал я, думал и в итоге остановился на термостате. Программа носит учебный характер и не претендует на оптимальность. Некоторые функции в ней не реализованы.
Организация программ. Событийная система (Event driven system)
24/01/2010 - 21:55
Pavel Bobkov
Tagged under
Вопросы организации программ встраиваемых систем довольно скудно освещены в отечественной литературе. Поэтому у начинающих программистов микроконтроллеров рано или поздно возникают проблемы при написании больших проектов.
Стандартный подход к построению микроконтроллерных программ сводится к использованию бесконечного цикла, внутри которого происходит опрос флагов, и вызываются разные функции. Однако, такая программа не наглядна, и ее сложно модифицировать.
Организация программы в виде событийной системы (event driven system) лишена этих недостатков, позволяет реализовывать сложную логику, и не так “тяжеловесна” как операционные системы (RTOS). В этой статья мы разберемся с принципом ее работы и рассмотрим простой вариант ее реализации.
Поведение целочисленных типов
19/01/2010 - 07:33
Pavel Bobkov
Будучи программистом, вам не нужно полностью знать ISO/ANSI C стандарт. Можно создавать довольно сложные приложения на Си, не зная всех деталей. Однако, стандарт – лучший помощник, когда вы разбираетесь в менее очевидных частях языка и исследуете его закоулки.
Когда вы читаете стандарт, некоторые моменты выглядят совершенно ясными на бумаге, но когда вы компилирует свой код, он так переворачивается, что делает все, кроме того, что вы хотели. Некоторые части стандарта требуют анализа, прежде чем вы полностью поймете их поведение и сможете использовать в своих интересах.
Учебный курс. Организация обмена по USART `у с использованием кольцевого буфера
07/01/2010 - 21:39
Pavel Bobkov
Tagged under
Реализация обмена данными по USART`у, которую мы рассматривали в предыдущей статье имеет некоторые недостатки. Функция отправки символа перед тем как инициировать передачу выполняет опрос флага UDRE регистра UCSRA в цикле while. А это значит, что микроконтроллер тратит свое драгоценное время на пустую работу. Прием данных осуществляется в однобайтовый буфер, при этом предыдущие данные затираются, если микроконтроллер не успевает их считывать.
Для простых приложений такого подхода вполне достаточно, но для сложных гораздо эффективнее организовать передачу (прием) данных используя кольцевой (циклический) буфер.