Wire.h and timer interrupts


I am trying to read an ADXL accelerometer via I2C using the Wire library at regular intervals. A periodic interrupt to fill a global buffer seems like a reasonable solution, but calls to Wire.endTransmission() crashes if called from within an interrupt service routine. The amount of data I am reading is pretty minimal and the read takes only about 1 millisecond. I am running the ISR at intervals of about 10 msec, so I think timing is not a problem.

Does anyone have ideas about why the Wire library and ISR might interfere with on another? Thank you,


Hi. I have the same problem, want to read from I2C inside an ISR. I found out that Wire use interrupts and inside an ISR interrupts are disabled. Would be nice to find a solution to this but my knowledge in this subject is not so great :-/

If your loop() routine is fairly short, and you don't need really precise intervals between readings, you could have the ISR set a global variable, and take a reading in loop() when the flag is set.