Pages: [1]   Go Down
Author Topic: "spoofing" a projector ballast - how to play back communication to mainboard?  (Read 1646 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 11
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
http://www.saleae.com/downloads/

The capture looks like this, for people uninterested in installing the software:
http://danreetz.com/for_arduino/Epson_projector_ballast_timing.jpg
Here is a zoomed shot:
http://danreetz.com/for_arduino/EpsonTiming2.jpg

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...
Logged

Offline Offline
Edison Member
*
Karma: 4
Posts: 1722
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Newbie
*
Karma: 0
Posts: 11
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

ottawa, canada
Offline Offline
God Member
*****
Karma: 5
Posts: 989
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Edison Member
*
Karma: 4
Posts: 1722
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

nr Bundaberg, Australia
Offline Offline
Tesla Member
***
Karma: 121
Posts: 8436
Scattered showers my arse -- Noah, 2348BC.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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
Logged

Rob Gray aka the GRAYnomad www.robgray.com

0
Offline Offline
Newbie
*
Karma: 0
Posts: 11
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

nr Bundaberg, Australia
Offline Offline
Tesla Member
***
Karma: 121
Posts: 8436
Scattered showers my arse -- Noah, 2348BC.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Rob Gray aka the GRAYnomad www.robgray.com

0
Offline Offline
Newbie
*
Karma: 0
Posts: 11
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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. :/
Logged

nr Bundaberg, Australia
Offline Offline
Tesla Member
***
Karma: 121
Posts: 8436
Scattered showers my arse -- Noah, 2348BC.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley

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
Logged

Rob Gray aka the GRAYnomad www.robgray.com

0
Offline Offline
Newbie
*
Karma: 0
Posts: 11
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

http://pastebin.com/EzNNrYey

Logged

nr Bundaberg, Australia
Offline Offline
Tesla Member
***
Karma: 121
Posts: 8436
Scattered showers my arse -- Noah, 2348BC.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

______
Rob
Logged

Rob Gray aka the GRAYnomad www.robgray.com

Offline Offline
Edison Member
*
Karma: 4
Posts: 1722
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

nr Bundaberg, Australia
Offline Offline
Tesla Member
***
Karma: 121
Posts: 8436
Scattered showers my arse -- Noah, 2348BC.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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
Logged

Rob Gray aka the GRAYnomad www.robgray.com

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Pages: [1]   Go Up
Jump to: