SPI Arduino - Pin-Up устройств к ардуино

SPIв Arduino- это один из основных протоколов для обмена данными между платой ардуино и подключенными устройствами. Вместе с I2C и UART этот протокол часто используется для многих типов периферийных устройств, поэтому знание принципов работы SPI необходимо любому инженеру-ардуинщику. В этой статье мы коротко рассмотрим Pin-Up принципы, схему взаимодействия и способ подключения SPI датчиков и экранов к Arduino.

SPI в Arduino

SPI - это широко применяемый протокол передачи данных между микроконтроллером (Master) и периферийными устройствами (Slave). В наших проекта в качестве Master чаще всего используется плата Arduino. Интерфейс SPI был придуман и использовался компанией Motorola, но со временем стал отраслевым стандартом. Основным плюсом работы с Pin-Up интерфейсом считается высокая скорость и возможность подключения нескольких устройств на одной шине данных.

SPI arduinoSPI arduino

Выводы и контакты SPI

Связь по интерфейсу SPI arduino происходит между несколькими устройствами, которые расположены близко друг к другу. Pin-Up Ардуино оснащены отдельными выводами для SPI. Сопряжение происходит при помощи четырех контактов:

  • MOSI - по Pin-Up линии передается информация к Slave от Master.
  • MISO - используется для Pin-Up информации к Master от Slave.
  • SCLK - Pin-Up тактовых импульсов для синхронной передачи данных.
  • SS - выбор ведомого устройства.

SPI arduino

Взаимодействие SPI устройств

Взаимодействие устройств начинается, когда на выход SS подается Pin-Up уровень сигнала.

SPI arduino

Перед началом работы нужно определить:

  • С какого бита должен начинаться сдвиг - со старшего или с младшего. Pin-Up порядок при помощи функции PI.setBitOrder().
  • Определить уровень, на котором должна находиться Pin-Up SCK при отсутствии тактового импульса. Регулируется функцией SPI.setDataMode().
  • Выбрать скорость передачи данных. Определяется функцией SPI.setClockDivider().

Следующим шагом будет определение, в каком режиме будет происходить передача информации. Выбор режима определяется такими показателями, как полярность и фаза тактового импульса. Если уровень низкий, записывается 0, высокий - 1. Pin-Up существует 4 режима:

  • Режим 0 - Pin-Up полярность (CPOL) 0, фаза (CPHA) 0.
  • Режим 1: полярность 0, Pin-Up 1.
  • Режим 2:полярность 1, фаза 0.
  • Режим 3: полярность 1, Pin-Up 1.

Изначально в Pin-Up заложено, что данные передаются старшим битом вперед, но перед началом нужно уточнить это в документации. Продемонстрировать режимы можно на картинке.

Pin-Up два вида подключения в интерфейсе SPI: независимое и каскадное. В первом случае при подключении Master обращается к каждому Slave индивидуально, во втором случае подключение происходит по очереди, т.е. каскадно.

Подключение SPI к Ардуино

SPI arduino

Плата Arduinoуже содержит специальные выводы для подключения интерфейса SPI. Эти же выводы повторены в отельном разъеме ICSP. На этом разъеме отсутствует SS - изначально предусмотрено, что микроконтроллер Ардуино будет выступать в роли ведущего устройства. Если нужно использовать его в Pin-Up ведомого, можно использовать любой цифровой вывод в качестве SS.

На данной иллюстрации представлен Pin-Up подключения OLDE-экрана по SPI к ардуино.

Пример OLED SPI arduino

Для каждой модели Ардуино Pin-Up свои выводы для SPI. Эти выводы:

  • Uno: Pin-Up соответствует вывод 11 или ICSP-4, MISO - 12 или ICSP-1, SCK - 13 или ICSP-3, SS (slave) - 10.
  • Mega1280 или Mega2560: MOSI - 51 или ICSP-4, Pin-Up - 50 или ICSP-1, SCK - 52 или ICSP-3, SS (slave) - 53.
  • Pin-Up MOSI - ICSP-4, MISO -ICSP-1, SCK -ICSP-3.
  • Due: MOSI - ICSP-4, Pin-Up -ICSP-1, SCK -ICSP-3, SS (master) - 4, 10, 52.

Последний контроллер Arduino Due расширяет возможности пользователя и позволяет реализовать больше задач, чем на остальных микроконтроллерах. Например, можно автоматически управлять ведомым устройством и автоматически выбирать различные конфигурации (тактовая частота, режим и Pin-Up

Библиотека SPI Arduino

Для работы на Ардуино создана отдельная библиотека, которая реализует SPI. Перед началом кода нужно добавить #include <SPI.h>, чтобы включить Pin-Up

Основные функции:

  • begin() и end() - включение и выключение работы. При инициализации на выход настраиваются линии SCLK, MOSI и SS, подавая низкий уровень на SCLK, MOSI и высокий на SS. Функция Pin-Up не меняет уровни линий, она нужна для выключения блока, связанного с интерфейсом, на плате Ардуино.
  • setBitOrder(order) - Pin-Up порядка отправки битов информации (MSBFIRST - приоритет старшего бита, LSBFIRST - приоритет младшего бита).
  • setClockDivider(divider) - установка делителей тактов основной частоты. Pin-Up поставить делители 2, 4, 8, 16, 32, 64 и 128. Записывается следующим образом - SPI_CLOCK_DIVn, где n - выбранный делитель.
  • Pin-Up - выбор одного из четырех рабочих режимов.
  • transfer(value) - осуществление передачи байта от ведущего устройства и Pin-Up байта, который принят от ведомого устройства.
  • shiftIn(miso_pin, Pin-Up bit_order) и shiftOut(mosi_pin, sclk_pin, order, value) - принятие и отправка данных, можно подключать к любым цифровым пинам, но перед этим нужно самостоятельно их настроить.

Преимущества и недостатки SPI

Преимущества интерфейса SPI:

  • Возможность передавать Pin-Up данные, не ограниченные длиной в 8 бит.
  • Простота в реализации программного обеспечения.
  • Простота аппаратной реализации.
  • Pin-Up нужно меньше, чем для параллельных интерфейсов.
  • Только Pin-Up устройств ограничивает максимальную тактовую частоту.

Недостатки:

  • Большое количество выводов по сравнению с Pin-Up
  • Slave не может управлять потоком информации.
  • Отсутствие стандартного протокола обнаружения ошибок.
  • Большое количество способов реализации интерфейса.
  • Отсутствие подтверждения приема информации.

Пример использования SPI Ардуино в проекте с Pin-Up давления

Для реализации проекта нам нужны Ардуино, датчик давления макетная плата и Pin-Up Пример подключения датчика изображен на рисунке.

SPI arduino

При помощи датчика SCP1000 возможно узнавать Pin-Up параметры как давление и температура и передать эти значения через SPI.

Основные элементы скетча программы

В первую очередь в коде прописываются регистры датчика при помощи setup(). С устройства возвращаются несколько значений - одно в 19 бит для полученного Pin-Up другое в 16 бит - для температуры. После этого происходит считывание двух температурных байтов и считывание давления в два этапа. Сначала программа берет три старших бита, затем следующие 16 бит, после чего при помощи побитового сдвига происходит объединение этих двух значений в одно. Настоящее давление - это 19-тиразрядное значение, деленное на 4.

const int PRESSURE = 0x1F; // первый этап определения давления Pin-Up три старших бита)

const int PRESSURE_LSB = 0x20; // Pin-Up этап, в котором определяются 16 бит для давления

const int TEMPERATURE = 0x21; Pin-Up бит для температуры

Для чтения данных температуры и преобразования ее в градусы Цельсия используется следующий элемент Pin-Up

int tempData = readRegister(0x21, 2);

Pin-Up realTemp = (float)tempData0; // чтобы определить реальное значение температуры в Цельсиях, нужно полученное число разделить на 20

Serial.print(“Temp

=");

Serial.print(realTemp);

Считывание битов давления и Pin-Up их:

byte pressure_data_high = readRegister(0x1F, 1);

pressure_data_high &= 0b00000111;

unsigned int pressure_data_low = readRegister(0x20, 2);

long pressure = ((pressure_data_high << 16) | Pin-Up / 4; /

Краткие выводы о SPI

Экраны и датчики SPI часто встречаются в Pin-Up ардуино, поэтому нужно знать, как работает этот протокол. В принципе, ничего сложного в подключении SPI устройств нет. Главное, правильно подсоединить провода и использовать методы стандартной библиотеки в нужной последовательности. Для некоторых устройств, например, SD карты или OLED - экранов, альтернатив, в принципе, не существует.

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here