МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ЗВІТ ДО ЛАБОРАТОРНОЇ РОБОТИ № 5 З КУРСУ “МІКРОПРОЦЕСОРНІ ПРИСТРОЇ” «Побудова модуля управління системи контролю доступу на AVR – мікро контролерах. Робота з інтерфейсами 1 – Wire, IC, SPI»
Мета роботи: ознайомитись з принципами побудови модулів управління системи контролю доступу. Вивчити правила обміну інформацією через інтерфейси 1 – Wire, IC, SPI та ознайомитися з їх програмною реалізацією для AVR – мікроконтролерів на мові С в середовищі Code VISION AVR Завдання : 1. Створити проект в Code VISION AVR, ввести свою програму, провести її компіляцію. 2. відкрити файл LR_5.dsn в програмі Proteus, внести у схему відповідно до свого індивідуального завдання, підключити до МК отриманий в Code VISION AVR hex – файл. 3. запустити режим симуляції схеми та перевірити правильність функціонування модуля управління СКД у всіх режимах роботи: очікування, пред’явлення зареєстрованого ключа, пред’явлення незареєстрованого ключа, натискання кнопки виходу. № Кількість запитів N Кількість зареєстрованих ключів Час відкриття дверей t, сек Формат реєстраційного запису Початкова дата та час
2 40 3 5 Номер ключа, число, година, тип події (вхід/вихід) 02.02.09 13:15:27
Текст програми у Code VISION AVR // Блок управління системи контролю доступу на МК АТ90S2313 з iButton DS1990, I2C-RTC DS1307 та SPI-EEPROM 25LC256 (32Kx8) // 20.05.2009 р. // Тактова частота МК 7.3728 МГц //////////////////////////////////////////////////////////////////////////////////// // Порт для підключення iButton DS1990 #asm .equ __w1_port = 0x18 .equ __w1_bit = 5 #endasm //////////////////////////////////////////////////////////////////////////////////// // Порт для підключення I2C-RTC DS1307 #asm .equ __i2c_port = 0x18 .equ __scl_bit = 2 .equ __sda_bit = 1 #endasm //////////////////////////////////////////////////////////////////////////////////// #include <90S2313.h> #include <1wire.h> #include <i2c.h> #include <delay.h> //////////////////////////////////////////////////////////////////////////////////// // Оголошення типу даних - байт typedef unsigned char byte; //////////////////////////////////////////////////////////////////////////////////// // Структура дати і часу typedef struct { byte Second; byte Minute; byte Hour; byte Day; byte Date; byte Month; byte Year; } DS1307_Data; //////////////////////////////////////////////////////////////////////////////////// // Глобальні змінні // Оголошення змінної для збереження поточного часу і дати DS1307_Data DS1307_1; // Оголошення змінної для збереження ідентифікаційного номера iButton DS1990A byte ROM_Code[9]; //////////////////////////////////////////////////////////////////////////////////// //******************************************************************// // Виводи SPI-EEPROM 25LC256 #define PORT_EEPROM PORTD #define DDR_EEPROM DDRD #define PIN_EEPROM PIND #define CS 3 #define SCK 4 #define SI 5 #define SO 6 //******************************************************************// // Виводи I2C-RTC DS1307 #define PORT_RTC PORTB #define DDR_RTC DDRB #define PIN_RTC PINB #define SDA 1 #define SCL 2 //******************************************************************// // Виводи iButton DS1990A #define PORT_iButton PORTB #define DDR_iButton DDRB #define PIN_iButton PINB #define Data_iButton 5 //******************************************************************// // Виводи електронного замка #define PORT_Switch PORTB #define DDR_Switch DDRB #define PIN_Switch PINB #define Switch 7 //******************************************************************// // Виводи світлодіоду #define PORT_Led PORTB #define DDR_Led DDRB #define PIN_Led PINB #define Led 6 //******************************************************************// // Виводи кнопки виходу #define PORT_Out_Key PORTD #define DDR_Out_Key DDRD #define PIN_Out_Key PIND #define Out_Key 2 //******************************************************************// // Коди команд EEPROM 25LC256 #define EEPROM_READ 0x03 #define EEPROM_WRITE 0x02 #define EEPROM_WRDI 0x04 #define EEPROM_WREN 0x06 #define EEPROM_RDSR 0x05 #define EEPROM_WRSR 0x01 //******************************************************************// // Коди команд iButton DS1990 #define SEARCH_ROM 0xF0 //******************************************************************// // Адреса сімейства iButton #define DS1990_FAMILY_CODE 0x01 //******************************************************************// // Кількість подій в системі #define N_Record 55 //******************************************************************// // Розмір одного запису в байтах #define Record_Size 16 //******************************************************************// // Адреса початку записів в EEPROM 25LC256 #define Record_Addr 0x40 //******************************************************************// // Адреса лічильника записів в EEPROM #define Record_Count_Addr 0x30 //******************************************************************// // Час відкривання дверей в мілісекундах #define T_msec 5000 //******************************************************************// // Кількість зареєстрованих ключів #define N_Key 3 //******************************************************************// // Тип запису #define Input_Record 0 #define Output_Record 1 //******************************************************************// // E8C52A // 3D2C90 /*----------------------------------------------------------------*/ // Підпрограма обслуговування зовнішнього переривання по виводу INT0 interrupt [2] void ext_interrupt0(void); /*----------------------------------------------------------------*/ void Pin_Init(void); // Функції нижнього рівня роботи з РКД void DS1307_Init(void); void DS1307_Read(DS1307_Data* arg1); void DS1307_Write(DS1307_Data* arg1); byte SPI_Send_Byte(byte data); void SPI_Send_CMD1(byte cmd); byte SPI_Read_SR(void); byte SPI_Read_Data(int address, byte* buffer, byte n); byte SPI_Write_Data(int address, byte* buffer, byte n);
Висновок на даній лабораторній роботі я ознайомилася з принципами побудови модулів управління систем контролю доступу , вивчила правила обміну інформацією через інтерфейси 1 – Wire, IC, SPI та ознайомилася з їх програмною реалізацією для AVR – мікроконтролерів на мові С в середовищі Code VISION AVR