Плата Arduino Nano — аналог флагманской Uno в миниатюрном размере. На ней предусмотрено всё необходимое для удобной работы с микроконтроллером: 14 цифровых входов/выходов (6 из них могут использоваться в качестве ШИМ-выходов), 6 аналоговых входов, кварцевый резонатор на 16 МГц, разъём Mini-USB, разъём питания, разъём для внутрисхемного программирования (ICSP) и кнопка сброса.
- Видеообзор
- Подключение и настройка
- Элементы платы
- Микроконтроллер ATmega328P
- Микросхема FT232R
- Светодиодная индикация
- Разъём Mini-USB
- Регулятор напряжения 5 В
- ICSP-разъём для ATmega328
- SPI -Serial Peripheral Interface, краткое руководство
- Общие сведения:
- Подключение:
- SPI на Arduino:
- Arduino UNO/Piranha UNO/Arduino ULTRA
- Arduino MEGA
- Пример для Arduino
- SPI на Raspberry Pi
- Подробнее о SPI
- Параметры
- Скорость передачи данных
- SPI Arduino – подключение устройств к ардуино
- SPI в Arduino
- Выводы и контакты SPI
- Взаимодействие SPI устройств
- Подключение SPI к Ардуино
- Библиотека SPI Arduino
- Преимущества и недостатки SPI
- Пример использования SPI Ардуино в проекте с датчиком давления
- Основные элементы скетча программы
- 🔍 Видео
Видео:MCP2515, контроллер CAN шины с интерфейсом SPIСкачать
Видеообзор
Видео:Передача данных - шина SPIСкачать
Подключение и настройка
Для запуска платформы скачайте и установите на компьютер интегрированную среду разработки Arduino IDE.
При выборе платформы выбирайте Arduino Nano.
Если всё получилось — можете смело переходить к экспериментам.
Видео:Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1)Скачать
Элементы платы
Микроконтроллер ATmega328P
Сердцем платформы Arduino Nano является 8-битный микроконтроллер семейства AVR — ATmega328P с тактовой частотой 16 МГц. Контроллер предоставляет 32 КБ Flash-памяти для хранения прошивки, 2 КБ оперативной памяти SRAM и 1 КБ энергонезависимой памяти EEPROM для хранения данных.
Микросхема FT232R
Микросхема FTDI FT232R обеспечивает связь микроконтроллера ATmega328P с USB-портом компьютера. При подключении к компьютеру Nano определяется как виртуальный COM-порт.
USB-UART преобразователь общается с микроконтроллером ATmega328P по интерфейсу UART через пины 0(RX) и 1(TX) . Рекомендуем не использовать эти контакты в своём проекте.
Светодиодная индикация
Имя светодиода | Назначение |
---|---|
RX и TX | Мигают при обмене данными между Arduino Nano и ПК. |
L | Пользовательский светодиод подключённый к 13 пину микроконтроллера. При высоком уровне светодиод включается, при низком – выключается. |
ON | Наличие питания на Arduino Nano. |
Разъём Mini-USB
Разъём Mini-USB предназначен для прошивки платформы с помощью компьютера.
Регулятор напряжения 5 В
Линейный понижающий регулятор напряжения LM1117MPX-5.0 с выходом 5 вольт обеспечивает питание микроконтроллера ATmega328P и другой логики платформы. Максимальный выходной ток составляет 800 мА.
ICSP-разъём для ATmega328
ICSP-разъём предназначен для загрузки прошивки в микроконтроллер ATmega328 через программатор.
Также через контакты ICSP Nano общается с платами расширения по интерфейсу SPI.
Видео:Лекция 308. Шина I2CСкачать
SPI -Serial Peripheral Interface, краткое руководство
Данная статья является кратким дискурсом по шине SPI и не должна восприниматься как точная техническая документация. Рассматривается только полнодуплексный вариант применения.
Видео:arduino spiСкачать
Общие сведения:
SPI — (Serial Peripheral Interface) эспиай, последовательный периферийный интерфейс иногда называемый 4-х проводным интерфейсом, является последовательным синхронным интерфейсом передачи данных. Изобретён компанией Motorola в середине 1980-x. В отличие от I2C и UART, SPI требует больше сигналов для работы, но может работать на более высоких скоростях. Не поддерживает адресацию, вместо этого используется сигнал SS (slave select — выбор ведомого), который также иногда называется CS (chip select), CE (chip enable) или SE (slave enable). Поддерживает только одного ведущего на шине. Ведущий устанавливает скорость обмена данными и другие параметры, такие как полярность и фаза тактирования. Обмен данными происходит в режиме полного дуплекса, что означает устройства на шине могут одновременно передавать и принимать данные. Интерфейс использует следующие сигналы (в номенклатуре AVR, для получения точного названия сигналов обратитесь к технической документации микросхемы, с которой работаете):
- MISO (master in slave out) — вход ведущего, выход ведомого
- MOSI (master out slave in) — выход ведущего, вход ведомого
- SCK (serial clock) — сигнал тактирования
- SS (slave select) — сигнал выбор ведомого.
Несмотря на то, что интерфейс называется 4-х проводным, для подключения нескольких ведомых понадобится по одному проводу SS для каждого ведомого (в полнодуплексной реализации). Сигналы MISO, MOSI и SCK являются общими для всех устройств на шине. Ведущий посылает сигнал SS для того ведомого, обмен данными с которым будет осуществляться. Простыми словами, все ведомые, кроме выбранного ведущим будут игнорировать данные на шине. SS является инверсным (active-low), что означает что ведущему необходимо прижать эту линию для выбора ведомого.
Видео:Лекция 307. Интерфейс SPIСкачать
Подключение:
Видео:Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч2)Скачать
SPI на Arduino:
Arduino UNO/Piranha UNO/Arduino ULTRA
На Arduino UNO/Piranha UNO/Arduino ULTRA выводы аппаратного SPI расположены на 10, 11, 12 и 13 выводах, а так же эти выводы соединены с колодкой ICSP (in circuit serial programmer):
Сигнал | Вывод |
---|---|
SS | 10 |
MOSI | 11 |
MISO | 12 |
SCK | 13 |
Arduino MEGA
На Arduino MEGA выводы аппаратного SPI расположены на 50, 51, 52 и 53 выводах, а так же эти выводы соединены с колодкой ICSP (in circuit serial programmer):
Сигнал | Вывод |
---|---|
SS | 53 |
MOSI | 51 |
MISO | 50 |
SCK | 52 |
Пример для Arduino
В этих примерах мы соединим две Arduino по SPI по следующей схеме:
В одну плату необходимо загрузить скетч ведущего, а в другую скетч ведомого. Для проверки работы необходимо открыть проследовательный монитор той платы, в которую загружен скетч ведомого.
Arduino UNO в качестве ведущего:
Arduino UNO в качестве ведомого:
После соединения двух Arduino по SPI и загрузки соответствующих скетчей, мы будем получать следующее сообщение в мониторе последовательного порта ведомого микроконтроллера раз в секунду:
Видео:О шине SPI и библитоеке SPI. Arduino.Скачать
SPI на Raspberry Pi
На Raspberry Pi выводы аппаратного SPI расположены на выводах GPIO7, GPIO8, GPIO9, GPIO10, GPIO11:
Перед работой с SPI необходимо его включить. Сделать это можно из эмулятора терминала командой sudo raspi-config -> Interfacing options -> Serial -> No -> Yes -> OK -> Finish или из графической среды в главном меню -> Параметры -> Raspberry Pi Configuration -> Interfaces -> SPI
Подробное описание как это сделать можно посмотреть по ссылке Raspberry Pi, включаем I2C, SPI
Пример работы с SPI на Python:
В отличие от Arduino для Raspberry не существует простых решений для работы в режиме ведомого. Подробней ознакомиться с работой чипа BCM Raspberry можно в технической документации на официальном сайте, стр. 160.
Для проверки работы сценария можно подключить Raspberry по SPI к Arduino со скетчем из примера выше через преобразователь уровней или Trema+Expander Hat:
Видео:Подключение нескольких устройств, датчиков по I2C (АйТуСи) шинеСкачать
Подробнее о SPI
Параметры
Существуют четыре режима работы SPI, зависящие от полярности (CPOL) и фазы (CPHA) тактирования:
Режим | Полярность | Фаза | Фронт тактирования | Фронт установки бита данных |
---|---|---|---|---|
SPI_MODE0 | 0 | 0 | Спадающий | Нарастающий |
SPI_MODE1 | 0 | 1 | Нарастающий | Спадающий |
SPI_MODE2 | 1 | 0 | Нарастающий | Спадающий |
SPI_MODE3 | 1 | 1 | Спадающий | Нарастающий |
В Arduino IDE для установки режима необходимо передать функции, возвращающей объект настроек параметр режима работы SPI_MODE, например:
Для выбора режима работы SPI на Raspberry Pi необходимо вызвать дескриптор объекта SpiDev().mode и присвоить ему битовые значения CPOL и CPHA, например:
Скорость передачи данных
Скорость передачи данных устанавливается ведущим и может меняться «на лету». Программист в силах указать лишь максимальную скорость передачи данных.
Видео:Интерфейс SPI на примере STM32. Подключение периферии - экрана и памяти.Скачать
SPI Arduino – подключение устройств к ардуино
SPI в Arduino- это один из основных протоколов для обмена данными между платой ардуино и подключенными устройствами. Вместе с I2C и UART этот протокол часто используется для многих типов периферийных устройств, поэтому знание принципов работы SPI необходимо любому инженеру-ардуинщику. В этой статье мы коротко рассмотрим основные принципы, схему взаимодействия и способ подключения SPI датчиков и экранов к Arduino.
Видео:SegM8 — семисегментный светодиодный индикатор для Arduino с SPI на борту. Железки АмперкиСкачать
SPI в Arduino
SPI – это широко применяемый протокол передачи данных между микроконтроллером (Master) и периферийными устройствами (Slave). В наших проекта в качестве Master чаще всего используется плата Arduino. Интерфейс SPI был придуман и использовался компанией Motorola, но со временем стал отраслевым стандартом. Основным плюсом работы с этим интерфейсом считается высокая скорость и возможность подключения нескольких устройств на одной шине данных.
Выводы и контакты SPI
Связь по интерфейсу SPI arduino происходит между несколькими устройствами, которые расположены близко друг к другу. Платы Ардуино оснащены отдельными выводами для SPI. Сопряжение происходит при помощи четырех контактов:
- MOSI – по этой линии передается информация к Slave от Master.
- MISO – используется для передачи информации к Master от Slave.
- SCLK – создание тактовых импульсов для синхронной передачи данных.
- SS – выбор ведомого устройства.
Взаимодействие SPI устройств
Взаимодействие устройств начинается, когда на выход SS подается низкий уровень сигнала.
Перед началом работы нужно определить:
- С какого бита должен начинаться сдвиг – со старшего или с младшего. Регулируется порядок при помощи функции PI.setBitOrder().
- Определить уровень, на котором должна находиться линия SCK при отсутствии тактового импульса. Регулируется функцией SPI.setDataMode().
- Выбрать скорость передачи данных. Определяется функцией SPI.setClockDivider().
Следующим шагом будет определение, в каком режиме будет происходить передача информации. Выбор режима определяется такими показателями, как полярность и фаза тактового импульса. Если уровень низкий, записывается 0, высокий – 1. Всего существует 4 режима:
- Режим 0 – SPI_MODE0: полярность (CPOL) 0, фаза (CPHA) 0.
- Режим 1: полярность 0, фаза 1.
- Режим 2:полярность 1, фаза 0.
- Режим 3: полярность 1, фаза 1.
Изначально в Ардуино заложено, что данные передаются старшим битом вперед, но перед началом нужно уточнить это в документации. Продемонстрировать режимы можно на картинке.
Возможно два вида подключения в интерфейсе SPI: независимое и каскадное. В первом случае при подключении Master обращается к каждому Slave индивидуально, во втором случае подключение происходит по очереди, т.е. каскадно.
Видео:Введение в шину I2CСкачать
Подключение SPI к Ардуино
Плата Arduino уже содержит специальные выводы для подключения интерфейса SPI. Эти же выводы повторены в отельном разъеме ICSP. На этом разъеме отсутствует SS – изначально предусмотрено, что микроконтроллер Ардуино будет выступать в роли ведущего устройства. Если нужно использовать его в качестве ведомого, можно использовать любой цифровой вывод в качестве SS.
На данной иллюстрации представлен вариант подключения OLDE-экрана по SPI к ардуино.
Для каждой модели Ардуино существую свои выводы для SPI. Эти выводы:
- Uno: MOSI соответствует вывод 11 или ICSP-4, MISO – 12 или ICSP-1, SCK – 13 или ICSP-3, SS (slave) – 10.
- Mega1280 или Mega2560: MOSI – 51 или ICSP-4, MISO – 50 или ICSP-1, SCK – 52 или ICSP-3, SS (slave) – 53.
- Leonardo: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3.
- Due: MOSI – ICSP-4, MISO –ICSP-1, SCK –ICSP-3, SS (master) – 4, 10, 52.
Последний контроллер Arduino Due расширяет возможности пользователя и позволяет реализовать больше задач, чем на остальных микроконтроллерах. Например, можно автоматически управлять ведомым устройством и автоматически выбирать различные конфигурации (тактовая частота, режим и другие).
Видео:💡 Arduino - Экраны #2 - Электронная бумага и SPI шина - EP7Скачать
Библиотека SPI Arduino
Для работы на Ардуино создана отдельная библиотека, которая реализует SPI. Перед началом кода нужно добавить #include , чтобы включить библиотеку.
- begin() и end() – включение и выключение работы. При инициализации на выход настраиваются линии SCLK, MOSI и SS, подавая низкий уровень на SCLK, MOSI и высокий на SS. Функция end() не меняет уровни линий, она нужна для выключения блока, связанного с интерфейсом, на плате Ардуино.
- setBitOrder(order) – установка порядка отправки битов информации (MSBFIRST – приоритет старшего бита, LSBFIRST – приоритет младшего бита).
- setClockDivider(divider) – установка делителей тактов основной частоты. Можно поставить делители 2, 4, 8, 16, 32, 64 и 128. Записывается следующим образом – SPI_CLOCK_DIVn, где n – выбранный делитель.
- setDataMode(mode) – выбор одного из четырех рабочих режимов.
- transfer(value) – осуществление передачи байта от ведущего устройства и возвращение байта, который принят от ведомого устройства.
- shiftIn(miso_pin, sclk_pin, bit_order) и shiftOut(mosi_pin, sclk_pin, order, value) – принятие и отправка данных, можно подключать к любым цифровым пинам, но перед этим нужно самостоятельно их настроить.
Видео:Arduino I2C связь между контроллерамиСкачать
Преимущества и недостатки SPI
Преимущества интерфейса SPI:
- Возможность передавать большие данные, не ограниченные длиной в 8 бит.
- Простота в реализации программного обеспечения.
- Простота аппаратной реализации.
- Выводов нужно меньше, чем для параллельных интерфейсов.
- Только быстродействие устройств ограничивает максимальную тактовую частоту.
- Большое количество выводов по сравнению с I2C.
- Slave не может управлять потоком информации.
- Отсутствие стандартного протокола обнаружения ошибок.
- Большое количество способов реализации интерфейса.
- Отсутствие подтверждения приема информации.
Видео:arduino подключение питания и виды сигналов урок №2.Скачать
Пример использования SPI Ардуино в проекте с датчиком давления
Для реализации проекта нам нужны Ардуино, датчик давления макетная плата и провода. Пример подключения датчика изображен на рисунке.
При помощи датчика SCP1000 возможно узнавать такие параметры как давление и температура и передать эти значения через SPI.
Основные элементы скетча программы
В первую очередь в коде прописываются регистры датчика при помощи setup(). С устройства возвращаются несколько значений – одно в 19 бит для полученного давления, другое в 16 бит – для температуры. После этого происходит считывание двух температурных байтов и считывание давления в два этапа. Сначала программа берет три старших бита, затем следующие 16 бит, после чего при помощи побитового сдвига происходит объединение этих двух значений в одно. Настоящее давление – это 19-тиразрядное значение, деленное на 4.
const int PRESSURE = 0x1F; // первый этап определения давления (выявляются три старших бита)
const int PRESSURE_LSB = 0x20; // второй этап, в котором определяются 16 бит для давления
const int TEMPERATURE = 0x21; //16 бит для температуры
Для чтения данных температуры и преобразования ее в градусы Цельсия используется следующий элемент кода:
int tempData = readRegister(0x21, 2);
float realTemp = (float)tempData / 20.0; // чтобы определить реальное значение температуры в Цельсиях, нужно полученное число разделить на 20
Считывание битов давления и объединение их:
byte pressure_data_high = readRegister(0x1F, 1);
unsigned int pressure_data_low = readRegister(0x20, 2);
long pressure = ((pressure_data_high Краткие выводы о SPI
Экраны и датчики SPI часто встречаются в проектах ардуино, поэтому нужно знать, как работает этот протокол. В принципе, ничего сложного в подключении SPI устройств нет. Главное, правильно подсоединить провода и использовать методы стандартной библиотеки в нужной последовательности. Для некоторых устройств, например, SD карты или OLED — экранов, альтернатив, в принципе, не существует.
🔍 Видео
Подключение сенсорного цветного 240x320 SPI ILI9341 дисплея 2.8 (2.4, 2.2) к ArduinoСкачать
Логический LIN пробник, цифровой тестер лин, к лайн шины автомобиля. На Ардуино, OLED I2C, TJA 1020Скачать
1.8" TFT LCD Display module ST7735S 128x160, ОбзорСкачать
ЛУЧШИЙ ЭКРАН ДЛЯ АРДУИНО ARDUINO TFT LCD 1.8 SPI 128Х160Скачать
Обзор платы ARDUINO NANO. Как её использовать.Скачать