You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
IR receiving appears to be unreliable on SAMD51. I've seen this issue on both a feather-m4-can board and also a custom itsybitsy-m4 board, but the same code works flawlessly on SAMD21 (qtpy).
After adding some debugging code, I've noticed occasional spikes in duration between pinChange() calls up to around 730µs instead of the usual 610µs. For example:
These are the values of ir.necState, ir.bitIndex, and duration at the top of each pinChange(). You can see that after bit 4, the duration spikes to 732.422µs, which exceeds the 700µs threshold in the code.
The SAMD21 board I used (qtpy) doesn't show these spikes and works with high reliability.
I've also captured the output from the TSOP38238 on a logic analyzer during several of these failures, and the 730µs spike does not show up there.
If I slightly relax some of the thresholds in pinChange(), e.g., 700µs -> 750µs, I can reliably receive IR codes.
The common denominator seems to be SAMD51, but I could be wrong here. My theory is something is causing occasional delays on SAMD51 but not on SAMD21. Could it be longer GC cycles due to more memory? More peripherals and interrupts?
The text was updated successfully, but these errors were encountered:
IR receiving appears to be unreliable on SAMD51. I've seen this issue on both a feather-m4-can board and also a custom itsybitsy-m4 board, but the same code works flawlessly on SAMD21 (qtpy).
After adding some debugging code, I've noticed occasional spikes in duration between
pinChange()
calls up to around 730µs instead of the usual 610µs. For example:These are the values of
ir.necState
,ir.bitIndex
, andduration
at the top of eachpinChange()
. You can see that after bit 4, the duration spikes to 732.422µs, which exceeds the 700µs threshold in the code.The SAMD21 board I used (qtpy) doesn't show these spikes and works with high reliability.
I've also captured the output from the TSOP38238 on a logic analyzer during several of these failures, and the 730µs spike does not show up there.
If I slightly relax some of the thresholds in
pinChange()
, e.g., 700µs -> 750µs, I can reliably receive IR codes.The common denominator seems to be SAMD51, but I could be wrong here. My theory is something is causing occasional delays on SAMD51 but not on SAMD21. Could it be longer GC cycles due to more memory? More peripherals and interrupts?
The text was updated successfully, but these errors were encountered: