Бид SPI интерфэйсийг судалж, Arduino руу шилжих бүртгэлийг холбож, LED протоколыг хянахын тулд энэхүү протоколыг ашиглан хандах болно.
Шаардлагатай
- - Ардуино;
- - ээлжийн бүртгэл 74HC595;
- - 8 LED;
- - 220 Ом-ийн 8 резистор.
Зааварчилгаа
1-р алхам
SPI - Цуваа захын интерфэйс эсвэл "Цуваа захын интерфэйс" нь мастер төхөөрөмжийг захын төхөөрөмжүүд (боол) -той холбоход зориулсан өгөгдөл дамжуулах синхрон протокол юм. Мастер нь ихэвчлэн микроконтроллер байдаг. Төхөөрөмжүүдийн хоорондох харилцаа холбоо нь дөрвөн утсаар хийгддэг тул SPI-ийг заримдаа "дөрвөн утастай интерфэйс" гэж нэрлэдэг. Эдгээр дугуй нь:
MOSI (Master Out Slave In) - мастераас боол төхөөрөмжүүд рүү өгөгдөл дамжуулах шугам;
MISO (Master In Slave Out) - боолоос мастер руу дамжуулах шугам;
SCLK (Serial Clock) - мастерийн үүсгэсэн синхрончлолын цаг импульс;
SS (Slave Select) - боолын төхөөрөмжийг сонгох шугам; "0" мөрөнд боол нь хандаж байгааг "ойлгодог".
Цаг импульсийн туйлшрал (бид HIGH буюу LOW түвшинд ажилладаг), Цагны туйлшрал, CPOL, цаг импульсийн фаз (синхрончлолын) хослолын улмаас өгөгдөл дамжуулах дөрвөн горим байдаг (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3). цагны импульсийн өсөлт ба бууралтын ирмэг дээр), Clock Phase, CPHA.
Зураг дээр SPI протоколыг ашиглан төхөөрөмжүүдийг холбох хоёр сонголтыг харуулав: бие даасан ба каскад. ТХГН-ийн автобусанд бие даан холбогдсон үед мастер боол бүртэй тус тусдаа харилцдаг. Каскадтай үед боолын төхөөрөмжүүд ээлжлэн, каскад хэлбэрээр өдөөгддөг.
Алхам 2
Ардуино хотод SPI автобусууд тодорхой боомтууд дээр байрладаг. Самбар бүр өөрийн гэсэн зүү даалгавартай байдаг. Тохиромжтой болгохын тулд тээглүүрүүдийг хуулбарлаж, тусдаа ICSP (In Circuit Serial Programming) холбогч дээр байрлуулна. ICSP холбогч дээр SS тохируулагч зүү байхгүй байгааг анхаарна уу Arduino-г сүлжээнд мастер болгон ашиглах болно гэж таамаглаж байна. Гэхдээ шаардлагатай бол та Arduino-ийн аль ч дижитал зүүг SS болгож өгч болно.
Arduino UNO ба Nano-ийн SPI автобусуудад тээглүүрийн стандарт хуваарилалтыг зураг дээр харуулав.
Алхам 3
Ардуинод зориулж SPI протоколыг хэрэгжүүлдэг тусгай номын санг бичсэн болно. Энэ нь дараах байдлаар холбогдсон байна: програмын эхэнд #include 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 битийн ээлжийн бүртгэлийг хянах замаар LED-г асаах болно. 74HC595 ээлжийн бүртгэлийг Arduino руу холбож үзье. Бид 8 гаралт тус бүрийг LED (хязгаарлах эсэргүүцэлээр) дамжуулан холбодог. Диаграмыг зураг дээр харуулав.
Алхам 5
Ийм ноорог бичье.
Нэгдүгээрт, SPI санг холбож, SPI интерфейсийг эхлүүлье. 8-р зүүг боол сонгох зүү гэж тодорхойлъё. "0" утгыг илгээж ээлжийн бүртгэлийг арилгацгаая. Бид цуваа портыг эхлүүлнэ.
Шилжүүлэлтийн бүртгэлийг ашиглан тодорхой LED-г асаахын тулд түүний оролтод 8 битийн тоог оруулах шаардлагатай. Жишээлбэл, эхний LED гэрэл асахын тулд бид хоёртын дугаарыг 00000001, хоёр дахь дугаарыг 00000010, гурав дахь дугаарыг 00000100 гэх мэтээр тэжээдэг. Аравтын тооллын эдгээр хоёртын тоонууд нь дараах дарааллыг бүрдүүлж байна: 1, 2, 4, 8, 16, 32, 64, 128 ба 0-ээс 7 хүртэлх хоёрын хүч юм.
Үүний дагуу LED-ийн тоогоор () гогцоонд бид 0-ээс 7-ыг дахин тооцоолно. Pow (суурь, зэрэг) функц нь мөчлөгийн тоолуурын хүчийг 2 хүртэл нэмэгдүүлдэг. Микроконтроллерууд нь "давхар" төрлийн тоонуудтай маш зөв ажилладаггүй тул үр дүнг бүхэл тоонд хөрвүүлэхийн тулд бид дугуй () функцийг ашигладаг. Үр дүнгийн дугаарыг ээлжийн бүртгэлд шилжүүлдэг. Тодорхой болгохын тулд цуваа порт монитор нь энэ үйл ажиллагааны явцад олж авсан утгыг харуулна: нэг нь цифрээр дамждаг - LED нь долгионоор асдаг.
Алхам 6
LED-үүд ээлжлэн асч, бид гэрлийн аялалын "долгион" -ыг ажиглаж байна. LED-үүдийг бид SPI интерфэйсээр холбогдсон шилжүүлэх бүртгэл ашиглан удирддаг. Үүний үр дүнд 8 LED жолоодоход зөвхөн 3 Arduino тээглүүр ашигладаг.
Arduino нь SPI автобусаар хэрхэн ажилладаг тухай хамгийн энгийн жишээг бид судалж үзсэн. Бид ээлжийн регистрүүдийн холболтыг тусдаа өгүүллээр илүү нарийвчлан авч үзэх болно.