- Потребни материјали:
- РТЦ модул:
- Повезивање ДС3231 РТЦ са ПИЦ микроконтролером:
- Програмирање ПИЦ-а за РТЦ модул:
- Кратко објашњење датотеке заглавља ПИЦ16Ф877а_ДС3231.х:
- Симулација:
- Приказ времена и датума на ЛЦД-у:
Скоро сви уграђени уређаји дизајнирани су за интеракцију са стварним светом. Они делују као мост за комуникацију између дигиталног света и стварног света. Да би овај процес био лакши и ефикаснији, дигитални свет би понекад требао да прати време и датум стварног света. На овај начин дигитални свет ће знати које је време / дан у стварном свету и може чак направити разлику између дневног и ноћног времена. Такође може деловати као извор времена за обављање одређених задатака у одређено време или датум. Дакле, овде повезујемо РТЦ модул са ПИЦ микроконтролером и приказујемо време и датум на ЛЦД екрану од 16к2. Овај пројекат се такође може користити као дигитални сат.
Потребни материјали:
- Регулисано напајање од 5В
- ПИЦ16Ф877А
- Кристални осцилатор 20 МХз
- Кондензатор 33пф - 2Бр
- Отпорник 10К, 5.1К, 1К
- ДС3231 РТЦ модул
- ПОТ -10к
- ЛЦД модул 16 * 2
- Повезивање жица
РТЦ модул:
Најчешћи начин да микроконтролер прати време или датум стварног света је коришћењем РТЦ ИЦ-а. Термин РТЦ означава сат у реалном времену; овај ИЦ прати реално време и датум и делиће ове информације са микроконтролером кад год се затражи. РТЦ ИЦ који овде користимо је најпопуларнији и најтачнији ДС3231. Овај ИЦ се помера само неколико секунди сваке године и стога је изузетно поуздан. За потребе овог упутства користимо ДС3231 РТЦ модул који се лако може купити на мрежи или у локалној продавници хардвера. Модул се испоручује са 3В ћелијом новчића која увек напаја РТЦ модул и стога ће се, када се поставе време и датум, ажурирати све док је ћелија новчића жива.
Модул ДС3231 комуницира уз помоћ И2Ц протокола, па ако нисте свесни шта је то и како се користи са ПИЦ-ом, прочитајте И2Ц са ПИЦ упутством пре него што наставите. Такође у овом упутству ћемо створити заглавну датотеку која се може користити за комуникацију са нашим РТЦ модулом, а такође ћемо је тестирати на хардверу приказивањем времена и датума на ЛЦД дисплеју, тако да је такође важно научити како повезати ЛЦД дисплеј са ПИЦ микроконтролером. Датотека заглавља креирана у овом упутству за ДС3231 може се касније користити / модификовати како би одговарала вашим апликацијама.
Раније смо користили ДС3231 РТЦ са Ардуином у доњим пројектима:
- Аутоматско додавање кућних љубимаца помоћу Ардуина
- Ардуино Дата Логгер
Повезивање ДС3231 РТЦ са ПИЦ микроконтролером:
Дијаграм кола за дигитални сат заснован на ПИЦ микроконтролеру је дат у наставку. Као што је раније речено, ДС3231 ради уз помоћ И2Ц комуникације, тако да ће имати серијски сат (СЦЛ) и пин серијских података (СДА) који морају бити повезани са И2Ц пиновима на нашем ПИЦ-у, а то је пин 18 (СЦЛ) и пин 23 (СДА). Вучни отпор вредности 4.7к користи се за одржавање магистрале у високом стању у празном ходу.
ЛЦД екран је такође повезан са иглама на порту Д за приказ тренутног датума и времена. Комплетна шема склопа дизајнирана је на протеусу и приказана је доле. Исте ћемо користити за симулацију или програмирање касније у овом упутству.
Пратите дијаграм кола и сходно томе успоставите везе, горе приказани И2Ц оквир се користи за И2Ц отклањање грешака, па то нећемо укључити у наше везе. Такође није приказано да се РТЦ модул мора напајати напајањем + 5В помоћу Вцц и уземљених пинова на модулу. За повезивање сам користио своју плочу, а након успостављања потребних веза подешавање је изгледало отприлике овако у наставку.
Ако сте нови у ПИЦ микроконтролеру, почните са Почетак рада са ПИЦ микроконтролером.
Програмирање ПИЦ-а за РТЦ модул:
Комплетан програм за Дигитални сат се може преузети са ЗИП фајл овде. Програм укључује укупно три датотеке заглавља. Они су датотека лцд.х за рад са ЛЦД екраном, датотека ПИЦ16Ф877а_И2Ц.х за рад са И2Ц комуникацијом са ПИЦ-ом и на крају ПИЦ16Ф877а_ДС3231.х датотека за рад са РТЦ модулима. Све три датотеке заглавља су потребне за овај програм и доступне су у ЗИП датотеци изнад. Даље у наставку објаснићу главни програм који користи све ове датотеке заглавља за читање времена и датума са РТЦ модула и приказивање на ЛЦД екрану. Након тога ћу објаснити шта се заправо догађа у датотеци заглавља РТЦ. Као и увек започните програм постављањем конфигурационих битова и подешавањем фреквенције такта на 20МХз, јер је то оно што смо користили у нашем хардверу.
#прагма цонфиг ФОСЦ = ХС // Битови за одабир осцилатора (ХС осцилатор) #прагма цонфиг ВДТЕ = ОФФ // Бит Ватцхер Енабле бит (ВДТ дисаблед) #прагма цонфиг ПВРТЕ = ОН // Повер-уп Тимер Енабле бит (ПВРТ енаблед) # прагма цонфиг БОРЕН = ОН // Бригхт-оут Ресет Енабле бит (БОР енаблед) #прагма цонфиг ЛВП = ОФФ // Бит за омогућавање серијског програмирања у кругу ниског напона (једно напајање) (РБ3 је дигитални И / О, укључен ХВ МЦЛР се мора користити за програмирање) #прагма цонфиг ЦПД = ОФФ // Бит заштите података ЕЕПРОМ меморијског кода (заштита ЕЕПРОМ кода података искључена) #прагма цонфиг ВРТ = ОФФ // Фласх програмирање меморије Омогућавање битова (Заштита записа; сва програмска меморија може се уписати на ЕЕЦОН контролу) #прагма цонфиг ЦП = ОФФ // Бит програма за заштиту меморијског кода Фласх програма (заштита кода искључена) #дефине _КСТАЛ_ФРЕК 20000000
Следећи корак био би дефинисање ЛЦД пинова, ако погледате хардвер можете приметити да смо пинове ЛЦД повезали на ПОРТ Д са РД2 на РД7, па дефинишемо исто као што је приказано доле.
#дефине РС РД2 #дефине ЕН РД3 #дефине Д4 РД4 #дефине Д5 РД5 #дефине Д6 РД6 #дефине Д7 РД7
Када сте купили РТЦ модул, подразумевано неће бити постављено тачно време и датум, па га морамо подесити кроз наш програм. Дакле, декларишемо променљиву за сваки податак и феед у реалном времену и датуму као што је приказано у наставку. У време отпремања програма, моје време и датум су били 10:55 ујутру 6-5-2018, тако да сам променљиве подесио као доле. Можете да подесите тачно време и датум према вашој стварној пријави
/ * Подесите тренутну вредност датума и времена испод * / инт сец = 00; инт мин = 55; инт сат = 10; инт датум = 06; инт месец = 05; инт година = 18; / * Подешавање времена и датума * /
Даље додајемо све датотеке заглавља о којима смо разговарали. Ако сте програм преузели и отворили из ЗИП датотеке, то неће представљати проблем, јер постарајте се да су све датотеке заглавља додате у вашу изворну датотеку или у директоријум вашег пројекта.
#инцлуде
Будући да смо користили ПОРТ Д као излазне пинове за повезивање ЛЦД-а, морамо их декларисати као излазне пинове у нашем програму и иницијализирати ЛЦД заслон као што је приказано испод
ТРИСД = 0к00; // Направите пинове за порт Д као излазне за повезивање ЛЦД-а Лцд_Старт (); // Иницијализација ЛЦД модула
РТЦ модул комуницира уз помоћ И2Ц протокола, тако да морамо омогућити И2Ц комуникацију нашим ПИЦ микроконтролером. Већина уређаја, укључујући наше ДС3231 модуле, имају И2Ц радну фреквенцију од 100КХз, тако да започињемо И2Ц комуникацију са фреквенцијом од 100КХз као што је приказано испод
И2Ц_Инитиализе (100); // Иницирајте И2Ц Мастер са тактом од 100КХз
Чим успоставимо И2Ц комуникацију са РТЦ модулом, прво што радимо је подешавање тренутног времена и датума које смо унели у наш програм. То се може учинити позивањем функције сет_Тиме_Дате, као што је приказано доле. Једном када се поставе време и датум, модул ће их аутоматски пратити и увећавати као дигитални сат.
Сет_Тиме_Дате (); // подесимо време и датум на РТЦ модулу
Да бисмо назначили да је програм покренут, приказаћемо малу уводну поруку која ће остати на екрану 2 секунде. Ова порука ће приказати РТЦ са ПИЦ-Цирцуит Дигест на екрану. Програм за исти приказан је у наставку
Лцд_Цлеар (); Лцд_Сет_Цурсор (1,1); Лцд_Принт_Стринг ("РТЦ са ПИЦ-ом"); Лцд_Сет_Цурсор (2,1); Лцд_Принт_Стринг ("-Скупљање кругова"); __делаи_мс (1500);
Унутар наше бесконачне вхиле петље да би требало прочитати тренутно време и датум, а затим приказује вредности у нашем ЛЦД екрану. За читање времена и датума из РТЦ модула може се користити функција Упдате_Цуррент_Тиме_Дате, као што је приказано доле. Ова функција ће очитати вредност из РТЦ модула и ажурирати променљиве сек, мин, сат, датум, месец и годину са тренутним вредностима. Тада их можемо користити за своју сврху.
Упдате_Цуррент_Дате_Тиме (); // Очитавање тренутног датума и времена из РТЦ модула
Варијабле су целобројног типа података, морамо их претворити у појединачне знакове како бисмо их могли приказати на ЛЦД екрану. Дакле, користимо оператор модула да бисмо добили једноцифрену вредност и поделили променљиву са 10 да бисмо добили цифру десетица. Исто се ради за све променљиве.
// Поделимо на цхар за приказ на лцд цхар сец_0 = сец% 10; цхар сец_1 = (сец / 10); цхар мин_0 = мин% 10; цхар мин_1 = мин / 10; цхар сат_0 = сат% 10; цхар хоур_1 = сат / 10; цхар дате_0 = датум% 10; цхар дате_1 = датум / 10; цхар месец_0 = месец% 10; цхар месец_1 = месец / 10; цхар иеар_0 = година% 10; цхар иеар_1 = година / 10;
Преостало је само приказивање информација које смо стекли на ЛЦД екрану. То се лако може урадити помоћу ЛЦД функција о којима смо претходно разговарали у нашем водичу за ЛЦД. Дакле, код за приказ времена је дат испод, исти метод се користи и за приказ датума. Кашњење од 500 мс се даје након приказивања података тако да делује као интервал ажурирања.
Лцд_Цлеар (); Лцд_Сет_Цурсор (1,1); Лцд_Принт_Стринг ("ТИМЕ:"); Лцд_Принт_Цхар (хоур_1 + '0'); Лцд_Принт_Цхар (хоур_0 + '0'); Лцд_Принт_Цхар (':'); Лцд_Принт_Цхар (мин_1 + '0'); Лцд_Принт_Цхар (мин_0 + '0'); Лцд_Принт_Цхар (':'); Лцд_Принт_Цхар (сец_1 + '0'); Лцд_Принт_Цхар (сец_0 + '0');
Кратко објашњење датотеке заглавља ПИЦ16Ф877а_ДС3231.х:
До сада објашњене ствари довољне су за употребу модула ДС3231 са ПИЦ-ом за ваше пројекте, али знатижељници тамо би волели да знају шта се заправо дешава у датотеци заглавља, а ПИЦ податке заправо добија из РТЦ модула. читај даље.
Најбољи начин да то прођете је потпуно читање техничког листа ДС3231. Да би дао кратак преглед онога што је потребно, модул делује као славе ПИЦ-а и адреса свих ДС3231 модула је Д0. Дакле, упишите податке у модул морамо проследити адресу Д0, а за читање података из РТЦ морамо проследити адресу Д1. Ако проследимо адресу за уписивање РТЦ модула, припремамо се за преузимање података из ПИЦ-а, тако да ће последични подаци које је написао ПИЦ бити примљени и сачувани у РТЦ модулу. Слично томе ако пошаљемо адресу за Реадтада би се ПИЦ требао припремити за читање вредности са РТЦ-а, јер ће РТЦ модул почети да шаље све податке које има. Редослед битова и за Д0 и за Д1 приказан је у наставку из листа са подацима. Обратите пажњу да адреса 0б11010000 значи Д0 (уписивање), а 0б11010001 ознака Д01 (читање)
Када ПИЦ пошаље адресу Д0 или Д1 било да напише или прочита, следећи подаци треба да читају или уписују по редоследу. Овај редослед је приказан у доњој табели. Дакле, први подаци ће бити сек (00х), праћени минутима (01х), затим сатима (02х), затим даном (03х) и до МСБ температуре.
РТЦ модул не разуме децималне вредности, он комуницира само кроз БЦД вредности. Дакле, пре уписивања било каквих вредности у РТЦ модул треба га претворити у БЦД, а такође ће вредности примљене из РТЦ модула бити у БЦД формату и претворити у децималне да би за нас имало смисла. Имајући ово на уму омогућава креирање свих функција потребних за употребу РТЦ модула.
Функције БЦД_2_ДЕЦ и ДЕЦ_2_БЦД:
Прве две функције користиле би се за претварање БЦД података у децималне, а децималне у БЦД јер РТЦ модул разуме само БЦД. Формуле за претварање БЦД у децимални и за БЦД у децимални је
Децимал = (БЦД >> 4) * 10 + (БЦД & 0к0Ф) БЦД = ((Децимал / 10) << 4) + (Децимал% 10)
Морамо само да користимо ове две формуле да бисмо креирали функцију која узима супротну јединицу као параметар и претвара је у потребан формат и враћа, функција за исто је приказана испод
инт БЦД_2_ДЕЦ (инт то_цонверт) { ретурн (то_цонверт >> 4) * 10 + (то_цонверт & 0к0Ф); } инт ДЕЦ_2_БЦД (инт то_цонверт) { ретурн ((то_цонверт / 10) << 4) + (то_цонверт% 10); }
Функција Сет_Тиме_Дате ():
Ова функција ће записати вредност времена и датума из ПИЦ-а у РТЦ модул. Корисник вредности стварног времена и датума мора да ажурира у променљивим сец, мин, сат, датум, месец и годину. Те вредности ће се затим претворити у БЦД и уписати у РТЦ модул.
Као што смо разговарали, да бисмо записали вредност у РТЦ модул, морамо проследити адресу Д0 и написати билов бит 0 да започнемо процес писања. Тада податке можемо послати редоследом како је приказано у горњој табели.
воид Сет_Тиме_Дате () { И2Ц_Бегин (); И2Ц_Врите (0кД0); И2Ц_Врите (0); И2Ц_Врите (ДЕЦ_2_БЦД (сек)); // ажурирање сек И2Ц_Врите (ДЕЦ_2_БЦД (мин)); // ажурирање мин И2Ц_Врите (ДЕЦ_2_БЦД (сат)); // ажурирање сата И2Ц_Врите (1); // занемаримо ажурирање дана И2Ц_Врите (ДЕЦ_2_БЦД (датум)); // датум ажурирања И2Ц_Врите (ДЕЦ_2_БЦД (месец)); // ажурирање месеца И2Ц_Врите (ДЕЦ_2_БЦД (година)); // ажурирање године И2Ц_Енд (); }
Функција Упдате_Цуррент_Дате_Тиме ():
Последња функција у библиотеци је она која се користи за очитавање времена и датума са РТЦ модула и прослеђивање га ПИЦ микроконтролеру. Ова функција је подељена на три сегмента, један за покретање процеса читања, други за читање вредности и чување у глобалним променљивим као што су сец, мин, сат, датум, месец и година. И треће је признати да је читање било успешно.
Приметите да за сваку акцију треба започети и завршити И2Ц комуникацију.
Да бисмо очитали вредности из РТЦ-а, морамо послати адресу Д0 праћену 0. То ће учинити да РТЦ модул пошаље све вредности које има у редоследу приказаном у горњој табели. Можемо их само прочитати како их претварају у децималне и чувају у променљиве у истом редоследу.
Коначно, након читања РТЦ модул ће послати бит потврде који такође треба прочитати и потврдити.
воид Упдате_Цуррент_Дате_Тиме () { // СТАРТ за читање И2Ц_Бегин (); И2Ц_Врите (0кД0); И2Ц_Врите (0); И2Ц_Енд (); // ПРОЧИТАЈ И2Ц_Бегин (); И2Ц_Врите (0кД1); // Иницијализација читања података сец = БЦД_2_ДЕЦ (И2Ц_Реад (1)); мин = БЦД_2_ДЕЦ (И2Ц_Реад (1)); сат = БЦД_2_ДЕЦ (И2Ц_Реад (1)); И2Ц_Реад (1); датум = БЦД_2_ДЕЦ (И2Ц_Реад (1)); месец = БЦД_2_ДЕЦ (И2Ц_Реад (1)); година = БЦД_2_ДЕЦ (И2Ц_Реад (1)); И2Ц_Енд (); // КРАЈ Читање И2Ц_Бегин (); И2Ц_Врите (0кД1); // иницијализација података прочитаних И2Ц_Реад (1); И2Ц_Енд (); }
Симулација:
Пројекат се може симулирати помоћу софтвера за симулацију Протеус. Успоставите везе како је приказано на схеми кола и учитајте хек датотеку у ПИЦ контролер. Када га симулирате, пронаћи ћете два искачућа оквира и датум и време приказани на ЛЦД-у, као што је приказано доле.
Мали на врху приказује време и датум који су актуелни унутар РТЦ модула, а други искачући прозор је И2Ц програм за отклањање грешака. Одличан је алат за проверу података који се заправо прослеђују у И2Ц грешку.
Приказ времена и датума на ЛЦД-у:
Након што хардвер буде спреман и код се преузме као ЗИП датотека путем дате везе, отворите програм помоћу МПЛАБКС ИДЕ. Прво морате да покренете ИДЕ и користите опцију отвореног пројекта и претражите садржај унутар ЗИП датотеке и отворите.Кс фасциклу.
Једноставно проверите да ли програм компајлира и отпремите код у свој хардвер помоћу ПицКит3. Чим се програм отпреми, требало би да видите уводну поруку, а затим би требало приказати време и датум као што је приказано доле.
Ако на ЛЦД-у нема ничега, проверите везе и проверите да ли је ниво контраста правилно подешен променом потенциометра. То је начин на који можете приказати време и датум свим својим пројектима ПИЦ микроконтролера и можете то користити као дигитални сат. Надам се да сте научили нешто ново и уживали сте у учењу овог водича. Ако сте наишли на било какав проблем, објавите их у коментарима испод или на форумима ради техничке помоћи.
Преузмите комплетан ПИЦ програм за овај пројекат са заглављним датотекама одавде и даље погледајте све ПИЦ туторијале овде.