ЛАБЫ

Измерение аналоговых сигналов (Лабораторная работа)

 

Задание: необходимо измерить 3 аналоговых сигнала, которые будут находиться в диапазоне от 0 до 2,56 В. Опорное напряжение – 2,56В. Значение каждого сигнала необходимо усреднять по 16 выборкам. Цикл изменения составляет 3 секунды (48 измерений за 3 сек.) Полученные значения необходимо преобразовать в двоично-десятичную форму. Тактовая частота 8 МГц и разрядность АЦП 10 бит. Результаты записывать, начиная с адреса 66h.

 

Листинг 1. Код программы

.include "8535def.inc"

.def temp=r16

.def cnt=R17

.def count=R18

.def temph=R25

.def resl=R13

.def resm=R14

.def resh=R15

.equ q1=4

.equ q2=5

.equ K=60

.equ ed=400

.equ des=40

.org 0

 

rjmp RESET ; Reset Handler

rjmp EXT_INT0 ; IRQ0 Handler

rjmp EXT_INT1 ; IRQ1 Handler

rjmp TIM2_COMP ; Timer2 Compare Handler

rjmp TIM2_OVF ; Timer2 Overflow Handler

rjmp TIM1_CAPT ; Timer1 Capture Handler

rjmp TIM1_COMPA ; Timer1 CompareA Handler

rjmp TIM1_COMPB ; Timer1 CompareB Handler

rjmp TIM1_OVF ; Timer1 Overflow Handler

rjmp TIM0_OVF ; Timer0 Overflow Handler

rjmp SPI_STC; ; SPI Transfer Complete Handler

rjmp UART_RXC ; UART RX Complete Handler

rjmp UART_DRE ; UDR Empty Handler

rjmp UART_TXC ; UART TX Complete Handler

rjmp ADCcomplete ; ADC Conversion Complete Interrupt Handler

rjmp EE_RDY ; EEPROM Ready Handler

rjmp ANA_COMP ; Analog Comparator Handler

 

 

RESET:

ldi temp, high(RAMEND);

out SPH,temp;

ldi temp, low(RAMEND) ;

out SPL,temp;

ldi temp,2

out ADMUX,temp

ldi temp,(1<<ADEN|1<<ADSC|0<<ADFR|1<<ADIE|1<<ADPS2|1<<ADPS1|0<<ADPS0);

out ADCSR,temp;                               

ldi temp,(1<<OCIE1A);  

out TIMSK,temp

ldi ZH, high (K)

ldi ZL, low (K)

clr count

ldi cnt,2

sei;

Start:

rjmp start

 

EXT_INT0:

reti ;

EXT_INT1:

reti ;

TIM2_COMP:

reti ;

TIM2_OVF:

reti ;

TIM1_CAPT:

reti ;

 

TIM1_COMPA:

in temp,ADCL;

ld temph,Z

add temp,temph

st Z+,temp

in temp,ADCH;

ld temph,Z

adc temp,temph

st Z+,temp

tst cnt

breq nstep

ldi cnt, 3

ldi ZH, high (K)

ldi ZL, low (K)

inc count

cpi count,16

breq sred

 

nstep:

dec cnt

out ADMUX,cnt

ldi temp,(1<<ADEN|1<<ADSC|0<<ADFR|1<<ADIE|1<<ADPS2|1<<ADPS1|0<<ADPS0);

out ADCSR,temp;

reti;

 

sred:

dec cnt

 

ld temp, Z

ldd temph, Z+1

swap temp

andi temp,0b00001111

swap temph

std Z+1,temph

andi temph,0b11110000

or temp,temph

st Z+,temp

ld temph, Z

andi temph,0b00000011;

st Z+,temph

 

clr resh

clr resm

clr resl

 

edinicy:

cpi temph,high(ed)

brlo desyatue

brne sub_ed

cpi temp,low(ed)

brlo desyatue

sub_ed:

subi temp,low(ed)

sbci temph,high(ed)

inc resh

rjmp edinicy

 

desyatue:

cpi temp,des

brlo sotue

sub_des:

subi temp,des

inc resm

rjmp desyatue

 

sotue:

lsr temp

lsr temp

mov resl,temp

 

swap resm

mov temp,resm

or resl,temp

std Z+q1,resl

std Z+q2,resh

 

tst cnt

brne sred

 

clr count

st -Z,count

st -Z,count

st -Z,count

st -Z,count

st -Z,count

st -Z,count

ldi cnt,2

out ADMUX,cnt

ldi temp,(1<<ADEN|1<<ADSC|0<<ADFR|1<<ADIE|1<<ADPS2|1<<ADPS1|0<<ADPS0);

out ADCSR,temp;

reti ;

 

 

TIM1_COMPB:

reti ;

TIM1_OVF:

reti ;

TIM0_OVF:

reti ;

SPI_STC:

reti

UART_RXC:

reti

UART_DRE:

reti

UART_TXC:

reti

ADCcomplete:

reti

EE_RDY:

reti

ANA_COMP:

reti

 

 

Выводы по работе

В ходе лабораторной работы была разработана программа для измерения трех аналоговых сигналов в диапазоне 0..2,56В. Временные данные, пропорциональные измеренному сигналу, хранятся по адресам 60h-65h. BCD-преобразованные значения хранятся парами байт в ячейках памяти 66h-6Bh. Каждые 3 секунды значения обновляются. Циклы сканирования и преобразования реализованы с помощью косвенной адресации.