6 votos

Problema acelerometro apilamiento y tarjeta SD de escudos en el Arduino UNO

Tengo un acelerómetro ADXL345 en un Makershield apilados en la parte superior de un Seeed tarjeta SD shield. Tanto de aquellos que se apilan en un Arduino UNO R2.

Tengo de cada trabajo, de forma individual, pero cuando se apilan comparten el pin 12. La Tarjeta SD shield utiliza 12 MISO de SPI y el ADXL345 utiliza para la SDO/Alt dirección.

Soy nuevo en Arduino y no han apilado escudos como esto antes. No estoy seguro de cuál es el mejor curso de acción está aquí para hacer que ambos trabajan, en última instancia, quiero registro de los datos del acelerómetro a la tarjeta SD, pero lo primero es lo primero!

Yo estaría agradecido por cualquier ayuda. Yo me he vinculado en las hojas de datos para el ADXL345 y la SD escudo arriba.

4voto

Eric Puntos 152

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

Lo que significa que usted puede utilizar una tabla en un momento, como establece su chipselect de ALTA una vez que haya terminado con él.

Básicamente, el código usual para el acceso al acelerómetro es como este (a partir de aquí, sólo 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 CSa pin está hecha de BAJA antes de la lectura o la escritura, y se establece en ALTO una vez que haya terminado con él.

Asegúrese de que usted haga lo mismo para el chipselect para la tarjeta SD shield -- mantener su chipselect en lo ALTO cuando no está en uso, y en BAJA sólo para la duración de tiempo cuando usted desea comunicarse con ella.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X