Побудова інфрачервоних детекторів руху на AVR-мікроконтролерах

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
ЗІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Захист інформації

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» ІКТА кафедра ЗІ / З В І Т до лабораторної роботи №3 з навчальної дисципліни: «Мікропроцесори в системах технічного захисту інформації» на тему: «Побудова інфрачервоних детекторів руху на AVR-мікроконтролерах» ВАРІАНТ - 9 Мета роботи - ознайомитись з побудовою та принципом дії інфрачервоних детекторів руху і їх апаратно-програмною реалізацією на AVR - мікроконтролерах. ЗАВДАННЯ 1. Домашня підготовка до роботи Вивчити теоретичний матеріал. Вивчити основні властивості мікроконтролера AT90S2313. принципи побудови інфрачервоних детекторів руху необхідні для виконання лабораторної роботи. Підготовити програму функціонування інфрачервоного детектора руху згідно індивідуального завдання у таблиці 1. Коефіцієнт підсилення аналогових кіл прийняти рівним 1924. Таблиця 1 № Тактова частота МК, МГц Період опитування АЦП TADC, с Максимальний рівень шуму, мкВ Час встановлення RIP – давача TSet, с Час включення світлодіода TAlarm, с Вивід МК для підключення світлодіода Виврди МК для підключення АЦП  9 1 0,15 230 6 2 PB7 PB1,2,3,4   2. Виконати в лабораторії Створити проект в AVR Studio . Переконатися в правильності роботи програми, перевірити дотримання заданих в завданні часових параметрів та умов спрацювання. Відкрити файл LR_3.dsn у програмі Proteus, внести зміни у схему відповідно до свого індивідуального завдання, підключити до МК отриманий після компіляції в AVR Studio hex-файл та асемблерний файл. Запустити режим симуляції схеми та перевірити правильність функціонування детектора руху у всіх режимах роботи. РОЗРАХУНОК МЕЖ РОБОТИ ДЕТЕКТОРА РУХУ VTriger = VNoise * KU = 270 мкВ * 1924 = 443 мВ VTR- = VOffset - VTriger = 2,5 – 0, 443 = 2.057 В VTR- = VOffset + VTriger = 2,5 + 0, 443 = 2.943В ЛІСТИНГ ПРОГРАМИ ; ******************************************* ; Автор: Міськів А.В. * ; Дата: 23.11.2013 * ; Версія: 1.0 * ; Ім'я файлу: LR_3.asm * ; Тип МК: AT90S2313 * ; Тактова частота: 1 MГц * ; ******************************************* ;////////////////////////////////////////////////////////////////////////// .nolist .include "2313def.inc" .list ;////// ////Регістри для зберігання змінних///////////////// .def result_h = r16 ; Розряди D11-D8 поточного результату АЦП .def result_l = r17 ; Розряди D7-D0 поточного результату АЦП .def temp1 = r18 ; Проміжні результати .def temp2 = r19 ; Проміжні результати ; Регістри часової затримки .def Delay1 = r21 .def Delay2 = r22 .def Delay3 = r23 ;//////////////////Виводи для підключення елементів схеми////////////////// ; АЦП .equ #CS = PB1 .equ SCLK = PB2 .equ DOUT = PB3 .equ #SHDN = PB4 .equ Led = PB7 .equ PORT_ADC = PORTB .equ DDR_ADC = DDRB .equ PIN_ADC = PINB ; Світлодіод ;///////////////////////////////Константи///////////////////// ; Верхній поріг .equ VTR_P = 2411 ; VTR = (2.943 * 4096)/5 ; Нижній поріг .equ VTR_N = 1685 ; VTR = (2.057 * 4096)/5 ; Константа для задання періоду опитування АЦП таймером Т1 в режимі порівняння (DIV=64) .equ T_150ms = 2343 - 1 ; N = (FT * TADC / DIV) - 1 ; Константи для підпрограми часової затримки .equ T_6s = (1000000*6 - 15)/5 .equ T_2s = (1000000*2 - 15)/5 ;/////////////// /Оголошення макросів//////////////////////// ; Макрос зчитування одного біту з АЦП МАХ1241 .MACRO BIT_READ sbi PORTB, SCLK ; Сформувати передній фронт тактового імпульсу nop ; Затримка cbi PORTB, SCLK ; Сформува задній фронт тактового імпульсу nop ; Затримка для встановлення біту на лінії DOUT in temp1, PIN_ADC ; Прочитати сигнали з виводів АЦП sbrc temp1, DOUT ; Якщо DOUT = 1 ori @0, @1 ; Занести 1 (параметр @1) у відповідний розряд регістра .ENDMACRO ; Макрос затримки на 10 мкс .MACRO Wait_4us rjmp PC+1 rjmp PC+1 rjmp PC+1 rjmp PC+1 rjmp PC+1 rjmp PC+1 rjmp PC+1 rjmp PC+1 .ENDMACRO ;///////////////////////////////////////////////////////////// .listmac .cseg .org 0 rjmp RESET ; Вектор скиду .org 0x04 rjmp TIM_COMP1 ; Вектор переривання від таймера Т1 в режимі "Порівняння" .org 0x0B RESET: ; Основна програма ; Ініціалізація стеку ldi temp1, low(RAMEND) out SPL, temp1 ldi temp1, (1<<#CS) out PORT_ADC, temp1 ; DOUT - вхід, #CS, DCLK, #SHDN - виходи ldi temp1, (1<<#CS) | (1<<SCLK) | (1<<#SHDN) | (1<<Led) out DDR_ADC, temp1 Next_1: ; Задати затримку 6 сек ldi Delay1, low(T_6s) ldi Delay2, high(T_6s) ldi Delay3, byte3(T_6s) ; Виклик підпрограми часової затримки (6 сек) rcall Delay ; Дозвіл переходу в режим пониженого енергоспож-ня (SЕ=1), встановити режим Idle (SM=0) ldi temp1, (1<<SE) out MCUCR, temp1 ; Занести в регістр порівняння таймера Т1 розраховану константу T_150ms ldi temp1, high(T_150ms) out OCR1AH, temp1 ; Спочатку занести старший байт ldi temp1, low(T_150ms) out OCR1AL, temp1 ; Потім молодший байт ; Дозволити переривання від таймера Т1 в режимі порівняння ldi temp1, (1<<OCIE1A) out TIMSK, temp1 ; Запустити таймер Т1, задати DIV=64, скидання TCNT1 в ноль при співпадінні ldi temp1, (1<<CTC1) | (1<<CS11) | (1<<CS10) out TCCR1B, temp1 ; Дозволити переривання sei Wait_Loop: sleep ; Перейти в режим пониженого енергоспоживання rjmp Wait_Loop ; Після пробудження від Т1, знову перейти в режим сну ;************************************************************* TIM_COMP1: ; П/п обробки переривання від таймера Т1 в режимі порівняння ; Викликати п/п аналого-цифрового перетворення rcall ADC_CONV ; Обчислити |VTR+ - RESULT| ; Занести в temp2-temp1 значення верхнього порога ldi temp1, low(VTR_P) ldi temp2, high(VTR_P) ; Відняти від верхнього порога поточне значення АЦП (VTR+ - RESULT) sub temp1, result_l sbc temp2, result_h ; Якщо результат < 0, то сигнал АЦП перевищив верхній поріг і треба включити тривогу brlo Alarm ; Якщо VTR_P < RESULT перейти на мітку Alarm ; Якщо сигнал АЦП < VTR+ треба перевірити чи він не виходить за межі нижнього порогу ; Обчислити |VTR- - RESULT| ; Занести в temp2-temp1 значення нижнього порогу ldi temp1, low(VTR_N) ldi temp2, high(VTR_N) ; Відняти від нижнього порогу поточне значення АЦП (VTR- - RESULT) sub temp1, result_l sbc temp2, result_h ; Якщо результат >= 0, то сигнал АЦП менший нижнього порогу і треба включити тривогу brsh Alarm ; Якщо VTR_N > RESULT перейти на мітку Alarm ; Якщо сигнал не вийшов за межі порогів - виключити світлодіод і перейти в кінець п/п LL1: sbi PORTB, LED ; Виключити світлодіод rjmp End ; Перейти на мітку End ; Якщо виявлено порушника Alarm: clr temp1 ; temp1 = 0 out TCCR1B, temp1 ; Зупинити таймер Т1 ; Затримка на час включення світлодіоду 2 сек ldi Delay1, low(T_2s) ldi Delay2, high(T_2s) ldi Delay3, byte3(T_2s) cbi PORTB, LED ; Включити світлодіод rcall Delay ; Почекати 2 сек sbi PORTB, LED ; Виключити світлодіод ; Включити таймер Т1 з попередніми параметрами ldi temp1, (1<<CTC1) | (1<<CS11) | (1<<CS10) out TCCR1B, temp1 End: reti ; Вихід з п/п обслуговування переривання ;************************************************************* ADC_CONV: ; П/п аналого-цифрового перетворення для МАХ1241 ; Вивести АЦП з режиму ShutDown (#SHDN = 1) sbi PORT_ADC, #SHDN ; Почекати > 10 мкс, поки АЦП перейде в робочий режим Wait_4us Wait_4us Wait_4us ; Очистити регістри результату clr result_h clr result_l ; Почати перетворення - подати на лінію #CS логічний 0 cbi PORT_ADC, #CS nop ; Затримка для встановлення сигналу на лінії DOUT ; Чекати завершення перетворення - поки лінія DOUT не стане рівна 1 EOC: sbis PIN_ADC, DOUT ; Пропустити наступну команду, якщо DOUT = 1 rjmp EOC ; Якщо DOUT = 0 - продовжити чекати ; Зчитати результат перетворення ; Старші 4 біти результату - в регістр result_h BIT_READ result_h, 0b00001000 ; Розряд D11 BIT_READ result_h, 0b00000100 ; Розряд D10 BIT_READ result_h, 0b00000010 ; Розряд D9 BIT_READ result_h, 0b00000001 ; Розряд D8 ; Молодші 8 біт результату - в регістр result_l BIT_READ result_l, 0b10000000 ; Розряд D7 BIT_READ result_l, 0b01000000 ; Розряд D6 BIT_READ result_l, 0b00100000 ; Розряд D5 BIT_READ result_l, 0b00010000 ; Розряд D4 BIT_READ result_l, 0b00001000 ; Розряд D3 BIT_READ result_l, 0b00000100 ; Розряд D2 BIT_READ result_l, 0b00000010 ; Розряд D1 BIT_READ result_l, 0b00000001 ; Розряд D0 ; Завершити перетворення (лінія #CS = 1) sbi PORTB, #CS ; Перевести АЦП в режим ShutDown (лінія # SHDN = 0) cbi PORT_ADC, #SHDN ret ; Вихід з підпрограми ;************************************************************* Delay: ; Підпрограма часової затримки subi Delay1, 1 ; Зменшити регістри Delay3-Delay2-Delay1 на 1 sbci Delay2, 0 sbci Delay3, 0 brcc Delay ; Поки результат >= 0 продовжити віднімати 1 nop ; Затримка на 1 такт ret ; Вихід з підпрограми ;************************************************************* 3. РЕЗУЛЬТАТ ВИКОНАННЯ ПРОГРАМИ 1. Результат правильності асемблювання програми у AVR Studio. 2. Схема симуляції в Proteus згідно з даним варіантом. / ВИСНОВОК Під час виконання даної лабораторної роботи була розроблена програма функціонування інфрачервоного детектора руху, час встановлення RIP – давача 6 с. Якщо напруга на виході Analog_Out буде більшою за встановлені межі (2.057 - 2.943 В) тоді включатиметься звукова чи світлова сигналізація.
Антиботан аватар за замовчуванням

22.01.2014 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!