Материал: Лабы по МП от Нефёдова

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

При ADLAR = 1:

Разряд

15

14

13

12

11

10

9

8

ADC9

ADC8

ADC7

ADC6

ADC5

ADC4

ADC3

ADC2

ADCH

ADC1

ADC0

-

-

-

-

-

-

ADCL

7

6

5

4

3

2

1

0

Чтение/запись

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Чт.

Исх. значение

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

По завершении преобразования результат помещается в этих двух регистрах. При использовании дифференциального режима преобразования результат представляется в коде двоичного дополнения.

Левосторонний формат ADLAR=1 представления результата удобно использовать, если достаточно 8 разрядов. В этом случае 8-разрядный результат хранится в регистре ADCH и, следовательно, чтение регистра ADCL можно не выполнять. При правостороннем формате необходимо сначала считать ADCL, а затем ADCH.

ВЫПОЛНЕНИЕ РАБОТЫ

  1. Изучить функционирование блока АЦП микроконтроллера ATmega128 и схему подключения входов АЦП в данном лабораторном стенде (см. рис. 8.1). Обратить внимание, что входное напряжение, подаваемое на АЦП имеет размах от 0В до 5В, а опорное напряжение равно 2,56В.

Рисунок 8.1 – Схема подключения переменного резистора к входу АЦП.

  1. Запустить на персональном компьютере интегрированную систему программирования AVRStudio. Командой ProjectNew Project создать новый проект Lesson8. С использованием редактора текста создать демонстрационную программу:

.device ATmega128

.include "m128def.inc"

;** таблица векторов прерываний ****************************

.CSEG

.org $0000 ;начальный адpес пpогpаммы

rjmp Start ;пеpеход к началу пpогpаммы

.org $002A

rjmp ADC_end ;Преобразование АЦП завершено

;** Основная программа **************************************

Start:

ldi R16,High(RAMEND);инициализация стека

out SPH,R16

ldi R16,Low(RAMEND) ;

out SPL,R16 ;

;** настройка первого разряда индикатора для вывода результата **

in R16,DDRE

sbr R16,(1<<PE4) ;установка линии первого разряда на выход

out DDRE, R16 ;разрешение работы линии порта на выход

sbr R16,$FF ;установка всех линий сегментов на выход

out DDRC, R16 ;разрешение работы линии порта на выход

out PORTC,R16 ;выключение всех сегментов

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

in R16,ADCSRA

sbr R16,(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)

out ADCSRA, R16 ;разрешение работы АЦП

in R16,ADMUX

sbr R16,(1<<ADLAR) ;уст. левостороннего формата результата,

out ADMUX, R16 ;нулевого канала и внешнего ИОН

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

sbi ADCSRA,ADSC ;запуск первого преобразования

loop:

rjmp loop ;зацикливание программы до прихода прерывания

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

ADC_end:

in R16,ADCH ;считывание результата преобразования

com R16 ;инверсия для правильного отображения

out PORTC,R16 ;вывод на сегменты

;на индикаторе будет отображаться двоичный код результата преобразования

sbi ADCSRA,ADSC ;запуск следующего преобразования

reti ;выход из прерывания

Эта программа демонстрирует настройку и обслуживание блока АЦП микроконтроллера ATmega128 для работы в режиме однократного преобразования по прерываниям с получением 8-ми битного результата и выводом ни первый разряд индикатора в двоичном виде.

  1. Выполнить команду Project/Buildдля компиляции проекта.

  2. Если компиляция прошла без ошибок загрузить полученную программу lesson8.hex в микроконтроллер по методике пункта 2.4. «ЗАПИСЬ ПРОГРАММЫ В МИКРОКОНТРОЛЛЕР», при получении сообщения об ошибке исправить ее и повторить пункт 3.

  3. После запуска программы в микроконтроллере на индикаторе в первом разряде должен отобразиться результат преобразования АЦП в двоичном виде (см. табл. 8.3). Вращая ручку переменного резистора на стенде проконтролировать изменение показаний на индикаторе. Дать объяснение, почему показания изменяются не во всем диапазоне вращения ручки переменного резистора.

Таблица 8.3 – Соответствие сегментов индикатора битам в регистре результата ADCH.

Биты регистра ADCH

0

1

2

3

4

5

6

7

Сегменты индикатора

a

b

c

d

e

f

g

точка

Задания

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

  2. Написать программу, отображающую округленный до 8 разрядов результат измерения в шестнадцатеричном виде на двух разрядах индикатора в диапазоне значений от 00 до FF.

  3. Написать программу, отображающую округленный до 8 разрядов результат измерения в вольтах в диапазоне от 0.00 до 2.55В.

Приложение 1.

Схема электрическая принипиальная. Часть 1.

Схема электрическая принципиальная. Часть 2.

Приложение 2.

Схема расположения элементов на печатной плате.

88

Источник: https://files.student-it.ru/previewfile/284613