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

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних технологій, автоматики та метрології
Факультет:
Не вказано
Кафедра:
Захист інформації

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" ІНСТИТУТ КОМП’ЮТЕРНИХ ТЕХНОЛОГІЙ, АВТОМАТИКИ ТА МЕТРОЛОГІЇ КАФЕДРА ”ЗАХИСТ ІНФОРМАЦІЇ”  Звіт до лабораторної роботи № 3 з курсу: "Мікропроцесори в системах технічного захисту інформації" на тему: “Побудова інфрачервоних детекторів руху на AVR-мікроконтролерах” Варіант – 17 Мета роботи: Ознайомитись з будовою та принципом дії інфрачервоних детекторів руху і їх програмно-апаратною реалізацією на AVR-мікроконтролерах. Повний текст завдання: Домашня підготовка до роботи: Вивчити теоретичний матеріал. Вивчити основні властивості МК, принципи побудови інфрачервоних детекторів руху необхідні для виконання лабораторної роботи. Підготувати програму функціонування інфрачервоного детектора руху згідно індивідуального завдання у табл. 1. Коефіцієнт підсилення аналогових кіл прийняти рівним 1924. Виконання в лабораторії: Створити проект в AVR Studio, ввести свою програму, провести її асемблювання. В режимі покрокової відладки переконатися в правильності роботи програми. Відкрити файл LR_3.dsn в програмі Proteus, внести зміни у схему відповідно до свого індивідуального завдання, підключити до МК отриманий в AVR Studio hex-файл. Запустити режим симуляції схеми та перевірити правильність функціонування детектора у всіх режимах роботи. Табл. 1. № Тактова частота, МГц Період опитування АЦП Tadc, с Максимальний рівень шуму, мкВ Час встановлення PIR-давача Tset, с Час включення світлодіода Talarm, с Вивід МК для підключення світлодіода Виводи МК для підключення АЦП  17 10 0,17 320 32 35 PD1 PD2,3,4,5   Лістинг програми одержаної в AVR Studio та необхідні розрахунки: .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 = PD4 ;PB6 .equ SCLK = PD3 ;PB5 .equ DOUT = PD5 ;PB7 .equ SHDN = PD2 ;PB4 .equ PORT_ADC = PORTD .equ DDR_ADC = DDRD .equ PIN_ADC = PIND ; Світлодіод .equ Led = PD1 .equ PORT_Led = PORTD .equ DDR_Led = DDRD .equ PIN_Led = PIND ;////////////////////////////////////////////////////////////////////////// ;///////////////////////////////Константи////////////////////////////////// ; Верхній поріг .equ VTR_P = 2552 ; VTR = (3.11568 * 4096)/5 ; Нижній поріг .equ VTR_N = 1543 ; VTR = (1.88432 * 4096)/5 ; Константа для задання періоду опитування АЦП таймером Т1 в режимі порівняння (DIV=64) .equ T_300ms = 26562 - 1 ; N = (FT * TADC / DIV) - 1 ; Константи для підпрограми часової затримки .equ T_4s = (10000000*4 - 15)/5 .equ T_3s = (10000000*3 - 15)/5 ;////////////////////////////////////////////////////////////////////////// ;///////////////////////////////Оголошення макросів//////////////////////// ; Макрос зчитування одного біту з АЦП МАХ1241 .MACRO BIT_READ sbi PORT_ADC, SCLK ; Сформувати передній фронт таткового імпульсу __| nop nop nop nop ; Затримка cbi PORT_ADC, SCLK ; Сформува задній фронт тактового імпульсу nop nop nop 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 ;ldi temp1, (1<<Led) ;out PORT_Led, temp1 ;out DDR_Led, temp1 sbi PORT_Led, Led sbi DDR_Led, Led ; Затримка 32 секунди для встановлення PIR-давача (8 * 4 сек) ;ldi temp1, 8 ; Лічильник 4 секундних затримок Next_1: ; Задати затримку 4 сек ldi Delay1, low(T_4s) ldi Delay2, high(T_4s) ldi Delay3, byte3(T_4s) ; Виклик підпрограми часової затримки (4 сек) rcall Delay ;dec temp1 ; Зменшити лічильник на 1 ;brne Next_1 ; Якщо лічильник не нуль, перейти на мітку Next_1 ; Дозвіл переходу в режим пониженого енергоспож-ня (SЕ=1), встановити режим Idle (SM=0) ldi temp1, (1<<SE) out MCUCR, temp1 ; Занести в регістр порівняння таймера Т1 розраховану константу T_300ms ldi temp1, high(T_300ms) out OCR1AH, temp1 ; Спочатку занести старший байт ldi temp1, low(T_300ms) 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 PORT_LED, LED ; Виключити світлодіод rjmp End ; Перейти на мітку End ; Якщо виявлено порушника Alarm: clr temp1 ; temp1 = 0 out TCCR1B, temp1 ; Зупинити таймер Т1 ; Затримка на час включення світлодіоду 3 сек ldi Delay1, low(T_3s) ldi Delay2, high(T_3s) ldi Delay3, byte3(T_3s) cbi PORT_LED, LED ; Включити світлодіод rcall Delay ; Почекати 3 сек sbi PORT_LED, 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 Wait_4us Wait_4us Wait_4us Wait_4us Wait_4us Wait_4us ; Очистити регістри результату clr result_h clr result_l ; Почати перетворення - подати на лінію #CS логічний 0 cbi PORT_ADC, CS nop nop 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 PORT_ADC, 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 ; Вихід з підпрограми ;********************************************************************* Схема симуляції в Proteus:  Висновок: Виконавши лабораторну роботу ми ознайомились з принципами роботи інфрачервоних детекторів руху і їх реалізацією на AVR-мікроконтролерах. Розширили навики створення та відладки програмно-апаратних засобів на основі мікроконтролерів сімейства AVR у програмах AVR Studio та Proteus 7. Також виконуючи дану роботу ми ознайомились з принципами оцифровування аналогових сигналів, та роботою аналогово-цифрових перетворювачів на прикладі АЦП MAX 1241, та управління роботою програми за допомогою внутрішніх таймерів-лічильників, що використовуються для лічби, порівняння та ін.
Антиботан аватар за замовчуванням

12.02.2013 22:02-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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