Buggfix Plus
Aktuellt datum och tid: 17.18 2019-03-18

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 5 inlägg ] 
Författare Meddelande
InläggPostat: 10.44 2019-02-14 
Användarvisningsbild

Blev medlem: 18.16 2006-09-16
Inlägg: 1803
Ort: Landskrona
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

[url]
https://www.analog.com/media/en/technic ... dxl345.pdf[/url]

Kod
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
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();
                }


Upp
 Profil  
 
InläggPostat: 14.21 2019-02-14 
Användarvisningsbild

Blev medlem: 07.13 2008-07-03
Inlägg: 13969
Ort: Norrköping
Citera:
The maximum tap duration time is defined by the DUR
register (Address 0x21).

Testa att ställa upp register 0x21. 625us är inte mycket.


Upp
 Profil  
 
InläggPostat: 14.35 2019-02-14 
Användarvisningsbild

Blev medlem: 18.16 2006-09-16
Inlägg: 1803
Ort: Landskrona
FF hjälpte inte heller. Mäter med scope


Upp
 Profil  
 
InläggPostat: 15.13 2019-02-14 
Användarvisningsbild

Blev medlem: 07.13 2008-07-03
Inlägg: 13969
Ort: Norrköping
Läs ut alla register ur accelerometern för att se att värdena är som förväntat.

Testa för att se att du kan få *något* interrupt från accelerometern.


Upp
 Profil  
 
InläggPostat: 09.33 2019-02-18 
Användarvisningsbild

Blev medlem: 18.16 2006-09-16
Inlägg: 1803
Ort: Landskrona
Fick till det nu.

Hade blandat ihop lite grejer. Till vissa adresser skulle man skriva hex värden medans till vissa adresser skulle man skriva heltal. Jag skrev HEX överallt så det blev ju fel kan man säga. Nedan följer rätt kod ifal ngn vill i framtiden ha hjälp


Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
//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 power control to normal.
                I2C1_Start();
                I2C1_Wr(0xA6);
                I2C1_Wr(0x2D);
                I2C1_Wr(0x08);
                I2C1_Repeated_Start();
                I2C1_Wr(0xA7);
                DevID=I2C1_Rd(0);
               
                I2C1_Stop();
               
//Set tap axes. Use xyz axis
                I2C1_Start();
                I2C1_Wr(0xA6);
                I2C1_Wr(0x2A);
                I2C1_Wr(0x01);
                I2C1_Repeated_Start();
                I2C1_Wr(0xA7);
                DevID=I2C1_Rd(0);
                I2C1_Stop();

//Set threshold for single tap detection
                I2C1_Start();
                I2C1_Wr(0xA6);
                I2C1_Wr(0x1D);
                I2C1_Wr(40);
                I2C1_Repeated_Start();
                I2C1_Wr(0xA7);
                DevID=I2C1_Rd(0);
                I2C1_Stop();
               
//Set the duration for single tap detection
                I2C1_Start();
                I2C1_Wr(0xA6);
                I2C1_Wr(0x21);
                I2C1_Wr(32);  //625us/LSB
                I2C1_Repeated_Start();
                I2C1_Wr(0xA7);
                DevID=I2C1_Rd(0);
                I2C1_Stop();

//Set the latency for single tap detection, disable double tap
                I2C1_Start();
                I2C1_Wr(0xA6);
                I2C1_Wr(0x22);
                I2C1_Wr(80);
                I2C1_Repeated_Start();
                I2C1_Wr(0xA7);
                DevID=I2C1_Rd(0);
                I2C1_Stop();

//Map single tap interupt to INT1 pin
                I2C1_Start();
                I2C1_Wr(0xA6);
                I2C1_Wr(0x2F);
                I2C1_Wr(0x00);   //00000000
                I2C1_Repeated_Start();
                I2C1_Wr(0xA7);
                DevID=I2C1_Rd(0);
                I2C1_Stop();

//Enable INT1
                I2C1_Start();
                I2C1_Wr(0xA6);
                I2C1_Wr(0x2E);
                I2C1_Wr(0x40);   //01000000
                I2C1_Repeated_Start();
                I2C1_Wr(0xA7);
                DevID=I2C1_Rd(0);
                I2C1_Stop();
}


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 5 inlägg ] 

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: papabear och 4 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
   
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010