- Захтеви:
- Програмирање ПИЦ микроконтролера за УАРТ комуникацију:
- Симулирање нашег програма:
- Постављање хардвера и тестирање резултата:
У овом упутству учимо како да омогућимо УАРТ комуникацију са ПИЦ микроконтролером и како преносимо податке на и са рачунара. До сада смо покрили све основне модуле попут АДЦ-а, тајмера, ПВМ-а, а такође смо научили и како се повезују ЛЦД и 7-сегментни дисплеји. Сада ћемо опремити себе новим алатом за комуникацију названим УАРТ који се широко користи у већини пројеката микроконтролера. Овде погледајте наше комплетне Водиче за ПИЦ микроконтролере који користе МПЛАБ и КСЦ8.
Овде смо користили ПИЦ16Ф877А МЦУ, он има модул назван „Адресибилни универзални синхрони асинхрони пријемник и одашиљач“, кратко познат као УСАРТ. УСАРТ је двожични комуникациони систем у којем подаци серијски теку. УСАРТ је такође фулл-дуплек комуникација, што значи да можете истовремено слати и примати податке који се могу користити за комуникацију са периферним уређајима, као што су ЦРТ терминали и лични рачунари.
УСАРТ се може конфигурисати у следећим режимима:
- Асинхрони (фулл-дуплек)
- Синхрони - Мастер (полудуплекс)
- Синхрони - Славе (полудуплекс)
Постоје и два различита режима, наиме 8-битни и 9-битни режим, у овом упутству ћемо конфигурисати УСАРТ модул за рад у асинхроном режиму са 8-битним системом комуникације, јер је то најчешће коришћена врста комуникације. Како је асинхрони, не мора да шаље сигнал сата заједно са сигналима података. УАРТ користи две линије података за слање (Тк) и пријем (Рк) података. Уземљење оба уређаја такође треба учинити заједничким. Ова врста комуникације не дели заједнички сат, па је заједничко тло веома важно за систем.
На крају овог упутства моћи ћете да успоставите комуникацију (УАРТ) између свог рачунара и вашег ПИЦ микроконтролера и да укључите ЛЕД на ПИЦ плочи са свог лаптопа. Статус ЛЕД диоде биће послат на ваш преносни рачунар са ПИЦ МЦУ-а. Тестираћемо излаз користећи Хипер Терминал у рачунару. Детаљан видео је дат и на крају овог водича.
Захтеви:
Хардвер:
- ПИЦ16Ф877А Перф Боард
- РС232 у УСБ претварачки модул
- рачунар
- Програмер ПИЦкит 3
Софтвер:
- МПЛАБКС
- ХиперТерминал
За претварање серијских података у компјутерски читљив облик потребан је претварач РС232 у УСБ. Постоје начини да дизајнирате сопствено коло уместо да купите сопствени модул, али нису поуздани јер су изложени буци. Она коју користимо приказана је у наставку
Напомена: Сваки РС232 у УСБ претварач захтевао би инсталирање посебног управљачког програма; већина њих би се требала аутоматски инсталирати чим прикључите уређај. Али, ако се не опусти !!! Користите одељак за коментаре и ја ћу вам помоћи.
Програмирање ПИЦ микроконтролера за УАРТ комуникацију:
Као и сви модули (АДЦ, тајмер, ПВМ), такође бисмо требали иницијализовати наш УСАРТ модул нашег ПИЦ16Ф877А МЦУ- а и упутити га да ради у УАРТ 8-битном режиму комуникације. Дефинишемо конфигурационе битове и започнимо са функцијом УАРТ иницијализације.
Иницијализација УАРТ модула ПИЦ микроконтролера:
Клинови Тк и Рк су физички присутни на клиновима РЦ6 и РЦ7. Према табели података, прогласимо ТКС излазом, а РКС улазом.
// **** Подешавање И / О пинова за УАРТ **** // ТРИСЦ6 = 0; // ТКС пин постављен као излаз ТРИСЦ7 = 1; // РКС пин постављен као улаз // ________ И / О пинс сет __________ //
Сада треба подесити брзину преноса. Брзина пријеноса је брзина којом се информације преносе у комуникационом каналу. Ово може бити једна од многих задатих вредности, али у овом програму користимо 9600 од своје најчешће коришћене брзине преноса.
/ ** Иницијализовати СПБРГ регистар за потребну брзину преноса података и подесити БРГХ за брзу брзину преноса ** / СПБРГ = ((_КСТАЛ_ФРЕК / 16) / Бауд_рате) - 1; БРГХ = 1; // за високу брзину преноса // _________ Подешавање краја брзине преноса _________ //
Вредност брзине преноса мора се подесити помоћу регистра СПБРГ, вредност зависи од вредности екстерне фреквенције кристала, формуле за израчунавање брзине преноса приказане су испод:
СПБРГ = ((_КСТАЛ_ФРЕК / 16) / Бауд_рате) - 1;
Бит БРГХ мора бити висок како би се омогућила брзина брзине протока. Према техничком листу (страница 13), увек је корисно то омогућити, јер може елиминисати грешке током комуникације.
Као што је раније речено, радићемо у асинхроном режиму, стога бит СИНЦ треба учинити нулом, а бит СПЕМ високом да би се омогућили серијски пинови (ТРИСЦ6 и ТРИЦСЦ5)
// **** Омогући асинхрони серијски порт ******* // СИНЦ = 0; // Асинхрони СПЕН = 1; // Омогући пинове серијског порта // _____ Омогућен асинхрони серијски порт _______ //
У овом упутству ћемо слати и примати податке између МЦУ-а и рачунара, па морамо омогућити и ТКСЕН и ЦРЕН битове.
// ** Омогућимо припрему за пренос и пријем ** // ТКСЕН = 1; // омогућити пренос ЦРЕН = 1; // омогућити пријем // __ УАРТ модул је спреман за пренос и пријем __ //
У бита ТКС9 и РКС9 морају бити нула тако да раде у 8-битном моду. Ако треба успоставити високу поузданост, тада се може одабрати 9-битни режим.
// ** Изаберите 8-битни режим ** // ТКС9 = 0; // изабрани 8-битни пријем РКС9 = 0; // одабран 8-битни режим пријема // __ одабран 8-битни режим __ //
Овим завршавамо подешавање иницијализације. и спреман је за рад.
Пренос података помоћу УАРТ-а:
Следећа функција се може користити за пренос података кроз УАРТ модул:
// ** Функција за слање једног бајта датума у УАРТ ** // воид УАРТ_сенд_цхар (цхар бт) {вхиле (! ТКСИФ); // држимо програм док ТКС бафер не буде слободан ТКСРЕГ = бт; // Учитајте ме успремник предајника са примљеном вредношћу} // _____________ Крај функције ________________ //
Једном када је модул иницијализован, било која вредност учитана у регистар ТКСРЕГ ће се преносити путем УАРТ-а, али пренос се може преклапати. Стога би увек требало да проверимо заставицу прекида преноса ТКСИФ. Само ако је овај бит низак, можемо наставити са следећим битом за пренос, у супротном треба сачекати да се ова заставица смањи.
Међутим, горња функција се може користити само за слање само једног бајта података, а за слање комплетног низа треба користити доњу функцију
// ** Функција за претварање низа у бајт ** // воид УАРТ_сенд_стринг (цхар * ст_пт) {вхиле (* ст_пт) // ако постоји цхар УАРТ_сенд_цхар (* ст_пт ++); // обрадити га као бајт податке} // ___________ Крај функције ______________ //
Ову функцију је можда мало незгодно разумети јер има показиваче, али верујте ми да су показивачи дивни и олакшавају програмирање и ово је један добар пример за то.
Као што можете приметити, поново смо позвали УАРТ_сенд_цхар (), али сада унутар вхиле петље. Низ смо поделили на појединачне знакове, сваки пут када се ова функција позове, један знак ће бити послат на ТКСРЕГ и биће пренет.
Пријем података помоћу УАРТ:
Следећа функција се може користити за примање података из УАРТ модула:
// ** Функција за добијање једног бајта датума из УАРТ-а ** // цхар УАРТ_гет_цхар () {иф (ОЕРР) // провера грешке {ЦРЕН = 0; // Ако је грешка -> Ресетуј ЦРЕН = 1; // Ако је грешка -> Ресетуј} вхиле (! РЦИФ); // задржавање програма док РКС бафер не буде слободан повратак РЦРЕГ; // прими вредност и пошаљи је главној функцији} // _____________ Крај функције ________________ //
Када УАРТ модул прими податке, он их преузима и чува у регистру РЦРЕГ. Вредност једноставно можемо пренети у било коју променљиву и користити је. Али можда постоји грешка у преклапању или корисник можда непрекидно шаље податке, а ми их још увек нисмо пренели у променљиву.
У том случају, бит за примање заставице РЦИФ долази у помоћ. Овај бит ће се смањити кад год се подаци приме и још нису обрађени. Стога га користимо у вхиле петљи стварајући кашњење да задржимо програм док се не позабавимо том вредношћу.
Укључивање ЛЕД диоде помоћу УАРТ модула ПИЦ микроконтролера:
Сада ћемо доћи до завршног дела Програма, функције воид маин (воид) , где ћемо укључити ЛЕД преко рачунара користећи УАРТ комуникацију између ПИЦ-а и рачунара.
Када пошаљемо знак „1“ (са рачунара) ЛЕД ће се укључити, а статусна порука „ЦРВЕНИ ЛЕД -> УКЉУЧЕНО“ ће се послати назад (са ПИЦ МЦУ) на рачунар.
На сличан начин шаљемо знак „0“ (са рачунара) ЛЕД ће се ИСКЉУЧИТИ, а статусна порука „ЦРВЕНА ЛЕД -> ИСКЉУЧЕНА“ ће се послати назад (са ПИЦ МЦУ) на рачунар.
вхиле (1) // Бесконачна петља {гет_валуе = УАРТ_гет_цхар (); иф (гет_валуе == '1') // Ако корисник пошаље "1" {РБ3 = 1; // Укључивање ЛЕД УАРТ_сенд_стринг ("ЦРВЕНИ ЛЕД -> УКЉУЧЕН)"; // Пошаљите обавештење рачунару УАРТ_сенд_цхар (10); // АСЦИИ вредност 10 користи се за повратак кочије (за испис у новом реду)} иф (гет_валуе == '0') // Ако корисник пошаље „0“ {РБ3 = 0; // Искључивање ЛЕД УАРТ_сенд_стринг ("ЦРВЕНО -> ИСКЉУЧЕНО"); // Пошаљите обавештење рачунару УАРТ_сенд_цхар (10); // АСЦИИ вредност 10 се користи за враћање кочије (за штампање у новом реду)}}
Симулирање нашег програма:
Као и обично, симулирајмо наш програм помоћу протеуса и сазнајмо да ли ради како се очекује.
Горња слика приказује виртуелни терминал у којем приказује поруку добродошлице и статус ЛЕД диоде. Примећује се да је црвена ЛЕД диода повезана на пин РБ3. Детаљан рад симулације налази се у видеу на крају.
Постављање хардвера и тестирање резултата:
Веза за овај круг је заиста једноставна, користимо нашу ПИЦ Перф плочу и само повежемо три жице на РС232 у УСБ претварач и повежемо модул са нашим рачунаром помоћу УСБ кабла за пренос података како је приказано доле.
Затим инсталирамо Хипер Терминал апликацију (преузмите је одавде) и отворите је. Требало би да покаже овако нешто
Сада отворите Девице Манагер на рачунару и проверите на који Цом порт је повезан ваш модул, мој је повезан на ЦОМ порт 17 као што је приказано доле
Напомена: Назив ЦОМ порта за ваш модул може се променити у зависности од вашег добављача, то није проблем.
Сада се вратите на Хипер Терминал Апплицатион и идите на Сет Уп -> Порт Цонфигуратион или притисните Алт + Ц, да бисте добили следећи искачући оквир и у искачућем прозору одаберите жељени порт (ЦОМ17 у мом случају) и кликните на цоннецт.
Једном када се веза успостави, укључите ПИЦ перф плочу и требали бисте видети нешто попут овога у наставку
Држите курсор у командном прозору и унесите 1, а затим притисните ентер. ЛЕД ће се укључити и статус ће бити приказан као што је приказано доле.
На исти начин, задржите курсор у Цомманд Виндов и унесите 0, а затим притисните ентер. ЛЕД ће се искључити и статус ће бити приказан као што је приказано доле.
Испод су дати комплетни код и детаљан видео, који ће показати како ЛЕД реагује у реалном времену за „1“ и „0“.
То је то, момци, повезали смо ПИЦ УАРТ са нашим рачунаром и пренели податке за пребацивање ЛЕД диоде помоћу Хипер терминала. Надам се да сте разумели, ако не, користите одељак за коментаре да бисте поставили своје питање. У следећем упутству ћемо поново користити УАРТ, али ћемо га учинити занимљивијим помоћу Блуетоотх модула и преносити податке у етер.
Такође проверите УАРТ комуникацију између два АТмега8 микроконтролера и УАРТ комуникацију између АТмега8 и Ардуино Уно.