- Шта је И2Ц комуникацијски протокол?
- Како функционише И2Ц комуникација?
- Где користити И2Ц комуникацију?
- И2Ц у МСП430: Управљање дигиталним потенциометром АД5171
МСП430 је моћна платформа коју Текас Инструментс пружа за уграђене пројекте, због своје свестране природе проналази начине за многе примене, а фаза још увек траје. Ако сте пратили наше водиче за МСП430, тада бисте приметили да смо већ покривали широк спектар водича о овом микроконтролеру, почевши од самих основа. Од сада смо покрили основе како можемо ући у занимљивије ствари попут комуникацијског портала.
У огромном систему уграђених апликација ниједан микроконтролер не може сам да обавља све активности. У некој фази времена мора да комуницира са другим уређајима да би размењивао информације, постоји много различитих врста комуникационих протокола за дељење ових информација, али најчешће коришћени су УСАРТ, ИИЦ, СПИ и ЦАН. Сваки комуникацијски протокол има своју предност и недостатак. Усредсредимо се за сада на И2Ц део, јер ћемо то научити у овом упутству.
Шта је И2Ц комуникацијски протокол?
Термин ИИЦ означава „ Интер интегрисани кругови “. Обично се означава као И2Ц или И на квадрат Ц или чак као протокол двожичног интерфејса (ТВИ) на неким местима, али све то значи исто. И2Ц је синхрони комуникацијски протокол, што значи да оба уређаја који деле информације морају да деле заједнички сигнал сата. Има само две жице за размену информација од којих се једна користи за сигнал славине, а друга за слање и примање података.
Како функционише И2Ц комуникација?
И2Ц комуникацију је први представио Пхиллипс. Као што је раније речено, има две жице, те две жице ће бити повезане преко два уређаја. Овде се један уређај назива мастер, а други уређај се назива славе. Комуникација треба и увек ће се одвијати између двоје господара и роба. Предност И2Ц комуникације је у томе што се на Мастер може повезати више подређених уређаја.
Комплетна комуникација одвија се кроз ове две жице, наиме, серијски сат (СЦЛ) и серијски подаци (СДА).
Серијски сат (СЦЛ): Дијели сигнал такта који генерира мастер са подређеним уређајем
Серијски подаци (СДА): шаље податке главном и подређеном између и између њих.
У било ком тренутку само ће мастер моћи да започне комуникацију. Будући да је у магистрали више од једног подређеног уређаја, мастер мора да се односи на сваког подређеног користећи другу адресу. Када им се обрати само подређени с том одређеном адресом, одговориће са информацијама, док ће остали наставити да дају отказ. На овај начин можемо користити исту магистралу за комуникацију са више уређаја.
На ниво напона на И2Ц нису предефинисани. И2Ц комуникација је флексибилна, значи уређај који се напаја напоном од 5в, може користити 5в за И2Ц, а уређаји од 3.3в могу користити 3в за И2Ц комуникацију. Али шта ако два уређаја који раде на различитим напонима треба да комуницирају помоћу И2Ц? 5В И2Ц бус не може да се повеже са 3.3В уређајем. У овом случају се мењачи напона користе за усклађивање нивоа напона између две И2Ц магистрале.
Постоје неки услови који уоквирују трансакцију. Иницијализација преноса започиње падајућом ивицом СДА, што је дефинисано као услов „СТАРТ“ на доњем дијаграму где мастер оставља СЦЛ висок док је СДА низак.
Као што је приказано на горњем дијаграму испод, Пад СДА је хардверски окидач за стање СТАРТ. Након тога сви уређаји на истој магистрали прелазе у режим слушања.
На исти начин, растућа ивица СДА зауставља пренос који је приказан као услов 'СТОП' на горњем дијаграму, где мастер оставља СЦЛ високо и такође пушта СДА да иде ВИСОКО. Дакле, успон ивице СДА зауставља пренос.
Р / В бит означава смер преноса следећих бајтова, ако је ВИСОК, значи да ће славе преносити, а ако је низак, значи да ће главни преносити.
Сваки бит се преноси у сваком циклусу такта, па је потребно 8 циклуса такта да би се пренео бајт. Након сваког послатог или примљеног бајта, одржава се девети циклус такта за АЦК / НАЦК (потврђено / неприхваћено). Овај АЦК бит генерира славе или мастер у зависности од ситуације. За АСР бит СДА је постављен на најнижу од мастер или славе на 9 -ог циклусу. Дакле, ниско се сматра АЦК, иначе НАЦК.
Где користити И2Ц комуникацију?
И2Ц комуникација се користи само за комуникацију на кратким удаљеностима. Свакако је поуздан у одређеној мери јер има синхронизовани импулс сата који га чини паметним. Овај протокол се углавном користи за комуникацију са сензором или другим уређајима који морају да шаљу информације мастеру. Врло је згодно када микроконтролер мора да комуницира са многим другим помоћним модулима користећи најмање само жице. Ако тражите комуникацију на дуге домете, требало би да испробате РС232, а ако тражите поузданију комуникацију требало би да испробате СПИ протокол.
И2Ц у МСП430: Управљање дигиталним потенциометром АД5171
Енергиа ИДЕ је један од најлакших програма за програмирање нашег МСП430. То је исто као и Ардуино ИДЕ. Овде можете сазнати више о томе како започети са МСП430 користећи Енергиа ИДЕ.
Дакле, да бисмо користили И2Ц у програму Енергиа ИДЕ, морамо само да укључимо датотеку заглавља вире.х. Декларација пин-а (СДА и СЦЛ) налази се у жичној библиотеци, тако да не морамо да пријављујемо у функцији подешавања .
Примери примера могу се наћи у менију Пример ИДЕ-а. У наставку је објашњен један од примера:
Овај пример показује како се контролише аналогни уређај АД5171 дигитални потенциометар који комуницира путем синхроног серијског протокола И2Ц. Користећи МСП-ову библиотеку жица И2Ц, дигитални пот ће проћи кроз 64 нивоа отпора, бледећи ЛЕД.
Прво ћемо укључити библиотеку одговорну за и2ц комуникацију, тј. Жичану библиотеку
#инцлуде
У функцији подешавања покренућемо жичану библиотеку помоћу функције.бегин () .
воид сетуп () { Вире.бегин (); }
Затим иницијализујте променљиву вал да бисте сачували вредности потенциометра
бајт вал = 0;
У функцији петље започињемо пренос на и2ц подређени уређај (у овом случају Дигитални потенциометар ИЦ) навођењем адресе уређаја која је дата у техничком листу ИЦ.
воид лооп () { Вире.бегинТрансмиссион (44); // пренос на уређај бр. 44 (0к2ц)
После тога ставите бајтове у ред, односно податке које желите да пошаљете ИЦ-у на пренос помоћу функције врите () .
Вире.врите (бајт (0к00)); // шаље бајт инструкције Вире.врите (вал); // шаље бајт вредности потенциометра
Затим их пренесите позивом ендТрансмиссион () .
Вире.ендТрансмиссион (); // заустављање преноса вал ++; // вредност прираштаја иф (вал == 64) {// ако је достигнута 64. позиција (мак) вал = 0; // започињемо испочетка од најниже вредности } делаи (500); }