Different uses for serial communication

So after working through most of the projects in the arduino starter kit http://arduino.cc/en/Main/ArduinoStarterKit, I have some questions about how to take advantage of serial communications. I have no particular project in mind, I’m just trying to get a better feel for what can and can’t be done using arduino. Right now I’m just looking for general concepts.

I’m an aero/mechanical engineer by education, but I’ve recently been reading quite a bit about serial buses (mostly USB and 1553). I’m curious as the limits of performing functions like that with arduino. I’ve seen a few blog posts about how we can use the standard digital I/O pins

Would it be possible to set up a system with one arduino as a hub/bus controller where we could have multiple devices plugged into it? For example, we could have controller X, and modules A, B, and C, which all perform functions A, B, and C, respectively. I am thinking that A, B and C would need their own arduinos, otherwise we’re just hooking up sensors/outputs to a regular board, which is no different than standard operation. Would we be able to have one output pin on controller X send commands to multiple modules, by setting up our communication so that each module had an “address” that it would constantly be listening for?

If I started going too far in the wrong direction there, I guess my overall “goal” would be to have a modular system where you could operate your system using any combination of some or all of modules A, B, C, etc. without going in and modifying your code every time you added/removed a module.
For an example, maybe a telemetry package for an RC airplane, where each of those modules are different sensors (gyro, pressure altimeter, airspeed sensor, etc…)
Typing this all out makes me think that for most cases, unless we get crazy with the amount of sensors we’re reading, this could all be done off of a single arduino; but this is more of a thought exercise for me at this point.

Sorry if I confused anyone. I’m not really looking for an “answer” so much as I’m looking for a “discussion.”
Again, I’m very new to all of this, so if anybody knows of a place where all of this has already been answered/discussed, I won’t be offended if you just send me a link and tell me to RTFM.

Man… I should have spent another 5 minutes looking around before I made that long post…

Here’s some stuff I found shortly after typing that wall of text:

Master Writer/Slave Receiver: http://arduino.cc/en/Tutorial/MasterWriter

Wire Library: http://arduino.cc/en/Reference/Wire

I2C: http://en.wikipedia.org/wiki/I2C

Yeah - there is all that stuff.

Serial comms is normally one to one. A Mega has 4 serial ports so it could maintain 4 conversations.
You can use SoftwareSerial to add additional serial comms to an Uno - but doesn't work as well as HardwareSerial.

Serial comms has the advantage of being simple.

If I wanted one master and many slaves I would also think of using 2.4GHz transceivers to communicate between them.

...R

For an example, maybe a telemetry package for an RC airplane, where each of those modules are different sensors (gyro, pressure altimeter, airspeed sensor, etc...)

That is in fact the way that FrSky telemetry is working.
It use a serial connection, and each sensor has a unique ID, f.ex. ALT for altimeter.
The receiver then polls each sensor for a value one at a time and send the data back to the transmitter on the ground.
On the transmitter there is a voice modul, so the values can be read out loud (you can't read and fly at the same time !)

Also look at DMX

That works with serial and a master slave arrangement.

You missed out on SPI which like I2C has hardware support with in the AVR's. Add to that some chips have hardware support for USB built in.

Mark

Robin2:
Yeah - there is all that stuff.

Serial comms is normally one to one. A Mega has 4 serial ports so it could maintain 4 conversations.
You can use SoftwareSerial to add additional serial comms to an Uno - but doesn't work as well as HardwareSerial.

Serial comms has the advantage of being simple.

If I wanted one master and many slaves I would also think of using 2.4GHz transceivers to communicate between them.

...R

So in this post, you make it seem that to communicate with one slave, you need one output on the master, and 2 slaves need 2 outputs. However in the arduino pages I linked in my second post, the examples make it seem as if we can have multiple slaves for 1 master using the Wire.beginTransmission() function. The likely answer is that I'm misunderstanding something...

Is there a limit to how many devices we can communicate with using the wire library? I didn't see anything in the examples about that.

What is your reasoning behind using the 2.4GHz transceivers? Does it have anything to do with bit/second data rates? The wikipedia page for I2C talks about the data rates of that system which made me think that if we start to have several slaves, we could start running into throughput issues and/or unacceptable time delays while the master goes through its transmission loop.
The fact that the Mega has 4 serial ports means that 4 serial messages would be going out simultaneously? What I'm thinking is that say we have 4 slaves, on a Mega we could connect each of those to a separate pin, but on the Uno (for example) we could connect each of those to the same pin (assuming we can do this), but each slave would see a communication rate 1/4 that of if it was connected to a single pin on the Mega?

Also, thanks Grumpy_Mike for the link to DMX. Another system I had no idea about. Also holmes4 and SPI. I fear my engineering curiosity is leading me quite deep down the rabbit hole...

Is there a limit to how many devices we can communicate with using the wire library?

The protocol uses a 7 bit address so the number of devices you can get on a bus at one time is 128 plus a master.
After that you have to do some sort of bank switching between sets of addresses.

and then there is RS485 which covers lots of protocols

At one place I worked we had door controllers communicating with each other using a protocol based on this system.

CaptBojangles:
So in this post, you make it seem that to communicate with one slave, you need one output on the master, and 2 slaves need 2 outputs. However in the arduino pages I linked in my second post, the examples make it seem as if we can have multiple slaves for 1 master using the Wire.beginTransmission() function.

Sorry if I wasn't clear - I was only referring to comms using "RS232" (at TTL levels). With it, in the case you cite, the master would need two USARTs (or software equivalents) one to communicate with each slave.

...R

With it, in the case you cite, the master would need two USARTs (or software equivalents) one to communicate with each slave.

Not necessarily
The Frsky telemetry I mentioned is using one bi-directional data line (rs232 - TTL level) at 57600 baud to communicate with several slaves. The slaves have an unique ID, I belive at the moment there are 28 Slave ID’s defined.
FrSky call it Smart Port.

So at one end (the receiver in the plane) the receiver is the master with x number of slaves.
One the other end (the transmitter on the ground) the transmitter is the master with x number of slaves

The good thing is that it is open source (OpenXSensor, OpenTx)
http://openrcforums.com/forum/

Erni:

With it, in the case you cite, the master would need two USARTs (or software equivalents) one to communicate with each slave.

Not necessarily

It's intriguing how simple things get so complicated - and I'm not criticizing anyone or apologizing. All I was commenting on is the Serial stuff that takes place on pins 0 and 1 of an Arduino Uno or the 4 equivalent things on a Mega. In that narrow context I think my comments are correct.

...R