Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование микроконтроллеров AVR. Учебное пособие.pdf
X
- •ПРЕДИСЛОВИЕ
- •1. АРХИТЕКТУРА МИКРОКОНТРОЛЛЕРОВ AVR СЕМЕЙСТВА MEGA
- •1.1. Регистры микроконтроллера
- •1.2. Порты ввода/вывода
- •1.3. Периферийные устройства
- •1.3.1. Таймеры/счетчики
- •1.3.2. Аналого-цифровой преобразователь
- •2. ОБЩИЕ СВЕДЕНИЯ О ЯЗЫКЕ С
- •2.1. Вводные понятия в языке С
- •2.2. Правила приведения типов компилятора Code Vision AVR
- •2.3. Структура программы на языке С
- •3. СОЗДАНИЕ ПРОЕКТА С ИСПОЛЬЗОВАНИЕМ МАСТЕРА-ПОСТРОИТЕЛЯ
- •3.1. Выбор общих параметров проекта
- •3.1.1. Настройка портов
- •3.1.2. Настройка таймеров
- •3.1.3. Настройка параметров АЦП
- •3.1.4. Настройка параметров ЖКИ
- •3.2. Генерации программы
- •4. ПРИМЕНЕНИЕ МИКРОКОНТРОЛЛЕРОВ AVR ПРИ РАЗРАБОТКЕ ИЗМЕРИТЕЛЬНЫХ СИСТЕМ
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

вания в окошке появляются названия видов прерываний: Timer1
Overflow, Input Capture, Соmpare A Match, Соmpare B Match. В этом
случае выбираем прерывание, которое называется Comp are A Match (при
совпадении с А). Записываем метку в указанном поле. После этого нужное
прерывание будет включено.
• Поля Value и Inp. Capture оставляем без изменений. Данные поля
служат для установки начальных значений счетного регистра и содержимого регистра захвата.
• Поля под общим названием Comp позволяют выставить значения,
записываемые в регистры совпадения А и В. Будем использовать регистр А. Запишем в поле А: значение рассчитанного коэффициента деления (186A). Здесь разрешается запись только в шестнадцатеричном формате. Проверяем по содержимому в окне Timer Period результат и правильный ход расчетов при программировании интервала времени.
После описанных установок окно настройки таймера должно выглядеть
так, как показано на рис. 3.6. На этом настройка таймера ТС1 завершается.
3.1.3. Настройка параметров АЦП
Затем программируем АЦП. Для этого открываем вкладку Analog to
Digital Converter, как показано на рис. 3.7.
Выставляем «галочки» в трех окошках вкладки, где разрешаем работу 8-разрядного
АЦП с использованием прерывания. Для
исключения влияния помех при работе АЦП
можно включить режим Noise Canceler
(Подавление шума).
Для достижения наибольшей точности
преобразования АЦП необходимо, чтобы
его частота преобразования соответствовала
51
Рис. 3.7. Настройка
параметров АЦП

диапазону 50–200 кГц. Это устанавливается во вкладке Clock за счет из-
менения коэффициента деления предделителя.
Если требуется проводить измерения с поочередной сменой входных
каналов нужно установить «галочку» в окошке Automatically Scan Inputs.
3.1.4. Настройка параметров ЖКИ
В последнюю очередь программиру-
ется жидкокристаллический индикатор,
который подключается к порту D, как показано на рис. 3.8.
Запускается этот процесс установкой
«галочки» в окошке Enable Alphanumeric
Рис. 3.8. Настройка
параметров ЖКИ
LCD Support. Поскольку используемый
в нашем случае ЖК-дисплей выполнен на
базе контроллера HD44780, то выбираем
этот тип в окошке Controller Type. В результате выполненные настройки для
данной программы можно считать завершенными. В конце программирования
требуется сохранить значения параметров
с помощью меню мастера File / Save.
Воспользуемся еще одним полезным
свойством мастера-построителя. Откроем
вкладку Project Information (рис. 3.9).
В поле Project Name рекомендуется
Рис. 3.9. Занесение
информации для заголовка
занести название проекта, а в поле Ver-
sion – номер версии программы. В поле
Date устанавливаем дату разработки про-
граммы.
52

В полях Author и Company указываем имя автора и название фирмы.
В поле Comments: помещаем подробные комментарии. Вся эта информация регистрируется в заголовке составленной программы.
3.2. ГЕНЕРАЦИИ ПРОГРАММЫ
После установки всех параметров переходим непосредственно к про-
цессу генерации программы. С этой целью выбираем в меню мастера
Program пункт Generate, Save and Exit. Запуск процесса генера-
ции начнется с запроса имени файла составленной программы. При
этом откроется диалог сохранения файла, в котором сначала требуется
создать каталог, где будет размещен этот проект, а затем указать имя
файла данной программы. Затем программа трижды запросит имена генерируемых файлов (одинаковые) и путь к каталогу, где они будут сохранены. Имена файлов и путь к каталогу должны содержать только
английские буквы. После создания шаблона требуется дополнить его
кодами, содержащими вычислительные и логические процедуры, и сохранить конечный текст программы. В результате этих действий в созданный на жестком диске каталог запишется файл готовой программы на
языке С со стандартным расширением .с, которое будет присвоено автоматически.
Однако процесс генерации проекта на этом не заканчивается. Сразу
после записи файла готовой программы откроется новый диалог, который
запросит имя для файла проекта. Этот файл предназначен для хранения
параметров созданного проекта.
Кроме типа применяемого микроконтроллера и тактовой частоты задающего генератора, в файл проекта записывается для хранения вспомогательная информация о наличии и расположении точек останова, закладок и т. д.
53

Имя файла проекта удобнее оставить таким же, как и имя готовой
программы. Файлу проекта автоматически присваивается расширение
.prj.
После регистрации файла проекта диалог записи файла откроется
в третий раз. Будет снова предложено выбрать имя для файла данных построителя. В этот файл будут записаны текущие значения всех параметров, мастера, т. е. значения всех управляющих элементов со всех его вкладок: и те, которые были изменены в процессе настройки, и те, которые
остались без изменений (по умолчанию).
Эти данные могут понадобиться, если потребуется заново пересоздать
проект. Сохранив файл данных построителя, можно в любой момент восстановить значения всех его элементов, по возможности отредактировать
их и создать новый проект. Файлу данных построителя нужно присвоить
то же самое имя, что обоим предыдущим. Новый файл получит расширение .cwp (Code Wizard Project).
После того как и третий файл будет записан, процесс генерации проекта завершится. На экране появятся два новых окна. В первом окне откроется содержимое файла с расширением «.с». Второе окно – это файл
комментариев. Сюда можно записать, а затем сохранить на диске любые
замечания по программе. Листинг (текст) программы, полученный с помощью мастера-построителя (Code Wizard AVR), дополнится англоязычными комментариями, созданными автоматически в процессе генерации
программы.
Для компиляции программы необходимо выбрать команду меню
Project /Compile (F9). Результаты компиляции выводятся в окно
Information, а в окне Navigator в дереве проекта появятся синие ветви.
Проходя мышкой по значкам, можно перемещаться по заголовкам процедур и именам глобальных переменных, что очень удобно при работе особенно с большим проектом.
54

Ветвь дерева с ошибками Errors выделяется красным цветом. Список
ошибок также выводится в окне Messages внизу экрана. Чтобы исправить
ошибку, нужно щелкнуть мышкой по листу дерева. Соответствующая
строка программы выделится серым цветом, а рядом с ней появится курсор для ввода.
После компиляции будут созданы файлы с расширениями:
.asm (файл Ассемблера),
.mар (адреса ОЗУ расположения глобальных переменных),
.vec (список векторов прерываний),
.inc (файл определений).
В случае успешной компиляции выводится сообщение об отсутствии
ошибок. В окне Navigator ветвь сообщений об ошибках пропадает, а список файлов пополняется файлом filename _.с – копией исходного файла на
языке С. При окончательной сборке проекта и получении файлов для отладки и программирования микроконтроллера нужно выбрать в меню команду Project/Make (Shift + F9). Появится окно Information, в котором
будет сообщение о создании дополнительных файлов с расширениями
.rоm (программирование Flash-памяти МК – программа в формате «адрес :
слово»), .еер (программирование EEPROM), .lst (листинг программы), .err
(аналог содержимого окна Information), .obj (объектный файл) и .cof (сим-
вольный файл для отладки в среде AVR Studio).
Работа с Code Vision AVR при положительном результате на этом
может быть закончена или при отрицательном результате продолжена по
крайней мере до того момента, когда все ошибки, найденные при отладке,
будут исправлены.
55

4. ПРИМЕНЕНИЕ МИКРОКОНТРОЛЛЕРОВ AVR ПРИ РАЗРАБОТКЕ ИЗМЕРИТЕЛЬНЫХ СИСТЕМ
В данном учебном пособии рассмотрены примеры проектов разработок систем измерения напряжений, токов, мощностей, скоростей вращения и т. п., поэтому к ним предъявляются повышенные требования по измерению временных промежутков. Вследствие этого, с целью уменьшения погрешности измерения времени, а как следствие, и всех других измеряемых параметров, все схемы проектов будут снабжены внешним
кварцевым резонатором. В качестве базовой микросхемы для всех приведенных в учебном пособии примеров использован микроконтроллер AVR
фирмы Atmel ATmega8. Рассматриваемые в пособие примеры могут быть
использованы в качестве практических заданий при изучении дисциплин
по применению микроконтроллеров в процессах измерения напряжений,
токов, мощностей и других неэлектрических величин, а также в цепях
управления исполнительными устройствами различных электрических
аппаратов.
4.1. ПОДГОТОВКА ПРОГРАММЫ
ДЛЯ ИЗМЕРЕНИЯ ПОСТОЯННОГО НАПРЯЖЕНИЯ
Микроконтроллеры AVR обладают способностью измерять напряжения одной полярности с помощью встроенного аналого-цифрового преобразователя (АЦП) последовательного приближения. АЦП может работать
как в 8-, так и в 10-разрядном режиме. Максимальное напряжение на входе АЦП не должно превышать эталонное напряжение питания АЦП, которое подается на вход AREF и обычно равно напряжению питания микроконтроллера. Если измеряемое напряжение выше, то, чтобы обеспечить
это условие, нужно применить делитель напряжения (рис. 4.1).
56

В качестве первого примера рассмотрим схему измерения напряже-
GB1
-
+
R
1
R
2
U
R2
2
R
U
АБ max
U
2
R
U
АБ max
U
2
R
U
ния стартерной аккумуляторной батареи с максимальным значением
напряжения U
АБmax
= 14,4 В.
Рис. 4.1. Схема для расчета
делителя напряжений
При расчете сопротивления делителя напряжения требуется учиты-
вать, что ток делителя должен быть в пределах 10 мА, тогда при максимальном значении напряжения на входе делителя, равном 14,4 В суммарное сопротивление делителя будет равно (R1+R2) = 1440 Ом. Соблюдая
условие, при котором напряжение на входе, например ADC0 АЦП, должно быть меньше или равно напряжению питания АЦП
≤ 5 В, составим
следующее соотношение:
= 14,4 В – (R1+R2) = 1440 Ом;
= 5 В – R2 = 500 Ом.
В результате расчета получим R2 = 500 Ом, выбираем из ряда Е24
ближайшее большее: R2 = 510 Ом. Затем из этого же соотношения находим величину сопротивления R1:
= 14,4 В – (R1+R2) = 1468,8 Ом;
= 5 В – R2 = 510 Ом.
Получим R1+R2 =1468,8 Ом, тогда R1 = 1468,8 – 510 = 958,8 Ом.
57

Из стандартного ряда Е24 выбираем сопротивление R1 = 1000 Ом.
АБ max
U
АБ max
U
2
R
U
2
R
U
2
АБmax
14,4
c _ u 2,97 .
4,86
R
U
U
= = =
дить 10 раз в секунду, а результат для вывода на ЖКИ должен быть р
Проверяем, какое напряжение будет подано на вход АЦП при максимальном значении напряжения
= 14,4 В из прежнего соотношения:
= 14,4 В – (R1+R2) = 1510 Ом;
= х – R2 = 510 Ом.
Получим
= 4,86 В < 5 В, что и требуется по условию.
На основании этого расчета вычисляем калибровочный коэффициент
по напряжению c_u, который нужно будет занести в код программы,
управляющей вычислениями:
Описание работы программы. Блок-схемы алгоритмов
Структура программы, в которой необходимо проводить непрерывные измерения, должна быть построена по принципу бесконечного цикла
с использованием прерываний, инициируемых таймером и АЦП. Таймер
требуется для запуска АЦП через равные промежутки времени, например
через 100 мс, чтобы провести не менее 10 измерений за контрольный период времени 1 с. перед выводом информации на жидкокристаллический
индикатор (ЖКИ). Блок-схема алгоритма основной программы представлена на рис. 4.2.
При такой постановке задачи измерения (отсчеты) нужно произво-
а-
вен среднеарифметическому значению суммы 10 измерений. При тактовой частоте процессора, равной, например, 4 МГц, промежутки времени
100 мс можно отсчитывать с помощью таймера/счетчика ТС1 с предделителем 64.
58

НАЧАЛО
Инициализация портов,
таймеров, АЦП, ЖКИ
Подсоединение библиотек.
Определение глоб. переменных.
Ввод исходных данных
Разрешение
прерываний
Нет
Да
Прерывание
произошло?
Тогда период следования импульсов на входе таймера/счетчика ТС1
равен 4 МГц / 64 = 62,5 кГц (Т = 1/62,5 кГц = 16 мкс), а коэффициент пересчета КП = 100 мс /16 мкс = 6250. Требуемый интервал времени можно
реализовать в режиме OVERFLOW, тогда код для реинициализации будет
равен 65536 – 6250 = 59286 в десятичной системе счисления, а код
в шестнадцатеричной системе – Е796.
Блок-схема алгоритма п/программы обработки прерывания таймера
ТС1 представлена на рис. 4.3.
Длительность интервала времени в 1 с, равную сумме 10 периодов по
100 мс, потребуется отсчитывать в программе.
Рис. 4.2. Блок-схема алгоритма
основной программы
59

НАЧАЛО
Реинициализация
стартового значения
таймера/
счетчика ТС
1
Запуск АЦП
через каждые
100
мс
ВОЗВРАТ
Рис. 4.3. Блок-схема алгоритма п/программы
обработки прерывания таймера ТС1
В приведенном примере АЦП используется в 8-разрядном режиме
с выравниванием результата по левому краю, вследствие чего он считывается из старшего байта ADCH в переменную adc_data. После этого
итоговый результат накапливается в течение 10 периодов в переменной Um, а затем вычисляется среднее арифметическое значение напряжения, которое записывается в переменную Us. Полученные после вычислений данные через 1 с выводятся на ЖКИ. Содержимое переменной Us,
участвующей в процессе, в конце каждого цикла (через 1 с) должно обнуляться.
Блок-схема алгоритма п/программы обработки прерывания АЦП при
измерении напряжения аккумуляторной батареи представлена на рис. 4.4.
После создания шаблона программы его требуется дополнить кодами,
содержащими вычислительные и логические процедуры, необходимые
для получения результата.
В этих кодах обычно назначаются имена как глобальных, так и локальных переменных и их определения, а также присутствует фрагмент
п/программы обработки прерывания АЦП.
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
