- Потребне компоненте: -
- ДС18Б20 Температурни сензор:
- Шема кола: -
- Кораци или проток кода: -
- Објашњење кода:
- Преузимање података са ДС18Б20 температурног сензора:
Генерално, температурни сензор ЛМ35 користи се са микроконтролерима за мерење температуре, јер је јефтин и лако доступан. Али ЛМ35 даје аналогне вредности и ми их морамо претворити у дигиталне помоћу АДЦ (Аналог то Дигитал Цонвертер). Али данас користимо температурни сензор ДС18Б20 у којем нам није потребна АДЦ конверзија да бисмо израчунали температуру. Овде ћемо користити ПИЦ микроконтролер са ДС18Б20 за мерење температуре.
Дакле, овде градимо термометар са следећом спецификацијом помоћу микроконтролера ПИЦ16Ф877А из микрочипа.
- Показаће пуни опсег температуре од -55 до +125 степени.
- Приказаће температуру само ако се температура промени + / -.2 степена.
Потребне компоненте: -
- Пиц16Ф877А - ПДИП40 пакет
- Даска за хлеб
- Пицкит-3
- 5В адаптер
- ЛЦД ЈХД162А
- ДС18б20 температурни сензор
- Жице за повезивање периферних уређаја.
- Отпорници 4.7к - 2ком
- 10к пот
- Кристал од 20мХз
- 2 ком. 33пФ керамички кондензатори
ДС18Б20 Температурни сензор:
ДС18Б20 је одличан сензор за тачно одређивање температуре. Овај сензор пружа резолуцију од 9 до 12 бита при очитавању температуре. Овај сензор комуницира са само једном жицом и није му потребан АДЦ за постизање аналогних температура и њихово дигитално претварање.
Спецификација сензора је: -
- Мере температуре од -55 ° Ц до + 125 ° Ц (-67 ° Ф до + 257 ° Ф)
- ± 0,5 ° Ц Тачност од -10 ° Ц до + 85 ° Ц
- Програмабилна резолуција од 9 до 12 бита
- Нису потребне спољне компоненте
- Сензор користи 1-Вире® интерфејс
Ако погледамо горњу пиноут слику из техничког листа, можемо видети да сензор изгледа потпуно исто као БЦ547 или БЦ557 пакет ТО-92. Први пин је уземљен, други пин је ДК или подаци, а трећи пин је ВЦЦ.
Испод је електрична спецификација из техничког листа која ће бити потребна за наш дизајн. Називни напон напајања сензора је од + 3,0 В до + 5,5 В. Такође је потребно повући напонски напон који је исти као и горе наведени напонски напон.
Такође, постоји граница тачности која износи + -0,5 степени Целзијуса за опсег од -10 степени Ц до +85 степени Целзијуса, а тачност се мења за маргину пуног опсега, која је + -2 степени за -55 степени Целзијуса Опсег од 125 степени.
Ако поново погледамо технички лист, видећемо спецификацију везе сензора. Сензор можемо повезати у режиму паразитског напајања где су потребне две жице, ДАТА и ГНД, или сензор можемо повезати помоћу спољног напајања, где су потребне три одвојене жице. Користићемо другу конфигурацију.
Како смо сада упознати са оценама снаге сензора и везаним областима, сада се можемо концентрисати на израду шеме.
Шема кола: -
Ако видимо дијаграм кола, видећемо да: -
ЛЦД од 16к2 карактера повезан је преко микроконтролера ПИЦ16Ф877А, у којем су РБ0, РБ1, РБ2 повезани са ЛЦД пином РС, Р / В и Е. А РБ4, РБ5, РБ6 и РБ7 су повезани преко ЛЦД 4-полних Д4, Д5, Д6, Д7. ЛЦД је повезан у 4-битном режиму или режиму грицкања.
Кристални осцилатор од 20 МХз са два керамичка кондензатора од 33 пФ повезан је преко ОСЦ1 и ОСЦ2 пина. Пружаће микроконтролеру константну тактну фреквенцију од 20 МХз.
ДС18Б20 је такође повезан према конфигурацији пина и са отпорником на извлачење од 4,7 к, као што је претходно речено. Све ово сам повезао у плочу за памћење.
Ако сте нови у ПИЦ микроконтролеру, следите наша упутства за ПИЦ микроконтролер наводећи у Почетак рада са ПИЦ микроконтролером.
Кораци или проток кода: -
- Подесите конфигурације микроконтролера које укључују конфигурацију осцилатора.
- Подесите жељени порт за ЛЦД, укључујући ТРИС регистар.
- Сваки циклус са сензором дс18б20 започиње ресетовањем, тако да ћемо ресетовати дс18б20 и сачекати импулс присутности.
- Напишите тражилицу и подесите резолуцију сензора од 12 бита.
- Прескочите читање РОМ-а праћено импулсом ресетовања.
- Пошаљите команду за претварање температуре.
- Очитајте температуру са огреботине.
- Проверите вредност температуре било негативну или позитивну.
- Одштампајте температуру на ЛЦД екрану од 16к2.
- Сачекајте промене температуре за +/-. 20 степени Целзијуса.
Објашњење кода:
Комплетан код овог дигиталног термометра дат је на крају овог водича са демонстрацијским видео записом. За покретање овог програма биће вам потребне неке заглавне датотеке које можете преузети овде.
Прво морамо да поставимо конфигурационе битове у микроконтролеру пиц, а затим да започнемо са воид маин функцијом.
Затим се испод укључују четири реда за укључивање датотеке заглавља библиотеке, лцд.х и дс18б20.х . А кц.х је за заглавну датотеку микроконтролера.
#инцлуде
Ове дефиниције се користе за слање наредбе на сензор температуре. Наредбе су наведене у листи података сензора.
#дефине скип_ром 0кЦЦ #дефине цонверт_темп 0к44 #дефине врите_сцратцхпад 0к4Е #дефине ресолутион_12бит 0к7Ф #дефине реад_сцратцхпад 0кБЕ
Ова табела 3 из техничког листа сензора приказује све наредбе у којима се макронаредбе користе за слање одговарајућих наредби.
Температура ће се приказати на екрану само ако се температура промени +/- .20 степени. Овај температурни јаз можемо променити из овог темп_гап макронаредбе . Променом вредности на овом макронаредби биће промењена спецификација.
Друге две променљиве променљиве које се користе за чување приказаних података о температури и њихово разликовање са температурним размаком
#дефине темп_гап 20 плутајуће пре_вал = 0, афт_вал = 0;
У воид маин () функцији, лцд_инит () ; је функција за иницијализацију ЛЦД-а. Ова функција лцд_инит () позива се из библиотеке лцд.х.
ТРИС регистри се користе за одабир И / О пинова као улаза или излаза. Две непотписане кратке променљиве ТемпЛ и ТемпХ користе се за чување података од 12- битне резолуције са температурног сензора.
воид маин (воид) {ТРИСД = 0кФФ; ТРИСА = 0к00; ТРИСБ = 0к00; //ТРИСДбитс_т.ТРИСД6 = 1; непотписани кратки ТемпЛ, ТемпХ; непотписано инт т, т2; плутајућа разлика1 = 0, разлика2 = 0; лцд_инит ();
Погледајмо вхиле петљу, овде прекидамо вхиле (1) петљу на мале делове.
Те линије се користе за осећање да је сензор температуре повезан или није.
вхиле (ов_ресет ()) {лцд_цом (0к80); лцд_путс ("Молим вас повежите се"); лцд_цом (0кЦ0); лцд_путс ("Темп-Сенсе Пробе"); }
Коришћењем овог сегмента кода иницијализујемо сензор и шаљемо наредбу за претварање температуре.
лцд_путс (""); ов_ресет (); врите_бите (врите_сцратцхпад); врите_бите (0); врите_бите (0); запис_бајта (резолуција_12бит); // 12битна резолуција ов_ресет (); врите_бите (скип_ром); врите_бите (цонверт_темп);
Овај код служи за чување 12-битних података о температури у две непотписане кратке променљиве.
вхиле (реад_бите () == 0кфф); __делаи_мс (500); ов_ресет (); врите_бите (скип_ром); врите_бите (реад_сцратцхпад); ТемпЛ = реад_бите (); ТемпХ = реад_бите ();
Затим, ако проверите комплетан код у наставку, створићемо иф-елсе услов да бисмо сазнали да ли је температурни знак позитиван или негативан.
Коришћењем кода наредбе Иф манипулишемо подацима и видимо да ли је температура негативна или не и утврђујемо да су промене температуре у опсегу +/-.20 степени или не. У другом делу смо проверили да ли је температура позитивна или не и детекцију температурних промена.
код
Преузимање података са ДС18Б20 температурног сензора:
Погледајмо временски размак 1-Вире® интерфејса. Користимо кристал од 20 МХз. Ако завиримо у датотеку дс18б20.ц, видећемо
#дефине _КСТАЛ_ФРЕК 20000000
Ова дефиниција се користи за рутину кашњења компајлера КСЦ8. 20 МХз је постављено као фреквенција кристала.
Направили смо пет функција
- ов_ресет
- реад_бит
- реад_бите
- врите_бит
- врите_бите
1-Вире ® протоколу су потребни строги временски прикључци за комуникацију. Унутар листа података добићемо савршене информације везане за временски интервал.
Унутар доње функције креирали смо тачан временски интервал. Важно је створити тачно кашњење за задржавање и отпуштање и контролу ТРИС бита прикључка одговарајућег сензора.
непотписани цхар ов_ресет (воид) {ДК_ТРИС = 0; // Трис = 0 (излаз) ДК = 0; // подесимо пин # на лов (0) __делаи_ус (480); // 1 жица захтева временско кашњење ДК_ТРИС = 1; // Трис = 1 (улаз) __делаи_ус (60); // 1 жица захтева временско кашњење ако (ДК == 0) // ако постоји плусе присуство {__делаи_ус (480); ретурн 0; // вратимо 0 (1-жица је присуство)} елсе {__делаи_ус (480); ретурн 1; // вратимо 1 (1-жица НИЈЕ присуство)}} // 0 = присуство, 1 = без дела
Сада, према доњем опису временског слота који се користи у читању и писању , креирали смо функцију читања и писања .
непотписани цхар реад_бит (воид) {непотписани цхар и; ДК_ТРИС = 1; ДК = 0; // повуците ДК ниско за почетак временског интервала ДК_ТРИС = 1; ДК = 1; // затим вратимо високо за (и = 0; и <3; и ++); // одлагање 15ус од почетка поврата временског слота (ДК); // повратна вредност ДК линије} воид врите_бит (цхар битвал) {ДК_ТРИС = 0; ДК = 0; // повуците ДК ниско за почетак временског слота иф (битвал == 1) ДК = 1; // вратимо ДК високо ако напишемо 1 __делаи_ус (5); // задржи вредност за остатак временског интервала ДК_ТРИС = 1; ДК = 1; } // Кашњење пружа 16ус по петљи, плус 24ус. Због тога кашњење (5) = 104ус
Даље проверите сва повезана заглавља и.ц датотеке овде.
Дакле, на овај начин можемо да користимо ДС18Б20 сензор за мерење температуре помоћу ПИЦ микроконтролера.
Ако желите да направите једноставан дигитални термометар са ЛМ35, одјавите се испод пројеката са другим микроконтролерима:
- Мерење собне температуре помоћу Распберри Пи
- Дигитални термометар који користи Ардуино и ЛМ35
- Дигитални термометар који користи ЛМ35 и 8051
- Мерење температуре помоћу ЛМ35 и АВР микроконтролера