SPI и Arduino интерфейс

Съдържание:

SPI и Arduino интерфейс
SPI и Arduino интерфейс

Видео: SPI и Arduino интерфейс

Видео: SPI и Arduino интерфейс
Видео: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Може
Anonim

Ние изучаваме интерфейса SPI и свързваме регистър за смяна към Arduino, до който ще имаме достъп, използвайки този протокол за управление на светодиодите.

SPI интерфейс
SPI интерфейс

Необходимо

  • - Arduino;
  • - регистър за смяна 74HC595;
  • - 8 светодиода;
  • - 8 резистора от 220 Ohm.

Инструкции

Етап 1

SPI - сериен периферен интерфейс или „сериен периферен интерфейс“е синхронен протокол за трансфер на данни за свързване на главно устройство с периферни устройства (slave) Капитанът често е микроконтролер. Комуникацията между устройствата се осъществява през четири проводника, поради което SPI понякога се нарича "интерфейс с четири проводника". Тези гуми са:

MOSI (Master Out Slave In) - линия за предаване на данни от главната към подчинените устройства;

MISO (Master In Slave Out) - предавателна линия от подчинения към главния;

SCLK (сериен часовник) - синхронизиращи импулси на часовника, генерирани от главното устройство;

SS (Slave Select) - линия за избор на подчинено устройство; когато е на линия "0", робът "разбира", че се осъществява достъп.

Има четири режима на трансфер на данни (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), поради комбинацията от полярност на тактовия импулс (работим на ВИСОКО или НИСКО ниво), Полярност на часовника, CPOL и фаза на тактовите импулси (синхронизация на нарастващия или спадащия ръб на импулса на часовника), Clock Phase, CPHA.

Фигурата показва две опции за свързване на устройства, използващи протокола SPI: независим и каскаден. Когато е независимо свързан към шината SPI, главният комуникира поотделно с всеки роб. С каскада - подчинените устройства се задействат последователно, в каскада.

Видове SPI връзки
Видове SPI връзки

Стъпка 2

В Arduino шините SPI са на определени портове. Всяка дъска има свое собствено разпределение на щифтове. За удобство щифтовете се дублират и се поставят на отделен съединител ICSP (In Circuit Serial Programming). Моля, обърнете внимание, че на конектора ICSP - SS няма подчинен пин за избор, тъй като предполага се, че Arduino ще се използва като главен в мрежата. Но ако е необходимо, можете да зададете всеки цифров щифт на Arduino като SS.

Фигурата показва стандартното разпределение на щифтовете към SPI шините за Arduino UNO и Nano.

Внедряване на SPI в Arduino
Внедряване на SPI в Arduino

Стъпка 3

За Arduino е написана специална библиотека, която изпълнява протокола SPI. Той е свързан така: в началото на програмата добавете #include SPI.h

За да започнете работа с протокола SPI, трябва да зададете настройките и след това да инициализирате протокола, като използвате процедурата SPI.beginTransaction (). Можете да направите това с една инструкция: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Това означава, че ние инициализираме протокола SPI на честота 14 MHz, трансферът на данни преминава, започвайки от MSB (най-значимият бит), в режим "0".

След инициализацията избираме подчиненото устройство, като поставяме съответния SS щифт в НИЗКО състояние.

След това прехвърляме данните към подчиненото устройство с командата SPI.transfer ().

След предаване връщаме SS в HIGH състояние.

Работата с протокола завършва с командата SPI.endTransaction (). Желателно е да се сведе до минимум времето за изпълнение на трансфера между инструкциите SPI.beginTransaction () и SPI.endTransaction (), така че да няма припокриване, ако друго устройство се опита да инициализира прехвърлянето на данни, използвайки различни настройки.

SPI предаване
SPI предаване

Стъпка 4

Нека разгледаме практическото приложение на интерфейса SPI. Ще запалим светодиодите, като управляваме 8-битовия регистър на смяна чрез SPI шината. Нека свържем сменния регистър 74HC595 към Arduino. Свързваме се с всеки от 8-те изхода чрез светодиод (чрез ограничаващ резистор). Диаграмата е показана на фигурата.

Свързване на регистър за смяна 74HC595 към Arduino
Свързване на регистър за смяна 74HC595 към Arduino

Стъпка 5

Нека напишем такава скица.

Първо, нека свържем библиотеката SPI и инициализираме интерфейса SPI. Нека дефинираме пин 8 като подчинен пин за избор. Нека изчистим регистъра на смяната, като му изпратим стойността "0". Инициализираме серийния порт.

За да запалите определен светодиод с помощта на регистър за смяна, трябва да приложите 8-битово число към неговия вход. Например, за да светне първият светодиод, подаваме двоичното число 00000001, за втория - 00000010, за третия - 00000100 и т.н. Тези двоични числа в десетична нотация образуват следната последователност: 1, 2, 4, 8, 16, 32, 64, 128 и са степени на две от 0 до 7.

Съответно, в цикъла () по броя на светодиодите, ние преизчисляваме от 0 до 7. Функцията pow (основа, градус) повишава 2 до степента на брояча на циклите. Микроконтролерите не работят много точно с числа от типа "double", така че за да преобразуваме резултата в цяло число, използваме функцията round (). И прехвърляме полученото число в регистъра на смяната. За по-голяма яснота мониторът на серийния порт показва стойностите, получени по време на тази операция: една преминава през цифрите - светодиодите светват на вълна.

Скица за управление на регистъра на смяната през SPI шината
Скица за управление на регистъра на смяната през SPI шината

Стъпка 6

Светодиодите светват на свой ред и ние наблюдаваме пътуваща "вълна" от светлини. Светодиодите се управляват с помощта на регистър за смяна, към който се свързахме чрез интерфейса SPI. В резултат на това се използват само 3 щифта Arduino за задвижване на 8 светодиода.

Проучихме най-простия пример за това как Arduino работи със SPI шина. Ще разгледаме връзката на регистрите за смяна по-подробно в отделна статия.

Препоръчано: