AXDL345 Accelerometer on SPI Raspberry PI with bcm2835
I have this accelerometer ADXL345. I am trying to read data from it from SPI using the BCM2835 Library here.
When I run this, I SOMETIMES get a value back (other than zero), but it's never consistent.
Please advise!
SPI Class that wraps BCM2835 Library
public class SPI {
private readonly GPIOPins cs;
public SPI(GPIOPins cs) {
this.cs = cs;
}
static SPI() {
// initialize the mapped memory
if (!bcm2835_init())
throw new Exception("Unable to initialize bcm2835.so library");
}
public void Begin(){
bcm2835_spi_setClockDivider(42);
bcm2835_spi_setDataMode(3);
bcm2835_spi_chipSelect(cs);
bcm2835_spi_setChipSelectPolarity(cs, false);
bcm2835_spi_begin();
}
public void End(){
bcm2835_spi_end();
}
public byte Transfer(byte val){
return bcm2835_spi_transfer(val);
}
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_init")]
static extern bool bcm2835_init();
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_begin")]
static extern void bcm2835_spi_begin();
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_end")]
static extern void bcm2835_spi_end();
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_transfer")]
static extern byte bcm2835_spi_transfer(byte val);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_chipSelect")]
static extern byte bcm2835_spi_chipSelect(GPIOPins pin);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_setClockDivider")]
static extern byte bcm2835_spi_setClockDivider(int val);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_setDataMode")]
static extern byte bcm2835_spi_setDataMode(int val);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_setChipSelectPolarity")]
static extern byte bcm2835_spi_setChipSelectPolarity(GPIOPins pin, bool activeHigh);
}
Main Program
SPI accel = new SPI(GPIOPins.GPIO_17);
Byte wBuff = new Byte();
Byte rBuff = new Byte();
while (true) {
accel.Begin();
wBuff = 0x00;
rBuff = accel.Transfer(wBuff);
Console.WriteLine("Reading device id from register: " + wBuff);
Console.WriteLine("Received device id: " + rBuff);
accel.End();
Thread.Sleep(500);
}
I have this accelerometer ADXL345. I am trying to read data from it from SPI using the BCM2835 Library here.
When I run this, I SOMETIMES get a value back (other than zero), but it's never consistent.
Please advise!
SPI Class that wraps BCM2835 Library
public class SPI {
private readonly GPIOPins cs;
public SPI(GPIOPins cs) {
this.cs = cs;
}
static SPI() {
// initialize the mapped memory
if (!bcm2835_init())
throw new Exception("Unable to initialize bcm2835.so library");
}
public void Begin(){
bcm2835_spi_setClockDivider(42);
bcm2835_spi_setDataMode(3);
bcm2835_spi_chipSelect(cs);
bcm2835_spi_setChipSelectPolarity(cs, false);
bcm2835_spi_begin();
}
public void End(){
bcm2835_spi_end();
}
public byte Transfer(byte val){
return bcm2835_spi_transfer(val);
}
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_init")]
static extern bool bcm2835_init();
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_begin")]
static extern void bcm2835_spi_begin();
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_end")]
static extern void bcm2835_spi_end();
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_transfer")]
static extern byte bcm2835_spi_transfer(byte val);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_chipSelect")]
static extern byte bcm2835_spi_chipSelect(GPIOPins pin);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_setClockDivider")]
static extern byte bcm2835_spi_setClockDivider(int val);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_setDataMode")]
static extern byte bcm2835_spi_setDataMode(int val);
[DllImport("libbcm2835.so", EntryPoint = "bcm2835_spi_setChipSelectPolarity")]
static extern byte bcm2835_spi_setChipSelectPolarity(GPIOPins pin, bool activeHigh);
}
Main Program
SPI accel = new SPI(GPIOPins.GPIO_17);
Byte wBuff = new Byte();
Byte rBuff = new Byte();
while (true) {
accel.Begin();
wBuff = 0x00;
rBuff = accel.Transfer(wBuff);
Console.WriteLine("Reading device id from register: " + wBuff);
Console.WriteLine("Received device id: " + rBuff);
accel.End();
Thread.Sleep(500);
}
No comments:
Post a Comment