Два акселерометра ADXL362 по шине SPI

Venanskui
Offline
Зарегистрирован: 10.07.2021

Подключил два акселерометра, проблема в том, что первый акселерометр влияет на значения второго(на графике), второй работает нормально, но рывками, при том что первый неподвижен, если двигать первый, значения второго становятся как у первого, а он даже не двигается, кто хорошо разбирается в SPI, подскажите.

Venanskui
Offline
Зарегистрирован: 10.07.2021
#include <LowPower.h>
#include <SPI.h>
#include <ADXL362.h>

ADXL362 x1;
ADXL362 x2;

int SS1 = 9;
int SS2 = 8;
int XData;
int XData2;

void setup() {

  Serial.begin(9600);
  x1.begin(SS1); // инициализация первого
  SPI.setDataMode(3);
  x1.beginMeasure();
  x1.SPIwriteOneRegister(0x2C, 0x57);
  
  x2.begin(SS2); // инициализация второго
  SPI.setDataMode(3);
  x2.beginMeasure();
  x2.SPIwriteOneRegister(0x2C, 0x57);
  
  Serial.print("XData XData2");
}

void loop() {

  digitalWrite(SS1, LOW); // Чтение с первого
  SPI.transfer(0x0B);
  SPI.transfer(0x0E);
  XData = SPI.transfer(0x00);
  XData = XData + (SPI.transfer(0x00) << 8);
  digitalWrite(SS1, HIGH);
  delay(10);
  
  digitalWrite(SS2, LOW); // Чтение со второго
  SPI.transfer(0x0B);
  SPI.transfer(0x0E);
  XData2 = SPI.transfer(0x00);
  XData2 = XData + (SPI.transfer(0x00) << 8);
  digitalWrite(SS2, HIGH);

  Serial.print(XData); // Вывод значений
  Serial.print(" ");
  Serial.println(XData2);
  delay(10);
  
}

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

А вы точно увепены что а Setup не надо дергать SS1 и SS2?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

забавный Вы мужик. У Вас же была уже эта тема ( http://arduino.ru/forum/programmirovanie/dve-nezavisimye-shiny-spi-dlya-sinkhronnoi-peredachi-dannykh ). Я задал Вам кучу вопросов. Вы на них наплевали и завели новую тему. Думаете здесь Вам что-то другое ответят? Без схемы? Без подробного описания проблемы?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Меня больше интересует, почему инициализация идёт через библиотеку, а дальше работа через SPI.
Почему такой запрос, а не :
x1.SPIreadOneRegister(0x0E);
Или
x1.SPIreadTwoRegister(0x0E);
?

В исходники библиотеки хотя бы заглядывать были попытки ?

rkit
Offline
Зарегистрирован: 23.11.2016

Потому что очередной соединитель кодов.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Накой их соединять ?
Все есть в примерах библиотеки ...

rkit
Offline
Зарегистрирован: 23.11.2016

На той, что не умеешь их читать и писать, вот и соединяешь. Ты, будто, первый день на форуме.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

rkit пишет:

На той, что не умеешь их читать и писать, вот и соединяешь. Ты, будто, первый день на форуме.

Берешь пример из библиотеки и множишь сущности.
Сам такой был.

rkit
Offline
Зарегистрирован: 23.11.2016

Что такое сущности? Напиши мне пример.

Venanskui
Offline
Зарегистрирован: 10.07.2021

По поводу кода, это я уже изменял некоторые настройки для SPI, проблема то в том, почему показания первого влияют на второй.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А что получается, если физически отключить один или другой?

Venanskui
Offline
Зарегистрирован: 10.07.2021

С тем же кодом, если ведущий отключить (который влияет), то второй нормально работает, так же как и при работе обоих если ведущим не двигать.

Venanskui
Offline
Зарегистрирован: 10.07.2021

Как понял дело в самом железе, а именно в передаче сигналов. Есть кто прям шарит шарит?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Venanskui пишет:

С тем же кодом, если ведущий отключить (который влияет), то второй нормально работает, так же как и при работе обоих если ведущим не двигать.

Вообще-то полный ответ должен содержать 16 позиций, а не одну-две.