Микроконтроллер АТ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 ; переход к новому опросу
К сожалению, симулятор не позволяет задавать аналоговые сигналы на входе. Поэтому полностью проверить работу программы на симуляторе не удастся. Но проверить работу основной части программы возможно. Для этого в процессе работы программы устанавливать значение выхода компаратора (бита АСО) вручную.
Похожие материалы
... ів 2001 Техническое задание Разработать быстродействующтий многоканальный АЦП с управлением от микроконтроллера. АПЗ.38.098424.003 ТЗ Изм Лит № докум Подпись Дата Аналого цифровой преобразователь Техническое задание Лит Лист ...
... схемы цифровых РПУ и сделаны выводы об их преимуществах, и применении в современной авиационной радиоэлектронной аппаратуре. 1.Обзор современных схем построения ЦРПУ 1.1 Схемы построения цифровых РПУ Обобщенная схема цифрового радиоприемного устройства представлена на рисунке 1. Рисунок 1 Развитие техники и технологии цифровых интегральных схем привело к тому, что заключительное ...
... измеренные значения температуры можно ввести на экран компьютер с помощью последовательного интерфейса RS232С. 3. Синтез схемы электрической принципиальной цифрового термометра В данном проекте разработан цифровой термометр с использованием микроконтроллера AVR ATMEGA128. Схема устройства представлена на чертеже ЛОЕТ.06-1.09Э3. Перечень элементов –ЛОЕТ.06-1.09 ПЭ3. Описание схемы ...
... AVR Studio запомнит расположение окон и использует эти установки при следующем запуске проекта. 3.2. Анализ методики реализации разработки программного обеспечения 3.2.1. Классификация вариантов заданий Цель заданий – практическое освоение методики программирования на ассемблере микроконтроллеров ATMEL семейства AVR, отладка программы на симуляторе AVR Studio и программирование кристалла с помощью ...
0 комментариев