|
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:
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:
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:
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 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:
- Generate up to date information.
- 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.
- 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).
- After you've comfirmed a <BEEP> reply, it's time to reprogram
the sign. Go back to step 1.
|