- Шта је СПИ?
- Рад СПИ-а
- СПИ игле у Ардуино УНО
- Коришћење СПИ-а у Ардуину
- Компоненте потребне за Ардуино СПИ комуникацију
- Шема комуникације Ардуино СПИ
- Како програмирати Ардуино за СПИ комуникацију:
- Објашњење мастер програмирања Ардуино СПИ
- Објашњење Ардуино СПИ славе програмирања
- Како СПИ ради на Ардуину? - Да тестирамо!
Микроконтролер користи много различитих протокола за комуникацију са различитим сензорима и модулима. Постоји много различитих врста комуникационих протокола за бежичну и жичну комуникацију, а најчешће коришћена техника комуникације је серијска комуникација. Серијска комуникација је поступак слања података један по један бит, узастопно, преко комуникационог канала или магистрале. Постоје многе врсте серијске комуникације попут УАРТ, ЦАН, УСБ, И2Ц и СПИ комуникације.
У овом упутству сазнајемо о СПИ протоколу и како га користити у Ардуину. Користићемо СПИ протокол за комуникацију између два Ардуиноса. Овде ће један Ардуино деловати као Мастер, а други као Славе, две ЛЕД диоде и тастери биће повезани на оба Ардуина. Да бисмо демонстрирали СПИ комуникацију, контролисат ћемо главну ЛЕД диоду притиском на дугме на помоћној страни и обрнуто користећи СПИ серијски комуникацијски протокол.
Шта је СПИ?
СПИ (серијски периферни интерфејс) је серијски комуникацијски протокол. СПИ интерфејс пронашла је Моторола 1970. године. СПИ има фулл-дуплек везу, што значи да се подаци истовремено шаљу и примају. Односно мастер може податке слати славе-у, а славе-уређај истовремено може слати податке мастеру. СПИ је синхрона серијска комуникација, што значи да је сат потребан за комуникацију.
СПИ комуникација је претходно објашњена у другим микроконтролерима:
- СПИ комуникација са ПИЦ микроконтролером ПИЦ16Ф877А
- Повезивање 3,5 инчног ТФТ ЛЦД екрана осетљивог на додир са Распберри Пи
- Програмирање АВР микроконтролера са СПИ пиновима
- Повезивање графичког ЛЦД-а Нокиа 5110 са Ардуином
Рад СПИ-а
СПИ има мастер / славе комуникацију помоћу четири линије. СПИ може имати само једног господара и може имати више робова. Мастер је обично микроконтролер, а помоћни уређаји могу бити микроконтролер, сензори, АДЦ, ДАЦ, ЛЦД итд.
Испод је приказ блок дијаграма СПИ Мастер-а са једним помоћним уређајем.
СПИ има следеће четири линије МИСО, МОСИ, СС и ЦЛК
- МИСО (Мастер ин Славе Оут) - Славе линија за слање података мастеру.
- МОСИ (Мастер Оут Славе Ин) - главна линија за слање података на периферне уређаје.
- СЦК (серијски сат) - импулси такта који синхронизују пренос података генерисани од стране главног.
- СС (Славе Селецт) –Мастер може да користи ову пин да омогући и онемогући одређене уређаје.
СПИ Мастер са више робова
Да бисмо започели комуникацију између главног и подређеног уређаја, потребно је да подесимо прибадачу (СС) за потребан уређај на ЛОВ, тако да може да комуницира са мастером. Када је висок, игнорише господара. Ово вам омогућава да имате више СПИ уређаја који деле исте МИСО, МОСИ и ЦЛК главне линије. Као што можете видети на горњој слици, постоје четири помоћна уређаја у којима су СЦЛК, МИСО, МОСИ заједнички повезани са мастер-ом, а СС сваког славе-а повезан је засебно са појединачним СС-пиновима (СС1, СС2, СС3) мастер-а. Постављањем потребног СС пин ЛОВ-а мастер може комуницирати с тим славе-ом.
СПИ игле у Ардуино УНО
На доњој слици су приказани СПИ пинови који представљају Ардуино УНО (у црвеном пољу).
СПИ линија |
Пин у Ардуину |
МОСИ |
11 или ИЦСП-4 |
МИСО |
12 или ИЦСП-1 |
СЦК |
13 или ИЦСП-3 |
СС |
10 |
Коришћење СПИ-а у Ардуину
Пре почетка програмирања за СПИ комуникацију између два Ардуиноса. Морамо да научимо о Ардуино СПИ библиотеци која се користи у Ардуино ИДЕ.
Библиотека
1. СПИ.бегин ()
УПОТРЕБА: Иницијализовати СПИ магистралу постављањем СЦК, МОСИ и СС на излазе, повлачећи СЦК и МОСИ ниско, а СС високо.
2. СПИ.сетЦлоцкДивидер (преграда)
УПОТРЕБА: за подешавање СПИ разделника сата у односу на системски сат. Доступни преграде су 2, 4, 8, 16, 32, 64 или 128.
Преграде:
- СПИ_ЦЛОЦК_ДИВ2
- СПИ_ЦЛОЦК_ДИВ4
- СПИ_ЦЛОЦК_ДИВ8
- СПИ_ЦЛОЦК_ДИВ16
- СПИ_ЦЛОЦК_ДИВ32
- СПИ_ЦЛОЦК_ДИВ64
- СПИ_ЦЛОЦК_ДИВ128
3. СПИ.аттацхИнтеррупт (обрађивач)
УПОТРЕБА: Ова функција се позива када помоћни уређај прима податке од главног.
4. СПИ.трансфер (вал)
УПОТРЕБА: Ова функција се користи за истовремено слање и примање података између главног и подређеног уређаја.
Па кренимо сада са практичном демонстрацијом СПИ протокола у Ардуину. У овом упутству ћемо користити два ардуина, један као мастер, а други као славе. Оба Ардуина су одвојено причвршћена ЛЕД-ом и дугметом. Мастер ЛЕД-ом се може управљати помоћу тастера славе Ардуино-а, а славе-Ардуино-овим ЛЕД-ом може се контролисати дугметом мастер Ардуино-а користећи СПИ комуникациони протокол присутан у ардуино-у.
Компоненте потребне за Ардуино СПИ комуникацију
- Ардуино УНО (2)
- ЛЕД (2)
- Тастер (2)
- Отпорник 10к (2)
- Отпорник 2.2к (2)
- Бреадбоард
- Повезивање жица
Шема комуникације Ардуино СПИ
Дијаграм кола доле приказује како се користи СПИ на Ардуино УНО, али можете следити исти поступак за Ардуино Мега СПИ комуникацију или Ардуино нано СПИ комуникацију. Готово све ће остати исте, осим броја пина. Морате да проверите пиноут Ардуино нано или мега да бисте пронашли Ардуино нано СПИ пинове и Ардуино Мега пинове, након што учините да ће све остало бити исто.
Направио сам горе приказано коло преко плоче, у наставку можете видети поставке кола које сам користио за тестирање.
Како програмирати Ардуино за СПИ комуникацију:
Овај туториал има два програма, један за мастер Ардуино и други за славе Ардуино. Комплетни програми за обе стране дати су на крају овог пројекта.
Објашњење мастер програмирања Ардуино СПИ
1. Пре свега морамо укључити СПИ библиотеку за употребу СПИ комуникационих функција.
#инцлуде
2. У воид подешавању ()
- Почињемо серијску комуникацију брзином преноса 115200.
Сериал.бегин (115200);
- Причврстите ЛЕД на пин 7 и тастер на пин 2 и подесите те пинове на излаз и на улаз.
пинМоде (ипбуттон, ИНПУТ); пинМоде (ЛЕД, ИЗЛАЗ);
- Следеће започињемо СПИ комуникацију
СПИ.бегин ();
- Следеће смо поставили Цлоцкдивидер за СПИ комуникацију. Овде смо поставили делилац 8.
СПИ.сетЦлоцкДивидер (СПИ_ЦЛОЦК_ДИВ8);
- Затим поставите СС пин ХИГХ јер нисмо започели никакав пренос на славе ардуино.
дигиталВрите (СС, ХИГХ);
3. Ин воид лооп ():
- Читамо статус клина тастера повезаног на пин2 (Мастер Ардуино) ради слања те вредности у славе Ардуино.
буттонвалуе = дигиталРеад (ипбуттон);
- Подесите логику за подешавање к вредности (за слање на славе) у зависности од уноса са пина 2
ако (буттонвалуе == ХИГХ) { к = 1; } остало { к = 0; }
- Пре слања вредности потребно је да НИСКУЈЕМО подређену вредност да започнемо пренос на славе од мастер-а.
дигиталВрите (СС, ЛОВ);
- Овде долази важан корак, у следећој изјави шаљемо вредност тастера ускладиштену у Мастерсенд променљиву на славе ардуино и такође добијамо вредност од славе која ће се чувати у Мастерецеиве променљивој.
Мастерецеиве = СПИ.трансфер (Мастерсенд);
- Након тога, у зависности од Мастерецеиве вредности, укључит ћемо или искључити Мастер Ардуино ЛЕД.
иф (Мастерецеиве == 1) { дигиталВрите (ЛЕД, ВИСОКО); // поставља пин 7 ХИГХ Сериал.принтлн ("Мастер ЛЕД ОН"); } елсе { дигиталВрите (ЛЕД, ЛОВ); // поставља пин 7 ЛОВ Сериал.принтлн ("Мастер ЛЕД ОФФ"); }
Напомена: Користимо сериал.принтлн () за преглед резултата у Сериал Мотор оф Ардуино ИДЕ. Погледајте Видео на крају.
Објашњење Ардуино СПИ славе програмирања
1. Пре свега морамо укључити СПИ библиотеку за употребу СПИ комуникационих функција.
#инцлуде
2. У воид подешавању ()
- Почињемо серијску комуникацију брзином преноса 115200.
Сериал.бегин (115200);
- Причврстите ЛЕД на пин 7, а тастер на пин2 и подесите те иглице на излаз и на улаз
пинМоде (ипбуттон, ИНПУТ); пинМоде (ЛЕД, ИЗЛАЗ);
- Важан корак овде су следеће изјаве
пинМоде (МИСО, ИЗЛАЗ);
Горња изјава поставља МИСО као ИЗЛАЗ (потребно је податке послати Мастер ИН-у). Дакле, подаци се шаљу путем МИСО-а Славе Ардуино-а.
- Сада укључите СПИ у подређеном режиму помоћу СПИ контролног регистра
СПЦР - = _БВ (СПЕ);
- Затим Укључите прекид за СПИ комуникацију. Ако су подаци примљени од главног претплатника, позива се прекидна рутина и примљена вредност се узима из СПДР-а (СПИ регистар података)
СПИ.аттацхИнтеррупт ();
- Вредност из мастер-а преузима се из СПДР-а и чува у Славерецеивед променљивој. Ово се дешава у следећој функцији Прекидна рутина.
ИСР (СПИ_СТЦ_вецт) { Славерецеивед = СПДР; примљено = тачно; }
3. Следећа воид петља () поставили смо Славе ардуино ЛЕД да се УКЉУЧИ или ИСКЉУЧИ у зависности од Славерецеивед вредности.
иф (Славерецеивед == 1) { дигиталВрите (ЛЕДпин, ХИГХ); // Поставља пин 7 као ХИГХ ЛЕД ОН Сериал.принтлн ("Славе ЛЕД ОН"); } елсе { дигиталВрите (ЛЕДпин, ЛОВ); // Поставља пин 7 као ЛОВ ЛЕД ОФФ Сериал.принтлн ("Славе ЛЕД ОФФ"); }
- Даље читамо статус Славе Ардуино дугмета и чувамо вредност у Славесенду да бисмо послали вредност Мастер Ардуину давањем вредности СПДР регистру.
буттонвалуе = дигиталРеад (копча); ако (буттонвалуе == ХИГХ) {к = 1; } остало {к = 0; } Славесенд = к; СПДР = Славесенд;
Напомена: Користимо сериал.принтлн () за преглед резултата у Сериал Мотор оф Ардуино ИДЕ. Погледајте Видео на крају.
Како СПИ ради на Ардуину? - Да тестирамо!
Испод је слика коначног подешавања за СПИ комуникацију између две Ардуино плоче.
Када се притисне дугме на главној страни, укључује се бела ЛЕД на помоћној страни.
А када се притисне дугме на славе страни, црвена ЛЕД лампица на главној страни се УКЉУЧУЈЕ.
Можете погледати видео испод да бисте видели демонстрацију Ардуино СПИ комуникације. Ако имате било каквих питања, оставите их у одељку за коментаре, а ми користимо наше форуме.