"spoofing" a projector ballast - how to play back communication to mainboard?

I have a projector that I would like to operate without the bulb. I think the best way to do this is to "spoof" the communication between the ballast and the mainboard, but I'm having trouble doing it. First, the data:

The "ballast" of the projector communicates with the mainboard with some protocol. It communicates the exact same sequence every time. I have captured the sequence using Saleae Logic. The capture is here:
http://danreetz.com/for_arduino/ProjectorBallast.logicdata
You can read it with the free Logic software here:

The capture looks like this, for people uninterested in installing the software:


Here is a zoomed shot:

The protocol is relatively tightly timed. There are many events that are 200 MICROseconds long, shorter than I can produce with the delay() command. I tried using delayMicroseconds(), but mixing delay() and delayMicroseconds() gave me unpredictable timing.

So, my question. If you were approaching this problem - basically just playing back a logical sequence at high speed with some precision, how would you do it? Is there some other project that does similar "spoofing" that I can copy code from? It would be great if I could just enter a series of events...

Perhaps it would be as simple as a resistor to spoof the ballast?

No, it isn't on this particular model. If you look at the screenshots or data I posted, you can see that there is some communication protocol. Other projectors can be bypassed this way, but not that one.

Maybe I wasn't clear in my question - I'm looking for approaches to "spoofing" the data being sent back and forth. I have the data captured and I want to "replay" it using Arduino, but I can't get the timing right or something.

Is there, for example, an Arduino sketch which can "play back" a Logic capture?

Is there a library that makes sending a long sequence of timed events easy?

I know nothing about the projector of course but If both sequences are completely fixed, you should be able to cobble together a series of delayMicroseconds and direct port manipulations that would be as close to correct as you'd get any other way. You could do it with digitalWrite() in principle but you'd have more compensating to do.

I can't think of any sketches that would play back a logic analyzer sequence other than a .wav player bu that's much much lower frequency.

Maybe you can adopt something from an ir library, it has alot of timing involved and has programs already that record raw data, it may even work directly just without the ir led reciever

using delayMicroseconds(), but mixing delay() and delayMicroseconds() gave me unpredictable timing.

My first thought then would be to just used delayMicros, but I would think that as long as you don't overlap the two delay funcs they should work together.

Is that the entire waveform, I'm having trouble reconciling the two traces for the same thing.


Rob

graynomad, there are two channels from the mainboard to the ballast, and two from the ballast to the projector.

OK, that's one weird setup then.

I don't know how much effort you wand to put into this, but one way to do this is to make your own mini LA with some SPI ram chips, they could store the data then relay it.

Have a look at the design for the Logic Shrimp

http://dangerousprototypes.com/docs/Logic_Shrimp_logic_analyzer

For that matter I think that can replay data so maybe just glue one of them in place.


Rob

I have a pretty decent logic analyzer (the Saleae Logic) which is giving me good data - I guess I just have to get good at portmanipulation. If I could pull it off using only delayMicroseconds, that would be neat, but if you look at the timing, there are LONG gaps in the data (almost 1 second).

I looked at the IR capture library, and it would work if I only had to send one output, but I have to send two.

It is definitely weird stuff. :confused:

Yes I saw the long periods.

I'd just start from the basics, the shortest period seems to be ~200uS so write a function that does that (or maybe 100), then call it X times for longer periods.

And brush up on your PORTx &= ~(1 << value) code :slight_smile:

As you have a logic analyzer you can see what your code is producing so you're way ahead of most people. I've got the Saleae as well, I honestly reckon that everyone should have one (or an equivalent).


Rob

Cool. Thanks for the advice.

I wish I could find something like this IReplay code... but for TWO pins. That would solve all my problems; I'd just drop the timing information into it.

Well you could just duplicate that code to give you two channels, then see if it's worth combining functions.


Rob

I don't know too much of the internals of the ir library but the output uses a timer, since the arduino has more than one I definetly can see a possibility of just adding a channel with the names changed, however perhaps the only problem would then be the ability to do two things accuratly
I did notice tho that the ballast to projector timing do not overlap, maybe just once, maybe you can multiplex the one output within tolerance of the projector timing?

do not overlap

That will help, affectively only one signal then with some output on one pin and some on another.

But you have an analyser and can write a program to output the same waveform so do you need the IR library?


Rob

I'm looking to do the same thing on my Epson Powerlite 705. You can find some info on how the ballast board converts these 5 lines into 3 signals at http://www.osram.com/media/resource/HIRES/333553/5-Pin-Interface,-version-2.9,-01.02.2010.pdf I picked up some optocouplers from digikey and am going to put them between the arduino and the main logic board, just like the ballast board has - this will simplify the problem to parroting one communication line to another. I've got my fingers crossed.

@pbeyersdorf were you able to make it work? Can you share some knowledge? Trying to mod Epson PL 8530... As I understand I need to feed projector with correct data stream first 2 pins and other 3 pins can be left alone. I'm hoping to remove the ballast.
Another idea to keep 5pin ballast interface board, however, does anyone know if it's possible to go this route? Because in such a way data communication will remain intact. I wonder if there is analog or digital communication between ballast interface board and ballast itself...

I never got the communication to work, so I eventually tried connecting a 30? power resistor (rated for 200 W) in place of the lamp and it worked. Obviously this is inelegant and non-optimal, as I'm wasting 200W of power and creating a very hot resistor in the process, but it did let me get the projector operating without the lamp, which was my goal.

Thanks for reply! Could you please tell me what did you try?

Well I had intended to tap the communications line using some optocouplers to avoid drag gin down the impedance of the lines, but somewhere in the process of sticking wires into the ballast I shorted something and destroyed the ballast. It was at theta point that I gave up on the communication spoofing and decided to try the power resistor in place of the lamp. Sorry I can't be more helpful.

Hello Guys,
i have read this article and i have found that the ballast as a uart protocol made by OSRAM. I have buyied a projector without lamp, so i want to check if it works or not. So the simplest way is to put inside a resistor, what kind of resistor i have to put?
thanks guy
ps:https://www.osram.com/media/resource/HIRES/333551/standardized-uart-protocol,-version-3.3,-13.06.2008.pdf