Fix CAN.begin() for MCP2515 with 8 MHz quartz by increasing the delay #45
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi!
I bought a few MCP2515 from Amazon and they all came with 8 MHz quartz crystal.
Whenever I called
CAN.begin()
, it would return 0.I was sure I set all the configuration parameters correctly before calling it.
It took me some time to debug, but then I started reading the datasheet [1] and found section 8.1 that says
There is a
delayMicroseconds(10);
insideMCP2515Class::reset()
, but some quick math reveals that 128 clock cycles of a 8 MHz clock is 16 microseconds. Indeed, changing the value from 10 to 16 makesCAN.begin()
work for me.[1] http://ww1.microchip.com/downloads/en/DeviceDoc/MCP2515-Stand-Alone-CAN-Controller-with-SPI-20001801J.pdf