МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЗІ
Лабороторна робота №3
Побудова інфрачервоних детекторів руху
на AVR-мікроконтролерах
з курсу
"МІКРОПРОЦЕСОРНІ ПРИСТРОЇ"
Варіант № 27
Мета роботи: ознайомитись з будовою та принципом дії інфрачервоних детекторів руху і їх програмно-апаратною реалізацією на AVR-мікроконтролерах.
Завдання
Домашня підготовка до роботи
1. Вивчити теоретичний матеріал.
2. Вивчити основні властивості мікроконтролера AT90S2313, принципи побудови інфрачервоних детекторів руху необхідні для виконання лабораторної роботи.
3. Підготовити програму функціонування інфрачервоного детектора руху згідно індивідуального завдання в табл. 1.
Виконати в лабораторії
1. Створити проект в AVR Studio, ввести свою програму, провести її асемблювання.
2. В режимі покрокової відладки переконатися в правильності роботи програми, перевірити дотримання заданих в завданні часових параметрів та умов спрацювання.
3. Відкрити файл LR_3.dsn в програмі Proteus, внести зміни у схему відповідно до свого індивідуального завдання, підключити до МК отриманий в AVR Studio hex-файл та асемблерний файл.
4. Запустити режим симуляції схеми та перевірити правильність функціонування детектора руху у всіх режимах роботи.
табл.1
№ вар.
Тактова частота МК, МГц
Період опитування
АЦП TADC, с
Максимальний
рівень шуму, мкВ
Коефіцієнт підсилення аналогових кіл KU
Час встановлення
PIR-давача TSet, с
Час включення
світлодіода TAlarm, с
Вивід МК для підключення
світлодіода
Виводи МК
для підключення
АЦП
27
4
0,27
280
23
4
РВ4
PB0,1,2,3
Лістинг програми:
.nolist
.include "2313def.inc"
.list
.def temp=r16
.def ACP_res1=r17
.def ACP_res2=r18
.def cmp1=r19
.def cmp2=r20
.def Delay1=r21
.def Delay2=r22
.def Delay3=r23
.equ VTR_low=1961
.equ VTR_high=3038
.equ T_Delay=3199997;4 sec
.equ ACP_D=101
.equ TimerVal=215997 ;0.27 sec
.equ Setup=18399997 ; 23 sec
.equ nSHDN=PB0
.equ nCS=PB1
.equ SCLK=PB2
.equ DOUT=PB3
.equ Led=PB4
.cseg
.org 0
rjmp Main ; RESET interupt
.org 0x04
rjmp TIMER_EXT ; Timer1 overlow
;*************************************************
Main:
; Ініціалізація стеку
ldi temp, low(RAMEND)
out spl, temp
; налаштування виводів
sbi DDRB, nSHDN
cbi DDRB, DOUT
sbi DDRB,nCS
sbi DDRB, SCLK
sbi DDRB, Led
sbi PORTB, Led
; затримка на встановлення PIR давача
ldi Delay1, low(Setup)
ldi Delay2, high(Setup)
ldi Delay3, byte3(Setup)
rcall Delay
; налаштування таймера
; занести старший байт
ldi temp, high(TimerVal)
out OCR1AH, temp
; занести молодший
ldi temp, low(TimerVal)
out OCR1AL, temp
ldi temp, (1<<OCIE1A)
out TIMSK, temp
ldi temp, (1<<CTC1) + (1<<CS11)
out TCCR1B, temp
; енергозберігаючий режим
ldi temp, (1<<SE)
out MCUCR, temp
sei
wait:
sleep
rjmp wait
;****************************************************
TIMER_EXT:
ldi temp, high(TimerVal) ; задання кількості тактів
out TCNT1H, temp
ldi temp, low(TimerVal)
out TCNT1L, temp
; отримати дані з АЦП
rcall GetACP_Res
; порівняти отримані дані з нижнім рівнем сигналу
ldi cmp1, low(VTR_low)
ldi cmp2, high(VTR_low)
cp ACP_Res1, cmp1 ; порівняти молодші байти
cpc ACP_Res2, cmp2 ; порівняти старші байти і перенос
brcs Alarm ; значення менше за нижній поріг
; Порівняти з верхнім порогом
ldi cmp1, low(VTR_high)
ldi cmp2, high(VTR_high)
cp cmp1, ACP_Res1 ; порівняти молодші байти
cpc cmp2, ACP_Res2 ; порівняти старші байти і перенос
brcs Alarm ; значення менше за нижній поріг
; значення є в допустимих межах - виходимо
reti
Alarm:
cbi PORTB, Led ; вмикаємо світлодіод
; завантажуємо затримку світіння світлодіода
ldi Delay1, low(T_Delay)
ldi Delay2, high(T_Delay)
ldi Delay3, byte3(T_Delay)
rcall Delay ; затримка
; вимакаємо світлодіод
sbi PORTB, Led
reti
;******************************************************
GetACP_Res:
sbi PORTB, nCS ; ініціалізуємо вихід
sbi PORTB, nSHDN ; вмикаємо АЦП
; необхідно зачекати 10 мс до початку перетворення
ldi Delay1, low(ACP_D)
ldi Delay2, high(ACP_D)
ldi Delay3, byte3(ACP_D)
rcall Delay ; очікуємо
cbi PORTB, SCLK ; ініціалізація ацп
cbi PORTB, nCS ; початок перетворення
acp_wait:
sbis PINB, DOUT; очікуємо на одиницю на виході DOUT
rjmp acp_wait
; зчитуємо результат
clr ACP_res1 ; очищаємо регістри результату
clr ACP_res2
ldi temp, 12 ; кількість ітерацій
acp_read:
sbi PORTB, SCLK
cbi PORTB, SCLK ; формуємо один тактовий імпульс
clc ; флажок переносу в 0
rol ACP_res1 ; зсуваємо на 1
rol ACP_res2
sbic PINB, DOUT ; пропускаємо інструкцію якщо вхід в 0
ori ACP_res1, 1
dec temp
brne acp_read
; читання успішно завершено
cbi PORTB, nSHDN ; вимикаємо АЦП
ret
;*************************************************
Delay:
subi Delay1, 1
sbci Delay2, 0
sbci Delay3, 0
brcc Delay
nop
ret
;*************************************************
Розрахунки часових затримок:
0,27*4*=1,08 МГц
5(N+1)+9=1,08
N=215997
Setup: 23*4=92 МГц
N=18399997
T_Delay: 4*4=16 МГц
N=3199997
280*1924=538.72 мВ
VTR_low=2.5-0.53872=1.96128
VTR_high=2.5+0.53872=3.0387
1.9-1.15 В – рівень спрацювання піродавача
Схема симуляції в Proteus
Висновок: на даній лабораторній роботі я ознайомилася з будовою та принципом дії інфрачервоних детекторів руху і їх програмно-апаратною реалізацією на AVR-мікроконтролерах. Під час виконання роботи була побудована схема функціонування системи сигналізації на основі мікроконтролера моделі AT90S2313 та піродавача.