- Шта је СПИ комуникацијски протокол?
- Како СПИ протокол ради?
- Разлика између И2Ц и СПИ комуникације
- СПИ са ПИЦ16Ф877А користећи КСЦ8 компајлер:
- Објашњење датотеке СПИ заглавља:
- Главни програм Објашњење:
- Симулација ПИЦ-а са СПИ програмом за отклањање погрешака:
ПИЦ микроконтролери су моћна платформа коју пружа микрочип за уграђене пројекте; његова свестрана природа му је омогућила да пронађе начине за примену у многим апликацијама, а тек треба да нарасте. Ако сте пратили наше ПИЦ водиче, тада бисте приметили да смо већ покривали широк спектар водича о ПИЦ микроконтролеру, почевши од самих основа. У истом току настављамо са учењем комуникационих протокола доступних са ПИЦ-ом и како их користити. И2Ц смо већ покрили ПИЦ микроконтролером.
У огромном систему уграђених апликација ниједан микроконтролер не може сам да обавља све активности. У некој фази времена мора да комуницира са другим уређајима да би размењивао информације, постоји много различитих врста комуникационих протокола за дељење ових информација, али најчешће коришћени су УСАРТ, ИИЦ, СПИ и ЦАН. Сваки комуникацијски протокол има своју предност и недостатак. За сада се фокусирајмо на СПИ протокол, јер ћемо то научити у овом упутству.
Шта је СПИ комуникацијски протокол?
Термин СПИ означава „ серијски периферни интерфејс “. То је уобичајени комуникацијски протокол који се користи за слање података између два микроконтролера или за читање / писање података са сензора на микроконтролер. Такође се користи за комуникацију са СД картицама, регистрима смена, контролерима екрана и многим другим.
Како СПИ протокол ради?
СПИ комуникација је синхрона комуникација, што значи да ради уз помоћ сигнала сата који се дели између два уређаја који размењују податке. Такође, то је и дуплекс комуникација, јер може да шаље и прима податке помоћу засебне магистрале. За рад СПИ комуникације потребно је 5 жица. Једноставан СПИ комуникациони круг између главног и помоћног уређаја приказан је у наставку
Пет жица потребних за комуникацију су СЦК (серијски сат), МОСИ (главни излаз за подређени улаз), МИСО (главни улаз за подређени излаз) и СС (одабир за подређени уређај). СПИ комуникација се увек одвија само између главног и славе. Господар може имати више робова повезаних са њим. Мастер је одговоран за генерисање такта и исти се дели са свим робовима. Такође све комуникације може покренути само мастер.
СЦК пин (ака СЦЛ-серијски сат) дели сигнал сата који генерише мастер са славе уређајима. МОСИ пин (ака СДА –Сериал Дата Оут) користи се за слање података од главног рачунара у салве. МИСО пин (ака СДИ - Сериал Дата Ин) користи се за добијање података од салве до главног. Такође можете пратити ознаку стрелице на горњој слици да бисте разумели кретање података / сигнала. Напокон, СС пин (ака ЦС –Цхип селецт) се користи када је на мастер повезано више модула. Ово се може користити за одабир потребног славе. Пример кола у коме је више од једног помоћног уређаја повезано са главним за СПИ комуникацију приказано је у доњем колу.
Разлика између И2Ц и СПИ комуникације
Већ смо научили И2Ц комуникацију са ПИЦ-ом, тако да морамо бити упознати са тим како И2Ц функционише и где их можемо користити као што се И2Ц може користити за повезивање РТЦ модула. Али сада, зашто нам је потребан СПИ протокол кад већ имамо И2Ц. Разлог су и комуникације И2Ц и СПИ предности на свој начин, а самим тим и специфичност примене.
У одређеној мери се може сматрати да И2Ц комуникација има неке предности у односу на СПИ комуникацију, јер И2Ц користи мањи број пинова и постаје врло згодан када је на магистралу повезан велики број подређених. Али недостатак И2Ц је у томе што има исту магистралу за слање и примање података, а самим тим је и успорен. Дакле, заснива се искључиво на апликацији за одлучивање између СПИ и И2Ц протокола за ваш пројекат.
СПИ са ПИЦ16Ф877А користећи КСЦ8 компајлер:
Доста основа, научимо сада како можемо да користимо СПИ комуникацију на микроконтролеру ПИЦ16Ф877А користећи МПЛАБКС ИДЕ и КСЦ8 компајлер. Пре него што почнемо да јасно ставимо до знања да овај водич говори само о СПИ у ПИЦ16Ф877а помоћу КСЦ8 компајлера, поступак ће бити исти и за друге микроконтролере, али можда ће бити потребне незнатне промене. Такође имајте на уму да за напредне микроконтролере попут серије ПИЦ18Ф сам компајлер можда има уграђену библиотеку која користи СПИ функције, али за ПИЦ16Ф877А ништа слично не постоји, па хајде да га сами направимо. Библиотека која је овде објашњена биће дата као заглавна датотека за преузимање на дну која се може користити за ПИЦ16Ф877А за комуникацију са другим СПИ уређајима.
У овом упутству ћемо написати мали програм који користи СПИ комуникацију за писање и читање података са СПИ магистрале. Затим ћемо исто верификовати помоћу Протеусове симулације. Сав код који се односи на СПИ регистре биће направљен унутар датотеке заглавља која се зове ПИЦ16ф877а_СПИ.х. На овај начин ову заглавну датотеку можемо користити у свим предстојећим пројектима у којима је потребна СПИ комуникација. А у главном програму ћемо само користити функције из заглавне датотеке. Комплетни код заједно са датотеком заглавља можете преузети овде.
Објашњење датотеке СПИ заглавља:
Унутар датотеке заглавља морамо иницијализовати СПИ комуникацију за ПИЦ16Ф877а. Као и увек најбоље место за почетак је технички лист ПИЦ16Ф877А. Регистри који контролишу СПИ комуникацију за ПИЦ16Ф8777а су ССПСТАТ и ССПЦОН регистар. О њима можете на страницама 74 и 75 листа са подацима.
Постоји много опција параметара које треба одабрати приликом иницијализације СПИ комуникације. Најчешће коришћена опција је да фреквенција такта буде постављена на Фосц / 4, а радиће се у средини, а сат ће бити постављен као низак у идеалном стању. Дакле, такође користимо исту конфигурацију за нашу датотеку заглавља, можете их лако променити променом одговарајућих битова.
СПИ_Инитиализе_Мастер ()
Функција СПИ иницијализације Мастер користи се за покретање СПИ комуникације као мастер. Унутар ове функције постављамо одговарајуће пинове РЦ5 и РЦ3 као излазне пинове. Затим конфигуришемо ССПТАТ и ССПЦОН регистар да укључују СПИ комуникацију
воид СПИ_Инитиализе_Мастер () { ТРИСЦ5 = 0; // ССПСТАТ = 0б00000000; // стр 74/234 ССПЦОН = 0б00100000; // стр. 75/234 ТРИСЦ3 = 0; // Постави као излаз за моду славе }
СПИ_Инитиализе_Славе ()
Ова функција се користи за подешавање микроконтролера да ради у славе режиму за СПИ комуникацију. Током славе режима пин РЦ5 треба поставити као излаз, а пин РЦ3 као улаз. ССПСТАТ и ССПЦОН су постављени на исти начин и за славе и за мастер.
воид СПИ_Инитиализе_Славе () { ТРИСЦ5 = 0; // СДО пин треба декларисати као излаз ССПСТАТ = 0б00000000; // стр 74/234 ССПЦОН = 0б00100000; // пг 75/234 ТРИСЦ3 = 1; // Постави као ван за главни режим }
СПИ_Врите (долазни знак)
Функција СПИ Врите користи се за уписивање података у СПИ магистралу. Информације од корисника добија путем променљиве долазно, а затим их користи за прослеђивање у регистар бафера. ССПБУФ ће се обрисати у узастопном импулсу сата и подаци ће се слати у сабирницу мало по мало.
воид СПИ_Врите (цхар долазно) { ССПБУФ = долазно; // Уписати податке дате кориснику у бафер }
СПИ_Реади2Реад ()
Функција СПИ спреман за читање користи се за проверу да ли су подаци у СПИ магистрали примљени у потпуности и могу ли се прочитати. ССПСТАТ регистар има бит који се зове БФ и који ће се поставити након што подаци у потпуности буду примљени, па проверавамо да ли је тај бит постављен ако није подешен, онда морамо сачекати док се не постави да чита било шта са СПИ магистрале.
непотписани СПИ_Реади2Реад () { иф (ССПСТАТ & 0б00000001) ретурн 1; елсе ретурн 0; }
СПИ_Реад ()
СПИ Реад се користи за очитавање података са СПИ магистрале у микроконтролер. Подаци присутни у СПИ магистрали чуваће се у ССПБУФ-у, морамо сачекати док се комплетни подаци не сачувају у међуспремнику, а затим их можемо прочитати у променљиву. Проверавамо БФ бит ССПСТАТ регистра пре читања међуспремника како бисмо били сигурни да је пријем података завршен.
цхар СПИ_Реад () // Прочитајте примљене податке { вхиле (! ССПСТАТбитс.БФ); // Задржи док се не постави БФ бит, како би били сигурни да се читају читави подаци ретурн (ССПБУФ); // повратак прочитаних података }
Главни програм Објашњење:
Функције објашњене у горњем одељку биће у заглављу датотеке и могу се позвати у главну ц датотеку. Па напишимо мали програм да проверимо да ли СПИ комуникација ради. Написаћемо само неколико података у СПИ магистралу и помоћу симулације протеуса проверити да ли се исти подаци примају у СПИ програм за отклањање грешака.
Као и увек започните програм постављањем конфигурационих битова, а затим је веома важно додати заглавље које смо управо објаснили у програм као што је приказано доле
#инцлуде
Ако сте програм отворили из зип датотеке преузете горе, тада ће датотека заглавља бити подразумевано присутна у директоријуму датотеке заглавља ваше датотеке пројекта. Иначе морате датотеку заглавља додати ручно у свој пројекат, а када додате датотеке пројекта, изгледаће овако у наставку
Унутар главне датотеке морамо иницијализовати ПИЦ као Мастер за СПИ комуникацију, а затим ћемо у бесконачну вхиле петљу уписати случајне три хексадецималне вредности у СПИ магистралу како бисмо проверили да ли их примамо током симулације.
воид маин () { СПИ_Инитиализе_Мастер (); вхиле (1) { СПИ_Врите (0Кс0А); __делаи_мс (100); СПИ_Врите (0Кс0Ф); __делаи_мс (100); СПИ_Врите (0Кс15); __делаи_мс (100); } }
Приметите да су случајне вредности коришћене у програму 0А, 0Ф и 15 и то су хексадецималне вредности, па бисмо то требали видети током симулације. То је то што је код завршен, ово је само узорак, али можемо користити исту методологију за комуникацију са другим МЦУ или са другим сензорским модулом који ради на СПИ протоколу.
Симулација ПИЦ-а са СПИ програмом за отклањање погрешака:
Сада када је наш програм спреман, можемо га компајлирати и наставити са симулацијом. Протеус има лепу практичну функцију названу СПИ програм за отклањање погрешака , који се може користити за надгледање података преко СПИ магистрале. Дакле, користимо исто и градимо коло као што је приказано доле.
Будући да у симулацији постоји само један СПИ уређај , не користимо СС пин, а када се не користи, требало би да буде уземљен као што је горе приказано. Само учитајте хек датотеку у микроконтролер ПИЦ16Ф877А и кликните на дугме за репродукцију да бисте симулирали наш програм. Једном када симулација започне, добићете искачући прозор који приказује податке у СПИ магистрали како је приказано доле
Погледајмо ближе податке који долазе и проверимо да ли су исти као они које смо написали у нашем програму.
Подаци се примају истим редоследом који смо написали у нашем програму и исти су истакнути за вас. Такође можете покушати да симулирате програм за комуникацију са два ПИЦ микроконтролера користећи СПИ протокол. Морате програмирати један ПИЦ као мастер, а други као славе. Све потребне датотеке заглавља за ову сврху већ су дате у датотеци заглавља.
Ово је само увид у то шта СПИ може да уради, такође може да чита и уписује податке на више уређаја. Више о СПИ ћемо обрадити у нашим предстојећим водичима повезивањем различитих модула који раде са СПИ протоколом.
Надам се да сте разумели пројекат и научили нешто корисно из њега. Ако сумњате, објавите их у одељку за коментаре испод или користите форуме за техничку помоћ.
Комплетни главни код је дат у наставку; датотеке заглавља са свим кодовима можете преузети одавде