Your browser does not properly support Style Sheets. This site will work and look better in a browser that supports web standards, but it is accessible to any browser or Internet device.

PL-M2014R Message Feedback Modification

Preface

This document was written for people with a basic knowledge of electronics.  I also assume that you have experience writing software for and programming the PL-M2014R.  The modification discussed in this document has worked on my sign, but I do not guarantee it to work on yours.  All of the information presented here is to be used at your own risk.  With disclaimer aside this is a very simple modification, and it should work as long as you have identical equipment to mine.

Motivation

One of the key drawbacks to the PL-M2014R (ROM version 5.24Q) is its inability to relay state information back to a controlling PC.  Using custom software, the sign can be programmed to display a variety of information: weather, stock quotes, caller ID, etc.  Keeping this information current requires you to update the sign periodically.  Unfortunately, these updates cause the sign to stop right in the middle of the current message and re-display it.  Modifying the message that is currently playing can have unpredictable results.  Also, programming the sign while any message is scrolling by will sometimes cause the display to flicker.  There needed to be some way for the sign to tell the controlling PC, "Okay! I'm done showing the message you just programmed... time to update me with current information!"

Concept

The problem is simple:  Get the sign to signal back to the controlling PC when its done running a message sequence.  I didn't want to have to write a new ROM.  It took me a while to come up with a solution, but one day I was reprogramming the sign with the remote control and thought to myself how annoying that little buzzer was, and that I should go in and remove it.  And then it hit me:  If I could somehow detect the buzzer signal I could use a little bit of logic to send that signal back to the host PC.  This way, I would just have to tack on "<FO>" at the end of my message sequence to signal the controlling PC.  I began brainstorming various ways to do this.  A very effective (and not too expensive) solution follows.

Specifics

The modification uses a Parallax Basic Stamp II microcontroller to detect the buzzer signal.  I considered using a Basic Stamp I, however when I put this together I only had a BS-II handy.  The detection is performed by watching the state of pin 9 on U11 of the PL-M2014R CPU board.  This pin is normally low, except when the buzzer is active.  When the buzzer is active, this pin oscillates between the high and low state at the same frequency as the buzzer.  The Basic Stamp checks the state of this line in an infinite loop until it catches it in the high state (this will happen, since the Basic Stamp II runs far more instructions per second than the buzzer has cycles per second).  The Basic Stamp then transmits "<BEEP>" at 9600 baud (for this project I assume you are using the maximum baud rate of 9600) back over the serial line to the controlling PC.  Since the sign is designed to be used on a serial network, the TX circuit is usually in the Z (high impedance) state, unless it is transmitting.  This makes it possible to connect a Basic Stamp I/O port directly to the TX node, and operate it in the same fashion (leaving it in the Z state when it's not active).  This does present the possibility for collisions with more than one sign on the network, but this modification was intended for use only on a single node configuration.

Materials

  • Pro-Lite TruColor II PL-M2014R - ROM v5.24Q - CPU Board PT-CPU001A16C
  • Basic Stamp II Microcontroller
  • 5v LED and appropriately rated current-limiting resistor (optional)
  • A small strip of breadboard (or you could etch your own PC board if you're really ambitious)
  • Wire - the appropriate gauge for the breadboard
  • Solder / Soldering Iron / Steady Hands
  • Your favorite cocktail (optional)

Step-by-step Modification Instructions

Step 1: Remove CPU/Display Board

Remove the plastic end caps on the display and slide out the display PC board and CPU daughterboard.  This may not be as easy as it sounds - mine took some effort and careful application of force in order to slide out the PC board from the metal enclosure.  Please be careful.  The modification will not work on a broken PC board.

Step 2: Install new hardware

Insert the BS-II chip into the strip of breadboard.  The breadboard should have a sticky backing to it (if it's the cool kind like what I used).  Peel of the paper strip and stick the breadboard with BS-II onto the back of the display PC board near the CPU daughterboard like so:

Basic stamp mounting

You can ignore the wires for now.  Just get the breadboard mounted to the PC board.  Do not mount the breadboard to the CPU daughterboard - not only is this impossible but if you were to find a way to do it you wouldn't be able to get the PC board crammed back into the enclosure.

Step 3: Power up and Program

This document assumes you have knowledge of the Basic Stamp microcontroller and how to program it.  If you don't, have no fear.  It's a very simple process and all of the information and software is available online at Parallax's web site.  I won't re-invent the wheel, so just go there and learn for yourself.

Before we can program the Basic Stamp, we need to power it up.  We'll accomplish this by stealing power from the CPU daughterboard.  You can steal 5V power from just about any one of the 74' series chips on the board, or you could go for the obvious source like I did near the serial connector:

Power connector

The Vcc terminal is clearly marked with a "+".  If you're unsure, power up the CPU board and check with a meter.  Better to be safe than sorry.  At this time, you can also hook up the optional LED and resistor in series across the power that you've brought to the breadboard.  The LED serves as an indicator that the Basic Stamp has power.

Connect the Vcc and Ground from the CPU board to the 5-volt regulated input and ground terminals on the Basic Stamp II respectively.  Don't use the unregulated input on the Basic Stamp.

Connect the Basic Stamp II to your computer's serial port using the cable described in the Basic Stamp II documentation (found on Parallax's web site).  Load this program into the Basic Stamp II:

' 9600 Baud, N81, Direct Connect
baud con 16468
' Initial direction states
input 0
input 1
' Initial power-up, wait two seconds.
sleep 2
mainloop:
' Loop until buzzer detected
buzdet:
if in1=1 then gotbuz
goto buzdet
gotbuz:
output 0
serout 0, baud, ["<BEEP>", 13, 10]
input 0
sleep 2
goto mainloop

If you've done everything correctly, then you're ready to proceed onto connecting the Basic Stamp to the CPU board.

Step 4: Connecting the signal lines

There are only two signal lines which need to be connected to the basic stamps I/O ports 0 and 1.

First we'll connect the serial output signal line.  This will be used to transmit "<BEEP>" back to the controlling PC.  I/O port 0 (pin 5) is connected to the serial TX (out) of the CPU board.  The easiest way to make this connection is on a cluster of resistors located below the UART chip:

RS232 Connections

Just to the right of transistor Q4, there is a cluster of four resistors with the top two offset to the left a bit.  You want to make a connection the the third resistor from the top on the left side as the above diagram indicates.  The connection has been circled.  Unfortunately the resistors aren't marked on the board so this is as accurate as I can get.  I do know that this node is directly connected to the TX line on the serial port, and that's all that's important.  It was much easier to attach to this node here than at the RJ-11 connector.  After you make the connection at this point, you'll need to connect the other end of this wire to pin 5 (I/O port 0) on the Basic Stamp.

Now we need to connect the buzzer detect signal line.  This is a bit more tricky, as you'll need to attach the signal wire to pin 9 on U11 as shown below:

U11 connection

U11 is located on the CPU board on the far left side.  Pin 9 is the second pin from the bottom on the right side of U11.  Be careful when soldering this - if you get the IC too hot you will destroy it and then you'll have big problems.  Once you make this connection, connect the other end of the wire to pin 6 on the Basic Stamp (I/O port 1).

Step 5: Testing everything out

Communicating with the PL-M2014R is an exact science.  For this reason, using Linux's minicom program is rather difficult because it is nearly impossible to get it to send a CR-LF (#13, #10) sequence without sending something extra.  I was unable to get the sign to reply when I sent "<ID01>crlf", however if I used another terminal program such as SecureCRT, I had no problems.  Basically, make sure that you can program the sign normally before you start to use this modification.

A simple test to see if the modification is working, is to issue the following command sequence to the sign using a terminal program:

<ID01>crlf
<ID01><PA>TEST<FO>crlf
<ID01><RPA>crlf

After each crlf the sign should reply "<ID01>".  If it doesn't, then you're not connected right.  Also make sure your sign is set to ID 01, or change the commands to match the ID of your sign.  This will program message A with a short message than ends with a buzzer, however instead of ringing the buzzer it will trigger the Basic Stamp to send a reply.  If everything is hooked up correctly, then you should be receiving "<BEEP>crlf" every few seconds on your terminal program.  If you are, then you've finished the modification.

Step 6: Celebrate (optional)

Now it's time to use that cocktail that I mentioned earlier.

Software - How do I use this?

Now that the sign has some basic handshaking capabilities, you can use them to your advantage in the software that you write for the sign.  There are several ways to do this, but the software I currently use works like this:

  1. Generate up to date information.
  2. Program it into the sign. Make sure to end your message sequence with <FO> and maybe a few <FP>'s to keep the sign blank while it reprograms.
  3. Wait for the sign to reply with <BEEP>.  I use a C select() statement to block on input from the serial port.  This has the added benefit that you can also block on input from other sources, like serial ports.  I actually use select() to block on the sign's serial port and my modem's serial port so that I can display caller ID information if the phone rings (you need a modem that can read CID signals to do this).
  4. After you've comfirmed a <BEEP> reply, it's time to reprogram the sign. Go back to step 1.