Usual Arduino AtmegaXXX have no CAN controller. I see 3 methods to get it :
- AVR using SPI/UART/... connecting to a CAN controller like MCP2515 :
- Emulate the CAN controller with external interrupt register and threading support :
- Use automotive serie of AtMega that have CAN controller
IMHO , the 3rd method is the more efficient.
AtMega automotive serie
M serie has one 12-bit High Speed PSC (Power Stage Controller) :
- Non Overlapping Inverted PWM Output Pins With Flexible Dead-Time
- Variable PWM duty Cycle and Frequency
- Synchronous Update of all PWM Registers
- Auto Stop Function for Emergency Event
supported by avr-libc , it that can be useful.
They have JTAG _AND_ ISP. Using ATmega let us in the arduino community , our tool set and knowledge.
So the more valuable is ATmega64M with 64kb like sanguino but the cheapest could fit needs of most people.
more infos on this atmel products :
see Noduino development
Possible LIN transceiver
- CAN support is a feature request of openservo project : http://openservo.com/Software_Feature_Requests
OpenServo 2.1 is based on AVR ATmega168 .
- http://ecomodder.com/wiki/index.php/MPGuino , this community need CAN support too.