Скачиваний:
5
Добавлен:
02.04.2023
Размер:
212.54 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Калужский филиал

федерального государственного бюджетного

образовательного учреждения высшего образования

«Московский государственный технический университет имени Н.Э. Баумана

(национальный исследовательский университет)»

(КФ МГТУ им. Н.Э. Баумана)

ФАКУЛЬТЕТ

ИУК "Информатика и управление"

КАФЕДРА

ИУК6 " Защита информации "

О Т Ч Ё Т

ЛАБОРАТОРНАЯ РАБОТА №5

ДИСЦИПЛИНА:

"Аппаратные средства вычислительной техники"

ТЕМА:

"Использование МК для решения задач связанных с обработкой данных. "

Выполнил: студент гр. ИУК 6-71

.__________________

(подпись)

Проверил:

Жарова О.Ю.  ____________________

(подпись)

Дата сдачи (защиты) лабораторной работы:

Результаты сдачи (защиты):

Количество рейтинговых баллов:

Калуга, 2022 г.

Цель работы

Сформировать практические навыки программирования и отладки работы микроконтроллеров.

Задачи

1. Синтезировать схему идентичную приведенной в примере.

2. Изучить возможные способы подключения датчика DS18B20 к МК ATMEGA8535 через UART (отлично от подключения на приведенной схеме).

3. Синтезировать схему реализующую задачу, идентичную примеру, но с подключением DS18B20 через UART.

4. Изучить принцип работы фотоэлемента TSL251RD.

5. Синтезировать схему, реализующую вывод сообщения на LCD монитор об уровне освещенности.

6. Составить отчёт, включающий три схемы и два программных кода для контроллера.

Ход работы

1) Построим схему, идентичную приведенной в примере, используем прилагающуюся прошивку.

Рисунок 1 – Схема 1.

2) Реализуем схему для вывода сообщения об уровне освещенности на LCD монитор.

Рисунок 2 – Схема 2.

3) Напишем коды прошивок для двух схем.

Код для схемы №1

#include <avr/io.h>

#include <avr/interrupt.h>

#include "lcd_lib.h"

#include "OWIPolled.h"

#include "OWIHighLevelFunctions.h"

#include "OWIBitFunctions.h"

#include "lcd_lib.h"

#include "bcd.h"

#include "common_files\OWIcrc.h"

#define BUS OWI_PIN_7

#define DS18B20_SKIP_ROM 0xcc // -

#define DS18B20_CONVERT_T 0x44 //

#define DS18B20_READ_SCRATCHPAD 0xbe //

unsigned char scratchpad[9];

int tmp;

unsigned char temperature;

int main(void)

{

LCD_Init();

OWI_Init(BUS);

LCD_SendString("temp:");

while(1)

{

OWI_DetectPresence(BUS);

OWI_SkipRom(BUS);

OWI_SendByte(DS18B20_CONVERT_T,BUS);

while(!OWI_ReadBit(BUS));

OWI_DetectPresence(BUS);

OWI_SkipRom(BUS);

OWI_SendByte(DS18B20_READ_SCRATCHPAD,BUS);

scratchpad[0] = OWI_ReceiveByte(BUS);

scratchpad[1] = OWI_ReceiveByte(BUS);

LCD_Goto(5,0);

if((scratchpad[1]&128)==0)

{

LCD_WriteData('+');

}

else

{

LCD_WriteData('-');

tmp = ((int)scratchpad[1]<<8)|scratchpad[0];

tmp = (~tmp)+1;

scratchpad[0] = tmp;

scratchpad[1] = tmp>>8;

}

temperature = ((scratchpad[1]&7)<<4)|(scratchpad[0]>>4);

BCD_3Lcd(temperature);

temperature = (scratchpad[0]&15);

temperature = (temperature <<1) + (temperature<<3);

temperature = (temperature>>4);

LCD_WriteData('.');

BCD_1Lcd(temperature);

}

return 0;

}

Код для схемы №2

#include <avr/io.h>

#include <avr/interrupt.h>

#include "lcd_lib.h"

#include "OWIPolled.h"

#include "OWIHighLevelFunctions.h"

#include "OWIBitFunctions.h"

#include "lcd_lib.h"

#include "bcd.h"

#include "common_files\OWIcrc.h"

#define BUS OWI_PIN_7

#define DS18B20_SKIP_ROM 0xcc // -

#define DS18B20_CONVERT_T 0x44 //

#define DS18B20_READ_SCRATCHPAD 0xbe //

unsigned char scratchpad[9];

int tmp;

unsigned char temperature;

void ADC_Init() {

DDRA = 0x00;

ADCSRA = 0;

ADMUX = 0;

ADMUX = ( 1 << REFS0 ) | ( 1 << ADLAR ) | ( 0x00 ) ;

ADCSRA = ( 1 << ADEN ) | ( 0 << ADATE ) | ( 1 << ADIF ) | ( 0 << ADIE ) | ( 1 << ADPS2 ) | ( 1 << ADPS1 ) | ( 1 << ADPS0 ) ;

}

//unsigned char sym;

int main(void) {

ADC_Init();

LCD_Init();

int result;

while (1)

{

LCD_Goto(0,0);

ADCSRA |= (1 << ADSC);

while (!(ADCSRA &(1 << ADIF))){;}

ADCSRA |= (1 << ADIF);

result = ADCH;

if ( result > (255)*0.6 ) { LCD_SendString(" Almost 100% ");}

else if (result > (255)*0.55) { LCD_SendString(" Almost 90% ");}

else if ( result >(255)*0.50 ) { LCD_SendString(" Almost 80% ");}

else if ( result >(255)*0.45) { LCD_SendString(" Almost 70% ");}

else if (result > (255)*0.4) { LCD_SendString(" Almost 60% ");}

else if ( result >(255)*0.3 ) { LCD_SendString(" Almost 50% or less ");}

else { LCD_SendString("I can't see "); }

_delay_ms(1000);

}

return 0;

}

Вывод

В ходе выполнения лабораторной работы были сформированы практические навыки программирования и отладки работы микроконтроллеров.

Соседние файлы в папке АСВТ-2