0
Offline
Newbie
Karma: 0
Posts: 11
Arduino rocks
|
 |
« on: October 22, 2011, 01:45:26 pm » |
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.jpgHere is a zoomed shot: http://danreetz.com/for_arduino/EpsonTiming2.jpgThe 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
Edison Member
Karma: 3
Posts: 1712
|
 |
« Reply #1 on: October 22, 2011, 03:17:13 pm » |
Perhaps it would be as simple as a resistor to spoof the ballast?
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 11
Arduino rocks
|
 |
« Reply #2 on: October 22, 2011, 03:22:05 pm » |
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
God Member
Karma: 3
Posts: 973
Arduino rocks
|
 |
« Reply #3 on: October 22, 2011, 06:54:00 pm » |
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
Edison Member
Karma: 3
Posts: 1712
|
 |
« Reply #4 on: October 22, 2011, 07:54:04 pm » |
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
Tesla Member
Karma: 71
Posts: 6826
Scattered showers my arse -- Noah, 2348BC.
|
 |
« Reply #5 on: October 22, 2011, 07:57:24 pm » |
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
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 11
Arduino rocks
|
 |
« Reply #6 on: October 22, 2011, 08:20:07 pm » |
graynomad, there are two channels from the mainboard to the ballast, and two from the ballast to the projector.
|
|
|
|
|
Logged
|
|
|
|
|
nr Bundaberg, Australia
Offline
Tesla Member
Karma: 71
Posts: 6826
Scattered showers my arse -- Noah, 2348BC.
|
 |
« Reply #7 on: October 22, 2011, 08:27:16 pm » |
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_analyzerFor that matter I think that can replay data so maybe just glue one of them in place. ______ Rob
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 11
Arduino rocks
|
 |
« Reply #8 on: October 22, 2011, 08:35:19 pm » |
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
Tesla Member
Karma: 71
Posts: 6826
Scattered showers my arse -- Noah, 2348BC.
|
 |
« Reply #9 on: October 22, 2011, 08:48:55 pm » |
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  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
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 11
Arduino rocks
|
 |
« Reply #10 on: October 22, 2011, 08:50:50 pm » |
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
Tesla Member
Karma: 71
Posts: 6826
Scattered showers my arse -- Noah, 2348BC.
|
 |
« Reply #11 on: October 22, 2011, 09:05:24 pm » |
Well you could just duplicate that code to give you two channels, then see if it's worth combining functions.
______ Rob
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 3
Posts: 1712
|
 |
« Reply #12 on: October 24, 2011, 10:17:41 pm » |
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
Tesla Member
Karma: 71
Posts: 6826
Scattered showers my arse -- Noah, 2348BC.
|
 |
« Reply #13 on: October 24, 2011, 10:53:08 pm » |
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
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 1
|
 |
« Reply #14 on: June 12, 2012, 11:50:14 pm » |
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
|
|
|
|
|
|