Uurime SPI-liidest ja ühendame Arduinoga vahetuste registri, millele pääseme juurde LED-ide juhtimiseks selle protokolli abil.
Vajalik
- - Arduino;
- - vahetuste register 74HC595;
- - 8 LED-i;
- - 8 takistit 220 oomi.
Juhised
Samm 1
SPI - jadaline perifeerne liides ehk "jadaline perifeerne liides" on sünkroonne andmeedastusprotokoll põhiseadme ja välisseadmete (alluvate) liidestamiseks. Kapten on sageli mikrokontroller. Seadmete vaheline side toimub nelja juhtme kaudu, mistõttu SPI-d nimetatakse mõnikord "neljajuhtmeliseks liideseks". Need rehvid on:
MOSI (Master Out Slave In) - andmeedastusliin masterilt orjaseadmetele;
MISO (Master In Slave Out) - ülekandeliin orjast peremehele;
SCLK (jadkell) - masteri genereeritud sünkroniseerimiskella impulsid;
SS (Slave Select) - alamseadme valimisjoon; liinil "0" olles "mõistab" ori, et sellele juurde minnakse.
Andmeedastuseks on neli režiimi (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), mis on tingitud kellaimpulssi polaarsuse (töötame HIGH või LOW tasemel), kella polaarsuse, CPOL ja kellaimpulsside faasi (sünkroonimine) kombinatsioonist kellimpulssi tõusval või langeval serval), kellafaas, CPHA.
Joonisel on kujutatud kahte võimalust seadmete ühendamiseks SPI-protokolli abil: iseseisev ja kaskaadne. SPI-bussiga iseseisvalt ühendatuna suhtleb kapten iga orjaga eraldi. Kaskaadiga käivitatakse orja seadmed vaheldumisi kaskaadis.
2. samm
Arduinos on SPI-bussid kindlates sadamates. Igal tahvlil on oma pin-määrang. Mugavuse huvides dubleeritakse tihvtid ja asetatakse eraldi ICSP (In Circuit Serial Programming) konnektorile. Pange tähele, et ICSP-pistikus - SS - pole orjavalimisnuppu, kuna eeldatakse, et Arduinot kasutatakse võrgu põhimeistrina. Kuid vajadusel saate määrata Arduino mis tahes digitaalse tihvti SS-iks.
Joonisel on kujutatud tihvtide standardset määramist SPD-bussidele Arduino UNO ja Nano jaoks.
3. samm
Arduino jaoks on kirjutatud spetsiaalne teek, mis rakendab SPI-protokolli. See on ühendatud nii: programmi alguses lisage #include SPI.h
SPI-protokolliga töötamise alustamiseks peate määrama sätted ja seejärel lähtestama protokolli protseduuri SPI.beginTransaction () abil. Seda saate teha ühe juhisega: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).
See tähendab, et lähtestame SPI protokolli sagedusel 14 MHz, andmeedastus läheb, alustades MSB-st (kõige olulisem bit), režiimis "0".
Pärast initsialiseerimist valime orja seadme, pannes vastava SS-tihvti LOW olekusse.
Seejärel edastame andmed käsklusega SPI.transfer () orjaseadmesse.
Pärast edastamist naaseme SS kõrgesse olekusse.
Töö protokolliga lõpeb käsuga SPI.endTransaction (). Soovitav on minimeerida SPI.beginTransaction () ja SPI.endTransaction () käskude vahelise ülekande sooritamise aega nii, et kattumist ei tekiks, kui mõni teine seade proovib andmeedastust erinevate seadete abil lähtestada.
4. samm
Mõelgem SPI liidese praktilisele rakendamisele. Valgusdioodid valgustame, juhtides SPI-siini kaudu 8-bitist nihkeregistrit. Ühendame 74HC595 vahetuste registri Arduinoga. Ühendame iga 8 väljundiga LED-i kaudu (läbi piirava takisti). Diagramm on näidatud joonisel.
5. samm
Kirjutame sellise visandi.
Kõigepealt ühendame SPI teegi ja lähtestame SPI liidese. Määratleme tihvti 8 alamvaliku tihvtina. Tühjendame vahetuste registri, saates sellele väärtuse "0". Initsialiseerime jadapordi.
Kindla LED-i süütamiseks nihkeregistri abil peate selle sisendile rakendama 8-bitise numbri. Näiteks esimese LED-i süttimiseks toidame kahendarvu 00000001, teise jaoks - 00000010, kolmanda jaoks - 00000100 jne. Need binaararvud kümnendmärkides moodustavad järgmise järjestuse: 1, 2, 4, 8, 16, 32, 64, 128 ja need on kahe astme astmed 0 kuni 7.
Vastavalt arvutame ringis () LED-ide arvu järgi ümber 0 kuni 7. Funktsioon pow (alus, kraad) tõstab 2 tsükliloenduri võimsuseni. Mikrokontrollerid ei tööta "topelt" tüüpi numbritega väga täpselt, nii et tulemuse täisarvuks teisendamiseks kasutame funktsiooni round (). Ja kanname saadud numbri vahetuste registrisse. Selguse huvides kuvab jadapordimonitor selle toimingu käigus saadud väärtused: üks jookseb numbritest läbi - LED-id põlevad lainena.
6. samm
LEDid põlevad kordamööda ja me jälgime liikuvat tulede "lainet". LED-e juhitakse nihkeregistri abil, millega me ühendasime SPI-liidese kaudu. Selle tulemusena kasutatakse 8 LED-i juhtimiseks ainult 3 Arduino tihvti.
Oleme uurinud lihtsamat näidet selle kohta, kuidas Arduino töötab SPI-bussiga. Lähemalt kaalume vahetuste registrite ühendamist eraldi artiklis.