0

Any hope of someday being able to turn off LED signs?
Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.

Any hope of someday being able to turn off LED signs?

by jive on Tue Nov 06, 2007 11:56 pm

I have a remote that does the Alpha and Betabrite signs, but the thing is huge. I did read up on the subject, and found this out:

Mike Peters at Adaptive Micro Systems provided this insight into the subject:

"The Alpha Infrared Remote Control Keyboards use what is called bi-phase encoding, and I do not believe that you would be able to programatically tell your IR port on your computer to do that. It is currently doing what is called IRDA, which is the industry standard for IR.

I did copy the power off command into the remote program on my pocket pc, but was unable to power off the sign at work. Not sure if the "bi-phase" is the problem there or not.

Just wondering. :)

Jive
jive
 
Posts: 4
Joined: Tue Nov 06, 2007 11:35 pm

by maltman23 on Thu Nov 08, 2007 3:45 am

I hven't tried to study the remote control codes for LED signs. I don't know what "bi-phase" is, but I can't imagine that it would be difficult to grab the code and make it work on the TV-B-Gone Kit.

I am also not up on IrDA, but I believe that IrDA uses 850nm IR instead of the 940nm IR that TV remote controls use. If that is true, then you could change some or all of the IR emitters on the TV-B-Gone Kit, or you could hack some on in addition to the emitters already there.

Anyone else know more about the codes for these signs?

Mitch.

maltman23
 
Posts: 134
Joined: Fri Jul 13, 2007 4:54 pm
Location: San Francisco

LED scrolling sign control

by gmg on Fri Dec 21, 2007 2:20 pm

See next post.
Last edited by gmg on Fri Dec 21, 2007 2:23 pm, edited 1 time in total.
gmg
 
Posts: 6
Joined: Wed Jan 17, 2007 1:26 pm
Location: NYC

LED scrolling sign control

by gmg on Fri Dec 21, 2007 2:22 pm

Bi-phase (also known as banned) is the coding scheme used in the RC5 Phillips protocol, probably the commonest consumer infrared remote protocol.

Feature :
* 2 start bit always "1"
* 1 toggle bit but this project not use and always "0"
* 5 bit address and 6 bit command length
* Bi-phase coding (aka banned coding)
* Carrier frequency of 36kHz 25-50% duty cycle
* Bit time period about 1.67 ms
* Developed by Philips

It's not IrDA, and you can control BetaBrite and Alpha scrolling LED signs this way. I have a document "Alpha® Sign Communications Protocol (9708-8061F)" but can't attach it. It's available on the 'net but probably NOT at http://www.adaptivedisplays.com, the manufacturer of some of these signs.

There's also existing freeware/shareware/cheapware for these signs, but using serial RS-232 rather than IR. (It shouldn't be hard to drive an IR LED from the serial port, although you do have to modulate it at 36-40kHz.) I'm not sure if the IR receiver is tuned for 940 or Look at http://www.kitchi-rss.com for Kitchi and http://www.remote-control.net/software/ledsign/ for other simple programs.

And http://www.vishay.com/docs/80071/80071.pdf for good information on various IR remote control protocols.

Gary
gmg
 
Posts: 6
Joined: Wed Jan 17, 2007 1:26 pm
Location: NYC

by oPossum on Fri Dec 21, 2007 2:39 pm

Sign Protocol Document (16 MB)

Don't see anything in there about the IR keyboard protocol - just RS-232 :(

Anyone know of a cheap source for the IR keyboard?
User avatar
oPossum
 
Posts: 636
Joined: Fri Oct 26, 2007 12:42 am
Location: Michigan, USA

Re: LED scrolling sign control

by oPossum on Fri Dec 21, 2007 2:44 pm

gmg wrote:Bi-phase (also known as banned) is the coding scheme used in the RC5 Phillips protocol, probably the commonest consumer infrared remote protocol.


In Europe this may be true, but in the rest of the world PDE (pulse distance encoding) is much more common.

although you do have to modulate it at 36-40kHz.


The correct bit pattern (0x5B = HLLHLLHLL) at 115000-7-N-1 will produce a 38.4 kHz carrier. LIRC can do this.
User avatar
oPossum
 
Posts: 636
Joined: Fri Oct 26, 2007 12:42 am
Location: Michigan, USA

by caitsith2 on Wed Dec 26, 2007 7:33 pm

Im sure the ePlate license plate cover counts in this category. For this sign, I have completely hacked its IR protocol, due to the fact that it responded to one of the TV-B-Gone IR codes. (I manipulated that code to see how I needed to set the bits for a response, and completely mapped out the character/programming keys.)

Code: Select all | TOGGLE FULL SIZE
#define freq_to_timerval(x) ((F_CPU / x - 1 )/ 2)
   
const char charset_alpha[] PROGMEM    ="VRPOZ.X.................NJHK.FD.STUQW.Y.................GLMICAEB";
const char charset_punct[] PROGMEM    =".....$.! .......8465.................?.#........1273.9.0........";
const char charset_extra[] PROGMEM = ",\"\\/} >                 :+(= -& ''.;< {                 _[])^@*%";

#define EPLATE_SPACE 8
#define EPLATE_CAP   9
#define EPLATE_SHIFT 10
#define EPLATE_LEFT 11
#define EPLATE_CLR 13
   
#define EPLATE_INV 20
#define EPLATE_SPD 23
#define EPLATE_PWR 28
#define EPLATE_RUN 31
   
#define EPLATE_ENTER 40
#define EPLATE_EDIT 41
#define EPLATE_DELETE 42
#define EPLATE_INSERT 43
   
#define EPLATE_ONE 48
#define EPLATE_TWO 49
#define EPLATE_THREE 51
#define EPLATE_FOUR 17
#define EPLATE_FIVE 19

#define EPLATE_YES 38
#define EPLATE_NO 24


void xmit_eplate_code(uint8_t code)
{
   uint8_t j,k,l;
   j=code;
   OCR1C = freq_to_timerval(37470);
   delay_ten_us(5000);
    xmitCodeElement(909,452,0);
    for(k=0;k<16;k++)
      xmitCodeElement(58,175,0);
    k=j;
    for(l=0;l<8;l++)
    {
      if(k&1)
           xmitCodeElement(58,175,0);
      else
           xmitCodeElement(58,55,0);
      k>>=1;
    }
    k=j^0xFF;
    for(l=0;l<8;l++)
    {
      if(k&1)
           xmitCodeElement(58,175,0);
      else
           xmitCodeElement(58,55,0);
      k>>=1;
    }
    xmitCodeElement(58,0,0);
    //delay_ten_us(25000);
}

void xmit_eplate_str(char *str)
{
   uint8_t i,j, cap_state=0;
   i=0;
   cap_state=0;
   while(str[i]!=0)
   {
      char alpha, punct, extra;
      for(j=0;j<64;j++)
      {
         alpha=pgm_read_byte(&charset_alpha[j]);
         punct=pgm_read_byte(&charset_punct[j]);
         extra=pgm_read_byte(&charset_extra[j]);
         if((str[i]>='A')&&(str[i]<='Z'))
         {
            if(alpha==str[i])
            {
               if(!cap_state)
               {
                  xmit_eplate_code(EPLATE_CAP);
                  cap_state=1;
               }
               xmit_eplate_code(j);
            }
         }
         if((str[i]>='a')&&(str[i]<='z'))
         {
            if(alpha==(str[i]-0x20))
            {
               if(cap_state)
               {
                  xmit_eplate_code(EPLATE_CAP);
                  cap_state=0;
               }
               xmit_eplate_code(j);
            }
         }
         if(punct==str[i])
         {
            if(str[i]!='.')
            {
               xmit_eplate_code(j);
               break;
            }
         }
         if(extra==str[i])
         {
            if(str[i]!=' ')
            {
               xmit_eplate_code(EPLATE_SHIFT);
               xmit_eplate_code(j);
               break;
            }
         }
      }
      i++;
   }
   xmit_eplate_code(EPLATE_ENTER);
}


If you just wanted to power the ePlate off, you would just execute xmit_eplate_code(EPLATE_PWR); (This is assuming the persons e-Plate is wired always on. It can also be wired to only come on, when the brake lights come on.) My motivation though, was to be able to change the ePlate message quickly.
caitsith2
 
Posts: 217
Joined: Thu Jan 18, 2007 11:21 pm

by caitsith2 on Sat Dec 29, 2007 12:51 am

Update: I have released the source code for a TV-B-Gone kit based ePlate editor. (There is no precompiled binary, as you are required to define all of the messages in message.c and compile it yourself. (I have included a couple of sample message.c files, to give idea of message layouts.))

http://www.caitsith2.net/projects/eplate.zip

If you wish to add just a poweroff code, to be able to turn off someones eplate, then you transmit the following.

Carrier_freq(38000),
880,440,
55,55, //The first 16 bits could actually be just 00000000 00000000
55,55, //the eplate doesn't care what these bits are at all.
55,165, //My code just simply repeats the bits twice.
55,165,
55,165,
55,55,
55,55,
55,55,
55,165,
55,165,
55,55,
55,55,
55,55,
55,165,
55,165,
55,165,
55,55, //Actual response starts here. 8 bits sent as 00011100
55,55,
55,165,
55,165,
55,165,
55,55,
55,55,
55,55,
55,165, //Then send 11100011 (Inverse)
55,165,
55,55,
55,55,
55,55,
55,165,
55,165,
55,165,
55,0 //And finally, the stop bit.

(If programming into existing TV-B-Gone kit firmware NA database, then you must define it before the first Hitachi code entry, as the first Hitachi code entry ends up being a valid code response to change the ePlate message scroll speed settings. (and if that happens, the ePlate will NOT respond to the poweroff code at all.)) (It also doesn't respond while in the Run message command, and also in the message editor itself.)

About that hitachi code comment, that was actually how I reverse engineered all of the codes in this ePlate, as I don't have an IR code capture device of any sort.
caitsith2
 
Posts: 217
Joined: Thu Jan 18, 2007 11:21 pm

Please be positive and constructive with your questions and comments.