Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 4 / ИДЗ№4

.docx
Скачиваний:
6
Добавлен:
08.04.2022
Размер:
264.02 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра БТС

ИНДИВИДУАЛЬНОЕ

ДОМАШНЕЕ ЗАДАНИЕ №4

по дисциплине «Микропроцессорные системы»

Тема: Работа с АЦП

Студентка гр. 7501

Кирьянова А.М

Преподаватель

Анисимов А.А.

Санкт-Петербург

2020

Цель работы: написать на языке Assembler программу для работы с АЦП.

Используемые инструменты: отладочная плата ATtiny2313, интегрированная среда разработки AVR Atmel Studio 7.

Основные теоретические положения

Все микроконтроллеры семейства AtMega и некоторые из семейства Tiny имеют встроенный блок аналого-цифрового преобразования (АЦП). Он может использоваться для замены простого, но значительно менее функционального компаратора. Этот АЦП десятиразрядный и многоканальный (количество каналов может варьироваться от 4 до 16 в зависимости от модели микроконтроллера).

Модуль АЦП всего один, на его входе стоит аналоговый мультиплексор, подключающий этот вход к различным выводам МК, что позволяет проводить разделенные во времени измерения сразу нескольких независимых аналоговых величин. Входы мультиплексора могут работать как по отдельности (в несимметричном режиме, измеряя напряжение относительно земли), так и объединяться в пары (только для некоторых моделей микроконтроллеров), измеряя дифференциальное напряжение. Также опционально возможно усиление входного сигнала с фиксированным коэффициентом 10 или 100.

Встроенный АЦП представляет собой преобразователь последовательного приближения с устройством выборки-хранения и фиксированным числом тактов преобразования, равным 13 (14 для дифференциального измерения). Данный класс АЦП занимает промежуточное положение по быстродействию, стоимости и разрешающей способности между последовательно-параллельными и сигма-дельта АЦП и находит широкое применение в системах управления, контроля и цифровой обработки сигналов.

Для выполнения первого преобразования (при первоначальной настройке АЦП) требуется 25 тактов. Тактовая частота преобразования формируется с помощью делителя от опорной частоты микроконтроллера при помощи соответствующего управляющего регистра, рекомендованная частота преобразования – от 50 до 200 кГц, в этом диапазоне наиболее вероятно получение наиболее достоверного результата измерения. Модуль АЦП имеет разрешение в 10 бит, и, по заявлениям разработчиков, абсолютная погрешность не превышает двух младших значащих разрядов (погрешность не более 0,25 % шкалы измерения). Для достижения подобных результатов необходимо применение как аппаратных, так и программных способов повышения точности измерений, с которыми можно дополнительно ознакомиться в фирменной документации.

Также возможно два режима преобразования:

  • непрерывный (free-running mode), когда по завершении одного цикла преобразования сразу же следует другой;

  • одиночный (single), когда последовательность циклов регулируется вручную.

Первый способ не отличается высокой точностью измерений и целесообразен только при необходимости максимальной скорости преобразований.

Настройка АЦП

Регистры, задающие режим работы аналого-цифрового преобразователя.

ADMUX (ADC Multiplexer Selection Register) – регистр, определяющий текущий канал АЦП, источник опорного напряжения и режим хранения данных. В этом регистре нас больше всего интересуют биты, описанные далее.

REFS1:0 (Reference Selection Bits) – определяют источник опорного напряжения, относительно которого будет происходить преобразование. Опорное напряжение должно быть как можно более стабильным, без помех и колебаний по напряжению – от этого во многом зависит точность работы АЦП. Все возможные варианты приведены в табл.7.

Таблица 7 – Выбор источника опорного напряжения АЦП

REFS[1:0]

Источник опорного напряжения

00

Напряжение питания

01

Внутренний ИОН на 1.1 В

10

Внутренний ИОН на 2.2 В

11

Внутренний ИОН на 4.3 В

Внутренний источник опорного напряжения не очень точный и подходит только для нетребовательных приложений.

MUX4:0 (Analog Channel and Gain Selection Bits) – данные биты определяют текущий вход, с которого мы будем считывать аналоговый сигнал. Также с помощью этих битов выставляется коэффициент усиления при измерении в дифференциальном режиме. Возможные конфигурации для выбора текущего источника входного сигнала представлены в табл. 7.

Таблица 7 – Выбор текущего канала АЦП

MUX4..0

Номер канала

00000

ADC0

00001

ADC1

00010

ADC2

00011

ADC3

00100

ADC4

00101

ADC5

00110

ADC6

00111

ADC7

Данные с АЦП записываются в регистровую пару ADCH:ADCL, откуда их можно считать для дальнейшей обработки. Причем здесь есть один важный момент. Регистровая пара 16 разрядная, а АЦП имеет разрядность 10 бит. В итоге лишь один регистр занят полностью, а второй занимают лишь оставшиеся два бита. Исходя из этого факта, выравнивание может производиться как по правому краю – старшие два бита в ADCH, а младшие в ADCL, так и по левому – старшие биты в ADCH, а два младших бита в ADCL:

[9][8][7][6][5][4][3][2]:[1][0][x][x][x][x][x][x]

[x][x][x][x][x][x][9][8]:[7][6][5][4][3][2][1][0]

Для чего хранение данных АЦП-преобразования организовано именно таким образом? Так как в двух младших битах чаще всего достаточно сложно получить значимые данные (скорее всего, мы получим там помехи), можно использовать выравнивание по правому краю и считывать данные преобразования только из одного регистра ADCH, экономя время и программный код. За выравнивание отвечает бит ADLAR. Записывая в него логический ноль, получаем выравнивание по правой границе, записываем единицу – по левой.

Рассмотрим подробнее управляющий регистр ADCSRA (ADC Control and Status Register A), отвечающий за работу АЦП:

ADEN (ADC Enable) – записывая единицу в этот бит, разрешаем использование АЦП.

ADIE (ADC Interrupt Enable) – разрешение прерывания по завершению цикла преобразования.

ADPS2:0 (ADC Prescaler Select Bits) – позволяет выбрать коэффициент делителя тактовых импульсов для установки частоты преобразований (в непрерывном режиме). Значение коэффициента делителя определяется в соответствии с табл. 7.

Таблица 7 – Выбор коэффициента деления

ADPS2

ADPS1

ADPS0

Коэффициент деления

0

0

0

2

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

ADFR (ADC Free Running Select) – записывая единицу в этот бит, выбираем непрерывный режим преобразования.

ADSC (ADC Start Conversion) – записывая единицу в этот бит, мы начинаем очередной цикл преобразования в одиночном режиме работы (или первый цикл при непрерывном), который занимает 13 тактов (первый цикл – 25 тактов, здесь осуществляется первоначальная инициализация АЦП), при условии, что с помощью бита ADEN разрешено использование АЦП.

Код программы на языке Assembler:

.CSEG

.ORG 0x0000

RJMP RESET

.ORG 0x0009 // Задание адреса прерывания по окончании преобразования АЦП

RJMP ADC_complete

// Инициализация периферии

RESET:

LDI R16, RAMEND // Загрузка в регистр R16 адреса верхней границы ОЗУ

OUT SPL, R16

LDI R16, 1|(1<<4)

OUT DDRB, R16

LDI R16, (1<<ADLAR)|(1<<MUX0)|(1<<MUX1)

OUT ADMUX, R16 // Копирование из R16 регистр управления мультиплексором АЦП ADMUX

LDI R16, (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)

OUT ADCSRA, R16 // Копирование из R16 в регистр А управления и состояния АЦП ADCSRA

LDI R16, (1<<WGM00)|(1<<WGM01)|(1<<COM0A1)|(1<<COM0A0)

OUT TCCR0A, R16

LDI R16,(1<<CS01)

OUT TCCR0B, R16 // Установка делителя тактовой частоты таймера T0=8

SEI

// Основной цикл программы

MAIN:

// Конец основного цикла программы

RJMP MAIN

// Начало обработчика прерывания от АЦП

ADC_complete:

IN R16, ADCH

OUT OCR0A, R16

SBRS R16, 7

SBI PORTB, 4 // Установка 4-го бит PORTB

SBRC R16, 7

CBI PORTB, 4 // Сброс 4-го бит в регистре PORTB

RETI

Результаты работы программ:

Рисунок 1 – Работа с АЦП при отметке потенциометра 100%

Рисунок 2 – Работа с АЦП при отметке потенциометра 80%

Рисунок 3 – Работа с АЦП при отметке потенциометра 60%

Рисунок 4 – Работа с АЦП при отметке потенциометра 40%

Рисунок 5 – Работа с АЦП при отметке потенциометра 20%

Рисунок 5 – Работа с АЦП при отметке потенциометра 1%

Вывод

В ходе данной работы была смоделирована схема для работы с АЦП на основе микроконтроллеров ATtiny2313, для которого была написаны программы на языке Assembler, иллюстрирующая принцип работы АЦП в данном микроконтроллере. Процесс АЦП управлялся потенциометром, движение ручки которого изменяло яркость свечения светодиода.

Соседние файлы в папке Лаба 4