Две независимые SPI шины.

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

Можно ли сделать на плате arduino uno две независимые шины SPI?

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

На некоторых платах есть и по три независимых (аппаратных) SPI. 

Ну и всегда можно сделать программный SPI.

В любом случае начинать проект нужно с адекватного выбора контроллера.

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

Можно, но нет никакой практической причины это делать.

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

Просто у меня проблема, не могу подключить два акселерометра adxl362 по одной шине.

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 = 7;
int SS2 = 6;
int16_t temp;
int16_t XValue, YValue, ZValue, Temperature;
int16_t XV, YV, ZV, Tem;

void setup() {
  digitalWrite(SS1,HIGH);
  digitalWrite(SS2,HIGH);
  Serial.begin(9600);
  x1.begin(SS1); // инициализация первого
  x1.beginMeasure();
  x1.SPIwriteOneRegister(0x2C, 0x57);
  
  x2.begin(SS2); // инициализация второго
  x2.beginMeasure();
  x2.SPIwriteOneRegister(0x2C, 0x57);
  
  Serial.print("XValue XValue2");
}

void loop() {
  digitalWrite(SS1,HIGH);
  digitalWrite(SS2,HIGH);
  x1.readXYZTData(XValue, YValue, ZValue, Temperature);
  digitalWrite(SS1,HIGH);
  digitalWrite(SS2,HIGH);
  x2.readXYZTData(XV, YV, ZV, Tem);
  Serial.print(XValue);
  Serial.print(" ");  
  Serial.println(XV);
  
  
}

 

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

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

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

Ой, уймись и забей уже. Это не твое. Если ты эту проблему всё еще не решил, то последующий кошмар работы с инерционными датчиками тебе не по силам и подавно.

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

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

nik182
Offline
Зарегистрирован: 04.05.2015

Проблема в коде. 

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

Проблема в железе.

nik182
Offline
Зарегистрирован: 04.05.2015

А если так

#include <SPI.h>
#include <ADXL362.h>

ADXL362 xl;
ADXL362 x2;


int16_t XValue1, YValue1, ZValue1, Temperature1;
int16_t XValue2, YValue2, ZValue2, Temperature2;
void setup(){
  
  Serial.begin(115200);
  xl.begin(6);                   // Setup SPI protocol, issue device soft reset
  xl.beginMeasure();              // Switch ADXL362 to measure mode  
  x2.begin(7);                   // Setup SPI protocol, issue device soft reset
  x2.beginMeasure();    

}

void loop(){
    
  xl.readXYZTData(XValue1, YValue1, ZValue1, Temperature1);  
  Serial.print("XVALUE1=");
  Serial.println(XValue1);   
  x2.readXYZTData(XValue2, YValue2, ZValue2, Temperature2);  
  Serial.print("XVALUE2=");
  Serial.println(XValue2);   
  delay(100);   
}             

 

то что?

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

Не проканает), но я уже сделал, спасибо.