- Шта је лупање битова?
- Када користити Бит Бангинг
- Алгоритам за серијску комуникацију путем разбијања битова
- Лупање бита преко СПИ
- Пример лупања битова: СПИ комуникација у Ардуину
- Мане Бит Баннинга
- УАРТ путем лупања битова у Ардуину
Комуникациони интерфејси су један од фактора који се узимају у обзир при одабиру микроконтролера који ће се користити за пројекат. Дизајнер осигурава да одабрани микроконтролер има све интерфејсе потребне за комуникацију са свим осталим компонентама које се користе за производ. Постојање неких од ових интерфејса попут СПИ и И2Ц на микроконтролеру непроменљиво повећава трошкове таквих микроконтролера, а у зависности од прорачуна специјалне спецификације жељени микроконтролер може учинити недоступним. У оваквим ситуацијама играју технике попут Бит Бангинга.
Шта је лупање битова?
Лупање битова је техника за серијску комуникацију у којој се целокупним комуникационим процесом управља путем софтвера уместо наменског хардвера. За пренос података, техника укључује употребу софтвера за кодирање података у сигнале и импулсе који се користе за манипулисање стањем И / О пина микроконтролера који служи као Тк пин за слање података на циљни уређај. За примање података, техника укључује узорковање стања Рк пина након одређених интервала, што је одређено брзином комуникације у брзинама. Софтвер поставља све параметре потребне за постизање ове комуникације, укључујући синхронизацију, време, нивое итд., О чему обично одлучује наменски хардвер када се не користи лупање битова.
Када користити Бит Бангинг
Бит-Бангинг се обично користи у ситуацијама када микроконтролер са потребним интерфејсом није доступан или када прелазак на микроконтролер са потребним интерфејсом може бити прескуп. Стога пружа јефтин начин омогућавања истом уређају да комуницира користећи неколико протокола. Микроконтролер који је претходно омогућен само за УАРТ комуникацију, може бити опремљен за комуникацију помоћу СПИ и 12Ц путем ударања битова.
Алгоритам за серијску комуникацију путем разбијања битова
Иако се код за примену ударања битова може разликовати код различитих микроконтролера, а може се разликовати и за различите серијске протоколе, али поступак / алгоритам за примену ударања битова је исти на свим платформама.
За слање података, на пример, користи се псеудо-код испод;
- Почетак
- Пошаљите почетни бит
- Сачекајте да се време подудара са брзином пријеноса у бауду
- Пошаљите бит података
- Сачекајте да се трајање поново подудара са брзином пријема пријемника
- Проверите да ли су послати сви битови података. Ако не, идите на 4. Ако је одговор да, идите на 7
- Пошаљите зауставни бит
- Зауставити
Пријем података има тенденцију да буде мало сложенији, обично се прекид користи да би се утврдило када су подаци доступни на пину пријемника. Ово помаже да се осигура да микроконтролер не троши превише процесорске снаге. Иако одређене примене користе било који од И / О пинова микроконтролера, али шансе за буку и грешке, ако се вероватно не раде са њима, веће су. У наставку је објашњен алгоритам за примање података помоћу прекида.
- Почетак
- Омогући прекид на Рк пину
- Када се активира прекид, прибавите почетни бит
- Сачекајте време према брзини преноса
- Прочитајте Рк пин
- Понављајте од 4 до пријема свих података
- Сачекајте време према брзини преноса
- Проверите да ли постоји зауставни бит
- Зауставити
Лупање бита преко СПИ
Као што је горе поменуто, ударање битова за различите протоколе функционише различито и зато је важно прочитати сваки протокол, разумети кадрирање и такт података пре покушаја примене. Узимајући за пример СПИ режим 1, основна вредност сата је увек 0, а подаци се увек шаљу или примају на растућој ивици сата. Дијаграм времена за комуникацијски протокол СПИ Моде 1 приказан је у наставку.
Да би се ово применило, може се користити следећи алгоритам;
- Почетак
- Подесите СС пин ниско да бисте започели комуникацију
- Подесите пин за Мастер Оут Славе Ин (МОСИ) на први бит података који ће се послати
- Подесите пин на сату (СЦК) високо, тако да подаци преносе мастер, а славе прима
- Прочитајте стање Мастер ин Славе Оут (МИСО) да бисте примили први бит података од славе
- Подесите СЦК на Ниско, тако да се подаци могу слати на следећој растућој ивици
- Идите на 2 док се не пренесу сви битови података.
- Подесите СС пин високо да заустави пренос.
- Зауставити
Пример лупања битова: СПИ комуникација у Ардуину
Као пример, применимо алгоритам за СПИ комуникацију путем битовања у Ардуину да покажемо како се подаци могу битовати преко СПИ-а помоћу доњег кода.
Почињемо проглашавањем игара Ардуино-а за употребу.
цонст инт ССПин = 11; цонст инт СЦКПин = 10; цонст инт МИСОПин = 9; цонст инт МОСИПин = 8; бајт сендДата = 64; // Вредност коју треба послати бајт славеДата = 0; // за чување вредности коју је послао славе
Даље, прелазимо на функцију воид сетуп () где се декларише стање пинова. За улаз је проглашен само Мастер ин Славе оут (МИСО) пин јер је то једини пин који прима податке. Сви остали пинови су декларисани као излаз. Након декларисања режима пинова, СС пин се поставља на ХИГХ. Разлог за ово је осигуравање процеса без грешака и комуникација започиње тек када је постављена на низак ниво.
воид сетуп () { пинМоде (МИСОПин, ИНПУТ); пинМоде (ССПин, ИЗЛАЗ); пинМоде (СЦКПин, ИЗЛАЗ); пинМоде (МОСИПин, ИЗЛАЗ); дигиталВрите (ССПин, ХИГХ); }
Даље започињемо петљу за слање података. Имајте на уму да ће ова петља непрестано слати податке.
Почињемо са петље у писаном облику СС Пин Лов, да покрене почетак комуникације, и позив на битбангдата функције која разбија унапред дефинисаних податке у комаде и послати. Када ово завршимо, тада напишемо СС пин ХИГХ да означимо крај преноса података.
воид лооп () { дигиталВрите (ССПин, ЛОВ); // СС низак славеДата = битБангДата (сендДата); // пренос података дигиталВрите (ССПин, ХИГХ); // СС поново висок }
Битбангдата () функција је написано испод. Функција узима податке који се шаљу, рашчлањује их на битове и шаље их превлачењем кода за пренос као што је назначено у кораку 7 алгоритма.
бајт битБангДата (бајт _сенд) // Ова функција преноси податке путем битбангинг-а { бите _рецеиве = 0; фор (инт и = 0; и <8; и ++) // 8 бита у бајту { дигиталВрите (МОСИПин, битРеад (_сенд, и)); // Постављање МОСИ дигиталВрите (СЦКПин, ХИГХ); // СЦК хигх битВрите (_рецеиве, и, дигиталРеад (МИСОПин)); // Снимање МИСО дигиталВрите (СЦКПин, ЛОВ); // СЦК низак } ретурн _рецеиве; // Вратимо примљене податке }
Мане Бит Баннинга
Усвајање ударања битова требало би да буде добро осмишљена одлука, јер постоји неколико недостатака ударања битова због којих није поуздано за примену у одређеним решењима. Лупање битова повећава снагу коју микроконтролер троши због велике процесорске снаге коју процес троши. У поређењу са наменским хардвером, више комуникационих грешака попут грешака и нервозе јавља се када се користи ударање битова, посебно када микроконтролер истовремено са осталим задацима врши комуникацију подацима. Комуникација путем ударања битова дешава се делићем брзине којом се одвија када се користи наменски хардвер. Ово може бити важно у одређеним апликацијама и можда ће ударање битова бити „не баш добар“ избор.
Лупање битова користи се за све врсте серијских комуникација, укључујући; РС-232, Асинхрона серијска комуникација, УАРТ, СПИ и И2Ц.
УАРТ путем лупања битова у Ардуину
Једна од популарних примена ударања битова је Ардуино софтверска серијска библиотека која омогућава Ардуину да комуницира преко УАРТ-а без употребе наменских хардверских УАРТ пинова (Д0 и Д1). Ово даје велику флексибилност јер корисници могу повезати онолико серијских уређаја колико може подржати број пинова на Ардуино плочи.