Вивчаємо інтерфейс SPI і підключаємо до Arduino сдвиговый регістр, до якої ми будемо звертатися за цим протоколом для управління світлодіодами.

Интерфейс SPI

Вам знадобиться

  • – Arduino;
  • – сдвиговый регістр 74HC595;
  • – 8 світлодіодів;
  • – 8 резисторів по 220 Ом.

Інструкція

1. SPISerial Peripheral Interface або “Послідовний периферійний інтерфейс” – це синхронний протокол передачі даних для сполучення ведучого пристрою (Master) з периферійними пристроями (Slave). Провідним пристроєм часто є мікроконтролер. Зв’язок між пристроями здійснюється за чотирма проводах, тому SPI іноді називають “чьотирьох інтерфейс”. Ось ці шини:MOSI (Master Slave Out In) – лінія передачі даних від ведучого до веденим пристроїв;MISO (Master In Slave Out) – лінія передачі від веденого до ведучого пристрою;SCLK (Serial Clock) – тактові імпульси синхронізації, що генеруються провідним пристроєм;SS (Slave Select) – лінія вибору веденого пристрою; коли на лінії “0”, ведений пристрій “розуміє”, що зараз звертаються до нього.Існує чотири режими передачі даних (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), зумовлені поєднанням полярності тактових імпульсів (працюємо за рівнем HIGH або LOW), Clock Негативна, CPOL, і фазою тактових імпульсів (синхронізація по переднього або заднього фронту тактового імпульсу), Clock Phase, CPHA. На малюнку показані два варіанти підключення пристроїв по протоколу SPI: незалежне і каскадне. При незалежному підключенні до шині SPI провідне пристрій звертається до кожного веденого пристрою індивідуально. При каскадному – ведені пристрої спрацьовують по черзі, каскадом.

Виды SPI подключений

2. Arduino шини інтерфейсу SPI знаходяться на певних портах. У кожній плати свою відповідність висновків. Для зручності висновки проаналізовані та винесені також на окремий роз’єм ICSP (In Circuit Serial Programming, програмування пристрою, включеного в ланцюг, по послідовному протоколу). Зверніть увагу, що на роз’ємі ICSP відсутня пін вибору веденого – SS, оскільки мається на увазі, що Arduino буде використовуватися як провідне пристрій у мережі. Але при необхідності ви можете призначити будь-який цифровий висновок Ардуїнов як SS.На малюнку наведено стандартне відповідність висновків шин SPI для Arduino UNO і Nano.

Реализация SPI в Arduino

3. Для Arduino написана спеціальна бібліотека, яка реалізує протокол SPI. Підключається вона так: на початку програми додаємо #include SPI.hЩоб почати роботу по протоколу SPI, потрібно задати налаштування і потім ініціалізувати протокол з допомогою процедури SPI.beginTransaction(). Можна виконати це однією інструкцією: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0)).Це означає, що ми ініціалізуємо протокол SPI на частоті 14 МГц, передача даних йде, починаючи з MSB (найбільш значущого біта), в режимі “0”. Після ініціалізації вибираємо ведений пристрій, переводячи відповідний пін SS в стан LOW. Потім передаємо веденого пристрою дані командою SPI.transfer(). Після передачі повертаємо SS в стан HIGH.Робота з протоколом завершується командою SPI.endTransaction(). Бажано мінімізувати час виконання передачі між інструкціями SPI.beginTransaction() і SPI.endTransaction(), щоб не виникало накладок, якщо інше пристрій спробує ініціалізувати передачу даних, використовуючи інші налаштування.

Передача по протоколу SPI

4. Розглянемо практичне застосування інтерфейсу SPI. Будемо запалювати світлодіоди, керуючи 8-бітним зсувними регістром по шині SPI. Підключимо до Arduino сдвиговый регістр 74HC595. До кожного з 8-ми виходів підключимо за світлодіоду (через обмежувальний резистор). Схема приводиться на малюнку.

Подключение сдвигового регистра 74HC595 к Arduino

5. Напишемо такий скетч. Спочатку підключаємо бібліотеку SPI і ініціалізуємо інтерфейс SPI. Визначимо пін 8 pin вибору веденого пристрою. Очистимо сдвиговый регістр, пославши до нього значення “0”. Ініціалізуємо послідовний порт.Щоб запалити певний світлодіод з допомогою сдвигового регістра, потрібно подати на його вхід 8-розрядне число. Наприклад, щоб загорівся перший світлодіод – подаємо двійкове число 00000001, щоб другий – 00000010, щоб третій – 00000100, і т. д. Ці двійкові числа в перекладі в десяткову систему числення утворюють таку послідовність: 1, 2, 4, 8, 16, 32, 64, 128 і є степенями двійки від 0 до 7.Відповідно, в циклі loop() за кількістю світлодіодів робимо перерахунок від 0 до 7. Функція pow(підстава, ступінь) зводить 2 ступінь лічильника циклу. Мікроконтролери не дуже точно працюють з числами типу “double”, тому для перетворення результату в ціле число використовуємо функцію округлення round(). І передаємо число, що вийшло в сдвиговый регістр. Для наочності в моніторі послідовного порту виводяться значення, які виходять при цій операції: одиничка біжить за розрядами – світлодіоди спалахують хвилею.

Скетч управления сдвиговым регистром по шине SPI

6. Світлодіоди загоряються по черзі, і ми спостерігаємо, що біжить “хвилю” з вогників. Управління світлодіодами здійснюється з допомогою сдвигового регістра, до якого ми підключилися по інтерфейсу SPI. В результаті для управління 8-ю світлодіодами задіяні всього 3 виводу Arduino.Ми вивчили найпростіший приклад роботи Arduino з шиною SPI. Більш докладно розглянемо підключення зсувних регістрів в окремій статті.

Бегущая волна с помощью Arduino, сдвигового регистра и светодиодов

НАПИСАТИ ВІДПОВІДЬ

Please enter your comment!
Please enter your name here