Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование микроконтроллеров AVR. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Флаги всех прерываний таймера/счетчика ТС1 находятся в регистре
TIFR, а разрешение или запрещение этих прерываний производится уста­новкой или сбросом соответствующего бита маски прерываний регистра
TIMSK.
Счетный регистр таймера/счетчика TCNT1 входит в состав основного
блока модуля – блока реверсивного счетчика. В зависимости от режима работы модуля содержимое счетного регистра сбрасывается, инкременти­руется или декрементируется по приходу каждого тактового импульса на входе таймера/счетчика. Независимо от того, присутствует тактовый сиг­нал или нет, регистр в любой момент времени доступен как для чтения, так и для записи. После подачи напряжения питания в регистре TCNT1 находится нулевое значение.
Основной режим, который чаще всего используется при разработке
измерительных систем, называется «Сброс при совпадении» (СТС), где задействован специальный регистр – регистр совпадения.
Таймер Т1 микроконтроллера ATmega8 имеет два регистра совпаде­ния, которые задействованы в работе только тогда, когда выбран режим СТС. Для каждого из регистров ввода-вывода с именами OCR1AL, OCR1AH, OCR1BL, OCR1BH сравнение осуществляется раздельно. В слу­чае сравнения содержимого счетного регистра с содержимым одного из регистров совпадения произойдет вызов соответствующего прерывания. Кроме этого, в момент совпадения может происходить одно из следую­щих событий:
• сброс таймера (только для регистров совпадения OCR1 и OCR1A);
• изменение состояния одного из выводов микроконтроллера.
Регистры OCR1A/OCR1B входят в состав блоков сравнения. Во время работы таймера/счетчика в каждом машинном цикле осуществляется не­прерывное сравнение содержимого этих регистров с содержимым реги­стра TCNT1. В случае равенства этих содержимых в следующем машин­ном цикле устанавливается соответствующий флаг OCF1A/OCF1B реги-
21
стра TIFR и генерируется прерывание (если оно разрешено). При наступ­лении такого события может изменяться состояние ОС1А/ОС1В.
Структура программы, в которой необходимо проводить непрерыв­ные измерения, должна быть построена по принципу бесконечного цикла с использованием прерываний, инициируемых таймером и АЦП. Таймер требуется для запуска АЦП через равные промежутки времени, например через 100 мс, чтобы провести не менее 10 измерений за контрольный пе­риод времени 1 с перед выводом информации на ЖКИ.
В этом случае процедура измерений будет проводиться непрерывно с периодом 100 мс при работе основной программы в режиме бесконечно­го цикла с использованием прерываний, инициируемых таймером и АЦП. В процессе проведения измерений напряжения в цепях постоянного тока отсчеты за контролируемый период времени (1 с) необходимо проводить многократно через равные промежутки времени. Наиболее удобными для программирования в цепи постоянного тока являются промежутки време­ни, равные 100 мс.

1.3.2. Аналого-цифровой преобразователь

В состав моделей ATmega8, ATmega16, ATmega32, ATmega64 и ATmega128 входит модуль 10-разрядного АЦП последовательного при­ближения. Основные параметры этого АЦП следующие [2]:
− абсолютная погрешность ±2 МЗР;
− интегральная нелинейность ±0,5 МЗР;
− быстродействие до 15 тыс. выборок/с.
В составе модуля АЦП на входе присутствует 8-канальный аналого­вый мультиплексор, имеющий восемь каналов с несимметричными вхо­дами. Микроконтроллер Atmega8 в корпусе DIP-32 содержит только шесть входных, аналоговых каналов, из них два канала (ADC4 и ADC5) являются 8-разрядными. Для формирования различного числа каналов с дифференциальным входом входы АЦП могут объединяться попарно.
22
Источником опорного напряжения (ИОН) для АЦП может служить либо источник питания микроконтроллера, либо внутренний, либо внеш­ний ИОН.
Модуль АЦП может работать в двух режимах [1]:
а) в режиме одиночного преобразования, когда запуск каждого преоб­разования инициируется пользователем;
б) в режиме непрерывного преобразования, когда запуск преобразо­ваний выполняется непрерывно через определенные интервалы времени.
АЦП осуществляет преобразование входного аналогового напряже­ния в 10-разрядный код методом последовательных приближений. Мини­мальное значение напряжения соответствует нулевому уровню, а макси­мальное – уровню на выводе AREF минус один младший разряд.
К выводу AREF может быть подключено напряжение питания AVCC или внутренний источник на 2,56 В путем записи соответствующих значе­ний в биты REFS1...0 регистра ADMUX. Значение битов REFS1...0 и соот­ветствующие им источники опорного напряжения приведены в табл. 1.3.
Таблица 1.3
Источники опорного напряжения АЦП
REFS1 REFS0 Источник опорного напряжения
0 0 Вывод AREF, внутренний ИОН отключен 0 1 AVCC с внешним конденсатором на выводе AREF 1 0 Зарезервировано
Внутренний ИОН 2,56 В с внешним конденсатором на выводе
1 1
AREF.
Канал аналогового ввода определяется путем записи бит MUX в регистр управления мультиплексором ADMUX. В качестве однополярного аналого­вого входа АЦП может быть выбран один из входов ADC0…ADC5. Значе­ния битов MUX3...MUX0 для различных входов приведено в табл. 1.4.
23
Таблица 1.4
Управление входным мультиплексором
MUX3...MUX0 Вход АЦП
00000 ADC0 00001 ADC1 00010 ADC2 00011 ADC3 00100 ADC4 00101 ADC5
АЦП преобразует аналоговый сигнал в 10-разрядный код, который помещается в пару регистров данных АЦП – ADCH и ADCL. По умолча­нию результат преобразования размещается в младших 10 разрядах 16­разрядного слова (выравнивание справа) при нулевом состоянии бита ADLAR в регистре ADMUX, но может быть размещен и в старших 10 раз­рядах (выравнивание слева) путем установки этого бита в единичное со­стояние. Формат регистра ADMUX приведен в табл. 1.5.
Таблица 1.5
Биты регистра ADMUX
Бит Название Описание
7,6 REFS1:REFS0 Выбор источника опорного напряжения
5 ADLAR Выравнивание результата преобразования
3...0 MUX3...MUX0 Выбор входного канала
Работа АЦП разрешается путем установки бита ADEN в регистре управления и состояния ADCSR.
В проектах, которые будут рассмотрены в данном учебном пособии, предлагается использовать при программировании АЦП одиночное пре­образование в режиме запуска по прерыванию.
24
Одиночное преобразование запускается посредством записи логиче­ской единицы в бит запуска ADSC преобразования АЦП регистра ADCSR. Данный бит остается в высоком состоянии в процессе преобразования и сбрасывается контроллером по завершении преобразования.
Используя флаг прерывания АЦП в качестве источника управления, АЦП начинает новое преобразование сразу же после завершения текуще­го, без потери времени на инициализацию. В данном случае АЦП функци­онирует в режиме непрерывного преобразования, постоянно обновляя ADC Data Register – регистр результата преобразования. Первое преобра­зование должно быть начато установкой логической единицы в бит ADSC регистра ADCSR. Если в процессе преобразования переключается канал аналогового ввода, то АЦП автоматически завершит текущее преобра­зование прежде, чем переключит канал. Формат регистра ADCSR пред­ставлен в табл. 1.6.
Биты регистра ADCSR
Бит Название Описание
7 ADEN Разрешение АЦП 6 ADSC Запуск преобразования 5 ADFR Выбор режима работы АЦП
0 – режим одиночного преобразования
1 – остальные режимы 4 ADIF Флаг прерывания от компаратора 3 ADIE Разрешение прерывания от компаратора
2…0 ADPS2:ADPS0 Выбор частоты преобразования
Таблица 1.6
Преобразование аналогового сигнала в цифровой код в преобразователе
выполняется под управлением тактового сигнала АЦП, частота которого должна находиться в пределах 50–200 кГц для обеспечения разрядности ре­зультата, равной 10 бит. При больших значениях тактовой частоты разряд-
25
ность преобразования понижается до 8 бит. Реальная частота дискретизации АЦП зависит от количества тактов необходимого на одно преобразование, которое может быть разным в зависимости от режима работы АЦП.
Для задания тактовой частоты АЦП служит модуль предделителя.
Основным параметром предделителя является коэффициент деления, ко­торый может принимать следующие значения: 2, 4, 8, 16, 32, 64, 128.
Результирующая частота работы АЦП получается при делении уста-
новленной частоты процессора на коэффициент деления предделителя.
Таким образом, для задания частот работы и дискретизации АЦП
необходимо задать коэффициент деления предделителя установкой битов ADPS 2...0 в регистре управления АЦП ADCSR. Значения битов ADPS для разных коэффициентов деления приведены в табл. 1.7.
Таблица 1.7
Биты ADPS
ADPS2 ADPS1 ADPS0 Коэффициент деления
0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 128
В режимах одиночного и непрерывного преобразований цикл преоб-
разования запускается по первому нарастающему фронту тактового сиг­нала после установки разряда ADSC. Если используется запуск по преры­ванию, то цикл преобразования начинается по первому нарастающему фронту тактового сигнала после установки флага выбранного прерывания. Одновременно с установкой этого флага производится сброс предделите­ля модуля АЦП.
26
Длительность цикла при использовании несимметричного входа со-
ставляет 13 тактов, а при использовании дифференциального входа – 13 либо 14 тактов; выборка и запоминание входного сигнала производятся в течение первых 1,5 и 2,5 тактов соответственно. Через 13 (14) тактов преобразование завершается, разряд ADSC в режиме одиночного преобра­зования сбрасывается в «0», а результат преобразования сохраняется в ре­гистре данных АЦП. Одновременно устанавливается флаг прерывания ADIF регистра ADCSR и генерируется запрос на прерывание. Как и флаги остальных прерываний, флаг ADIF сбрасывается при запуске подпро­граммы обработки прерывания от АЦП или программно, записью в него
«1». Разрешение прерывания осуществляется установкой в «1» разряда ADIE регистра ADCSR при установленном флаге «I» регистра SREG. Если
АЦП работает в режиме непрерывного преобразования, новый цикл начнется сразу же после записи результата. В режиме одиночного преоб­разования новое преобразование может быть запущено сразу же после сброса разряда ADSC (до сохранения результата текущего преобразова­ния). Однако реально цикл преобразования начнется не ранее чем через один такт после окончания текущего преобразования [1]. Временные диа­граммы, иллюстрирующие сказанное, приведены на рис. 1.6.
Рис. 1.6. Временные диаграммы работы АЦП
в режиме одиночного преобразования
27
При запуске первого преобразования (в режиме одиночного) после
включения АЦП для выполнения преобразования потребуется 25 тактов, т. е. на 12 тактов больше, чем обычно. В течение этих 12 тактов выполня­ется «холостое» преобразование, инициализирующее АЦП (рис. 1.7).
Рис. 1.7. Временные диаграммы работы АЦП при первом преобразовании
(режим одиночного преобразования)
Высокая точность преобразования достигается, если тактовая частота преобразования АЦП находится в диапазоне 50–200 кГц. Соответственно коэффициент деления предделителя желательно выбирать таким, чтобы тактовая частота модуля АЦП находилась в указанном диапазоне. С уменьшением разрядности АЦП менее 10 разрядов точность преобразо­вания снижается, при этом для ускорения процесса можно использовать более высокую частоту, увеличивая частоту выборки. В моделях ATmega8, ATmega16, ATmega64 и ATmega128 для этой же цели предна­значен разряд ADCHM регистра SFIOR. При установке этого разряда в ло­гическую единицу скорость преобразования АЦП увеличивается. Однако при этом увеличивается и потребление микроконтроллера.
28

2. ОБЩИЕ СВЕДЕНИЯ О ЯЗЫКЕ С

На начальной стадии применения микроконтроллеров разработка про-
граммного обеспечения происходила исключительно на языке ассемблера, ориентированного для работы с конкретным процессором. Поэтому такие языки представляли собой символьные аналоги машинных кодов, а пере­вод мнемоники в машинный код выполнялся транслятором. Главным не­достатком ассемблерных языков являлась привязка каждого из них к кон­кретному типу микропроцессорных устройств и логике его работы.
В отличие от ассемблера язык С является языком высокого уровня
и может использоваться при программировании любого процессора, для которого существует компилятор с языка С. В языке С все низкоуровневые операции, выполняемые микроконтроллером, представлены в виде аб­страктных конструкций, позволяющих разработчикам сосредоточиться на программировании без перевода в машинные коды [3].
Язык С является самым популярным языком для создания системного
программного обеспечения.

2.1. ВВОДНЫЕ ПОНЯТИЯ В ЯЗЫКЕ С

Комментарий – некоторый поясняющий текст, который при компиля-
ции не учитывается. Комментарии бывают многострочными (начинаются с символов /* и заканчиваются символами */) и однострочными (начина­ются с символов //).
Идентификатор – последовательность букв, цифр и символов под-
черкивания “_”, которая не должна начинаться с цифры, используемая для именования различных программных элементов, таких как переменные, константы, функции, пользовательские типы данных и т. д. Регистр букв имеет значение.
Ключевое слово – зарезервированное слово определенного значения.
Ключевые слова не могут использоваться в качестве идентификаторов.
29
Литерал – постоянное значение некоторого типа, используемое в вы-
–38
–38
ражениях, например “10” как число в десятичной форме.
Формами представления числа в языке С являются:
10 – число 10 в десятичной форме;
0хА – число 10 в шестнадцатеричной форме (префикс 0х);
0b1010 – число 10 в двоичной форме (префикс 0b);
012 – число 10 в восьмеричной форме (префикс 0);
10.5 – число с плавающей точкой;
105e-1 – число 10,5 в экспоненциальной форме;
10U – беззнаковая константа (суффикс U);
10L – знаковая константа (суффикс L).
Тип данных определяет диапазон допустимых значений и простран- ство, отводимое в памяти данных для переменных, констант и результатов, возвращаемых функциями.
В различных компиляторах языка С могут использоваться собствен­ные типы данных, однако все они базируются на стандартных типах, пере­численных в табл. 2.1.
Таблица 2.1
Типы данных языка С
Тип Название
bit Бит 1 0, 1 char Символ 8 –128...127 int Целое число 16 –32768...32767 float Вещественное число 32 ±1.175·10
Размер,
Диапазон значений
бит
... ±3.402·10 long int Длинное целое 32 –2 147 483 648...2 147 483 647 unsigned char Беззнаковый символ 8 0...255 unsigned int Беззнаковое целое 16 0..65535 unsigned long int Беззнаковое длинное целое
32 0...4 294 967 295
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]