Взаимодействие с датчиком SSI?
Я пытаюсь взаимодействовать с версией RM08S этого поворотного энкодера, используя Arduino Mega. Датчик поддерживает интерфейс "Synchro serial interface (SSI), single ended". Я не знаком с этим протоколом.
Несмотря на название, он, по-видимому, не соответствует описанию официальной спецификации SSI или RS-422, поскольку для этого требуется два провода для дифференциальных часов и линий передачи данных, тогда как у этого датчика есть только один провод для каждого. Это делает его более похожим на IIC, но без функциональности, подобной шине.
Поиск в Google дает очень мало результатов по взаимодействию Arduino с устройствами SSI, не говоря уже о каких-либо стандартных библиотеках. В этой ветке форума задается аналогичный вопрос, но, похоже, проблема не решена.
Поскольку есть только часы и строка данных, будет ли чтение из этого таким же простым, как переключение часов, а затем считывание 10-битных данных из строки данных последовательно с каждым тактом, с учетом того, какие биты используются для заполнения пакета?
@Cerin, 👍1
Обсуждение1 ответ
Лучший ответ:
Это просто СПИ.
SPI.begin();
SPI.setDataMode(SPI_MODE2);
// ...
uint8_t h = SPI.transfer(0x00);
uint8_t l = SPI.transfer(0x00);
delayMicroseconds(20); // Указывает EOT
uint16_t v = (h << 8) | l;
v >>= 4; // для 12-битного разрешения, 5 для 11 бит, 6 для 10 бит и т.д.
Для разрешения 8 бит или меньше вам понадобится только один SPI.transfer и вычтите 8 из суммы сдвига вправо.
Подключение простое: часы к SCK (52 или ICSP 3) и данные к MISO (50 или ICSP 1).
Временные диаграммы в техническом описании (стр. 5) описывают все это в деталях.
Если это функционально SPI, почему они называют это SSI? Разве это не очень разные вещи?, @Cerin
Это * почти * СПИ. Достаточно близко, чтобы работать. Вывод CS отсутствует, а время более критично, поэтому они не могут на самом деле назвать это SPI. Это последовательный интерфейс, и он синхронный., @Majenko
В техническом описании отмечается, что часы должны начинаться с высокого значения, и после спадающего фронта значение датчика фиксируется, а на следующем восходящем фронте вы получаете MSB. Для SPI часы не начинаются с низкого уровня, поэтому вы не получите MSB до 2-го цикла (2-й бит)?, @jose can u c
@josecanuc Это зависит от "режима" SPI. Возможно, вам потребуется ввести SPI.setDataMode(...), чтобы установить SPI в правильную фазу / полярность., @Majenko
@josecanuc, кстати, спасибо, что указал на это. Я добавил правильный вызов режима к приведенному выше примеру. Похоже, что SPI_MODE2 должен это сделать (полярность = 1, фаза = 0), @Majenko
- Датчик перепада давления DLHR SPI
- Водонепроницаемый датчик температуры SPI.
- Как использовать SPI на Arduino?
- Считывание нескольких поворотных энкодеров
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
- Путаница между SPI и I2C для SSD1306 OLED
- Выводы прерываний Arduino Mega 2560 и отображение портов с помощью поворотного энкодера
- Неправильная документация для выводов Mega2560 SPI?
На моем RM08 подключен интерфейс RS422. Могу ли я просто подключить Data + к Miso и CLK + к SCK? @Majenko, @TobiMiller