- Компоненте потребне:
- Кружни дијаграм:
- Мерење температуре помоћу ЛМ35 помоћу 8051:
- ЛЦД 16к2:
- АДЦ0804 ИЦ:
- ЛМ35 Температурни сензор:
- Објашњење кода:
Понекад је људима тешко да очитају температуру са аналогног термометра због флуктуација. Дакле, овде ћемо направити једноставни дигитални термометар који користи 8051 микроконтролер у коме се ЛМ35 сензор користи за мерење температуре. Такође смо користили ЛМ35 за израду дигиталног термометра користећи Ардуино, НодеМЦУ, ПИЦ, Распберри Пи и друге микроконтролере.
Овај пројекат ће такође служити као правилно повезивање АДЦ0804 са 8051 и 16 * 2 ЛЦД-ом са 8051 микроконтролером.
Компоненте потребне:
- 8051 развојна плоча
- Плоча АДЦ0804
- ЛЦД екран од 16 * 2
- ЛМ35 сензор
- Потенциометар
- Жице краткоспојника
Кружни дијаграм:
Дијаграм кола за круг дигиталног термометра који користи ЛМ35 дат је у наставку:
Мерење температуре помоћу ЛМ35 помоћу 8051:
8051 микроконтролер је 8-битни микроконтролер који има 128 бајта чип РАМ-а, 4К бајта чип РОМ-а, два тајмера, један серијски порт и четири 8-битна порта. 8052 микроконтролер је продужетак микроконтролера. Табела испод приказује поређење 8051 члана породице.
одлика |
8051 |
8052 |
РОМ (у бајтовима) |
4К |
8К |
РАМ (бајтови) |
128 |
256 |
Тајмери |
2 |
3 |
И / О пинови |
32 |
32 |
Серијски порт |
1 |
1 |
Извори прекида |
6 |
8 |
ЛЦД 16к2:
ЛЦД 16 * 2 је широко коришћен екран за уграђене апликације. Ево кратког објашњења о пиновима и раду ЛЦД екрана 16 * 2. Унутар ЛЦД-а налазе се два веома важна регистра. То су регистар података и регистар наредби. Регистар наредби користи се за слање наредби као што су јасан приказ, курсор код куће итд., Регистар података користи се за слање података који ће се приказати на ЛЦД-у 16 * 2. Испод табеле приказан је пин опис 16 * 2 лцд.
Пин |
Симбол |
И / О |
Опис |
1 |
Всс |
- |
Приземље |
2 |
Вдд |
- |
+ 5В напајање |
3 |
Вее |
- |
Напајање за контролу контраста |
4 |
РС |
Ја |
РС = 0 за регистар наредби, РС = 1 за регистар података |
5 |
РВ |
Ја |
Р / В = 0 за писање, Р / В = 1 за читање |
6 |
Е. |
И / О |
Омогући |
7 |
Д0 |
И / О |
8-битна магистрала података (ЛСБ) |
8 |
Д1 |
И / О |
8-битна магистрала података |
9 |
Д2 |
И / О |
8-битна магистрала података |
10 |
Д3 |
И / О |
8-битна магистрала података |
11 |
Д4 |
И / О |
8-битна магистрала података |
12 |
Д5 |
И / О |
8-битна магистрала података |
13 |
Д6 |
И / О |
8-битна магистрала података |
14 |
Д7 |
И / О |
8-битна магистрала података (МСБ) |
15 |
А. |
- |
+ 5В за позадинско осветљење |
16 |
К. |
- |
Приземље |
Табела у наставку приказује често коришћене кодове ЛЦД наредби.
Шифра (хек) |
Опис |
01 |
Јасан екран |
06 |
Курсор за повећање (померање удесно) |
0А |
Екран искључен, курсор укључен |
0Ц |
Екран укључен, курсор искључен |
0Ф |
Екран укључен, курсор трепће |
80 |
Померите курсор на почетак 1. реда |
Ц0 |
Померите курсор на почетак 2. реда |
38 |
2 линије и 5 * 7 матрица |
АДЦ0804 ИЦ:
АДЦ0804 ИЦ је 8-битни паралелни АДЦ породице АДЦ0800 серије из Натионал Семицондуцтор. Ради са +5 волти и има резолуцију од 8 бита. Величина корака и опсег Вин варирају за различите вредности Вреф / 2. Табела у наставку приказује везу између Вреф / 2 и Вин опсега.
Вреф / 2 (В) |
Вин (В) |
Величина корака (мВ) |
отворен |
0 до 5 |
19.53 |
2.0 |
0 до 4 |
15.62 |
1.5 |
0 до 3 |
11.71 |
1.28 |
0 до 2,56 |
10 |
У нашем случају Вреф / 2 је повезан на 1,28 волти, па је величина корака 10мВ. За АДЦ0804 величина корака израчунава се као (2 * Вреф / 2) / 256.
За израчунавање излазног напона користи се следећа формула:
Доут = Вин / величина корака
Тамо где је Доут дигитални излаз података у децималу, Вин = аналогни улазни напон и величина корака (резолуција) је најмања промена. Овде сазнајте више о АДЦ0804, такође проверите повезаност АДЦ0808 са 8051.
ЛМ35 Температурни сензор:
ЛМ35 је температурни сензор чији је излазни напон линеарно пропорционалан Целзијусовој температури. ЛМ35 долази већ калибрисан, па не захтева спољну калибрацију. Излази 10мВ за сваки степен Целзијусове температуре.
ЛМ35 сензор производи напон који одговара температури. Овај напон АДЦ0804 претвара у дигитални (0 до 256) и напаја се на 8051 микроконтролер. Микроконтролер 8051 претвара ову дигиталну вредност у температуру у степени Целзијуса. Тада се ова температура претвара у асции облик који је погодан за приказ. Ове асции вредности се додају на 16 * 2 лцд који приказује температуру на свом екрану. Овај поступак се понавља након одређеног интервала.
Испод је слика за подешавање дигиталног термометра ЛМ35 који користи 8051:
Све дигиталне термометре засноване на ЛМ35 можете пронаћи овде.
Објашњење кода:
Комплетни Ц програм за овај дигитални термометар који користи ЛМ35 дат је на крају овог пројекта. Код је подељен на мале смислене делове и објашњен у наставку.
За 16 * 2 ЛЦД повезивање са 8051 микроконтролером, морамо да дефинишемо пинове на којима је 16 * 2 лцд повезан са 8051 микроконтролером. РС пин од 16 * 2 лцд је повезан са П2.7, РВ пин од 16 * 2 лцд је повезан са П2.6, а Е пин од 16 * 2 лцд је повезан са П2.5. Прикључци за податке повезани су на порт 0 микроконтролера 8051.
сбит рс = П2 ^ 7; // Региструјте (РС) пин од 16 * 2 лцд сбит рв = П2 ^ 6; // Читање / писање (РВ) пин од 16 * 2 лцд сбит ен = П2 ^ 5; // Омогући (Е) пин од 16 * 2 лцд
Слично томе, за АДЦ0804 повезивање са 8051 микроконтролером, морамо да дефинишемо пинове на којима је АДЦ0804 повезан са 8051 микроконтролером. РД пин АДЦ0804 је повезан са П3.0, ВР пин АДЦ0804 је повезан са П3.1, а ИНТР пин АДЦ0804 је повезан са П3.2. Прикључци за податке повезани су на порт 1 микроконтролера 8051.
сбит рд_адц = П3 ^ 0; // Очитавање (РД) пина АДЦ0804 сбит вр_адц = П3 ^ 1; // Запиши (ВР) пин АДЦ0804 сбит интр_адц = П3 ^ 2; // Прекидни (ИНТР) пин АДЦ0804
Даље морамо дефинисати неке функције које се користе у програму. Функција одлагања користи се за стварање одређеног временског кашњења, ц мдврт функција користи се за слање наредби на 16 * 2 лцд дисплеј, датаврт функција се користи за слање података на 16 * 2 лцд дисплеј и цонверт_дисплаи функција се користи за претварање АДЦ података у температуру и приказати га на 16 * 2 лцд дисплеју.
воид делаи (непотписан инт); // функција за стварање кашњења воид цмдврт (непотписани знак); // функција за слање команди на 16 * 2 лцд дисплаи воид датаврт (непотписани знак); // функција за слање података на 16 * 2 ЛЦД екран воид цонверт_дисплаи (непотписани знак); // функција за претварање вредности АДЦ у температуру и приказ на 16 * 2 лцд дисплеју
У доњем делу кода шаљемо команде на лцд 16 * 2. Наредбе као што су јасан приказ, повећање курсора, присиљавање курсора на почетак 1. реда шаљу се на ЛЦД екран 16 * 2 један по један након одређеног временског кашњења.
фор (и = 0; и <5; и ++) // слање команди на 16 * 2 лцд приказује по једну команду {цмдврт (цмд); // функцијски позив за слање команди на кашњење екрана од 16 * 2 лцд (1); }
У овом делу кода шаљемо податке на 16 * 2 лцд. Подаци који се приказују на ЛЦД екрану 16 * 2 шаљу се један по један након одређеног временског кашњења.
фор (и = 0; и <12; и ++) // слање података на 16 * 2 лцд приказује по један знак {датаврт (дата1); // функцијски позив за слање података на кашњење приказа 16 * 2 лцд (1); } У овом делу кода претварамо аналогни напон који производи сензор ЛМ35 у дигиталне податке, а затим се претвара у температуру и приказује на дисплеју од 16 * 2 лцд. Да би АДЦ0804 започео конверзију, морамо послати низак до високи импулс на ВР пин АДЦ0804, а затим морамо сачекати крај конверзије. ИНТР постаје низак на крају конверзије. Једном када ИНТР постане низак, РД постаје низак за копирање дигиталних података на порт 0 микроконтролера 8051. Након одређеног временског кашњења, започиње следећи циклус. Овај процес се понавља заувек.
вхиле (1) // понављамо заувек {вр_адц = 0; // слање НИЗКОГ до ВИСОКОГ импулса на кашњењу ВР пина (1); вр_адц = 1; вхиле (интр_адц == 1); // чекамо Крај конверзије рд_адц = 0; // направимо РД = 0 за читање података из АДЦ0804 валуе = П1; // копирање АДЦ података цонверт_дисплаи (вредност); // функцијски позив за претварање АДЦ података у температуру и приказ на 16 * 2 лцд дисплаи делаи (1000); // интервал између сваког циклуса рд_адц = 1; // направимо РД = 1 за следећи циклус}
У доњем делу кода шаљемо команде на ЛЦД екран од 16 * 2. Команда се копира на порт 0 микроконтролера 8051. РС је смањен за писање наредби. РВ је смањен за операцију писања. Пулс високог до ниског нивоа примењује се на осовиници за омогућавање (Е) за покретање операције писања наредби.
воид цмдврт (непотписани знак к) {П0 = к; // пошаље команду на порт 0 на који је повезан 16 * 2 лцд рс = 0; // направимо РС = 0 за наредбу рв = 0; // направимо РВ = 0 за операцију писања ен = 1; // пошаљите ХИГХ то ЛОВ импулс на Енабле (Е) пин да бисте покренули кашњење рада наредбе писања (1); ен = 0; }
У овом делу кода шаљемо податке на ЛЦД екран од 16 * 2. Подаци се копирају на порт 0 микроконтролера 8051. РС је направљен високо за писање наредби. РВ је смањен за операцију писања. Пулс високог до ниског нивоа примењује се на осовиници за омогућавање (Е) за покретање операције уписивања података.
воид датаврт (непотписани знак и) {П0 = и; // пошаље податке на Порт 0 на који је повезан 16 * 2 лцд рс = 1; // направимо РС = 1 за наредбу рв = 0; // направимо РВ = 0 за операцију писања ен = 1; // пошаљите ХИГХ то ЛОВ импулс на Енабле (Е) пин да започне кашњење рада при уписивању података (1); ен = 0; }
У овом делу кода претварамо дигиталне податке у температуру и приказујемо их на 16 * 2 лцд дисплеју.
воид цонверт_дисплаи (непотписана вредност знака) {непотписани знак к1, к2, к3; цмдврт (0кц6); // наредба за постављање курсора на 6. место 2. реда на 16 * 2 лцд к1 = (валуе / 10); // поделимо вредност са 10 и похранимо количник у променљиву к1 к1 = к1 + (0к30); // конвертујемо променљиву к1 у асции додавањем 0к30 к2 = вредност% 10; // вредност поделимо са 10 и остатак сачувамо у променљивој к2 к2 = к2 + (0к30); // конвертујемо променљиву к2 у асции додавањем 0к30 к3 = 0кДФ; // асции вредност степена (°) симбола датаврт (к1); // приказ температуре на 16 * 2 лцд дисплаи датаврт (к2); датаврт (к3); датаврт ('Ц'); }
Такође проверите друге термометре који користе ЛМ35 са различитим микроконтролерима:
- Дигитални термометар који користи Ардуино и ЛМ35
- Мерење температуре помоћу ЛМ35 и АВР микроконтролера
- Мерење собне температуре помоћу Распберри Пи