ADXL 345 check wiring

Post here about your Arduino projects, get help - for Adafruit customers!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
BBZeus
 
Posts: 4
Joined: Sun Jan 25, 2015 11:22 pm

ADXL 345 check wiring

Post by BBZeus »

A message to check my wiring came up after using the library on https://www.adafruit.com/product/1231. I did so and still the ADXL 345 couldn't be found. I then tried a tutorial found here https://www.sparkfun.com/tutorials/240. The serial monitor then read 0,0,0. What am I doing wrong? I have wired the boards as indicated.

User avatar
Franklin97355
 
Posts: 23911
Joined: Mon Apr 21, 2008 2:33 pm

Re: ADXL 345 check wiring

Post by Franklin97355 »

Could you post clear, detailed pictures of both sides of your board showing any soldering you have done and the connections to it? Also which program are you running and have you made any changes to it?

User avatar
BBZeus
 
Posts: 4
Joined: Sun Jan 25, 2015 11:22 pm

Re: ADXL 345 check wiring

Post by BBZeus »

This is the circuit setup for the instructions found on Sparkfun. I have to set up the board again for the instructions found on adafruit. This is the setup that gives me 0,0,0.

I didn't make any changes to the code.

Code: Select all

//Add the SPI library so we can communicate with the ADXL345 sensor
#include <SPI.h>

//Assign the Chip Select signal to pin 10.
int CS=10;

//This is a list of some of the registers available on the ADXL345.
//To learn more about these and the rest of the registers on the ADXL345, read the datasheet!
char POWER_CTL = 0x2D;	//Power Control Register
char DATA_FORMAT = 0x31;
char DATAX0 = 0x32;	//X-Axis Data 0
char DATAX1 = 0x33;	//X-Axis Data 1
char DATAY0 = 0x34;	//Y-Axis Data 0
char DATAY1 = 0x35;	//Y-Axis Data 1
char DATAZ0 = 0x36;	//Z-Axis Data 0
char DATAZ1 = 0x37;	//Z-Axis Data 1

//This buffer will hold values read from the ADXL345 registers.
char values[10];
//These variables will be used to hold the x,y and z axis accelerometer values.
int x,y,z;

void setup(){ 
  //Initiate an SPI communication instance.
  SPI.begin();
  //Configure the SPI connection for the ADXL345.
  SPI.setDataMode(SPI_MODE3);
  //Create a serial connection to display the data on the terminal.
  Serial.begin(9600);
  
  //Set up the Chip Select pin to be an output from the Arduino.
  pinMode(CS, OUTPUT);
  //Before communication starts, the Chip Select pin needs to be set high.
  digitalWrite(CS, HIGH);
  
  //Put the ADXL345 into +/- 4G range by writing the value 0x01 to the DATA_FORMAT register.
  writeRegister(DATA_FORMAT, 0x01);
  //Put the ADXL345 into Measurement Mode by writing 0x08 to the POWER_CTL register.
  writeRegister(POWER_CTL, 0x08);  //Measurement mode  
}

void loop(){
  //Reading 6 bytes of data starting at register DATAX0 will retrieve the x,y and z acceleration values from the ADXL345.
  //The results of the read operation will get stored to the values[] buffer.
  readRegister(DATAX0, 6, values);

  //The ADXL345 gives 10-bit acceleration values, but they are stored as bytes (8-bits). To get the full value, two bytes must be combined for each axis.
  //The X value is stored in values[0] and values[1].
  x = ((int)values[1]<<8)|(int)values[0];
  //The Y value is stored in values[2] and values[3].
  y = ((int)values[3]<<8)|(int)values[2];
  //The Z value is stored in values[4] and values[5].
  z = ((int)values[5]<<8)|(int)values[4];
  
  //Print the results to the terminal.
  Serial.print(x, DEC);
  Serial.print(',');
  Serial.print(y, DEC);
  Serial.print(',');
  Serial.println(z, DEC);      
  delay(10); 
}

//This function will write a value to a register on the ADXL345.
//Parameters:
//  char registerAddress - The register to write a value to
//  char value - The value to be written to the specified register.
void writeRegister(char registerAddress, char value){
  //Set Chip Select pin low to signal the beginning of an SPI packet.
  digitalWrite(CS, 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(CS, 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(CS, 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 i=0; i<numBytes; i++){
    values[i] = SPI.transfer(0x00);
  }
  //Set the Chips Select pin high to end the SPI packet.
  digitalWrite(CS, HIGH);
}
Attachments
20150126_082951.jpg
20150126_082951.jpg (118.12 KiB) Viewed 544 times
20150126_082916.jpg
20150126_082916.jpg (92.14 KiB) Viewed 544 times
Last edited by adafruit_support_bill on Mon Jan 26, 2015 10:31 am, edited 1 time in total.
Reason: please use the </> button when submitting code. press </>, then paste your code between the [code] [/code] tags.

User avatar
adafruit_support_bill
 
Posts: 88093
Joined: Sat Feb 07, 2009 10:11 am

Re: ADXL 345 check wiring

Post by adafruit_support_bill »

You need to solder the headers as shown in the guide. https://learn.adafruit.com/adxl345-digi ... and-wiring

Also note that the SPI pins on a Mega are not the same as the SPI pins on an UNO: http://arduino.cc/en/Main/arduinoBoardMega

User avatar
BBZeus
 
Posts: 4
Joined: Sun Jan 25, 2015 11:22 pm

Re: ADXL 345 check wiring

Post by BBZeus »

I soldered the pins and attempted to move the sda and scl connectors to pins 20 and 21, and then to the two additional pins above AREF that sit above 13. In the second picture indicates the pins that I connected to, the first picture is from another website that diagrams the pinout. Please note that the Arduino you linked to earlier is not the 2560 that I have. I have two accelerometers, I tested both they both read out the same 0,0,0. I'm so sorry if I sound like an idiot, but I literally started working on Arduino yesterday. I did several other examples using LED's only, but this sensor is obviously much more complex. I thought if I followed the instructions on either page that it would work out like the other examples....it's not.
Attachments
Screen Shot 2015-01-26 at 4.14.27 PM.png
Screen Shot 2015-01-26 at 4.14.27 PM.png (507.95 KiB) Viewed 511 times
Screen Shot 2015-01-26 at 4.12.10 PM.png
Screen Shot 2015-01-26 at 4.12.10 PM.png (231.98 KiB) Viewed 511 times

User avatar
adafruit_support_bill
 
Posts: 88093
Joined: Sat Feb 07, 2009 10:11 am

Re: ADXL 345 check wiring

Post by adafruit_support_bill »

I soldered the pins and attempted to move the sda and scl connectors to pins 20 and 21,
Are you using SPI or i2c? The example in our guide is i2c. The code you posted uses SPI.
Please note that the Arduino you linked to earlier is not the 2560 that I have.
The SPI and I2C pins are the same on all the Megas. SPI pins are also available on the ICSP header. On R3 and later Megas, the I2C pins are replicated next to the AREF pin.

Please verify that each sensor works when tested according to our tutorial. It is much simpler to debug one thing at a time.
https://learn.adafruit.com/adxl345-digi ... elerometer

User avatar
BBZeus
 
Posts: 4
Joined: Sun Jan 25, 2015 11:22 pm

Re: ADXL 345 check wiring

Post by BBZeus »

Yay! I took it apart and tried the adafruit tutorial again and it worked this time. Who knows what I did wrong last time? I sure don't

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino”