Hacking the Infoglobe

By

Andrew R. Morris

 

 

 

 

This document contains some information provided by other hackers and verified by me, but is mostly my own work.

 

There are apparently two versions of the Infoglobe floating around. The older version uses a 9 volt backup battery, and the buttons are labeled differently than the one shown here. This work applies to the later version, pictured above, which uses 3 AAA batteries for memory backup. Mine is Model no. OL3000.2.

 

How do you get the Infoglobe open without breaking it?

 

First of all, you need to remove the blue, translucent dome.  I would remove the four screws in the base, first. There are no screws hidden underneath the three rubber feet. The screws do not secure the dome, but they do secure the inner cover over the base. Removing these screws allows the inner cover to move around a little facilitating the prying loose of the dome attachments.

 

Looking through the dome, notice the four dome attachment points. There are two in the front, one on each side of the keypad and two in the back. The two in the back have smaller hooks and require less prying to get loose.  Due to the close fitting plastic parts, getting something in there without out scratching the plastic is difficult. I found the attachment point on the front right side (facing the Infoglobe) to be the best starting point. Don’t use the front left side as the micro-switch (safety device) will get in your way. The shape of the dome and base in order to accommodate the keypad makes the enclosure weakest at the front attachment points.

 

Slide a feeler gauge or other extremely thin and strong material between the dome and the base near the right side of the keypad, while squeezing the dome to create a gap into which the feeler gauge can be inserted. Once you get the feeler gauge in the crack between the dome and base, slide it toward the back attachment point, while squeezing the dome to prevent scratching the plastic.  Slide the feeler gauge between the right rear dome attachment point and the outer wall of the base, and the dome attachment will pop loose. A little squeezing and tugging will remove the dome completely.

 

Next the rotating component (I’ll call the rotor) needs to be removed. Just remove the three small black Phillips screws, and the rotor will lift right off. There are no wires. The rotor gets its power from the electrical contacts that are now exposed. Now, turn the base over to let the inner cover fall out and expose the inner workings.

 

Now that it’s open, how does the hardware work?

 

Power is provided to the rotor by means of a rotary transformer. There are no slip rings or other sliding contacts to wear out. The rotary transformer is located underneath the yellow metal cover over the motor. Note the three screws holding the cover in place. Also note the two thin wires coming out from under the cover. These go to the primary side of the rotary transformer. One of these wires goes to a 10 volt regulated supply on the circuit board. The other goes to the drain of a MOSFET. This MOSFET is driven by a small opamp, which generates a 24KHz sawtooth. This produces 75 volt pulses at the rotary transformer primary (measurement taken with no rotor and with a non-spinning rotor).

 

 The transformer has a 3:1 ratio, producing 25 volt pulses on the secondary. This is basically an unregulated flyback converter. The 10 volt regulator is probably just there to limit the output voltage, in order to protect the voltage regulator on the rotor.  The Infoglobe uses a 9 volt, 300ma unregulated wall transformer, so the10 volt regulator may drop out at heavy load (all rotor LED’s on) or low power line voltage. That’s no problem, since there is plenty of voltage on the secondary side of the transformer to provide good rotor voltage regulation. The pulses are rectified and filtered on the rotor PCB with a diode and capacitors as in any flyback converter. As in any flyback converter, the transformer polarity is important, so pay attention to the wire colors if you take them loose. The secondary polarity can’t be reversed due to the shape of the rotor mount, unless the wires are disconnected. I didn’t measure the rotor’s voltage regulator output voltage, but it’s probably 5 volts.

 

Synchronization of rotor rotation is provided by a continuously operating IR LED on the base PCB, which is picked up by a photo-diode on the underside of the rotor as it passes over it. An opamp on the rotor amplifies and squares the photodiode output for the rotor microcontroller. I’ll call this synchronizing signal the index pulses.

 

Data is transmitted from the base to the rotor by the bluish LED mounted nearest the motor. There is an IR receiver mounted on the rotor PCB. Since the whole area underneath the rotor is illuminated by the LED and the receiver is designed to detect remote control signals from up to 20 feet away, there is no problem receiving the data throughout rotor rotation. Note that aiming a TV remote into the Infoglobe will interfere with its operation.

 

Rotor rotation is provided by a brushless DC motor similar to that seen in DVD players and high-end CD players. It is powered by a regulated 5.6 volt DC supply. There is no speed regulation. I’m sure that the rotor measures the time between index pulses and compensates for speed variations due to temperature, wear, or motor magnet strength. This is cheaper than regulating motor speed, and requires no factory adjustments. The motor power supply is regulated in order to keep rapid power line voltage fluctuations from interfering with the display, and to reduce the amount of compensation the rotor must provide.

 

How is the data transmitted from the base to the rotor encoded?

 

 

The data is transmitted on a 38KHz carrier as is common in IR remotes. Only zeros are transmitted. Bit time is 1mS. A 1mS burst of 38KHz is a zero, and no LED output for 1mS is a one. The rotor can accept up to 35 text characters and 3 control characters. The Infoglobe has 36 character slots, but reserves one slot for a space between the beginning and the end of the message. Attempting to send 36 characters will blank the display.

 

The first character to be transmitted is a control character which tells the rotor new data is coming in and it has the following effects. The numbers here are shown in HEX format.

 

00                Loads the message into a buffer for the transition effects, but does not display it. 00 blanks the display unless the next character is also 00. If the 00 is sent alone, the display goes blank, clearing the existing message in a scrolling blank. It then displays and scrolls the previous message.

 

01                Loads the message for immediate display. Blanks the display if sent alone.

 

02                Used when sending a stationary, front and center, flashing message.

 

03                Causes the new message to scroll or not, the same as the previous message was doing. Blanks the display when sent alone.

 

04                Loads the message for immediate scrolling display. Blanks the display if sent alone.

 

05                Overwrites a portion (or all) of an existing (scrolling) message with a flashing message.

 

06                Toggles existing message scrolling on and off. Ignores new message. Works the same if sent alone. Stops flashing if used to scroll a flashing display.

 

No other valid codes were found for the first byte. Since the first 4 bits are always zero, meaning IR is emitted, the beginning of an incoming message is always detected. FFh, or the lack of IR emission signals the end of the incoming message. FFh only has to be sent if you’re sending one packet of information immediately after another. An example would be sending a scrolling, flashing message. This will be discussed later.

 

The second byte is the first message character when transition effects are not enabled. To enable transition effects, both the first and second bytes must be 00. The third byte will be the first message character.

 

When transition effects are not enabled, the last byte is the last message character. When transition effects are enabled, the last character defines which effect will be used.

There are 38 effects available, 00h to 25h. They repeat at 80h to A5h. This means that bit 7 of the effects byte can be high or low, but not bit 6. The display goes blank when bit 6 is set.

 

All text characters are in 8 bit ASCII format. Most of the ASCII text character set is supported except the following:

 

% & + ; @ [ \ ] ^ _  ` { | } ~

 

01h through 1Ah appear to be foreign language characters. 20h through 24h are valid text characters, but they assume a different meaning when used as the last character in the string when transition effects are enabled. 80h and 81h are halves of the message icon (an envelope symbol) that is displayed when entering messages into the Infoglobe normally.

 

The timing of the transmission is very strict, since timing error accumulates with the message length. You must adhere strictly to 8mS per byte.

 

Sending a flashing display

 

The following method overwrites all or part of an existing message with a flashing message. This method is not recommended for a fixed display, because the flashing portion of the display will always start at position 0 (the front and center position), regardless of its position relative to the previous message. The proper method for displaying a fixed, flashing display will be described shortly.

 

You must first send a normal message, with its scroll and effects characters. If the entire message is going to flash, just send a control character, such as 01h (no scroll) or 04h (scrolling) followed by FFh. The second message starts with 02h, followed by a number from 00d to 35d, which sets the starting position of the flashing portion of the display, relative to the beginning of the current message. The rest of the second message will contain the text for the flashing message.  Position 01d will start the flashing portion of the final message at the very beginning of the current message. Position 01d will start the flashing portion 1 position ahead (to the left) of the beginning of the current message.

 

Since there are 36 character slots, position 36d and higher will cover the original message completely  A position number higher than 36d will cause the second message to start at the position on the display of 36d minus that number. The original message will of course, be blanked out. As the position number goes higher, the message moves to the left (CW, looking down at the top of the display). You could actually use this effect to cause a message to display on one side or on the back of the Infoglobe. If you choose position 34d, then the first two characters of the original message would be seen, for example.

 

When sending a message with all or a portion of it flashing, you can use FFh to separate the two message parts, unless you are using transition effects. Then, you must wait for the transition to be complete before sending the flashing portion of the message.

 

The code 05h is used to flash a stationary display. The message starts with 05h, followed by the message text. The next byte (00d to 34d) is the position of the beginning of the flashing portion of the display. The next byte (00d to 35d) is the position of the end of the flashing portion of the display. The last byte (00d to 35d) is the message length, used for auto-centering. In a flashing message, do not use the usual space character (20h). It will flash a cursor (underscore) alternately with the rest of the text (i.e. cursor on, text off and vice versa). Use 00h instead.

 

Interfacing to the Infoglobe.

 

Figure 1

 

Since the Infoglobe is connected to the phone line directly, without isolation, it is strongly recommended that you isolate your interface from the Infoglobe or you may interfere with the phone line or destroy the CID circuit in the next thunderstorm. Figure 1 is the schematic of the recommended interface to the Infoglobe as well as the message generator to be described later.

 

Photo 1

 

The first thing you need to do is disable the flow of information from the base to the rotor. The simplest way to do that is to use an opto-coupler or small relay to short out the base drive to Q107, the transistor feeding the existing data LED. The Q107 is located near the cathode of the LED, separated by a 100 ohm resistor R116. The base of the transistor is connected to the microcontroller through a 4.7k resistor R117. This resistor will protect the microcontroller from any damage caused by shorting out the base of Q107. The emitter of Q107 is connected to the ground in the Infoglobe.

Almost any opto-coupler will do. The transistor (Q3) and two resistors (R3 and R4) in my schematic are optional, depending on the opto-coupler used. I prefer to use them since they cost almost nothing and the opto-coupler I used was of dubious origin. It also reduces the amount of LED current needed to ensure the transistor saturation needed to reliably cut off Q107.

 

Next, you need to add your own IR LED. I used a Radio Shack P/N 276-143. It seems to produce the same wavelength of light detected by the rotor. It’s also high output. Not all IR LED’s will work, here. I snaked the IR LED through the gray plastic mount upon which the original LED is mounted. I bent the LED upward toward the underside of the rotor and pushed it as close as possible against the motor. I left the LED leads long and insulated them. The stiff LED leads help keep the LED in place. See Photo 1. When the inner cover is replaced, the new LED is in a confined space and can’t move.

 

I mounted a 3.5mm stereo headphone jack on the back of the base, near where the other wires come out.

 

Infoglobe Message generator

 

Now I’m going to describe a device that will demonstrate a simple way to talk to the Infoglobe as well as a simple way of selecting from multiple messages. This is just a starting point. Your imagination and individual talent can move you forward from there.

 

The hardware schematic for the message generator is shown in figure 1. It may well work without the transistors (Q1 and Q2), depending on your microcontroller, but I don’t like to bring microcontroller pins outside the box without some kind of buffer. I used a PIC16LF84 because it’s a flash part and it’s what I had on hand. I used an available 4.0MHz ceramic filter in the master oscillator. Because of the critical timing, I would use a real crystal, like the manufacturer of the Infoglobe did, for any kind of mass production. I did have to tweak the timing after moving the design from a protoboard to the perfboard I used in the final project.

 

Infoglobe Message Generator Operation Instructions

 

The messages that are programmed into the message generator are basically complete subroutines, each containing a message and any effects or options are selected for that particular message.

 

When first powered up, the message generator does nothing. When the button is pressed the first time, “Off” is displayed on the Infoglobe. This means that the generator is basically off. The next transmission from the base will be displayed, replacing the “Off” message. Transmissions from the base are spaced 15 seconds apart as are those from the message generator.

 

The next time the button is pressed, “Scan?” will be displayed. This means that it is asking you if you want to enter the scan mode. If you hold the button in for 2+ seconds while the “Scan?” message is displayed, the generator will go into the scan mode. This means that it will sequentially display all messages that are not tagged as “reminder” messages. You generally don’t want reminder messages displayed in scan mode. This mode will be described shortly.

 

If you hold the button down for 2+ seconds while “Scan?” is displayed, the first message programmed into the message generator will be displayed along with whatever specific or random effects have been selected for it. Then the Infoglobe will sequentially display each message for 15 seconds that is not tagged as “reminder”. Briefly pressing the button in this mode will turn the generator off, displaying “Off” on the Infoglobe.

 

If you do not hold the button down for 2+ seconds, but press it briefly while “Scan?” is displayed, the first programmed message will be displayed. Every subsequent (brief) press of the button will display the next programmed message. This is called the browse mode. Like the scan mode, it will cycle through each programmed message, but not automatically.  It will however, also display “reminder” messages. The generator will cycle all the way around to “Off” and then to “Scan?” If “Off” is displayed, the generator is not blocking messages from the base, and time, etc. will replace the “Off” message.

 

When in the browse mode, if you hold the button down for 2+ seconds, the displayed message will be selected, and “Off” will be displayed. This tells you that you’re in the On/Off mode. Subsequent brief presses of the button will toggle between the selected message and “Off”.  This allows you to turn off the displayed message to view the time or the caller ID and go back again without having to click through a bunch of messages.

 

To go back into the browse mode, press the button for 2+ seconds, regardless of whether the message or “Off” is displayed. The following message with its transitions effects (if used) will be displayed.

 

The generator also has a mode called the “reminder” mode. In this mode, the selected message using the browse mode will be retransmitted to the Infoglobe display every 15 seconds. You have to know which messages are tagged as reminder messages. Certainly, you can have the reminder message transition and redisplay every 15 seconds, but the intent is to set the Infoglobe’s internal timer to turn off and on at certain times. When it comes on, your selected message will be displayed. Briefly pressing the button in this mode will turn the generator off, displaying “Off” on the Infoglobe, until the display is again updated by the base. The whole process is repeated the next time the button is pressed.

 

The source code for the message generator is listed in a separate document.

 

 

Note that there is no synchronization between the base and the message generator. Sometimes when the message generator is enabled or disabled, the base will be in the process of sending a message. The rotor will receive a partial message or pieces of each message and get confused. This will cause a blank display or meaningless characters to be displayed. The condition will be corrected the next time either the base or the message generator sends a complete, uninterrupted message.

 

Synchronization to the base can be added by connecting a transistor and opto-coupler to the base microcontroller and replacing the DISPLAY_TIMER routine with a routine that waits until the base microcontroller starts emitting data before continuing the program. If you look at Photo 1, near the lower left of the photo, you will see the microcontroller U101. On the lower right of that, you will see a “1”. That is presumably pin 1 of the microcontroller. Lower and to the right of that is a protruding pin, a test point. Connect the input of a transistor switch to that point. That is the output of the microcontroller that drives the data LED between the base and the rotor. Connect the collector or drain of the transistor to an opto-coupler powered by the base’s +4.8v supply. If the opto-coupler detector shares a common ground with the added data LED and the LED of the other opto-coupler, you’ll now need 4 wires to connect to the Infoglobe. Perhaps you could use a telephone connector.  In upgrading to base synchronization, I used a telephone jack, Digi-Key P/N H9009-ND.  I mounted it in place of the stereo headphone jack I used earlier. I cut and filed a square hole and wedged a small piece of perfboard, cut to fit, between the connector and another surface inside the base. I epoxied the perfboard in place.  The perfboard can be broken out and removed, if needed, and there is no outside evidence of how the jack is mounted.

 

While using the message generator, the Infoglobe will fail to display CID data unless you disconnect it briefly when the phone rings. You could use an opto-coupler or a differential amplifier to detect the ring signal and fire an interrupt, immediately disabling the message generator for several seconds to display the CID message.

 

 

Conclusion

 

This is just a starting point. Let your imagination and talent carry you away. For example, I have hacked a wireless remote control I bought at Wal-Mart for about $10. I found that the chip in the receiver has an unused pin that goes high whenever either the “On” or the “Off” button is pressed. The normally used output just goes high or low, depending on whether the relay needs to be on or off. With the two outputs, one can determine when a button is pushed and which button it is. The remote control has a “Stanley” name on it, but they’re all made in China and most of them probably use the same chip set.

 

I have built it into a small box with the message generator and a built-in power supply. The “Off” button is used for browsing and the “On” button is used to select or deselect messages (in place of holding the hard-wired button down for 2+ seconds).  I also added ring detector hardware, which enables the caller ID and displays “Line busy” or “Line free” for 15 seconds when there is activity on the phone line. It also displays “Line busy” periodically during scan mode. I’m currently in the process of adding base synchronization, for the reasons stated earlier.

 

I’m not publishing it here because I don’t want to further complicate this project or further delay getting this information out to you.  I will provide the code to you on request, however. I know my code is primitive compared to what some of you are capable of. Like many hobbyists, I’m still learning.

 

I’m constantly coming up with new ideas. If I wait until I’m completely finished improving this project, it will never get released. Have fun!