The Controller Area Network (CAN) protocol is becoming widely supported
in microcontroller hardware and is being adopted for
robotics as a
convenient and easy way to allow multiple microcontrollers and sensors
within a robot to communicate with each other. Electronic Design Online
has published an article by William Wong on the CAN protocol
titled "CAN
201: CAN Controllers". In it, he covers the basics of the CAN
controller used in Microchip's 8bit PIC. The general operation of the
described controller is similar to controllers used in other chips. If
you missed Wong's earlier article, CAN 101: Controller Area
Network, it covered the basics of the CAN protocol itself. Wong
promises to publish one
more article in the future on high-level CAN protocols.
I really don't like CAN too much myself. For me, I'm either going to go
quick and dirty or all the way. For quick and dirty, I'd use Serial or
SPI or some cheezy 1 wire comm protocol I make up myself. Such quick
and dirty stuff would be something for like chip to chip communication
on the same PC board or simple perifreals within a couple feet. If I
were to plan to go for some more complex communication, then I would
probably go with something that would work with PC104 or a Laptop. If I
were to jump that far I'd just go with eithernet and thereby skipping
I2C and CAN altogether. To bridge a gap between Laptop and Chip
interface I would still go with serial or SPI to talk to them. If I had
so many chips that I felt I needed some sort of CAN like interface then
probably I should do something else like use a Xylinx gate array or
flash logic. Why make it so hard if you don't have to? The only
advantage I could see with CAN is the noise immunity, but I'm guessing
if you have trouble with noise then you probably have trouble with your
MCU resetting too. If you have nodes that are so smart then you
probably should start doing a real network like eithernet anyway. Don't
get me wrong, CAN looks robust and all, but for most things I do as a
hobbiest I don't see a need for that much robustness and complexity yet
keeping it less than ethernet quality. It adds way too much work to
what I'm doing for little things and too much work to make it still not
be ethernet. I figure most hobby robots rarely use CAN nor need to use
it at all. It's like a huge hammer for a tiny nail. Like it would work
but a smaller solution would make more sense or bigger nails would make
more sense but not the way it is. I'm not designing for Cars anyway so
that argument doesn't really do much for me. So perhaps it's just me,
but I think its days are numbered before we just see ethernet (or some
sort of mini ethernet) on pic chips eventually and CAN and I2C will just
be history.
OK, well I guess I've been bit banging my head too much. If it's built
into a pic chip and no external circuitry is needed, then hey, I'm all
for it. It actually sounds cool if the chip takes care of it for you.
So, um, nevermind. :-P