With solid requirements a designers job is simpler - choosing the components that meet the needs, at the lowest cost. But when the requirements are opened ended, it is tougher. The past few days I have been looking into ways to get CAN and a small micro-controller together, still not sure I have the full answer.
I think 1st I want to limit things to what can be used with the Arduino IDE. Given the home-brew nature of this project, Arduino's low cost (free) tools, combined with some per-defined wrappers / libs makes thing a little more easier for a wider range of people. With this as a framework, I think there are three viable approaches:
1) Use Arduino UNO ATmega328p CPU + MCP2515 CAN controller
2) Use Arduino Due ATSAM3X8EA CPU, it has dual integrated CAN controllers.
3) Use Atmel AT90CAN32 CPU: A kind of 'grown up' ATmega328 CPU, it has a single integrated CAN controller and several more I/O ports.
 |
| Uno |
Option #1 would be the lowest cost ($5.10 using Mouser pricing), and I
think I
can get all the current controller functionality supported if I shift
around some ports and all but eliminate the expansion connector.
 |
| Due |
Option #2 is perhaps an overkill. But the two CAN ports could come in
useful to support a low-speed and a special low-latency bus. The
ATSAM3X8EA increases program space from 32K to a whopping 512K!
Downside: Cost - $13.51, perhaps a bit higher as I look more into what
is truly needed for USB communication.
 |
| Something else? |
Option #3 is somewhere in the middle. Its cost is $7.10 - though it does not have the real killer capability as option #2, there are pin compatible versions available which increase the programming space from 32K to 64K and even 128K - for a price of course: $9.00 & $11.33 respectively.
In addition, each of the options will require some extra work in the power supply, and close care with power down modes - as with CAN the controller needs to be alive all the time looking for a call to start generating...
Clearly option #1 is the lowest cost, and its MCP2515 is somewhat supported in the Arduino community. But I am kind of leaning towards option #3. Though a little higher cost, it comes with more I/O capability that I could use to provide additional functions w/o an expansion board (ala, controlling external cooling pump & monitoring the watermaker pressures). Though I could add those capabilities w an expansion board, but the time one purchases the I2C chips, the cost advantage of option #1 is lost.
#2 is such an overkill, and as well as the highest cost. I also kind of wonder about the future of the Due. Today I noted two new Arduino offerings, the Treo and the Zero. Both are high power RISC machines, and I really wonder if the Due's popularity will be effected by them. . . .