Does this project spark your interest?

Become a member to follow this project and don't miss any updates

DMX-84: Calculator-Controlled Lights

Control DMX equipment, such as lights, from a TI-84

Similar projects worth following

This project was created on 07/27/2014 and last updated 7 months ago.

DMX-84 is a hardware and software driver for TI-84 calculators to run DMX equipment such as DJ and theater lights. On the hardware side, it uses an Arduino Pro Mini to process commands from the calculator and to send the DMX signal. On the software side, it includes the Arduino firmware as well as the calculator driver, which is an Axe include file that implements the protocol for communicating with the Arduino.

The Arduino uses DmxSimple to handle the DMX output. It can support up to 512 channels simultaneously at the expense of refresh rate. By offloading the DMX output to the Arduino, the calculator's resource usage is greatly reduced so that it can still run intensive programs while operating the DMX. Otherwise, the already-underpowered calculator would optimistically be running at half speed.

This is My First Electronics Project ™. Please critique accordingly.


DMX-84 is a hardware and software driver for TI-84 calculators to run DMX equipment such as DJ and theater lights. It is currently written as an Axe include program, but it may be rewritten as an Axiom in a later version. The driver requires an Arduino-based adapter to transmit DMX.

How It Works

Concept Video

Block Diagram & System Design

Here is a visual block diagram of how the project communicates.

  • The TI-84 communicates with the Arduino over a modified version of the two-wire TI Link protocol.
  • The Arduino is powered over USB by either the TI-84, a PC, or even a decent quality phone charger (not pictured).
  • Also over USB, the PC can debug the Arduino using a serial console at 115200 baud.
  • The Arduino transmits DMX to the receiver(s).
  • The receivers listen for their respective channel values and provide variable power to the light fixtures. Alternatively, each light could have a receiver built in such that the lights could be daisy chained together directly, but the concept is still the same.

The software

The software driver on the calculator is an implementation of an application-specific protocol. The protocol is designed to be as lightweight as possible to minimize transmission time. To accomplish this, messages consist of a single command byte followed by optional parameters, wrapped in a standard TI link packet. For details on the protocol, see DMX-84/doc/

The hardware

The hardware driver is an Arduino Pro Mini 328 - 5V/16MHz produced by Sparkfun. I selected this board because its small feature set is perfect for this project, especially because it can be powered by USB Mini B from the calculator (or an external USB power supply). I also selected it because of its small size and relatively low price. The Arduino handles the calculator input and stores the channel values in memory. It transmits DMX packets at 250 kbaud using a slightly modified version of the DmxSimple library. Between the Arduino and the DMX Out jack is a transceiver that converts the +5/0V signal from the Arduino pin to a differential +5/-5V signal.

The adapter connects to the calculator through a combination of a 2.5mm audio jack for the serial data and a USB Mini B to FTDI adapter for power, serial debugging, and firmware updates. The Arduino can also receive power from any normal USB power supply, such as a computer or even a phone charger.

The Arduino transmits DMX packets over a 5-pin XLR female jack. An LED mounted on the enclosure indicates the system status (normal, error, debug, etc.). All of the hardware is housed in a small aluminum enclosure, painted black for theater use.

Theater Demo

Open Source Licenses

DMX-84 uses certain open source hardware and software.

All other software used in the project, as contained in the repository, is open source under the GPL version 3.


See all components

Project logs
  • Painted Enclosure, Round 3

    8 months ago • 1 comment

    (This log details work from July 2014)

    With nicer weather than the last time I tried to paint the enclosure, I gave it another try. This time, I was careful to sand off all the paint and start fresh. I also tried adding primer, but I didn't realize we were all out.

    I painted two coats of black matte enamel spray paint (same as before), but this time I used two coats of clear gloss enamel hobby spray paint. Last time, I used a different clear coat that wasn't enamel. I also put an extra layer of clear coat on the bottom to prevent scratching.

    The finish ended up having a very nice texture. I did miss a small area painting one of the corners black, and I missed one layer of clear coat on part of the lid, but overall I'm pleased with how it turned out. My fingers are crossed that I don't have to repaint it again (or at least for a long time).

  • Firmware Overhaul

    8 months ago • 0 comments

    (This log details work from June and July 2014)

    After school got out, I was finally able to work more on fixing the firmware properly. I researched possible fixes, and eventually I got it to work by externalizing the array and adding a bit of logic in DmxSimple to allow for digital blackouts.

    With the memory issue fixed, I was able to reimplement the functionality I had to remove for the demo. This time, though, I had much more experience thanks to my co-op/internship over the summer doing embedded C development. I overhauled much of the existing firmware and added features like an LED status indicator and sending debug commands over USB from a PC.

    There is still work to be done, but the firmware is in a much more maintainable state and implements features in better ways than it did before.

  • Engineering Open House

    8 months ago • 0 comments

    In March 2014, I presented the project at Engineering Open House at the University of Illinois at Urbana-Champaign. Mine was one of the few individually presented projects at the event because most were presented by student organizations.

    With the hardware done, I needed to fix the memory issue with the Arduino firmware. I was running into a lot of strange bugs, so I took a hard look at where my memory was being used. It turns out that over 75% of the memory was being used by three arrays - a 512 byte DMX storage area used by DmxSimple, a 512 byte copy of the DmxSimple array so that my firmware could read back DMX values, and a 519 byte buffer used for communicating with the calculator. I only had 2048 bytes to work with, so this was excessive.

    With not much time before the open house, I needed to fix this quickly. I took my basic working firmware from when I tested it in January and added only the calculator commands that I needed for the demo. This way, I could eliminate the 512 byte copy of the DMX universe that I was keeping. I knew this solution was only temporary, but it worked until I had time to implement the fix on the entire firmware.

    Next, I had to write the calculator driver and a control program. The driver took a few days of looking up Z80 assembly opcodes and TI-OS system calls so I could reuse the built-in TI linking functionality. With the driver written, the control program was fairly simple. I made a simple program that could control up to 32 channels individually and also store 16 cues for the demo. (If you're wondering, I chose 32 channels partly because I only needed 21 and partly because 32 is the most I could fit on the screen at one time.)

    After asking around, I was able to borrow five motorized DJ lights from Zach McGinty for the demo. Two of them were only partly functional, so I was left with three nice working Trackspots. I read up on the documentation to figure out how to control them over DMX, and I eventually got them working with the project. I programmed some neat cues that took advantage of the pan/tilt, colors, patterns, and strobes.

    Transporting the lights between buildings was a bit stressful considering they cost several thousand dollars new, but overall the demo was a success. I had a nice mixture of grade school students and adults who seemed interested in seeing how a TI-84 could possibly control complicated, motorized lights.

View all 7 project logs

Build instructions
  • 1

    Solder 12 straight male headers onto both the left and right sides of the Arduino. The long ends should be on the underside of the board.

  • 2

    Solder 6 right-angle male headers onto the side of the Arduino opposite the Reset button. The long ends should be on the underside of the board.

  • 3

    Solder the straight headers onto the side of the protoboard with the square pads. From the square pad side of the protoboard with the logo in the top right corner, they should be soldered as far right as possible and 7 pads from the bottom.

See all instructions


zuul wrote 8 months ago 1 point
this looks like "the internet" from the IT crowd

Are you sure? [yes] / [no]

Alex Cordonnier wrote 8 months ago point
I've never seen that episode before, but it does look very similar (although much smaller). Good catch!

Are you sure? [yes] / [no]

Jasmine wrote 8 months ago point
Hey Alex, you've tagged your project with 'TheHackadayPrize', but you haven't officially submitted. Did you want to? If so, check out Mike's post which has a video about how to submit, and what requirements you must have by August 20th to be considered for the next round

Also, did you noticed that this project was featured You might want to add a link to the post in the links section of the project.

Great project. Keep up the good work!

Are you sure? [yes] / [no]

Alex Cordonnier wrote 8 months ago point
Jasmine, thanks for the heads up. I haven't officially submitted it yet because I still need to make an actual demonstration video. I'm hoping to get that done this weekend or next (whenever I can get access to a theater). And thanks for the link to the article. I saw it already but didn't think about putting the link on the project page.

Are you sure? [yes] / [no]

Jasmine wrote 8 months ago point
Hello Alex, you don't need the video to submit, so you should do it straight away. You do need the video, at least 4 project logs, and system design doc by August 20th to meet the requirements for the next stage. You should have received an email with more details about that. Good luck.

Are you sure? [yes] / [no]

Alex Cordonnier wrote 8 months ago point
Thanks. I'll work on that right away.

Are you sure? [yes] / [no]

Tiago wrote 8 months ago point
No demo? :(

Are you sure? [yes] / [no]

Alex Cordonnier wrote 8 months ago point
I do plan to do a demo later. I don't have any lights on hand, but I know a few people who might let me borrow some for a video. Stay tuned, but keep in mind that it gets tough to find time during the semester.

Are you sure? [yes] / [no]

Gas' wrote 8 months ago point
Great project. I'm looking forward to see the Fibonacci sequence into the light. Cheap connectors is a bad idea. I never saw a Neutrik connector brocken.

Are you sure? [yes] / [no]

Alex Cordonnier wrote 8 months ago point
I looked at Neutrik connectors over a year ago, but I believe I bought this connector because the shipping was outrageous for Neutrik. This one seems pretty good so far, although the release button isn't the smoothest.

Are you sure? [yes] / [no]

Similar projects