АСВТ-2 / ASVT_lab_5_3
.docx
|
Министерство науки и высшего образования Российской Федерации Калужский филиал федерального государственного бюджетного образовательного учреждения высшего образования «Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский университет)» (КФ МГТУ им. Н.Э. Баумана) |
ФАКУЛЬТЕТ |
ИУК "Информатика и управление" |
КАФЕДРА |
ИУК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;
}
Вывод
В ходе выполнения лабораторной работы были сформированы практические навыки программирования и отладки работы микроконтроллеров.