I've had a couple of
Optikinetics Pro
Strobeflower fixtures for a few years now, after a friend Mick found
some up for sale along with some other Opti gear. There were 3 heads
and one controller unit, though one of the heads was faulty and
considered as spares only.
The dedicated controller unit had been modified heavily, and had a
completely new front panel fabricated for it, presumably because the
original Opti membrane keypad had worn through, and was no longer
available as a spares item.
Having a dedicated controller is a pain in a touring situation, it
means either extra long cables (x 4, one for each head) or someone on
stage to operate it and trust they do it right.
I had planned to design my own control circuit and replace the Opti one
in each head, and had got as far as working out what to do and almost
completing the CAD layout. But after a couple of years procrastinating
I still hadn't got much closer to completing it. Then I got chance to
buy (well, swap) two more Pro Strobeflower heads when we did a gig in
Holland (thanks Ralph!), so the desire for getting rid of the dedicated
controller was even greater now. I actually got another controller with
those two heads, but that one was faulty too, with a damaged membrane
keypad.
With a festival approaching I thought again about how to make the Pro
Strobeflowers respond to DMX rather than their dedicated controller. I
could see that the dedicated controller used a serial data system
electrically similar to DMX, just that Opti designers had invented
their own protocol to transmit to each head. I wondered about if it
would be possible to re-program the microcontroller so that it
understood DMX rather than the Opti protocol, but this would mean fully
understanding how its program operated.
I don't consider myself much of a 'hacker' when it comes to reverse
engineering other peoples code, I have enough trouble understanding
code I've written myself sometimes, without having to work out the
strange ways other people might have done it. But then one afternoon I
downloaded a freeware 8051 microcontroller disassembler and thought I
may as well have a look at how difficult it might be. I was pleasantly
surprised that there wasn't actually much software code in there, and
it was laid out quite logically too. After then downloading a freeware
8051 assembler I managed to successfully re-assemble the disassembled
code (yes wrap your brain around that!) and run it to prove it was
exactly the same. My trusty old Dataman EPROM emulator could now
finally earn its keep after being sat in a box for many years too.
Now I was on a mission to see if I could alter it to receive DMX data.
The 'spares only' head that I had was dug out and set up on the
workbench, but leaving the dangerous high voltage part disconnected.
The first thing that had to be done was to speed up the clock speed
from 6MHz to an overwhelming 8MHz so that the DMX data rate of 250,000
was an exact division by 32 of the clock speed. This was simply a case
of changing the 6MHz crystal for one of the many 8MHz crystals that are
literally left lying around on the floor at work (our staff can be pretty messy...).
After a week or so of working occasionally on it, I had pretty much
changed all the code and added a DMX receive part that appeared to work
OK. This was where the real problems started though. For testing I had
forced the code to respond to DMX address 1, and all seemed OK. The
beam and colour motors ran as I wanted them to in response to DMX
control so I was happy. Because there is no facility to set the DMX
address in the usual way with DIPswitches, I had to choose some fixed
addresses and program each head differently. For head number one I
chose DMX address 80, but when this was tested, the beam and colour
motors started to jump and jerk around when adjacent DMX channels were
turned up. I wondered if there was a problem with the DMX termination,
or the type of input on the Strobeflower circuit, but that wasn't it.
It was the response time of the poor 8051 microcontroller to each DMX
data byte that was received. It barely had time to digest each channel
before the next one arrived, so was missing channels now and then. The
higher the DMX address the more chance there was of it missing one or
more data bytes. After a bit of re-writing my code I managed to get it
to speed up enough to be reliable so I was happy again.
Now it was time to open up all four heads and reprogram each EPROM with
my new code and set the DMX address of each one. This is quite a
tedious process as Opti fixed on the top cover of each head with about
20 screws, I was thinking they are sadists to have this many! This took
me all day to do and then revealed the next problem. The spare head I
had been using to test had an 8051 microcontroller and a 2764 EPROM,
and Opti had kindly EMailed me a scan of the circuit which helped
enormously. But when I opened up some of the other heads I saw that the
circuit was a newer revision, and that it also had a different
microcontroller and EPROM. My heart sank as I thought that all the hard
work I had done was now useless, as it would not work on a different
microcontroller. After finding some details of what an AMD 80321
microcontroller was though I realised that it was a compatible device
and only needed a minor modification to my software to make it run the
same on that too, so I was still in with a chance of it all working.
After screwing them all back together I found I could control them all
together reliably from my Pulsar Masterpiece desk, so again I was
happy. That didn't last long though... I often use a radio DMX link at
gigs and I found to my dismay that the Strobeflowers would not work at
all when plugged into this system. What was wrong now? Looking at the
DMX signal on an oscilloscope I saw a perfect DMX waveform, but the
heads just sat there doing nothing. When I plugged them directly into
the Masterpiece desk they worked perfectly, and now I could see why.
The DMX data from the Masterpiece desk has lovely 20 microsecond gaps
between each data byte. The DMX data from the radio system has zero
time delay between each data byte. The problem of the 8051 not being
fast enough to digest the DMX data had returned to bite me badly, with
only 44 microseconds to process each byte, and my code
sometimes
taking longer than that.
Another few days passed as I wondered what, if anything, could be done
about the problem. After some very careful re-writing I shaved another few
microseconds off the execution time, which was all that was needed to
suddenly make it work again. So finally I could program the
new
code into all the heads and reassemble them.
Then I made up four adapter cables as Y splitters so that
they
could plug into a normal DMX cable, as the original Opti
pinout
was different.
All that remains now is to give them a proper workout under
gig conditions.