External Interrupt from ADXL345

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
Anonymous
Not applicable

I'm trying to take an external interrupt from ADXL345 to PSoC4 BLE board.

   

I've configured everything and but I'm getting no Interrupts from the Accelerometer.

   

However, whenever I remove the wire connecting the Interrupt pin to the PSoC board, It gives me the interrupt continuously.

   

I've assigned Red LED when board sleeps and Blue when it wakes up. When I pull the connecting wire out, It flickers rapidly.

   

I'm not sure whether it's a problem in the accelerometer configuration or the PSoC interrupt configuration.

   

(I've checked the functioning of Accelerometer in the Arduino IDE, all interrupts work fine there {Inactivity, Activity, Tap, FreeFall etc}. But I don't know how to copy that IDE's code as a C or Header File)

   

PFA Project (Workspace has too many other projects, It's size is too big)

   

 

   

Regards,

   

Viraj

   

EDIR :- Spellings and an Update

0 Likes
1 Solution
lock attach
Attachments are accessible only for community members.
Bob_Marlowe
Level 10
Level 10
First like given 50 questions asked 10 questions asked

Some of the Cypress kits (I am not aware which one you have got) can be switched from 5V operation to 3.3V. You need to run at 3.3V

   

Check with a logic analyzer the interrupt input to the PSoC

   

The error checking function as I implemented as an example unburdens you from all the queries of the "commStatus" variable. In practice you can put a "Blink red sign" or something similar to show that it is not working or even issue a CySoftwareReset() API.

   

 

   

Bob

View solution in original post

0 Likes
3 Replies
Bob_Marlowe
Level 10
Level 10
First like given 50 questions asked 10 questions asked

You need to clear the interrupt in the ADXL345 by reading register 0x30.

   

You already wrote a readbyte() and writebyte() function, expand to a readword(). Leave the error handling within those routines. Call an I2C_Error() function and set a breakpoint there. Then your complete program will look a lot cleaner.

   

Use Project -> Update Components..  once, there are old component versions in your project.

   

Are you running your PSoC board at 3.3V?

   

 

   

Bob

0 Likes
lock attach
Attachments are accessible only for community members.
Anonymous
Not applicable

I've used this code now, and I'm calling it right after I read from the accelerometer

   

void MonitorINT_SOURCE(void) {
/* Here 0x80 means DATA_READY, while 0x10 means ACTIVITY INTERRUPT */
    uint8 accRegValue;
    Accelerometer_RegRead(INT_SOURCE, &accRegValue);
    if (((accRegValue&0x80) == 0x80) && ((accRegValue&0x10) != 0x10)) RED_Write(0);
    else if ((accRegValue&0x10) == 0x10) GREEN_Write(0);
    else {
        RED_Write(1);
        GREEN_Write(1);
    }
    UART_UartPutChar(accRegValue);
}

   

However I'm getting the same result, DATA_READY flashes red rapidly and at regular intervals, but Green(activity interrupt) never flashes.

   

 

   

Could you ellaborate on readword() function, I'm not understanding what I'm supposed to do there. Also my I2C communication is working perfectly so I don't know why I should put an I2C_Error() function in there, and also what the I2C_Error shoudl do isn't clear to me.

   

I've Updated my components now, and changed the code a bit (PFA). Instead of LED depending on INT_SOURCE's value, I'm making it change with the Interrupt subroutine.

   

I've connected the PSoC board to the PC with no information on voltage level. I have connected the 3.3V pin to the ADXL345's Vcc.

   

Regards,

   

Viraj

0 Likes
lock attach
Attachments are accessible only for community members.
Bob_Marlowe
Level 10
Level 10
First like given 50 questions asked 10 questions asked

Some of the Cypress kits (I am not aware which one you have got) can be switched from 5V operation to 3.3V. You need to run at 3.3V

   

Check with a logic analyzer the interrupt input to the PSoC

   

The error checking function as I implemented as an example unburdens you from all the queries of the "commStatus" variable. In practice you can put a "Blink red sign" or something similar to show that it is not working or even issue a CySoftwareReset() API.

   

 

   

Bob

0 Likes