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

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

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

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

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» / Звіт до лабораторної роботи № 3 Побудова інфрачервоних детекторів руху на AVR - мікроконтролерах з навчальної дисципліни: “ Технології програмування ” Варіант № 22 Львів – 2012 Мета роботи - ознайомитись з побудовою та принципом дії інфрачервоних детекторів руху і їх апаратно-програмною реалізацією на AVR - мікроконтролерах. Завдання 1. Домашня підготовка до роботи Вивчити теоретичний матеріал. Вивчити основні властивості мікроконтролера AT90S2313. принципи побудови інфрачервоних детекторів руху необхідні для виконання лабораторної роботи. Підготовити програму функціонування інфрачервоного детектора руху на мові С згідно індивідуального завдання у таблиці 1. Коефіцієнт підсилення аналогових кіл прийняти рівним 1924. Таблиця 1 № Тактова частота МК, МГц Період опитування АЦП TADC, с Максимальний рівень шуму, мкВ Час встановлення RIP – давача TSet, с Час включення світлодіода TAlarm, с Вивід МК для підключення світлодіода Виврди МК для підключення АЦП  22 7 0,22 350 28 1,5 PD6 PB2,3,4,5   2. Виконати в лабораторії Створити проект в CodeVisionAVR C Compiler, ввести свою програму на мові С, провести її компіляцію. Переконатися в правильності роботи програми, перевірити дотримання заданих в завданні часових параметрів та умов спрацювання. Відкрити файл LR_3.dsn у програмі Proteus, внести зміни у схему відповідно до свого індивідуального завдання, підключити до МК отриманий після компіляції в CodeVisionAVR C Compiler hex-файл та асемблерний файл. Запустити режим симуляції схеми та перевірити правильність функціонування детектора руху у всіх режимах роботи. Розрахунок меж роботи детектора руху VTriger = VNoise * KU = 350 мкВ * 1924 = 6734 мВ VTR- = VOffset - VTriger = 2,5 – 0,6734 = 1,8266 В VTR- = VOffset + VTriger = 2,5 + 0,6734 = 3,1734 В Лістинг програми #include <90S2313.h> #include <delay.h> #include <sleep.h> #include <math.h> #include <stdio.h> //Виводи для підключення елементів схеми // АЦП #define CS 4 //PB4 #define SCLK 3 //PB3 #define DOUT 5 //PB5 #define SHDN 2 //PB2 #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 6 // Період мигання світлодіоду в режимі порівняння DIV = 64 #define T_300ms 24062 // Верхній поріг #define VTR_P 2600 // Нижній поріг #define VTR_N 1496 // Регістр управління TCCR1A таймера Т1 #define COM1A1 7 #define COM1A0 6 // Регістр управління TCCR1B таймера Т1 #define CTC1 3 #define CS12 2 #define CS11 1 #define CS10 0 // Регістр дозволу переривань від таймерів TIMSK #define TOIE1 7 #define OCIE1A 6 #define TOIE0 1 typedef unsigned char uint8_t; typedef unsigned int uint16_t; typedef unsigned long int uint32_t; // Результат аналогово-цифрового перетворення uint16_t result_ADC = 0; uint16_t rez = 0; // Вектор переривання від таймера Т1 в режимі "Порівняння" interrupt [4] void TIM_COMP1(void); // Функція зчитування void BIT_READ(uint16_t one); // П/п аналого-цифрового перетворення void ADC_CONV(void); // void Alarm(void); //Початок програми void main(void) { //Ініціалізація виводів // DOUT - вхід, #CS, SCLK, #SHDN - виходи PORT_ADC.CS = 1; DDR_ADC.CS = 1; DDR_ADC.SCLK = 1; DDR_ADC.SHDN = 1; DDR_ADC.DOUT = 0; PORT_LED.LED = 1; DDR_LED.LED = 1; //Затримка 28 секунд для встановлення PIR-давача delay_ms(3); // Занести в регістр порівняння таймера Т1 розраховану константу T_300ms OCR1 = T_300ms; // Дозволити переривання від таймера Т1 в режимі порівняння TIMSK = (1<<OCIE1A); // Запустити таймер Т1, задати DIV=64, скидання TCNT1 в ноль при співпадінні TCCR1B = (1<<CTC1) | (1<<CS11) | (1<<CS10); //Дозвіл переривань #asm("sei") sleep_enable(); while(1) { idle(); } }; // П/п обробки переривання від таймера Т1 в режимі порівняння interrupt [4] void TIM_COMP1(void) { // Викликати п/п аналого-цифрового перетворення ADC_CONV(); rez = VTR_P - result_ADC; if (rez > 0) { rez = VTR_N - result_ADC; if (rez >= 0) { Alarm(); } else { PORT_LED.LED = 1; } } else { Alarm(); } }; void Alarm(void) { TCCR1B = 0; delay_ms(1500); PORT_LED.LED = 0; delay_ms(1500); PORT_LED.LED = 1; // Запустити таймер Т1, задати DIV=64, скидання TCNT1 в ноль при співпадінні TCCR1B = (1<<CTC1) | (1<<CS11) | (1<<CS10); }; // П/п аналого-цифрового перетворення для МАХ1241 void ADC_CONV(void) { // Вивести АЦП з режиму ShutDown (#SHDN = 1) PORT_ADC.SHDN = 1; // Почекати > 10 мкс, поки АЦП перейде в робочий режим delay_us(12); // Очистити регістри результату result_ADC = 0x00; // Почати перетворення - подати на лінію #CS логічний 0 PORT_ADC.CS = 0; // Затримка для встановлення сигналу на лінії DOUT #asm("nop") // Чекати завершення перетворення - поки лінія DOUT не стане рівна 1 do {} while(PIN_ADC.DOUT == 0); // Якщо DOUT = 0 - продовжити чекати // Зчитати результат перетворення //Старші 4 біти результату BIT_READ( 0x800 ); //0b 00001000 00000000 // Розряд D11 BIT_READ( 0x400 ); //0b 00000100 00000000 // Розряд D10 BIT_READ( 0x200 ); //0b 00000010 00000000 // Розряд D9 BIT_READ( 0x100 ); //0b 00000001 00000000 // Розряд D8 //Молодші 8 біт результату BIT_READ( 0x080 ); //0b 00000000 10000000 // Розряд D7 BIT_READ( 0x040 ); //0b 00000000 01000000 // Розряд D6 BIT_READ( 0x020 ); //0b 00000000 00100000 // Розряд D5 BIT_READ( 0x010 ); //0b 00000000 00010000 // Розряд D4 BIT_READ( 0x008 ); //0b 00000000 00001000 // Розряд D3 BIT_READ( 0x004 ); //0b 00000000 00000100 // Розряд D2 BIT_READ( 0x002 ); //0b 00000000 00000010 // Розряд D1 BIT_READ( 0x001 ); //0b 00000000 00000001 // Розряд D0 // Завершити перетворення (лінія #CS = 1) PORT_ADC.CS = 1; // Перевести АЦП в режим ShutDown (лінія # SHDN = 0) PORT_ADC.SHDN = 0; }; // Функція зчитування void BIT_READ(uint16_t one) { uint8_t temp; // Сформувати передній фронт таткового імпульсу SCLK = 1 PORT_ADC.SCLK = 1; #asm("nop") #asm("nop") // Сформувати задній фронт тактового імпульсу SCLK = 0 PORT_ADC.SCLK = 0; #asm("nop") #asm("nop") temp = PIN_ADC; // Прочитати сигнали з виводів АЦП temp = (temp & (1<<DOUT)) && 1; if(temp == 1) // Якщо DOUT = 1 result_ADC |= one; // Занести 1 у відповідний розряд регістра }; Схема симуляції в Proteus / Висновок Під час виконання даної лабораторної роботи була розроблена програма функціонування інфрачервоного детектора руху на мові С, час встановлення RIP – давача 28 с. Якщо напруга на виході Analog_Out буде більшою за встановлені межі(1.8266 - 3.1734 В) тоді включатиметься звукова чи світлова сигналізація. За допомогою програми CodeVisionAVR C Compiler програма з мови С була пере компільована в мову assembler. Також для програми створена схема інфрачервоного детектора руху.
Антиботан аватар за замовчуванням

22.05.2013 18:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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