МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра «Захист інформації»
/
КУРСОВА РОБОТА
з дисципліни:
«Мікропроцесори в системах технічного захисту інформації»
на тему:
«Проектування та програмування мікроконтролерних пристроїв захисту інформації»
Варіант № 8
Завдання
Скласти електричну принципову схему і написати програму для функціонування вимірювальної частини технічної системи захисту інформації, структурна схема якої представлена на рис. 1.
/
Рис. 1. Структурна схема проектованої СТЗІ
Система здійснює оцифрування вхідного аналогового сигналу Vin з заданою частотою дискретизації Fd. Отримані дані шифруються за заданим алгоритмом і записуються в мікросхему енегронезалежної EEPROM – пам‘яті та передаються через інтерфейс RS232 з заданною швидкістю R.
Таблиця 1
Параметри типової СТЗІ
Варіант
Діапазон
вхідного
сигналу Vin, В
Частота
дискретизації
Fd, Гц
Алгоритм шифрування
Мікросхема EEPROM-пам‘яті
Швидкість передачі R, біт/сек
8
0 ... 0.01
8
TEA
24FC128(16384x
8 біт I2C Serial EEPROM)
19200
Зміст
1.Схема електрична принципова…………………………………………………………4
2.Розрахунок схеми…………………………………………………………………………5
3.Лістинг програми…………………………………………………………………………6
4.Результат симуляції в середовищі Proteus…………………………………………..11
5.Специфікація елементів схеми………………………………………………………...12
6.Висновок…………………………………………………………………………………….13
7.Список використаної літератури……………………………………………………..14
Схема електрична принципова
/
Рис.2. Схема електрична принципова
2. Розрахунок схеми
Джерелом струму є дві алкалайнові батареї . Отже для живлення нашої схеми доцільно використати мікросхему Step-Up стабілізатора LTC3525-5, спеціально призначену для живлення портативної апаратури від батарей та акумуляторів.
Розрахунок Step-Up стабілізатора LTC3525-5.
/
Рис. 3. Схема Step-Up стабілізатора LTC3525-5
На виході нашого стабілізатора ми отримуємо напругу Vout =5 В. На вхід стабілізатора подається напруга Vbat = 3 В.
Розрахунок кола підсилення, масштабування та фільтрації
Кола масштабування та підсилення повинні забезпечити, щоб діапазон вхідного сигналу АЦП відповідав діапазону перетворення АЦП. Коло фільтрації повинне забезпечити виконання умов теореми Котельникова та ослабити шуми і завади.
Діапазон перетворення АЦП становить 0 ... Vref, де Vref – опорна напруга. Я використав мікроконтроллера ATmega16 з вбудованим АЦП. Опорна напруга 5 В подається через вхід AVCC , отже діапазон перетворення АЦП 0 .. 5
Діапазон вхідного сигналу – 0 ... 0.01 В, отже нам перед передачею сигналу на АЦП необхідно його підсилити в 500 разів. Використовуємо підсилювач напруги на базі ОП (TLV2252IDR) з неінвертуючим включенням.
/
Рис. 3. Схема неінвертуючого включення операційного підсилювача
Коефіцієнт підсилення К = 1+ (R3/R2). Для К = 500, R3 = 499 кОм, R2 = 1 кОм.
Для виконання теореми Котельникова я використовую пасивний фільтр нижніх частот першого порядку. Частота дискретизації фільтра Fd = 2 * Fmax, Fd = 8 Гц , тоді Fmax = 4 Гц. Отже fзр = 4 Гц.
, R1 = 10 кОм, С1 = 3.9 мкФ.
3. Лістинг програми
Програма здійснює перетворення аналогового сигналу в цифровий, шифрування його за алгоритмом ТЕА і передачу через UART.
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <crypto.c>
#include <stdlib.h>
/* now you can include the I2C Functions */
#include <i2c.h>
#define FOSC 7372800 // Тактова частота
#define BAUD 19200 // Необхідна швидкість передачі USART
#define MYUBRR 23 // FOSC/16/BAUD-1
#define N_1 900 // Значення, записане в регістр порівняння OCR1A
// береться з формули N=Fosc/fd/1024
#define EEPROM_BUS_ADDRESS 0xa0// згідно datasheet
// Прототипи функцій.
void Init(void);
void eeprom_write(uint8_t* data);
void USART_Init(uint16_t);
uint16_t strt_addr=0;
uint16_t ADC_Data[4]; // масив для данних з АЦП
uint16_t Enc_Data[4]; //маств данних для шифрування
uint16_t Dcr_Data[4]; //масив даних для данних після шифрування
uint8_t Buffer_Full_flag=0;
uint8_t Sample_Cnt=0;
uint8_t Byte_Cnt;
uint8_t* Ptr_8bit = (uint8_t*)&Dcr_Data;//вказівник на адресу зашифрованих даних
// Переривання
interrupt [USART_DRE] void usart_int (void)
{
UDR = *Ptr_8bit++; // відправити шашифровані дані з масиву Dcr_Data через USART
Byte_Cnt++;
if( Byte_Cnt == 8 )
{
Byte_Cnt = 0;
Ptr_8bit = (uint8_t*)&Dcr_Data;
UCSRB = UCSRB&(~(1<<UDRIE));
}
}
// Підпрограма обробки переривання при співпадінні OCR1A і регістра лічби
interrupt [TIM1_COMPA] void timer1_ovf_isr(void)
{
ADCSRA|=(1<<ADSC); //Зробити одне ADC.
}
// Обробка по закінченню ADC
interrupt [ADC_INT] void adc_isr(void)
{
ADC_Data[Sample_Cnt++] = ADCW;
if(Sample_Cnt==4)
{
Buffer_Full_flag=1;
Enc_Data[0]= ADC_Data[0]; // 0x4344;
Enc_Data[1]= ADC_Data[1]; // 0x4142;
Enc_Data[2]= ADC_Data[2]; // 0x4748;
Enc_Data[3]= ADC_Data[3]; // 0x4546;
Sample_Cnt=0;
}
}
void main(void)
{
uint32_t key[4] = { 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f };
Init(); // Ініціалізація таймера1, i2c , uart і ADC.
#asm("sei") // Дозволити переривання в програмі.
while (1)
{
if( Buffer_Full_flag == 1 )
{
encrypt ((uint32_t*)Enc_Data, key); //виклик функції зашифрування
Dcr_Data[0]=Enc_Data[0];
Dcr_Data[1]=Enc_Data[1];
Dcr_Data[2]=Enc_Data[2];
Dcr_Data[3]=Enc_Data[3];
Buffer_Full_flag=0;
UCSRB = UCSRB|(1<<UDRIE);
eeprom_write((uint8_t*)Dcr_Data);
}
}
}
// Функції!!!
void Init (void) // Ініціалізація таймера т1 і ADC.
{
// ADC.
SFIOR=0x00; //тут нулі бо додаткові функції(такі як неінвертувальний
// аналогоаий компаратор)нам не потрібні !
ADMUX = (1<<MUX0)|(1<<REFS0);
ADCSRA=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
// Частота роботи ADC задалася ADPS2 і ADPS1 тобто FOSC\4 = 115.200 kHz,
// зовнішнє джерело опорної напруги на AREF, режим однократного запуску вимірювань .
USART_Init ( MYUBRR ); // Ініціалізація USART.
/* initialize the I2C bus */
i2c_init();
// Таймер T1.
// Занести в регістр порівняння таймера Т1 розраховану константу N
OCR1A = N_1;
// Запустити таймер Т1,задати DIV=1024, скидання TCNT1 в ноль при співпадінні
TCCR1B = (1<<WGM12) | (1<<CS11) | (1<<CS10);
// Дозволити переривання від таймера Т1 в режимі порівняння
TIMSK = (1<<OCIE1A);
}
void USART_Init(uint16_t ubrr) // Ініціалізація USART.
{
/* Set baud rate */
UBRRH = (uint8_t)(ubrr>>8);
UBRRL = (uint8_t)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
/* write a byte to the EEPROM */
void eeprom_write(uint8_t* data) {
uint8_t i;
for(i=0;i<8;i++)
{
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write((strt_addr>>8));
i2c_write((unsigned char)strt_addr);
i2c_write(data[i]);
i2c_stop();
/* 5 ms delay to complete the write operation */
delay_ms(5);
strt_addr++;
}
}
crypto.c
#include <stdint.h>
void encrypt (uint32_t* v, uint32_t* k) { //TEA
uint32_t v0=v[0], v1=v[1], sum=0, i; /* set up */
uint32_t delta=0x9e3779b9; /* a key schedule constant */
uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
for (i=0; i < 32; i++) { /* basic cycle start */
sum += delta;
v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
} /* end cycle */
v[0]=v0; v[1]=v1;
}
void decrypt (uint32_t* v, uint32_t* k) {
uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* set up */
uint32_t delta=0x9e3779b9; /* a key schedule constant */
uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];/* cache key */
for (i=0; i<32; i++) { /* basic cycle start */
v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
sum -= delta;
} /* end cycle */
v[0]=v0; v[1]=v1;
}
4. Результат симуляції в програмі Proteus
//
Рис. 4. Результат симуляції в програмі Proteus
5. Специфікація елементів схеми
Специфікація
№
К-ть
Позначення
Опис
Маркування
Виробник
Корпус
Номінал
Резистори
1
3
R1, R3, R4
SMD-резистор, 5%, 0.125 Вт
Any
Any
0805
10кОм
2
1
R2
SMD-резистор, 5%, 0.125 Вт
Any
Any
0805
2.2МОм
3
1
R6
SMD-резистор, 5%, 0.125 Вт
Any
Any
0805
1кОм
4
1
R5
SMD-резистор, 5%, 0.125 Вт
Any
Any
0805
499кОм
Конденсатори
5
1
С1
SMD-конденсатор, 10%, 16В
Any
Any
0805
3.9 мкФ
6
1
С2
SMD-конденсатор, 10%, 16В
Any
Any
0805
3.3мкФ
7
1
С3
SMD-конденсатор, 10%, 16В
Any
Any
0805
10мкФ
8
2
С4, С5
SMD-конденсатор, 10%, 16В
Any
Any
0805
22пФ
9
3
С6, С7, С8
SMD-конденсатор, 10%, 16В
Any
Any
0805
100нФ
Мікросхеми
10
1
U1
Мікроконтроллер
ATmega16
Atmel
44-QFP
11
1
U2
Мікросхема EEPROM- пам’яті
24FC128
Microchip
12
1
U5
Перетворювач рівнів
MAX232
Atmel
13
1
J1
Роз‘єм CONN-D9F
Any
Any
14
1
DA1
Операційний підсилювач
TLV2252IDR
Texas
Instruments
SOIC-8
15
1
U4
Cтабілізатор Step-Up 5 В
LTC3525-5
Linear Technology
10-QFN
Решта
16
2
L1,L2
SMD-індуктивність, 20%, 1.65 А
Any
Any
0805
10мкГн
6. Висновок
На даний момент йде активний розвиток науки і техніки, і разом з ними розвиваються системи для здобуття інформації та системи технічного захисту інформації.
Мікропроцесори в системах технічного захисту інформації відіграють що далі то більшу і більшу роль, оскільки іхні потужності та можливості постійно зростають, а розміри зменшуються.
В цьому курсовому проекті я реалізував пристрій на базі мікроконтроллера AVR ATmega16 , котрий зчитує аналоговий сигнал з джерела, оцифровує його, потім кодує за допомогою алгоритму шифрування ТЕА і передає зашифроване значення через інтерфейс RS232.
7. Список літератури
1. Проектування та програмування мікроконтролерних пристроїв захисту інформації // Методичні вказівки до розрахункової роботи з курсу «Мікропроцесори в системах технічного захисту інформації» для студентів напряму 6.170102 «Системи технічного захисту інформації» / Укл. Я. Р. Совин – Львiв: Національний університет "Львівська політехніка", 2013. – 17 с.
2. Побудова охоронних систем з GSM-сигналізацією на AVR-мікроконтролерах.
Знайомство з середовищем CodeVisionAVR // Методичні вказівки до лабораторної роботи No 4 з курсу «Мікропроцесори в системах технічного захисту інформації» для студентів напряму 6.170102 «Системи технічного захисту інформації» / Укл. Я. Р. Совин, М. Ю. Стахів – Львiв: Національний університет "Львівська політехніка", 2010. – 22 с.
3. Побудова інфрачервоних детекторів руху на AVR-мікроконтролерах // Методичні вказівки до лабораторної роботи No 3 з курсу «Мікропроцесори в системах технічного захисту інформації» для студентів напряму 6.170102 «Системи технічного захисту інформації» / Укл. Я. Р. Совин, М. Ю. Стахів - Львiв: Національний університет "Львівська політехніка", 2010. - 15 с.
4. Евстифеев А. В. Микроконтроллеры AVR семейства Classic фирмы «ATMEL». – М. Издательский дом “Додэка-ХХI”, 2002. – 288 с.
5. Лебедев М. Б. CodeVisionAVR: пособие для начинающих. – М.: Додэка-ХХI, 2008. – 592 с.:ил.
6. Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера. – СПб.: БХВ-Петербург, 2008. – 384 с.
7. Баранов В. Н. Применение микроконтроллеров AVR: схемы, алгоритмы, программы. – М.: Издательский дом “Додэка-ХХI”, 2004. – 288 с.