the following is the whole c file for the accelerometer:
/*
ADXL345 Library
This libary contains functions to interact with the ADXL345 Triple Axis Digital Accelerometer from Analog Devices written for the ATmega328p
In order to use this libary, define the appropriate pins in the ADXL345.h file
created 20 Aug 2009
by Ryan Owens
http://www.sparkfun.com
*/
#include "ADXL345.h"
#include <stdlib.h>
#include <stdio.h>
#include "LPC214x.h"
#include "spi0.h"
#include "PackageTracker.h"
#include "rprintf.h"
void initAccel(void){
adxl345_write(DATA_FORMAT, RANGE_1); //Configure the Accelerometer for +/-8g
//Set Accel. to Interrupt. Interrupt will occur on EINT2 pin.
adxl345_write(THRESH_FF, 0x0E); //Set Accelerometer Threshold to 600 mg
//adxl345_write(THRESH_FF, 0x14); //Set Accelerometer Threshold to 600 mg
adxl345_write(TIME_FF, 0x0A); //Free Fall will trigger after falling for a minimum of 100ms.
adxl345_write(BW_RATE, 0x07); //Set Output Rate to 100 Hz
adxl345_write(INT_MAP, ~FREE_FALL); //Map the Free Fall interrupt to pin INT1; all other interrupts to INT2
adxl345_write(INT_ENABLE, FREE_FALL); //Activate the 'Free Fall' Interrupt
adxl345_write(POWER_CTL, MEASURE); //Put the Accelerometer into measurement mode
}
int accelX(void){
char high_byte, low_byte=0;
int value=0;
high_byte = adxl345_read(DATAX1);
low_byte = adxl345_read(DATAX0);
value = (high_byte << 8) | low_byte;
return value;
}
int accelY(void){
char high_byte, low_byte=0;
int value=0;
high_byte = adxl345_read(DATAY1);
low_byte = adxl345_read(DATAY0);
value = (high_byte << 8) | low_byte;
return value;
}
int accelZ(void){
char high_byte, low_byte=0;
int value=0;
high_byte = adxl345_read(DATAZ1);
low_byte = adxl345_read(DATAZ0);
value = (high_byte << 8) | low_byte;
return value;
}
void powerdownAccel(void){
SelectAccelerometer();
//SPI0_send(WRITE | Ctrl_Reg1);
//SPI0_send(~PD);
UnselectAccelerometer();
}
char adxl345_read(char register_address){
char read_address=0x80 | register_address;
char register_value=0;
int spcr_setting=0;
spcr_setting = S0SPCR; //Save the current SPI Control Register Settings
S0SPCR = 0x38; // Master, no interrupt enable, 8 bits, Active Low SCK pin, CPHA=1
SelectAccelerometer();
delay_ms(1);
SPI0_send(read_address);
register_value=SPI0_recv();
delay_ms(1);
UnselectAccelerometer();
S0SPCR = spcr_setting;
return register_value;
}
void adxl345_write(char register_address, char register_value){
int spcr_setting=0;
spcr_setting = S0SPCR; //Save the current SPI Control Register Settings
S0SPCR = 0x38; // Master, no interrupt enable, 8 bits, Active Low SCK pin, CPHA=1
SelectAccelerometer();
delay_ms(1);
SPI0_send(register_address);
SPI0_send(register_value);
delay_ms(1);
UnselectAccelerometer();
S0SPCR = spcr_setting;
}
And this the whole h file for the accelerometer:
char adxl345_read(char address);
void adxl345_write(char address, char value);
void adxl345_hw_setup(void);
void initAccel(void);
int accelX(void);
int accelY(void);
int accelZ(void);
void powerdownAccel(void);
//**********************************************************
//
// Macros
//
//**********************************************************
#define SelectAccel() IOCLR0 = CHIP_SELECT
#define UnselectAccel() IOSET0 = CHIP_SELECT
#define READ 0x8000
#define WRITE 0x0000
//**********************************************************
//
// Pin Definitions
//
//**********************************************************
//Definitions for PackageTracker
#define CHIP_SELECT (1<<17)
//ADXL Register Map
#define DEVID 0x00 //Device ID Register
#define THRESH_TAP 0x1D //Tap Threshold
#define OFSX 0x1E //X-axis offset
#define OFSY 0x1F //Y-axis offset
#define OFSZ 0x20 //Z-axis offset
#define DUR 0x21 //Tap Duration
#define Latent 0x22 //Tap latency
#define Window 0x23 //Tap window
#define THRESH_ACT 0x24 //Activity Threshold
#define THRESH_INACT 0x25 //Inactivity Threshold
#define TIME_INACT 0x26 //Inactivity Time
#define ACT_INACT_CTL 0x27 //Axis enable control for activity and inactivity detection
#define THRESH_FF 0x28 //free-fall threshold
#define TIME_FF 0x29 //Free-Fall Time
#define TAP_AXES 0x2A //Axis control for tap/double tap
#define ACT_TAP_STATUS 0x2B //Source of tap/double tap
#define BW_RATE 0x2C //Data rate and power mode control
#define POWER_CTL 0x2D //Power Control Register
#define INT_ENABLE 0x2E //Interrupt Enable Control
#define INT_MAP 0x2F //Interrupt Mapping Control
#define INT_SOURCE 0x30 //Source of interrupts
#define DATA_FORMAT 0x31 //Data format control
#define DATAX0 0x32 //X-Axis Data 0
#define DATAX1 0x33 //X-Axis Data 1
#define DATAY0 0x34 //Y-Axis Data 0
#define DATAY1 0x35 //Y-Axis Data 1
#define DATAZ0 0x36 //Z-Axis Data 0
#define DATAZ1 0x37 //Z-Axis Data 1
#define FIFO_CTL 0x38 //FIFO control
#define FIFO_STATUS 0x39 //FIFO status
//Power Control Register Bits
#define WU_0 (1<<0) //Wake Up Mode - Bit 0
#define WU_1 (1<<1) //Wake Up mode - Bit 1
#define SLEEP (1<<2) //Sleep Mode
#define MEASURE (1<<3) //Measurement Mode
#define AUTO_SLP (1<<4) //Auto Sleep Mode bit
#define LINK (1<<5) //Link bit
//Interrupt Enable/Interrupt Map/Interrupt Source Register Bits
#define OVERRUN (1<<0)
#define WATERMARK (1<<1)
#define FREE_FALL (1<<2)
#define INACTIVITY (1<<3)
#define ACTIVITY (1<<4)
#define DOUBLE_TAP (1<<5)
#define SINGLE_TAP (1<<6)
#define DATA_READY (1<<7)
//Data Format Bits
#define RANGE_0 (1<<0)
#define RANGE_1 (1<<1)
#define JUSTIFY (1<<2)
#define FULL_RES (1<<3)
#define INT_INVERT (1<<5)
#define SPI (1<<6)
#define SELF_TEST (1<<7)
thanks again for the help