Why do I need a Transceiver for DMX Control from Arduino

Hi,
I want to make a DMX controller from my Arduino (using the DMXSimple library), either a Teensy 3 or an arduino Uno. I am just wondering why I need a shield, specifically one that has a transceiver for RS485 (the common examples are the MAX485 or 75176. In this video Controlling DMX lamps with Pure Data through Arduino (pt. 1) - YouTube the uploader is able to control a DMX fixture by directly wiring the cable to his Arduino Duemilanove. I tried this myself and it did not work. RS485 sounds like RS 232 so I am assuming that it is serial communication, I just do not understand the difference.

RS-485 has specific voltages and balanced signals (two wires, one inverted signal and the other non-inverted), it seems that just using one of these signals works if that's what the video guy did (sorry, can't afford to watch the 8-minute vid) but it sounds pretty dodgy.

To do so with 1 wire I would imagine you would have to bias one of the remote transceiver inputs to approx VCC/2.


Rob

RS 485 is serial communication but with balanced signals and multipoint capabilities. Thats why the driver is needed.
RS-485 drivers need to be put in transmit mode explicitly by asserting a signal to the driver. This allows RS-485 to implement linear bus topologies using only two wires. The equipment located along a set of RS-485 wires are interchangeably called nodes, stations or devices.

If this is needed for DMX im not sure of. To my understanding you have only one transmitter on a DMX line. In this case the designation should be RS422

nilton61:
RS 485 is serial communication but with balanced signals and multipoint capabilities. Thats why the driver is needed.

So you are saying that a normal arduino board can not put out balanced signals or does not have multipoint capabilities?

The simplest way to ask this would be, what, exactly, does a transceiver such as the MAX485 do? Why does it have any ability different from FTDI to serial or USB to serial such as on the arduino?

Of course you can have an arduino out balanced signal or have multipoint capabilities. But that does not mean that you just by managing that automatically adhere to the RS485 standard. Doing that would be much harder and already the physical demands of signal drive capability are on the limits of what an arduino an cope with. And the receiver definitely need some extra circuitry. The specification for a receiver says it has to detect signals of +-200mV. Remember RS485 allows up to 1200M of cable.
So if you already have to use external circuitry, get a tranceiver, that will be easier, cheaper, less error prone, faster with a smaller footprint.
I think there is a reason why all RS485 circuits i have seen use a transceiver ic.

Transceivers aren't that expensive -- the DS485 is like $2. Trying to manage differential signaling (line A is equal but opposite of line B), and deal with all the scariness one can find on an RS-485 bus (it's typical to find the lines shorted to each other during bus contention conditions for example), is just not worth it. Use the IC. Getting something to work w/o one is a neat proof-of-concept experiment, but doing so in production is not a clever hack -- it's just foolish. IMO. :slight_smile:

DMX512 is RS485 physical layer plus specific serial signalling protocol on top running
at 250kbaud, that's the standard. These days there is also RDM (remote device
management) that involves signalling in both directions under the control node's
command.

Differential signalling is used for DMX because of the environment - no common ground
over a theatre lighting rig due to the power involved (it can be a multi-phase set-up), like
any industrial setting either high voltage signalling (24V), optical or differential signalling
is a requirement to handle the electrical noise and the lack of common ground. RS485 is
also a transmission line bus so can handle high speed signalling over long cable runs (unlike
RS232).

There are also other benefits of using a separate interface for the DMX signal. Adding optical isolation is the best protection. The timing of the data is also quite critical, so you have to be very careful with your Arduino code. So, after trying myself to see if it was viable to just read DMX directly, I ended up deciding it was much better to use some sort of external interface.

There are a number of sources for RS485 shields at around $15. But they do require you to code the data output in detail.

My own project is only reading DMX, so for me, I think the best for the money is this one;
$25, Chromation Systems - Infinity Mirror, Color Cycling Lights, LEDs, Kits, Projects

Joe Dunfee

BTW, a shield is only really necessary if you want the connectors. The MAX485 (or pin-compatible TI DS485) doesn't require external components, except decoupling caps and maybe a line terminating resistor. They're both available in DIP-8 too, so you can use a breadboard or stripboard.

Thank you all for your input, I really appreciate it all. Also, I do not mean to repeat myself, but I think some of your answers were a bit over my head. Here is my question in its simplest fashion.

I just plugged a dmx light straight into my arduino uno (and the wall for power). I plugged the dmx cable cords into pin3 (lead), pin4 and gnd. Both the dmx Simple code and my variations worked as expected (with absolutely no external hardware)

Can someone try and give me the simplest answer as to why I should use a 485 chip, resistor, and possibly capacitors as well (essentially a breakout board) when I can just plug directly into my arduino pins? Again, thanks for anyone who has the patience to help me understand this.

Can someone try and give me the simplest answer as to why I should use a 485 chip, resistor, and possibly capacitors as well (essentially a breakout board) when I can just plug directly into my arduino pins?

Because that trick is not robust. It will be suceptable to interference and will not go as far as doing it correctly.

computersarecool:
Can someone try and give me the simplest answer as to why I should use a 485 chip, resistor, and possibly capacitors as well (essentially a breakout board) when I can just plug directly into my arduino pins? Again, thanks for anyone who has the patience to help me understand this.

That will work when the wires are short and in a low-noise electrical environment.

A transceiver is for use out in the real world where wires are usually longer and run alongside power cables, etc..

Plugging into the pins of an arduino board may work for one or two receivers over short distance. It works only because the receivers have tolerance for signals deviating from the RS485 standard. You will have problems when interfacing to a real multipoint DMX line. A RS485 transceiver chip or shield solves all this and is not expensive.

You cannot plug into Arduino pins with the correct termination resistor without the risk
of taking the Arduino outside the absolute maximum limits - the normal termination is
100 ohms (matches the cable), and at 5V that's 50mA.

In practice you might just get away with it (two pins will each have perhaps 20 to 40 ohms
of output resistance each, so the actual total resistance will be about 150 ohms, so perhaps
35mA or so will actually flow. Still that's close to the limit and you have no protection against
over/under voltage on the wires.

Standard RS485 drivers allow the two ends to have somewhat different ground
potentials (+/- 7V I think is a common spec) even without using opto isolation - direct
connection to Arduino pins cannot give you that (for receive mode).

Thank you all for sticking with me. It makes sense now