From Technologia Incognita
Jump to: navigation, search
Skills soldering electronics programming
Status Dormant
Niche Electronics
Purpose Use in other project


A number of Techinc people have bought the RGB-floodlight sets as used on OHM2013, see tkkrlab.nl info] for details on them.

Some/most of us do not really have use for DMX512 functionality, however, and would prefer other ways of control. Also, the firmware in the controller currently does not seem to use interrupt-based PWM mechanisms. See [ohm.sa007.nl] for details.

System overview


The system in question consists of 10 RGB led-spots with a wide-angle beam that each have a rating of 10Watts. They have internal current-limiting resistors that allow you to drive them with a standard 12VDC voltage.

Each lamp has a 5 meter cable attached to it that terminates into a keyed 4-pin connector meant for connecting it to the DMX-controller. The four wires are for R, G and B, and the black wire is the common ANODE (POSITIVE) voltage for the LEDS.

The LED modules that are used inside of the spots seem to have 3 sets of led-chips wired in series, allowing for efficient use of the high DC-voltage (12V) without losing too much power.

DMX controller

The DMX-controller consists of an Atmega169 micro-controller running at 16Mhz (?). This uC has enough ports to drive 30 small FETS onboard the PCB that each drive an R, G or B output for one of the spots; providing a total of 10xRGB outputs. Next to this, the uC also has it's USART used for processing incoming DMX512 data and uses 9 pins to read the state of 9 dip-switches on the PCB that allow setting of the DMX512 base-address.

Also on the PCB is a small circuit that provides an opto-isolated DMX512 Input and ouput, nicely seperated from the rest of the circuit by means of an opto-coupler mounted across a 'bare zone' on the top and the bottom of the PCB; providing extra safety for the DMX512 bus and it's controller in case of short-circuit somewhere.

The DMX512 input is provided via two chassis-mount RJ11 blocks.

There is an unpopulated footprint for a dual-row 10-pin header labelled 'JTAG' which could, perhaps, in fact turn out to be an ISP-header allowing us to reflash firmware easily.

Interfacing with the DMX controller

The DMX controller needs DMX input. By modifying a standard RS-232-TTL cable (FTDI cable) with a MAX485 or similar, it's possible to control the device using USB. For this, a cable needs to be modified according to this[1] schema. To use this cable under Linux, you need the dmx_usb[2] driver. This cable is compatible with the ENTEC open-dmx converter, and can be used with all software that supports the ENTEC converter.

SA007 also has Art-Net to DMX converter boards, which allow you to control the DMX controllers using UDP over ethernet.

Suggested projects

The main challenge for most of us seems to be the need to use DMX512 for controlling the PWM-card. This bus is in common use in stage-lighting technology, but is rather absent among normal hobbyist use for the most part. By bypassing the DMX512/RS485-circuitry on the PCB and interfacing directly to the RX/TX/GND of the Atmega169, you can directly connect a TTL-level RS-232 link to it, allowing driving it from an Arduino, FTDI-cable, bluetooth-module, etc.

Alternatively, we can find ways of creating simple/cheap DMX512-modules based on an FTDI + a MAX485 or so. This would allow commonly used lighting-desk software to be used in driving the boards.

Another 'issue' with the DMX-controller seems to be the firmware that it comes supplied with; the source-code seems to hint that it was intended to have an interrupt-based PWM routine implemented, whereas currently it's a single main-loop that both processes incoming DMX512 frames after which control is given to a single subroutine that shifts bit-patterns onto the outputs. This will inevitably mean jitter with shifting DMX512 message-lengths, etc. There are a number of well-understood implementations of software-based PWM routines for large numbers of outputs. Among which the illustrious 'Bit Angle Modulation' algorithm. It would perhaps be fun to figure out how to implement this.