Acelerador de apilamiento de problemas y protectores de tarjetas SD en Arduino UNO

6

Tengo un acelerómetro ADXL345 en un Makershield apilado encima de un Se ha visto el protector de la tarjeta SD . Ambos se apilan en un Arduino UNO R2.

Los tengo trabajando individualmente, pero cuando están apilados comparten el pin 12. El protector de la tarjeta SD usa 12 para MISO de SPI y el ADXL345 lo usa para la dirección SDO / Alt.

Soy nuevo en Arduino y no he apilado escudos como este antes. No estoy seguro de cuál es el mejor curso de acción para que ambos funcionen. En última instancia, quiero registrar los datos del acelerómetro en la tarjeta SD, ¡pero primero lo primero!

Estaría agradecido por cualquier ayuda. He vinculado las hojas de datos para el ADXL345 y el escudo SD anterior.

    

1 respuesta

4

No debería ser un problema. El Chipselect del acelerómetro es el pin 10, y el del escudo de la tarjeta SD es 7.

Lo que significa que puedes usar una tabla a la vez, siempre que configures su selección de chips en ALTO una vez que hayas terminado con ella.

Básicamente, el código habitual para acceder al acelerómetro es el siguiente (de aquí , solo las partes relevantes):

int CSa=10; //Chipselect for accelerometer
void writeRegister(char registerAddress, char value){
  //Set Chip Select pin low to signal the beginning of an SPI packet.
  digitalWrite(CSa, LOW);
  //Transfer the register address over SPI.
  SPI.transfer(registerAddress);
  //Transfer the desired register value over SPI.
  SPI.transfer(value);
  //Set the Chip Select pin high to signal the end of an SPI packet.
  digitalWrite(CSa, HIGH);
}

//This function will read a certain number of registers starting from a specified address and store their values in a buffer.
//Parameters:
//  char registerAddress - The register addresse to start the read sequence from.
//  int numBytes - The number of registers that should be read.
//  char * values - A pointer to a buffer where the results of the operation should be stored.
void readRegister(char registerAddress, int numBytes, char * values){
  //Since we're performing a read operation, the most significant bit of the register address should be set.
  char address = 0x80 | registerAddress;
  //If we're doing a multi-byte read, bit 6 needs to be set as well.
  if(numBytes > 1)address = address | 0x40;

  //Set the Chip select pin low to start an SPI packet.
  digitalWrite(CSa, LOW);
  //Transfer the starting register address that needs to be read.
  SPI.transfer(address);
  //Continue to read registers until we've read the number specified, storing the results to the input buffer.
  for(int  SPI.transfer(0x00);
  }
  //Set the Chips Select pin high to end the SPI packet.
  digitalWrite(CSa, HIGH);
}

Tenga en cuenta que el pin CSa se hace BAJO antes de leer / escribir, y se establece en ALTO una vez que haya terminado con él.

Asegúrese de hacer lo mismo con la selección de chips para el protector de la tarjeta SD: mantenga su selección de chips en ALTO cuando no esté en uso, y en BAJO solo durante el tiempo que desee comunicarse con él.

    
respondido por el Manishearth

Lea otras preguntas en las etiquetas