Ім'я файлу: ПроES_2.doc
Розширення: doc
Розмір: 747кб.
Дата: 09.12.2020
скачати
Пов'язані файли:
Документ Microsoft Office Word.docx


Міністерство освіти і науки України

Харківський національний університет радіоелектроніки





Кафедра

Електронних обчислювальних машин




(повна назва)


Звіт


з лабораторної роботи №2

дисципліна: «Програмування Embedded System»

Дослідження архітектури ARDUINO UNО 3 для управління

LCD WH1602 на основі мікроконтролера - HD44780 і

температурним датчиком ТМР36






Виконали: Перевірив:

ст. гр. СПм-20-2 к.т.н., доц. Токарев В.В.

Задорожний О.В.

Смирнов В.О.

Торба О.О.

Харків 2020

2.1 Мета роботи
Дослідження архітектури ARDUINO UNО 3. Створення проекту в середовищі моделювання AUTODESK TINKERCAD на основі MCU ATmega 328P, з метою управління LCD-дисплеєм - WH1602 на основі мікроконтролера - HD44780 і температурним датчиком ТМР36.
2.2 Завдання

1. Необхідно створити проект в середовищі Autodesk Tinkercad.

2. Підключити живлення на Arduino Uno 3.

3. На мультиметрі №1 з'явиться вхідна напруга xxV, яка за формулою (рис. 2.1), перераховується в температуру навколишнього середовища.

4. На мультиметрі №2 з'явиться вихідна напруга 5V необхідна для підсвічування екрану LCD WH1602 - дисплея.

5. За допомогою потенціометра №1 моделюється робота температурного датчика TMP36, а за допомогою потенціометра №2 регулюється підсвічування екрану LCD WH1602 - дисплея.

6. Підключити LCD-дисплей до MCU - LiquidCrystal lcd (12,11,5,4,3,2).

7. Створити бітову маску символу:
byte p20[8]=

{ B10000, B10000, B10000, B10000, B10000, B10000, B10000, };

byte p40[8]=

{ B11000, B11000, B11000, B11000, B11000, B11000, B11000, };

byte p60[8]=

{ B11100, B11100, B11100, B11100, B11100, B11100, B11100, };

byte p80[8]=

{ B11110, B11110, B11110, B11110, B11110, B11110, B11110, };

byte p100[8]=

{ B11111, B11111, B11111, B11111, B11111, B11111, B11111, 74 };

byte avtor[8]=

{ B00010, B00001, B11001, B00001, B11001, B00001, B00010, };

Лістинг 2.1 – Бітова маска символу
8. Ініціалізувати створені масиви lcd.createChar(1, p20);......... lcd.createChar(6, avtor).

9. Встановити курсор в (0) -0 стовпець і (0) – 1-й рядок lcd.setCursor(0,0).

10. Очищити рядок, друкувати 16-прогалин lcd.print(" ").

11. Встановити курсор в (4) -стовпець (0) -1-й рядок lcd.setCursor(4,0).

12. Друкувати шифр своєї групи lcd.print ("SPm-20-2").

13. Встановити курсор в (0) -0 стовпець - 1-2-й рядок lcd.setCursor(0,1).

14. Друкувати ПІБ lcd.print ("FAMILIYA I.O.")

15. Очищити дисплей.

16. Встановити курсор в (7) - стовпець і (0) - 1-й рядок lcd.setCursor(7,0).

17. Друкувати створені бітові маски символу lcd.print("\1");..... lcd.print("\6").

18. Очищити дисплей.

19. Встановити курсор в (0) -0 стовпець і (0) - 1 рядок lcd.setCursor (0,0) і створюємо біжучий рядок 6-го символу.

20. За допомогою потенціометра №1, провести імітаційне моделювання (задати 5-ть будь-яких значень напруг і за формулою перерахувати в температуру навколишнього середовища). Значення температури вивести в лівий нижній кут LCD-дисплея в форматі: “tem.C=”.

21. Провести масштабування АЦП (0-1023) в (0-5).

22. Дані з АЦП вивести Serial порт монітора.


2.3 Короткий зміст ходу виконання роботи
2.3 1 Створено проект в середовищі Autodesk Tinkercad (рис. 2.2).


Рисунок 2.1 – Створений проект
2.3.2 Підключено живлення на Arduino Uno 3 (на мультиметрах з'являється вихідна напруга 5V). Зображено на рисунку 2.3. Приклади роботи схеми відображена на рисунках 2.4 – 2.7. В той час на порт монітора послідовного інтерфейса відбувається вивід змін потенціометра (рис. 2.8).


Рисунок 2.2 – Arduino Uno 3 з підключеним живленням


Рисунок 2.3 – Приклад роботи схеми №1


Рисунок 2.4 – Приклад роботи схеми №2



Рисунок 2.5 – Приклад роботи схеми №3


Рисунок 2.6 – Приклад роботи схеми №4


Рисунок 2.7 – Вивід на порт монітора
2.3.3 Код проекту
#include "LiquidCrystal.h"
//--------------------------------------------
byte p20[8]= {

0b10000,

0b10000,

0b10000,

0b10000,

0b10000,

0b10000,

0b10000,

};

byte p40[8]= {

0b11000,

0b11000,

0b11000,

0b11000,

0b11000,

0b11000,

0b11000,

};

byte p60[8]= {

0b11100,

0b11100,

0b11100,

0b11100,

0b11100,

0b11100,

0b11100,

};

byte p80[8]= {

0b11110,

0b11110,

0b11110,

0b11110,

0b11110,

0b11110,

0b11110,

};

byte p100[8]= {

0b11111,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111,

0b11111,

};

byte avtor[8]= {

0b00010,

0b00001,

0b11001,

0b00001,

0b11001,

0b00001,

0b00010,

};
//--------------------------------------------
constexpr int k_charsInRow = 16;

constexpr int k_rowCount = 2;

LiquidCrystal g_lcd(12,11,5,4,3,2);
//--------------------------------------------
void setup()

{

Serial.begin(9600);

g_lcd.begin(k_charsInRow, k_rowCount);

g_lcd.createChar(1, p20);

g_lcd.createChar(2, p40);

g_lcd.createChar(3, p60);

g_lcd.createChar(4, p80);

g_lcd.createChar(5, p100);

g_lcd.createChar(6, avtor);

}
//--------------------------------------------
void clear()

{

constexpr char* k_emptyLine = " ";

g_lcd.setCursor(0, 0);

g_lcd.print(k_emptyLine);

g_lcd.setCursor(0, 1);

g_lcd.print(k_emptyLine);

}
//--------------------------------------------
void printGroupName()

{

g_lcd.setCursor(4, 0);

g_lcd.print("SPm-20-2");

g_lcd.setCursor(0, 1);

g_lcd.print("Smirnov V.O.");

}
//--------------------------------------------
void printPreparedChars()

{

constexpr char* preparedChars[] = {"\1", "\2", "\3", "\4", "\5", "\6"};

g_lcd.setCursor(7, 0);

for (const char* preparedChar : preparedChars)

{

g_lcd.print(preparedChar);

delay(200);

};

}
//--------------------------------------------
void printRunningChar()

{

constexpr int k_delay = 100;

g_lcd.setCursor(0, 0);

g_lcd.print("\6");

delay(k_delay);

for (int i = 0; i < k_charsInRow - 1; ++i)

{

g_lcd.setCursor(i, 0);

g_lcd.print(" \6");

delay(k_delay);

}

g_lcd.setCursor(k_charsInRow - 1, 0);

g_lcd.print(" ");

delay(k_delay);

}
//--------------------------------------------
void loop()

{

clear();

printGroupName();

delay(5000);

clear();

printPreparedChars();

delay(5000);

clear();

printRunningChar();

delay(5000);

char buffer[16];

for (int i = 0; i < 5; ++i)

{

const int value = analogRead(0);

const int temperature = (value - 500) / 10;

itoa(temperature, buffer, 10);

g_lcd.setCursor(0, 1);

g_lcd.print("tem.C=");

g_lcd.print(buffer);

const int mapped = map(value, 0, 1023, 0, 5);

Serial.println(mapped);

delay(2000);

}

}
Лістинг 2.2 – Реалізація виконання завдання
2.3.4 Висновки
В результаті лабораторної роботи було створено проект в середовищі Autodesk Tinkercad на основі MCU ATmega 328P й виконано завдання, а саме: підключення та управління LCD - дисплеєм - WH1602 на основі мікроконтролера - HD44780 і виявлення температури навколишнього середовища за допомогою температурного датчика ТМР36.
скачати

© Усі права захищені
написати до нас