Программирование аналого-цифрового преобразователя и аналогового компаратора

18945
знаков
8
таблиц
0
изображений

Микроконтроллер АТ90S8535 имеет АЦП со следующими характеристиками: разрешение 10 разрядов, точность ±2 LSB, время преобразования 70...280 мкс, 8 мультиплексируемых каналов входа, режимы циклического и однократного преобразования, устройство подавления шумов Sleep-режима, максимальное входное и опорное напряжения равны напряжению питания.

AЦП подсоединен к 8-канальному аналоговому мультиплексору, позволяющему использовать любой вывод порта А в качестве входа AЦП.

Для аналого-цифрового преобразования используется принцип последовательного приближения. Опорное напряжение подается на вход AREF. AЦП содержит усилитель выборки/хранения, удерживающий напряжение входа AЦП во время преобразования на неизменном уровне.

Аналого-цифровой преобразователь может работать в двух режимах: режиме однократного преобразования и режиме циклического преобразования. В режиме однократного преобразования каждое преобразование инициируется пользователем. В режиме циклического преобразования AЦП осуществляет выборку и обновление содержимого регистра данных AЦП непрерывно. Результат преобразования находится в двух 10-разрядный регистрах – ADSH и ADCL.

АЦП включает делитель частоты, который формирует для него тактовый сигнал из тактового сигнала микроконтроллера. Рабочая тактовая частота лежит в диапазоне от 50 до 250 кГц.

Перечень векторов прерывания, используемых АЦП представлен в таблице 9.1.

 

Таблица 9.1. Вектор прерывания АЦП

Номер вектора

Адрес

Источник прерывания

Вид прерывания

15

$00E

ADC

Завершение ADC преобразования

Регистр данных АЦП - ADC

 

15

14

13

12

11

10

9

8

 

$05($25)

?

?

?

?

?

?

ADC9

ADC8

ADCH

$04 ($24)

ADC7

ADC6

ADC5

ADC4

ADC3

ADC2

ADC1

ADC0

ADCL

 

7

6

5

4

3

2

1

0

 

 

В регистре данных после завершения цикла преобразования размещается результат преобразования.

При считывании результата первым должен считываться регистр ADCL. После этого доступ АЦП к регистрам данных блокируется. Это обозначает, что если следующее преобразование завершено между чтением ADCL и ADSH, его результат будет потерян. После чтения регистра ADSH доступ АЦП к регистрам данных восстанавливается.

Регистр доступен только для чтения. Данные из регистра можно считать программным путем в любой момент.

Исходное состояние битов 9…0 после включения питания – 0.

 

Регистр управления и состояния АЦП - ADCSR ($06 ($26))

 

7

6

5

4

3

2

1

0

ADEN

ADSC

ADFR

ADIF

ADIE

ADPS2

ADPS1

ADPS0

 

Бит 7 – ADEN разрешение работы АЦП.

Установка бита в 1 разрешает работу АЦП. Установка бита в 0 (очистка) запрещает работу АЦП. Запрещение работы АЦП в процессе преобразования прекращает преобразование.

Бит 6 – ADSC запуск преобразования АЦП.

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

ADSC будет сохранять состояние 1 в течение всего цикла преобразования и сбрасывается в 0 по завершении преобразования. При выполнении пустого преобразования, предшествующего активируемому, бит ADSC остается установленным до завершения активируемого преобразования. Запись 0 в этот бит эффекта не оказывает.

Бит 5 – ADFR установка циклического режима работы АЦП.

При установленном в состояние 1 бите АЦП будет работать в циклическом режиме. В этом режиме АЦП производит выборки и обращения к регистрам непрерывно (одно за другим). Установка бита в 0 (чистка) приводит к прекращению циклического режима.

Бит 4-ADIF флаг прерывания АЦП.

Бит устанавливается в состояние 1 по завершению преобразования и обновления регистров данных ADC. Прерывание по завершению преобразования АЦП выполняется, если в состояние 1 установлены бит ADIE данного регистра и бит I регистра SREG. Бит ADIF сбрасывается аппаратно при выполнении подпрограммы обработки соответствующего вектора прерывания. Кроме того, бит ADIF может быть очищен записью во флаг логической 1, но при этом нужно учитывать, что может быть запрещено отложенное прерывание.

Бит 3 – ADIE разрешение прерывания от АЦП.

При установленных в состояние 1 бите ADIE и бите I регистра SREG активируется прерывание по завершению преобразования АЦП.

Биты 2.. 0 - ADPS2.. ADPS0 выбор коэффициента предварительного деления

Данные биты определяют коэффициент деления тактовой частоты микроконтроллера (XTAL) для получения необходимой тактовой частоты АЦП.

 

Таблица 9.2 Выбор коэффициента предварительного деления

ADPS2

ADPS1

ADPS0

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

0

0

0

Без деления

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

                                                

Исходное состояние битов 15…0 после включения питания – 0.

 

Регистр выбора мультиплексора ADC - ADMUX ($07 ($27))

 

7

6

5

4

3

2

1

0

?

?

?

?

?

MUX2

MUX1

MUX0

 

Биты 2.. 0 - MUX2.. MUX0 биты выбора аналогового канала.

Состояние данных битов определяет, какой из восьми аналоговых каналов (0 - 7) будет подключен к АЦП. Двоичный код соответствует номеру канала.

 

Работа AЦП разрешается установкой в состояние 1 бита ADEN в регистре ADCSR. Первому преобразованию, начинающемуся после разрешения AЦП, предшествует пустое инициализирующее преобразование. На практике это приводит к тому, что первое преобразование будет занимать 26 тактовых циклов, вместо обычных 14. Преобразование начинается с установки в состояние 1 бита начала преобразования ADSC. Этот бит находится в состоянии 1 в течение всего цикла преобразования и сбрасывается, по завершении преобразования, аппаратно. Если в процессе выполнения преобразования выполняется смена канала данных, то AЦП вначале закончит текущее преобразование и лишь потом выполнит переход к другому каналу.

При запуске АЦП установкой бита ADSC преобразование начинается по заднему фронту импульса синхросигнала АЦП. Один такт синхросигнала требуется на выборку-сохранение аналогового сигнала, после чего 13 циклов затрачивается на собственно преобразование и запись результата в регистры ADCL, ADCH.   

Аналоговый компаратор сравнивает уровень напряжения на положительном выводе РВ2 (AINO) c уровнем напряжения на отрицательном выводе PB3 (AIN1). Уровни напряжения определяются относительно аналоговой общей точки. При напряжении на выводе РВ2 большем, чем на выводе РВ3, на выходе компаратора АСО устанавливается 1, максимальное напряжение на входах равно напряжению питания.

Перечень векторов прерывания, используемых АЦП представлен в таблице 9.3.

 

Таблица 9.3. Вектор прерывания аналогового компаратора

Номер вектора

Адрес

Источник прерывания

Вид прерывания

17

$010

ANA_COMP

Срабатывание аналогового компаратора

 

Регистр статуса и управления аналогового компаратора - ACSR ($08 ($28))

 

7

6

5

4

3

2

1

0

ACD

-

ACO

ACI

ACIE

ACIC

ACIS1

ACIS0

 

Бит 7 – ACD запрет аналогового компаратора

Установка бита в 1 запрещает работу аналогового компаратора. При изменении состояния бита ACD необходимо запрещать прерывание аналогового компаратора. В противном случае может произойти прерывание.

Бит 5 – ACO выход аналогового компаратора. Доступен только для чтения. Может быть использован для управления входом захвата таймера/счетчика Т1.

Бит 4 – ACI флаг прерывания аналогового компаратора.

Бит устанавливается в состояние 1 в случае формирования компаратором прерывания. Прерывание выполняется, если в состояние 1 установлены бит ACIE данного регистра и бит I регистра SREG. Бит ACI сбрасывается аппаратно при выполнении подпрограммы обработки соответствующего вектора прерывания. Кроме того, бит ACI может быть очищен записью во флаг логической 1. Предостережение: при изменении других битов регистра ACSR командами SPI или CBI бит ACI будет очищен, если перед этим он был установлен в 1.

Бит 3 – ACIE разрешение прерывания аналогового компаратора.

При установленных в состояние 1 бите ACIE и бите I регистра SREG активируется прерывание при переключении компаратора.

Бит 2 –ACIC разрешение входа захвата аналогового компаратора

Установленный в состояние 1 бит ACIC разрешает захват входа таймера/счетчика Т1 при переключении аналогового компаратора. Для разрешения прерывания захвата входа таймера/счетчика Т1 бит TICE1 в регистре масок прерываний TIMSK таймеров.

Биты 1,0 -  ACIS1, ACIS0 выбор режима прерывания аналогового компаратора.

Определяют характер события компаратора, при котором возникает прерывание аналогового компаратора. Варианты установок представлены в таблице 9.4.

Таблица 9.4. Вид события прерывания аналогового компаратора

ACIS1

ACIS0

Характер события

0

0

При переключении выхода компаратора

0

1

-

1

0

При изменении сигнала на выходе с 1 на 0.

1

1

При изменении сигнала на выходе с 0 на 1.

 

При изменении состояния битов ACIS1, ACIS0 необходимо запрещать прерывание аналогового компаратора. В противном случае может произойти прерывание.

В качестве примера аналого-цифрового преобразования рассматривается программа измерения входного напряжение в режиме однократного преобразования. Преобразование запускается кнопкой. Измеряемое напряжение подается на вход А0. Результат измерения отражается на двухразрядном семисегментном индикаторе. Опорное напряжение подается на специальный вход AREF и равно 2,56 В.

Определяем значение единицы младшего разряда АЦП 1 мл. р. = U ОП / 2 n = 2,56/1024 = 0,0025 В. Код, полученный в результате преобразования: код = U ИЗМ / 1 мл. р. =   U ИЗМ / 0,0025. Из этого соотношения видно, что численное значение кода в общем случае не совпадает с численным значением измеряемого напряжения. В этом случае требуется перекодировка. Чтобы избежать перекодировки, значение 1 мл. р. должно быть кратно 10 n. В рассматриваемом примере можно значение полученного кода разделить на четыре. Кроме того, деление на 4 позволит уменьшить длину кода до восьми разрядов (т.е. до одного байта), что облегчит дальнейшую обработку кода. Численное значение кода после деления на 4: код = U ИЗМ / (0,0025•4) = U ИЗМ / 0,01.

Результат преобразования АЦП представляется в двоичном коде. Чтобы вывести на индикатор результат измерения, нужно преобразовать этот код в двоично-десятичный. По заданию требуется отображение на индикаторах только двух разрядов, поэтому достаточно получить численное значение только двух старших десятичных разрядов.

Для преобразования двоичного кода в двоично-десятичный можно предложить следующий алгоритм. Максимальное число, помещающееся в восьмиразрядный регистр 255, поэтому для получения старшего десятичного разряда содержимое регистра нужно разделить на 100. Целое от деления есть значение старшего десятичного разряда. Остаток от этого деления делится на 10. Целое от деления есть значение среднего десятичного разряда. Остаток от этого деления есть значение младшего разряда.

Среди команд микроконтроллера АТ90S8535 нет команды деления, потому деление организуется программно.

Для деления на 4 используем команды сдвига. Сдвиг на один разряд в сторону младших разрядов равносилен делению на 2. Для перемещения информации из старшего разряда в младший используется сдвиг через перенос.

Деление на 100 и на 10 организуется следующим образом. Из делимого вычитается 100 до тех пор, пока результат не станет меньше 10, количество вычитаний определяет количество сотен. Затем из полученного результата вычитается 10, пока результат не станет меньше 10, количество вычитаний определяет количество десятков.

Для простоты старший разряд выводится на индикатор из одного порта (В), а младший из другого (С). Но вообще для вывода результата преобразования используется один порт с применением динамической индикации.

Запуск преобразования рационально организовать с помощью внешнего прерывания по линии D1 (INT0).

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

;*******************************************

; Измерение входного напряжения

; Вход АЦП -А0. Запуск – D2.  Выход порты С и B.

;*******************************************

.include “8535def.inc”     ; файл описания AT90S8535.

.cseg

.org $00                   ; прерывание по сбросу и включению питания.

rjmp nacalo                   ;адрес основной программы

.org $01                 ; прерывание при нажатии кнопки запуск

rjmp pusk               ;адрес подпрограммы прерывания                  

.org $0E                   ; прерывание при окончании преобразования

rjmp PREOB            ; адрес подпрограммы прерывания                  

.org $30                  ; адрес начала основной программы в памяти программ.            

                                         

nacalo:                   ;начало основной программы

;******************** программирование портов I/O

LDI    R16, $00               

OUT  PORTA, R16  ; программирование портов А и D на вход.

OUT  PORTD, R16 

LDI    R17, $FF              

OUT  DDRB, R17   

OUT  DDRC, R17    ; программирование портов С и В на выход.   

;******************* задание стека.

OUT  SPL, R16        ; запись  адреса в младший байт указателя стека      

LDI    R17,$02          ; запись  адреса в старший байт указателя стека      

OUT  SPH, R17        ; итоговый физический адрес $0200 (512)

;******************* задание в ОЗУ кодов семисегментного индикатора

ldi     r17,$3f          ;задание нуля  

sts     $70,r17

ldi     r17,$06           ;задание единицы

sts     $71,r17

ldi     r17,$5b           ;задание двойки

sts     $72,r17

ldi     r17,$4f           ;задание тройки

sts     $73,r17

ldi     r17,$66           ;задание четверки

sts     $74,r17

ldi     r17,$6d           ;задание пятерки

sts     $75,r17

ldi     r17,$7d           ;задание шестерки

sts     $76,r17

ldi     r17,$07           ;задание семерки

sts     $77,r17

ldi     r17,$7f           ;задание восьмерки

sts     $78,r17

ldi     r17,$6f           ;задание девятки

sts     $79,r17

;******************* программирование режима работы устройств

OUT  ADMUX, R16    ; подключение к АЦП порта А0

LDI    R17,$98              ; настройка АЦП: режим работы – однократный,

OUT  ADCSR, R17      ; без предделителя

LDI    R17,$03              

OUT   MCUCR, R17   ; внешнее прерывание по фронту

LDI    R17,$40           

OUT  GIMSK, R17      ; разрешение внешнего прерывания

SEI                              ; разрешение всех прерываний

;******************** основная (фоновая) программа

PROGRAMMA:

RJMP PROGRAMMA ; переход наметку PROGRAMMA

;******************* подпрограмма обработки прерывания АЦП

PREOB:

LDI    R26, $70        ;начальное значение регистра косвенной адресации     

LDI    R27, 0

IN  R19, ADCH              ;перенос результата преобразования в РОН

IN  R18, ADCL       

ROR R19                        ; деление результата преобразования на 4

ROR R18

ROR R19

ROR R18

DEL100:                          ; вычисление старшего разряда

MOV R17, R18           

INC R26

SUBI R18, 100

BRCC  DEL100               ; переход, если остаток больше 100

DEC R26                          ; адрес цифры старшего разряда

LD  R2, X

OUT  PORTB, R2           ; вывод цифры  на индикатор

LDI    R26, $70        ;начальное значение регистра косвенной адресации

DEL10:                             ; вычисление младшего разряда

INC R26                            

SUBI R17, 10

BRCC  DEL10                   ; переход, если остаток больше 10                                                

DEC R26                            ; адрес цифры младшего разряда

LD  R2, X

OUT  PORTC, R2              ; вывод цифры на индикатор

RETI                                   ; выход из подпрограммы

;****************** подпрограмма обработки прерывания запуска АЦП

Pusk:

SBI ADCSR,6

RETI

 

К сожалению, симулятор не позволяет задавать аналоговые сигналы на входе. Поэтому полностью проверить работу программы на симуляторе не удастся. Но проверить работу основной части программы возможно. Для этого перед прогоном программы на симуляторе в регистр ADC необходимо поместить код, соответствующий входному напряжению, а конец преобразования симметировать, установив флаг прерывания ADIF в регистре ADCSR вручную.

В качестве примера работы компаратора рассматривается программа индикации уровня входного напряжения. Когда входное напряжение компаратора больше 2 В, должен гореть светодиод, подключенный к порту С0.

Опорное напряжение равно 2 В и подается на вход AIN1 (порт РВ3). Контролируемое напряжение подается на вход AIN0 (порт РВ2).

 

;*******************************************

; Индикация входного напряжения

; Входы компаратора - РВ2 и РВЗ.  Выход С0.

;*******************************************

.include “8535def.inc”     ; файл описания AT90S8535.

.cseg

.org $00                   ; прерывание по сбросу и включению питания.

rjmp nacalo                   ;адрес основной программы

 

nacalo:                   ;начало основной программы

;******************** программирование портов I/O

LDI    R16, $00               

OUT  PORTB, R16  ; программирование порта В на вход.

LDI    R17, $FF              

OUT  DDRC, R17    ; программирование порта С на выход.   

;******************* программирование режима работы компаратора

OUT  ACSR, R16      ; разрешение работы компаратора

PROGRAMMA:

SBIC ACSR, 5           ; тестирование выхода компаратора

RJMP UST                 ; если выход 1 (напряжение на входе больше 2 В)                               

                                    ;  переход на метку UST

CBI PORTC, 0           ; если выход 0 (напряжение на входе меньше 2 В)

                                    ; установка на выходе С0 нуля.

RJMP PROGRAMMA  ; переход к новому опросу

UST:

SBI PORTC, 0            ; установка на выходе С0 единицы

RJMP PROGRAMMA   ; переход к новому опросу

 

К сожалению, симулятор не позволяет задавать аналоговые сигналы на входе. Поэтому полностью проверить работу программы на симуляторе не удастся. Но проверить работу основной части программы возможно. Для этого в процессе работы программы устанавливать значение выхода компаратора (бита АСО) вручную.


Информация о реферате «Программирование аналого-цифрового преобразователя и аналогового компаратора»
Раздел: Информатика, программирование
Количество знаков с пробелами: 18945
Количество таблиц: 8
Количество изображений: 0

Похожие материалы

Скачать
19644
5
3

... ів 2001 Техническое задание   Разработать быстродействующтий многоканальный АЦП с управлением от микроконтроллера. АПЗ.38.098424.003 ТЗ Изм Лит № докум Подпись Дата Аналого цифровой преобразователь Техническое задание Лит Лист ...

Скачать
36470
13
11

... схемы цифровых РПУ и сделаны выводы об их преимуществах, и применении в современной авиационной радиоэлектронной аппаратуре. 1.Обзор современных схем построения ЦРПУ   1.1 Схемы построения цифровых РПУ Обобщенная схема цифрового радиоприемного устройства представлена на рисунке 1.   Рисунок 1 Развитие техники и технологии цифровых интегральных схем привело к тому, что заключительное ...

Скачать
32312
0
8

... измеренные значения температуры можно ввести на экран компьютер с помощью последовательного интерфейса RS232С. 3. Синтез схемы электрической принципиальной цифрового термометра В данном проекте разработан цифровой термометр с использованием микроконтроллера AVR ATMEGA128. Схема устройства представлена на чертеже ЛОЕТ.06-1.09Э3. Перечень элементов –ЛОЕТ.06-1.09 ПЭ3. Описание схемы ...

Скачать
130405
7
0

... AVR Studio запомнит расположение окон и использует эти установки при следующем запуске проекта. 3.2. Анализ методики реализации разработки программного обеспечения 3.2.1. Классификация вариантов заданий Цель заданий – практическое освоение методики программирования на ассемблере микроконтроллеров ATMEL семейства AVR, отладка программы на симуляторе AVR Studio и программирование кристалла с помощью ...

0 комментариев


Наверх