Uploaded by erbolatuly.didar

ЛР3 - acp-avr

advertisement
3 Лабораторная работа №3. Модуль АЦП ATMega32
Цель работы: изучение настройки каналов модуля аналого-цифрового
преобразователя с помощью регистров управления ADCSRA и ADMUX, а
также методов выравнивания результатов преобразования.
3.1 Общие положения
Модуль аналого-цифрового преобразования (АЦП) микроконтроллера
ATMega32 имеет восемь каналов ADC0-ADC7 порта А.
Для управления АЦП в микроконтроллере используется 4 регистра:
- регистр результата ADСH (старший байт);
- регистр результата ADСL (младший байт);
- регистр управления ADCSRA;
- регистр управления ADMUX.
Регистр ADCSRA используется для настройки работы модуля АЦП, а
с помощью регистра ADMUX устанавливается на какие каналы будут
использоваться модулем АЦП и тип выравнивания результата.
Управляющий регистр ADCSRA имеет следующие биты:
бит 7: ADEN – бит включения модуля АЦП
бит 6: ADCS - установка бита вызывает начало преобразования АЦП
бит 5: ADFR – режим измерений
ADFR=1 – режим непрерывных измерений
ADFR=0 – режим одиночных измерений
бит 4: ADIF – бит флага окончания\ АЦП
бит 3: ADIE – разрешение прерывания АЦП
биты 2-0: ADPS2:ADPS0 – выбор коэффициента деления частоты
101= Fosc/32 – 125 кГц
110 = Fosc/64 – 62,5 кГц
Регистр ADMUX имеет следующие биты:
биты 7-6: REFS1:REFS0 – выбор источника опорного напряжения UREF
бит 5: ADLAR – тип выравнивания результата АЦП
ADLAR=1 – выравнивание влево
ADLAR=0 – выравнивание вправо
биты 4-0: MOX4:MUX0 - выбор аналогового канала
00000 = канал 0, (RA0/ADC0)
00001 = канал 1, (RA1/ADC1)
00010 = канал 2, (RA2/ADC2)
00011 = канал 3, (RA3/ADC3)
00100 = канал 4, (RA4/ADC4)
00101 = канал 5, (RA5/ADC5)
00110 = канал 6, (RA6/ADC6)
00111 = канал 7, (RA7/ADC7)
В регистре ADСH:ADСL сохраняется 10-разрядный результат аналогоцифрового преобразования. Когда преобразование завершено, результат
преобразования записывается в регистр ADСH:ADСL, после чего
сбрасывается флаг ADIF (ADCSRA<4>) и устанавливается флаг прерывания
ADIF.
После включения и конфигурации АЦП выбирается рабочий аналоговый
канал. Соответствующие биты DDRA аналоговых каналов должны
настраивать порт ввода/вывода на вход. Перед началом преобразования
необходимо выдержать временную паузу.
Алгоритм функционирования АЦП:
1. Настроить модуль АЦП:
- настроить выводы как входы (DDRA);
- выбрать входной канал АЦП (ADMUX<4:0>);
- выбрать источник опорного напряжения (ADMUX<7:6>);
- выбрать тип выравнивания (ADMUX<5>);
- включить модуль АЦП (ADCSRA<7>).
2. Настроить прерывание от модуля АЦП:
- установить бит ADIE в 1;
3. Выдержать паузу.
4. Начать аналого-цифровое преобразование:
- установить бит ADCS в 1 (ADCSRA<6>).
5. Ожидать окончания преобразования:
- ожидать пока бит ADCS не будет сброшен в 0;
- ожидать прерывание по окончанию преобразования.
6. Считать результат преобразования из регистров ADCH:ADCL.
7. Для следующего преобразования необходимо выполнить шаги, начиная с
пункта 1 или 2.
Запись результата преобразования может выполняться с правым или
левым выравниванием (см. рисунок 10.1), в зависимости от значения бита
ADLAR регистра ADMUX<5>. Не задействованные биты регистров
ADCH:ADCL читаются как «0».
Рисунок 3.1 – Выравнивание результата АЦП
3.2 Моделирование в AVR Simulator IDE
3.2.1 Программирование модуля АЦП в ассемблере
Необходимо выполнить следующие действия:
- запустить AVR Simulator IDE;
- нажать Options/Select Microcontroller;
- выбрать ATMega32 и нажать кнопку Select;
- нажать на Tools/ Microcontroller View – появится окно со всеми портами;
- нажать на Tools/ 8xLED board – появится панель светодиодов (по умолчанию
порт В);
- нажать на File/Load program;
- в списке выбрать программу acp-avr.hex;
- нажав на «Открыть», программа acp-avr.hex загрузится в память
микроконтроллера;
- выбрать Rate/Fast;
- выделить опцию в Options/Infinite Loop Stops Simulation;
- нажатием на Simulation/Start начнется моделирование.
Нажмите на кнопку Т, связанную с выводом РА0/ADC0, затем нажмите
правую кнопку (появится число 1023) и снова левую - в появившемся окошке
АЦП измените аналоговое значение (не более 256) на этом выводе, затем там
же ОК. Установленное аналоговое значение появится на выводе РА0/ADC0.
Цифровое значение будет отражено на светодиодах, подключенных к порту B.
3.2.2 Листинг программы acp-avr.asm
.ORG 0x000000
LDI R16,low RAMEND
OUT SPL,R16
LDI R16,high RAMEND
OUT SPH,R16
START:
LDI R31,0xFF
OUT DDRC,R31
; PORTC - выход
LDI R30,0x00
OUT DDRA,R30
; ADC0-ADC7 входы
LDI R31,0x00
OUT ADMUX,R31 ; канал 0, правое выравнивание
LDI R30,0xBD
OUT ADCSRA,R30 ; вкл АЦП, K=32
NOP
NOP
L0001:
RCALL L0002
IN R16,ADCL
IN R17,ADCH
OUT PORTC,R16
; PORTC = ADCL
RJMP L0001
L0004:
RJMP L0004
; бесконечный цикл
L0002:
SBI ADCSRA,6
; начало АЦ преобразования
L0005:
LDI XL,0x26
LDI XH,0x00
LD R31,X
SBRC R31,6
; проверка окончания АЦП
RJMP L0005
RET
L0007:
RJMP L0007
; бесконечный цикл
.END
На рисунке 3.2 приведена модель микроконтроллера ATMega32 с
встроенным 10-разрядным АЦП. На вход РA0/ADC0 подается напряжение с
104 мВ, результат оцифровки выведен на панель светодиодов 8хLED – 0х69 =
01101001.
Рисунок 3.2 – Вид экрана выполняемой программы
3.3 Содержание отчета
- цель работы;
- листинг программы и ее описание;
- вид экрана микроконтроллера;
- выводы.
3.4 Контрольные вопросы
1) Как включить модуль АЦП?
2) Зачем выдерживается пауза перед преобразованием?
3) Как происходит настройка каналов АЦП?
4) Где содержится байт результата преобразования?
5) Почему при левом выравнивании результат будет кратен 4?
Download