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

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

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

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

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Мікропроцесори в системах технічного захисту інформації

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра «Захист інформації» / Звіт до лабораторної роботи № 3 на тему: «Побудова інфрачервоних детекторів руху на AVR-мікроконтролерах» з курсу «Мікропроцесори в системах технічного захисту інформації» Львів – 2016 Мета роботи: ознайомитись з будовою та принципом дії інфрачервоних детек-торів руху і їх програмно-апаратною реалізацією на AVR-мікроконтролерах. 1. Завдання: Підготувати програму згідно індивідуального завдання у Табл. 1. Створити проект в AVR Studio, ввести свою програму, провести її асемблювання. В режимі покрокової відладки переконатися в правильності роботи програми, перевірити дотримання заданих в завдані часових параметрів. Відкрити файл LR_2.dsn в програмі Proteus, внести зміни у схемі відповідно до свого індивідуального завдання, підключити до МК отриманий в AVR Studio hex-файл. Запустити режим симуляції схеми та перевірити правильність функціонування охоронної системи у всіх режимах роботи: відсутність спрацювання, спрацювання аналогового давача, спрацювання цифрового давача. № Тактова частота МК, МГц Період опитування АЦП ,с Максимальний рівень шуму, мкВ Час встановлення PIR-давача Tset, с  Час включення світлодіода TAlarm, с  Вивід МК для підключен-ня світлодіода  Виводи МК для підключення АЦП  18 6 0,18 250 8 1.5 PD2 PB4,5,6,7   2. Результат виконання роботи: Код програми: #include <90S2313.h> #include <delay.h> #include <sleep.h> #include <stdint.h> //Виводи для підключення елементів схеми // АЦП #define CS 6 //PD5 #define SCLK 5 //PD4 #define DOUT 7 //PD6 #define SHDN 4 #define PORT_ADC PORTB #define DDR_ADC DDRB #define PIN_ADC PINB // Підключення світлодіода #define PORT_LED PORTD #define DDR_LED DDRD #define PIN_LED PIND #define LED 2 // Період мигання світлодіоду в режимі порівняння DIV = 64 #define N 16874 // N = (FT * TADC / DIV) - 1 // Верхній поріг #define VTR_H 2442 // VTR_H = (2.981 * 4096)/5 // Нижній поріг #define VTR_L 1654 // VTR_L = (2.019 * 4096)/5 // Результат аналогово-цифрового перетворення int16_t Result_ADC = 0; // Вектор переривання від таймера Т1 в режимі "Порівняння" interrupt [TIM1_COMP] void T1_COMP_ISR(void); // П/п аналого-цифрового перетворення uint16_t ADC_Convert(void); void Pin_Init( void ); void T1_Init( void ); void System_Init(void ); void Run( void ); //Початок програми void main(void) { System_Init(); Run(); } // П/п обробки переривання від таймера Т1 в режимі порівняння interrupt [TIM1_COMP] void T1_COMP_ISR(void) { Result_ADC = ADC_Convert(); if (( Result_ADC > VTR_H) || ( Result_ADC < VTR_L)) { PORT_LED.LED = 0; TCCR1B = 0; TCNT1 = 0; delay_ms(1500); PORT_LED.LED = 1; TCCR1B = (1<<CS11)| (1<<CS10) | (1<<CTC1); } } // П/п аналого-цифрового перетворення для МАХ1241 uint16_t ADC_Convert(void) { uint8_t j; uint16_t temp=2048; PORT_ADC.SHDN = 1; delay_us(10); Result_ADC = 0; PORT_ADC.CS=0; #asm ("nop") #asm ("nop") #asm ("nop") while(PIN_ADC.DOUT==0){}; for (j=0; j<12; j++) { PORT_ADC.SCLK =1; #asm ("nop") #asm ("nop") #asm ("nop") PORT_ADC.SCLK =0; #asm ("nop") #asm ("nop") #asm ("nop") if (PIN_ADC.DOUT ==1) { Result_ADC = Result_ADC + temp; } temp = temp>>1; } PORT_ADC.CS=1; return Result_ADC; } void Pin_Init( void ) { //Ініціалізація виводів // DOUT - вхід, #CS, SCLK, #SHDN - виходи PORT_ADC.CS = 1; DDR_ADC.CS = 1; DDR_ADC.SCLK = 1; PORT_ADC.SCLK = 0; DDR_ADC.SHDN = 1; PORT_ADC.SHDN = 1; DDR_ADC.DOUT = 0; PORT_LED.LED = 1; DDR_LED.LED = 1; } void T1_Init( void ) { // Занести в регістр порівняння таймера Т1 розраховану константу T_300ms OCR1 = N; // Дозволити переривання від таймера Т1 в режимі порівняння TIMSK = (1<<OCIE1A); // Запустити таймер Т1, задати DIV=64, скидання TCNT1 в ноль при співпадінні TCCR1B = (1<<CS11)| (1<<CS10) | (1<<CTC1); } void System_Init(void ) { Pin_Init( ); //Затримка 8 секунд для встановлення PIR-давача delay_ms(8000); sleep_enable(); T1_Init(); //Дозвіл переривань #asm("sei") } void Run( void ) { while(1) { idle(); } } Схема:
Антиботан аватар за замовчуванням

25.12.2016 01:12-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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