The HP 82240A was the original version of the printer. The 82240B followed later with some improvements. The major difference between the two is an additional character set on the 82240B. The infrared protocol is the same.
- HP 82240B Technical Interfacing Guide
- Specifications, published by HP, for communicating with an 82240B printer.
- Archived Issues of the HP Journal, 1987
- The October 1987 issue has two articles on the 82240A printer. One explains the transmission protocol and the circuitry that implements it (p. 16), the other covers the mechanical design and manufacturing process (p. 21). Note: On the bottom of page 18, figure 3 is an example character frame. The 4 error correction bits are incorrect! They are given as 1010, but they should be 0110.
As noted in How It Works, using the UART to simulate a carrier wave means we're limited to sending chunks of a carrier wave that can be represented as a serial byte. If we use a serial byte with 10 bits (1 start bit, 8 data bits, and 1 stop bit), then the simplest way to generate a 50% duty cycle carrier wave is to send a 0x55 byte. Bytes are shifted out of the UART LSB first. Also note that the TxD pin is active low (a '0' bit turns on the infrared LED).
Each of these bytes will be equal to 5 cycles of carrier (2 bits = 1 cycle).
An 82240 pulse burst is defined as 7 cycles at 32,768Hz; but 5 cycles at 35,700Hz seem to work just as well. Using 5-cycle chunks of carrier means compatibility with the OmniRemote library, which uses the same format. So, whether or not we're using OmniRemote, we only have to construct a single representation of the signal.
Redeye compiles with Quartus Forth version 1.2.5R. The GUI resources were built with Quartus RsrcEdit. The program is actually compiled right on a Palm handheld. I also used a Parallax USB oscilloscope to test the infrared signal.
And a flowchart…
The program has a layered architecture. Individual characters are sent down the stack using calls to printc_layer-name.