Биз SPI интерфейсин изилдеп, сменалык регистрди Arduinoго туташтырабыз, ага диоддорду башкаруу үчүн ушул протоколду колдонуп киребиз.
Зарыл
- - 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" сабында, кул ага жетип жаткандыгын "түшүнөт".
Сааттын кагуусу уюлдуулуктун айкалышынан (биз ЖОГОРКУ же ТӨМӨН деӊгээлде иштейбиз), сааттын уюлдуулугунан, CPOLдон жана сааттын импульс фазасынан (синхрондоштуруудан) улам, маалыматтарды берүүнүн төрт режими бар (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3). сааттын кагышынын көтөрүлүп же ылдый түшүшү), Clock Phase, CPHA.
Сүрөттө SPI протоколун колдонгон шаймандарды туташтыруунун эки варианты көрсөтүлгөн: көзкарандысыз жана каскаддык. Өз алдынча SPI автобусуна кошулганда, кожоюн ар бир кул менен өзүнчө байланышат. Каскад менен - кул түзмөктөрү кезектешип, каскадда иштетилет.
2-кадам
Ардуино шаарында SPI автобустары белгилүү порттордо жүрүшөт. Ар бир тактанын өзүнүн пин тапшырмасы бар. Ыңгайлуулук үчүн, казыктар көчүрүлүп, өзүнчө ICSP (In Circuit Serial Programming) туташтыргычына жайгаштырылат. Сураныч, ICSP туташтыргычында SS тандап алуучу пин жок, анткени SS Arduino тармактагы мастер катары колдонулат деп болжолдонууда. Бирок, керек болсо, сиз Arduino-нун каалаган санарип пиндерин SS катары дайындасаңыз болот.
Сүрөттө Arduino UNO жана Nano үчүн SPI автобустарына төөнөгүчтөрдүн стандарттык дайындалышы көрсөтүлгөн.
3-кадам
Ардуино үчүн 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-биттик номерди колдонуу керек. Мисалы, биринчи LED күйүшү үчүн, экилик 00000001, экинчисине 00000010, үчүнчүсүнө 00000100 ж.б. Бул экилик сандар ондук белгилерде төмөнкүдөй ырааттуулукту түзөт: 1, 2, 4, 8, 16, 32, 64, 128 жана экөөнүн кубаттуулугу 0дон 7ге чейин.
Демек, циклда () светодиоддордун саны боюнча 0дон 7ге чейин кайрадан эсептейбиз. Pow (негиз, даража) функциясы цикл эсептегичинин кубаттуулугун 2 чейин көтөрөт. Микроконтроллерлер "кош" типтеги сандар менен өтө так иштешпейт, андыктан натыйжаны бүтүн санга айландыруу үчүн, тегерек () функциясын колдонобуз. Ал эми алынган номурду сменалык регистрге өткөрүп беребиз. Так айкындуулук үчүн, сериялык порт монитору ушул операциянын жүрүшүндө алынган баалуулуктарды көрсөтөт: бири сандар аркылуу өтөт - светодиоддор толкунда жанат.
6-кадам
Жарык диоддору кезек-кезеги менен күйүп, биз жарыктын кыдыруучу "толкунун" байкайбыз. Жарык диоддору биз SPI интерфейси аркылуу туташкан нөөмөттөө регистринин жардамы менен башкарылат. Натыйжада, 8 светодиодду иштетүү үчүн 3 гана Arduino казыгы колдонулат.
Биз Arduino компаниясынын SPI автобусу менен иштешинин эң жөнөкөй мисалын изилдеп чыктык. Сменалык регистрлердин туташуусун өзүнчө макалада кененирээк карайбыз.