Біз SPI интерфейсін зерттейміз және ауысу регистрін Arduino-ға қосамыз, оған жарық диодтарын басқару үшін осы хаттаманың көмегімен қол жеткіземіз.
Қажетті
- - Ардуино;
- - 74HC595 ауысым регистрі;
- - 8 жарықдиодты;
- - 220 Ом 8 резистор.
Нұсқаулық
1-қадам
SPI - сериялық перифериялық интерфейс немесе «сериялық перифериялық интерфейс» - бұл негізгі құрылғыны перифериялық құрылғылармен (құлмен) байланыстыруға арналған синхронды деректерді беру протоколы. Мастер көбінесе микроконтроллер болып табылады. Құрылғылар арасындағы байланыс төрт сым арқылы жүзеге асырылады, сондықтан SPI кейде «төрт сымды интерфейс» деп аталады. Бұл шиналар:
MOSI (Master Out Slave In) - негізгі құрылғыдан құлға дейінгі құрылғыларға мәліметтер беру желісі;
MISO (Master In Slave Out) - құлдан қожайынға дейін жеткізу желісі;
SCLK (Serial Clock) - мастер жасаған синхронизациялық тактикалық импульстар;
SS (Slave Select) - құл құрылғысын таңдау сызығы; «0» жолында құл оған қол жететінін «түсінеді».
Деректерді берудің төрт режимі бар (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), сағат импульсінің полярлығын (біз ЖОҒАРЫ немесе ТӨМЕН деңгейде жұмыс жасаймыз), Сағат полярлығы, CPOL және сағат импульстарының фазасын (синхронизация) біріктіруге байланысты. сағат импульсінің көтерілу немесе төмендеу жиегінде), Clock Phase, CPHA.
Суретте SPI протоколының көмегімен құрылғыларды қосудың екі нұсқасы көрсетілген: тәуелсіз және каскадты. SPI автобусына тәуелсіз қосылған кезде, шебері әр құлмен жеке-жеке сөйлеседі. Каскадпен - құл құрылғылары кезекпен, каскадта іске қосылады.
2-қадам
Arduino-да SPI автобустары нақты порттарда жүреді. Әр тақтаның жеке тағайындау бар. Ыңғайлы болу үшін түйреуіштер қайталанады және бөлек ICSP (In Circuit Serial Programming) коннекторына орналастырылады. ICSP коннекторында құлды таңдау үшін түйреуіш жоқ екенін ескеріңіз, өйткені SS Arduino желіде шебер ретінде пайдаланылатын болады деп болжануда. Бірақ қажет болса, сіз Arduino-дің кез-келген сандық пинін SS ретінде тағайындай аласыз.
Суретте Arduino UNO және Nano үшін SPI автобустарына түйреуіштердің стандартты тағайындалуы көрсетілген.
3-қадам
Arduino үшін SPI протоколын жүзеге асыратын арнайы кітапхана жазылды. Ол осылай байланысты: бағдарламаның басында SPI қосыңыз.h
SPI протоколымен жұмысты бастау үшін параметрлерді орнату керек, содан кейін SPI.beginTransaction () процедурасын қолданып протоколды инициализациялау керек. Мұны бір нұсқаулықпен жасауға болады: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).
Бұл дегеніміз, біз SPI протоколын 14 МГц жиілікте инициализациялаймыз, деректерді беру MSB-ден бастап (ең маңызды бит) «0» режимінде жүреді.
Инициализациядан кейін біз тиісті SS пинін LOW күйіне қойып, құл құрылғысын таңдаймыз.
Содан кейін біз SPI.transfer () командасы арқылы деректерді құлдық құрылғыға жібереміз.
Жібергеннен кейін біз SS-ді жоғары күйге қайтарамыз.
Хаттамамен жұмыс SPI.endTransaction () командасымен аяқталады. SPI.beginTransaction () және SPI.endTransaction () нұсқаулары арасындағы тасымалдаудың орындалу уақытын барынша азайту керек, егер басқа құрылғы әр түрлі параметрлерді қолданып деректерді жіберуге тырысса, қабаттаспайды.
4-қадам
SPI интерфейсін практикалық қолдануды қарастырайық. Біз SPI шинасы арқылы 8-биттік ауысым регистрін басқару арқылы жарық диодтарын жағамыз. 74HC595 ауысым регистрін Arduino-ға қосайық. Біз 8 шығыстың әрқайсысына жарықдиодты шам арқылы қосыламыз (шекті резистор арқылы). Диаграмма суретте көрсетілген.
5-қадам
Осындай эскизді жазайық.
Алдымен SPI кітапханасын қосып, SPI интерфейсін инициализациялайық. Құлды таңдау пині ретінде 8-пинді анықтайық. Ауысу регистрін оған «0» мәнін жіберу арқылы тазалайық. Біз сериялық портты баптандырамыз.
Ауыстыру регистрін қолданып белгілі бір жарық диодын жағу үшін оның кірісіне 8 биттік санды қолдану керек. Мысалы, бірінші жарық диоды жануы үшін біз 00000001, екіншісіне - 00000010, үшіншісіне - 00000100 екілік нөмірін береміз. Бұл екілік сандар ондық санау жүйесінде келесі реттілікті құрайды: 1, 2, 4, 8, 16, 32, 64, 128 және 0-ден 7-ге дейінгі екілік дәрежелер.
Сәйкесінше, циклда () светодиодтардың саны бойынша біз 0-ден 7-ге дейін қайта есептейміз. Пов (негіз, дәреже) функциясы цикл санауышының қуатына дейін 2 көтереді. Микроконтроллерлер «қос» типтегі сандармен өте дәл жұмыс істемейді, сондықтан нәтижені бүтін санға айналдыру үшін дөңгелек () функциясын қолданамыз. Ал алынған санды ауысым регистріне өткіземіз. Айқындық үшін сериялық порт мониторы осы операция кезінде алынған мәндерді көрсетеді: біреуі цифрлар арқылы өтеді - жарық диодтары толқын түрінде жанады.
6-қадам
Жарықдиодтар кезек-кезек жанады, біз жарықтың жылжымалы «толқынын» байқаймыз. Светодиодтар біз SPI интерфейсі арқылы қосылған ауысым регистрі арқылы басқарылады. Нәтижесінде 8 жарықдиодты басқару үшін тек 3 Arduino штыры қолданылады.
Біз Arduino SPI автобусымен қалай жұмыс істейтінінің қарапайым мысалын зерттедік. Ауысым регистрлерінің қосылуын біз жеке мақалада толығырақ қарастырамыз.