Initiera ADXL345 för single tap??
Postat: 14 februari 2019, 10:44:40
Sitter och försöker sätta upp kretsen för att detektera single tap och skicka ut det via INT1 pinnen men det händer inget.
Har kollat med logikanalysator och det jag förväntar mig skicka till kretsen är precis det jag får. dessutom läser jag ut Device ID och får svaret 229 vilket stämmer enl datablad. Så jag förutsätter att hårdvaran funkar då den kan svara.
Vad är det jag missar/gör fel?
datablad
https://www.analog.com/media/en/techni ... dxl345.pdf
Kod
Har kollat med logikanalysator och det jag förväntar mig skicka till kretsen är precis det jag får. dessutom läser jag ut Device ID och får svaret 229 vilket stämmer enl datablad. Så jag förutsätter att hårdvaran funkar då den kan svara.
Vad är det jag missar/gör fel?
datablad
https://www.analog.com/media/en/techni ... dxl345.pdf
Kod
Kod: Markera allt
void ADXL345_init(){
//Read out device id ocf the ADXL345 chip. By sniffing the I2C, the
//device id should be seen as 229
I2C1_Start();
I2C1_Wr(0xA6);
I2C1_Wr(0x00);
I2C1_Repeated_Start();
I2C1_Wr(0xA7);
DevID=I2C1_Rd(0);
I2C1_Stop();
//Set threshold for single tap detection
I2C1_Start();
I2C1_Wr(0xA6); //slave adress
I2C1_Wr(0x1D); // Tap register adress
I2C1_Wr(0x01); //data to be sent 15.8mg/LSB
I2C1_Stop();
//Set the latency for single tap detection, disable double tap
I2C1_Start();
I2C1_Wr(0xA6);
I2C1_Wr(0x22);
I2C1_Wr(0x40);
I2C1_Stop();
//Set the window for double tap detection to 0, disable double tap
I2C1_Start();
I2C1_Wr(0xA6);
I2C1_Wr(0x23);
I2C1_Wr(0x00);
I2C1_Stop();
//Set tap axes. Use xyz axis
I2C1_Start();
I2C1_Wr(0xA6);
I2C1_Wr(0x2A);
I2C1_Wr(0x07);
I2C1_Stop();
//Set power control to normal.
I2C1_Start();
I2C1_Wr(0xA6);
I2C1_Wr(0x2D);
I2C1_Wr(0x09);
I2C1_Stop();
//Set data format.
I2C1_Start();
I2C1_Wr(0xA6);
I2C1_Wr(0x31);
I2C1_Wr(0x0A);
I2C1_Stop();
//Set the duration for single tap detection
I2C1_Start();
I2C1_Wr(0xA6);
I2C1_Wr(0x21);
I2C1_Wr(0x01); //625us/LSB
I2C1_Stop();
//Link single tap to be output to INT1 pin
I2C1_Start();
I2C1_Wr(0xA6);
I2C1_Wr(0x38);
I2C1_Wr(0x00); //00000000
I2C1_Stop();
//Map single tap interupt to INT1 pin
I2C1_Start();
I2C1_Wr(0xA6);
I2C1_Wr(0x2F);
I2C1_Wr(0x00); //00000000
I2C1_Stop();
//Enable INT1
I2C1_Start();
I2C1_Wr(0xA6);
I2C1_Wr(0x2E);
I2C1_Wr(0x40); //01000000
I2C1_Stop();
}