Processing:Библиотеки/Hardware I/O/Класс SPI

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску


Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



Класс SPI[1]

Обозначение

SPI

Описание

Этот класс открывает интерфейс SPI и делает устройство, на котором он открыт, ведущим SPI-устройством.

Интерфейс SPI (сокр. «serial peripheral interface», т.е. «последовательный периферийный интерфейс») – это последовательная шина, часто используемая для коммуникации с датчиками и устройствами памяти. Она использует 4 контакта: MOSI (сокр. от «master out slave in», т.е. «ведущее устройство отправляет данные, ведомое устройство – получает»), MISO («master in slave out», т.е. «ведущее устройство получает данные, ведомое – отправляет») и SCLK (для тактового сигнала), которые используются всеми устройствами шины, а также один или более контактов SS («slave select», т.е. «выбор ведомого устройства»), которые используются ведущим устройством для сообщения какому-либо ведомому устройству, что именно оно выбрано для следующей коммуникации.

Ведущее устройство («мастер») инициирует коммуникацию, подавая на SS-контакт ведомого устройства («раба») значение LOW, а затем начинает генерировать тактовый сигнал. В интерфейсе SPI «мастер» и «раб» передают данные одновременно. Следовательно, вы не можете прочитать данные, при этом не выполнив запись каких-либо данных (даже если это значит отправить просто нули или какую-то другую «мусорную» информацию).

У интерфейса SPI много разных настроек, и их можно задать при помощи функции settings(). Класс SPI поддерживает создание нескольких объектов SPI для одного и того же интерфейса SPI.

Методы

Конструктор

SPI(dev)

Параметры

dev  название SPI-устройства. Тип данных  String

Возвращаемое значение

Пример

import processing.io.*;
SPI adc;

void setup() {
  //printArray(SPI.list());
  adc = new SPI(SPI.list()[0]);
  adc.settings(500000, SPI.MSBFIRST, SPI.MODE0);
}

void draw() {
  // считывает значения через интерфейс SPI,
  // присланные от цифроаналогового преобразователя;
  // отправляемые данные, по сути, могут ничего не значить:
  byte[] out = { 0, 0 };
  byte[] in = adc.transfer(out);
  // согласно «даташиту», нужно сделать сдвиг входящих битов влево:
  int val = ((in[0] & 0x1f) << 5) | ((in[1] & 0xf8) >> 3);
  // значение в диапазоне от «0» до «1023»:
  println(val);
}

См.также

Внешние ссылки