My daughter has a nice Mickey Mouse lamp.
We bought it years ago and it worked nicely for many years, until "somebody" connected it to an X10 Lamp module.
After few times, the lamp stopped to work completely.
In this article I'm documenting the repairing process.
Translate
Sunday, October 24, 2010
Sunday, October 17, 2010
Hacking an Infoglobe - part 5
In order to better test the interface permanently connected to the Infoglobe and free up the breadboard for other experiments, I finally I decided to build an Infoglobe interface on a small experiment PCB, with the technique of point-to-point connection, i.e.wired.
I considered to prepare a PCB but since is still a prototype, is better to build it "fast and dirty", i.e. a point-to-point connection on an experimental board.
Also, I didn't want to spend too much for that, so I looked in the junkyard for components and housing.
I found a nice box I bought years ago for who-remember-now project and I started to collect the components.
I decided that a broken piece of experimental board from Radio Shack was enough for the job, so I collected all the components and started to prepare the first Infoglobe Interface for permanent test.
First I prepared the mechanical part, i.e. drilling the housing to connect a DB9 female, an RJ11 outlet and two holes for the pushbuttons.
With the help of some power-tools I was able to do a "just-barely-decent" work.
No, I'm not really good with the mechanical part.
Then I started to figure out how and where to place the micro-controller PCB.
I picked up a new MSP430F2012 PCB and look in the junkyard to see what I could do.
I started with a straight 7+7 DIL (male and female) but the micro was too hight for the box, so I had to use two 90 degrees 7+7 DIL to obtain a decent hight.
Unfortunately that left very few space for the rest of the components !
Well, will be a very populated board !
With the power tools I beautified (well ...) the broken experimental PCB and started to place some components on.
Here the layout of the experimental PCB I'm working on:
A quick note. The current firmware revision of the code, include the reading of the internal temperature of the MSP430F2012 internal sensor, connected to the ADC.This why the two pushbuttons. They select the operating mode.
More details in future articles.
And here some other pictures of the prototype.
I considered to prepare a PCB but since is still a prototype, is better to build it "fast and dirty", i.e. a point-to-point connection on an experimental board.
Also, I didn't want to spend too much for that, so I looked in the junkyard for components and housing.
I found a nice box I bought years ago for who-remember-now project and I started to collect the components.
I decided that a broken piece of experimental board from Radio Shack was enough for the job, so I collected all the components and started to prepare the first Infoglobe Interface for permanent test.
First I prepared the mechanical part, i.e. drilling the housing to connect a DB9 female, an RJ11 outlet and two holes for the pushbuttons.
With the help of some power-tools I was able to do a "just-barely-decent" work.
No, I'm not really good with the mechanical part.
Then I started to figure out how and where to place the micro-controller PCB.
I picked up a new MSP430F2012 PCB and look in the junkyard to see what I could do.
I started with a straight 7+7 DIL (male and female) but the micro was too hight for the box, so I had to use two 90 degrees 7+7 DIL to obtain a decent hight.
Unfortunately that left very few space for the rest of the components !
Well, will be a very populated board !
With the power tools I beautified (well ...) the broken experimental PCB and started to place some components on.
Here the layout of the experimental PCB I'm working on:
A quick note. The current firmware revision of the code, include the reading of the internal temperature of the MSP430F2012 internal sensor, connected to the ADC.This why the two pushbuttons. They select the operating mode.
More details in future articles.
And here some other pictures of the prototype.
Retrofit a small desk lamp with LED
Among the LED lamp kit I had around, there was a 3W Cree Xlamp 7090 with a small power supply.
For a while I kept it mounted it in a cable clipper, glued under a shelf.
Then, after some renovation in the Athena's room, a small desk lamp caught my attention and I decided to retrofit it with such kit.
I removed the original lamp socket and rewired the base of the lamp.
Like the electronic lab lamp I did, I decided to put in the lamp top reflector only the LED with the heat-sink.
The power supply, a very small one, is in the base.
Here some pictures and notes :
This is the small desk lamp retrofitted with the Cree 3Watt LED.
This is the kit used to retrofit the small desk lamp.
Originally I placed the diffuser/lens, but for this application I removed it since the light is better reflected by the lamp diffuser.
The lamp base opened.
The weight is insulated by a plastic bag.
The base material is plastic, so already insulated.
Here the base emptied.
And here the base retrofitted.
The power supply (on the right) and the new small cable carrying the LED power supply entering in the shaft (on the left).
Here the LED glued on the heat-sink and attached to the original lamp support.
The lamp on. A very nice and strong light.
More than enough to replace the original 40W incandescent bulb.
For a while I kept it mounted it in a cable clipper, glued under a shelf.
Then, after some renovation in the Athena's room, a small desk lamp caught my attention and I decided to retrofit it with such kit.
I removed the original lamp socket and rewired the base of the lamp.
Like the electronic lab lamp I did, I decided to put in the lamp top reflector only the LED with the heat-sink.
The power supply, a very small one, is in the base.
Here some pictures and notes :
This is the small desk lamp retrofitted with the Cree 3Watt LED.
This is the kit used to retrofit the small desk lamp.
Originally I placed the diffuser/lens, but for this application I removed it since the light is better reflected by the lamp diffuser.
The lamp base opened.
The weight is insulated by a plastic bag.
The base material is plastic, so already insulated.
Here the base emptied.
And here the base retrofitted.
The power supply (on the right) and the new small cable carrying the LED power supply entering in the shaft (on the left).
Here the LED glued on the heat-sink and attached to the original lamp support.
The lamp on. A very nice and strong light.
More than enough to replace the original 40W incandescent bulb.
Saturday, October 16, 2010
Hacking an Infoglobe - part 4
The next step, after the necessary frequency generation and 38 kHz burst management, is to actually be able to send a message, following the specifications defined before.
Basically the next step is to sending out a buffer (max. 40 bytes) using the 38 kHz burst to send the zero bits, with a 1 ms bit time.
Hardware
The purpose of the second prototype, is to develop a code capable to send messages to the rotating arm of the Infoglobe, driving the Infrared LED.
Because the memory capacity of this specific micro-controller, will not be possible to install a code to handle the Zig-Bee protocol, unless to use a complete external ZigBee module, like the ones MaxStream.
The second prototype is developed in two steps :
So in order to receive an RS232 message, a soft-UART is developed, using a standard I/O Pin.
Here a basic schematic for the the second prototype
A quick explanation of the circuit.
The transistor enable or disable the signal from the base to the IR.
The two diodes basically forms an OR, mixing the two signals directed to the rotating arm.
One from the base (that can be disabled) and one from the micro.
In theory is possible to leave on the base generator and send a message from the micro, however since we can not control the messages generated by the base, is possible to end up with some conflicts, obtaining only garbled messages.
The correct sequence to use is to prevent the messages generated by the base to reach the IR diode, and then send out the message from the micro.
As long the messages generated by the base are disabled, the rotating arm will display the last received message.
The RS232 section is optoisolated in order to protect the PC from possible spark from the Infoglobe, that it can be connected to the phone line (it is a caller ID).
The pushbutton allows to select different options or for test purposes.
List of the needed material/tools for the experiment :
I prepared a flat cable that brings out the micro pins to a standard DIL plug.
First test circuit - breadboard
Connect the 7+7 male Dil connector to the microcontroller PCB, so to be able to have it connected to the test circuit (maybe using a cable to have it on a breadboard).
The 14 pins are basically in parallel to the micro-controller pins, so for prototyping is perfect.
On the experimental board, put the female 7+7 DIL, that will be used to connect the micro and the RJ11 outlet, connected to a cable to the Infoglobe, the power supply regulator, to bring down to 3.3 V the 5V coming from the Infoglobe.
Important Note.
Before to connect the micro-controller PCB to the test circuit, be sure to REMOVE the SMD resistor R1 from the micro-controller PCB.
In this way the micro-controller will be powered from the P1 pin instead the USB development system.
Software
Here the flow chart of the state machine to be included in the timer interrupt management.
This state machine will be called every millisecond and if something will be present in the buffer, will be sent.
The fetch part of the code will run in the main loop.
I made some measurement using the pin 1.0, the one connected to the LED put on the microcontroller PCB.
Here some time execution in the interrupt :
Simply uncommenting one of the two defines CALL_MODE0 or CALL_MODE1 (not together at the same time) and compiling the code, the basic frequencies will be generated constantly, so to be able to measure and tune the timer.
In this way there is no need to switch back on the initial test code.
(note, I'm still deciding if/where/how/when to create a public repository for my code. For the moment if somebody wants the code, just write me)
Basically the next step is to sending out a buffer (max. 40 bytes) using the 38 kHz burst to send the zero bits, with a 1 ms bit time.
Hardware
The purpose of the second prototype, is to develop a code capable to send messages to the rotating arm of the Infoglobe, driving the Infrared LED.
Because the memory capacity of this specific micro-controller, will not be possible to install a code to handle the Zig-Bee protocol, unless to use a complete external ZigBee module, like the ones MaxStream.
The second prototype is developed in two steps :
- send a message to the rotating arm pressing a pushbutton
- send a message to the rotating arm, received from a RS232 input
So in order to receive an RS232 message, a soft-UART is developed, using a standard I/O Pin.
Here a basic schematic for the the second prototype
A quick explanation of the circuit.
The transistor enable or disable the signal from the base to the IR.
The two diodes basically forms an OR, mixing the two signals directed to the rotating arm.
One from the base (that can be disabled) and one from the micro.
In theory is possible to leave on the base generator and send a message from the micro, however since we can not control the messages generated by the base, is possible to end up with some conflicts, obtaining only garbled messages.
The correct sequence to use is to prevent the messages generated by the base to reach the IR diode, and then send out the message from the micro.
As long the messages generated by the base are disabled, the rotating arm will display the last received message.
The RS232 section is optoisolated in order to protect the PC from possible spark from the Infoglobe, that it can be connected to the phone line (it is a caller ID).
The pushbutton allows to select different options or for test purposes.
List of the needed material/tools for the experiment :
- modified Infoglobe(see previous articles)
- USB development system for the MSP430F2012
- C cross compilator for MSP430 - IAR (with the USB spi-by-wire development system)
- cad Eagle to draw schematics
- micro MSP430F2012 (on the development kit PCB)
- male connector DIL 2.54 7+7
- female connector DIL 2.54 7+7
- PCB RJ11 connector
- 3 3k3 Ohm resistors
- 3 10k Ohm resistors
- 1 4k7 Ohm resistors
- 1 2k7 Ohm resistors
- 2 power supply regulator capacitors
- 1 power supply regulator 3.3 V Lm1117
- 1 10uF tantalium capacitor
- 1 optoisolator 4n35
- 1 transistor NPN
- 3 1n4148 diodes
- 1 pushbutton
- breadboard
I prepared a flat cable that brings out the micro pins to a standard DIL plug.
First test circuit - breadboard
Connect the 7+7 male Dil connector to the microcontroller PCB, so to be able to have it connected to the test circuit (maybe using a cable to have it on a breadboard).
The 14 pins are basically in parallel to the micro-controller pins, so for prototyping is perfect.
On the experimental board, put the female 7+7 DIL, that will be used to connect the micro and the RJ11 outlet, connected to a cable to the Infoglobe, the power supply regulator, to bring down to 3.3 V the 5V coming from the Infoglobe.
Important Note.
Before to connect the micro-controller PCB to the test circuit, be sure to REMOVE the SMD resistor R1 from the micro-controller PCB.
In this way the micro-controller will be powered from the P1 pin instead the USB development system.
Software
Here the flow chart of the state machine to be included in the timer interrupt management.
This state machine will be called every millisecond and if something will be present in the buffer, will be sent.
The fetch part of the code will run in the main loop.
I made some measurement using the pin 1.0, the one connected to the LED put on the microcontroller PCB.
Here some time execution in the interrupt :
- ~1.4 uSec in IDLE
- ~3.8 uSec in START/SEND (sending bit)
- ~6.8 uSec in SEND (loading character/test)
Simply uncommenting one of the two defines CALL_MODE0 or CALL_MODE1 (not together at the same time) and compiling the code, the basic frequencies will be generated constantly, so to be able to measure and tune the timer.
In this way there is no need to switch back on the initial test code.
(note, I'm still deciding if/where/how/when to create a public repository for my code. For the moment if somebody wants the code, just write me)
Retrofit a lab lamp with LED
During my last visit in Dallas I went to Ikea and I bough a nice lab lamp, ideal to be converted as LED lamp.
I choose to put the power supply outside the lamp, in a small box because it's dimensions were too big to be fitted in the lamp body.
The 10W warm white LED was glued to a heat-sink and mounted over an old fluorescent lamp base, after removing the fluorescent lamp and it's electronic of course.
The glue used, a thermal compound, was supposed to be very strong, however after a couple of months of use, it lost the grip and the LED detached from the heat-sink.
That caused the LED to become VERY hot, melting in part the power supply cable, causing a very strong and uncomfortable smell.
I had to rebuild the LED attachment, this time drilling the heat-sink.
After removing the old glue from the heat-sink and the LED base, I placed a new coat of thermal glue and then screwed the LED to the heat-sink.
I also used a different kind of wires, supposedly more heat resistant than the previous ones.
Since the power supply is outside the lamp, the lamp socket is not carrying anymore the 110V.
I decided to don't modify the mechanic of the lamp, so the original rotating switch is still in place but not used (switch left always in the ON position).
The new switch for the lamp is on the power supply box.
Here some pictures and notes :
The lab lamp working (a Red Roomba is under maintenance :-) )
Note the small black box containing the LED power supply close to the soldering iron.
The 10W LED glued to the heat-sink.
This picture was taken the first time I built the lamp.
After a while the heat caused the LED to be detached from the heat-sink.
The black/red wire I used started to melt too, causing a very bad and strong smell. Not good at all !
The new assembly.
Now the LED is glued AND screwed to the heat-sink and I used a more heat resistant wires.
This lamp is perfect to work in the electronic lab, on the main desk.
I recommend to use a warm white LED, not a clear white one.
This LED provides around 560 Lumen concentrated on a small area.
I choose to put the power supply outside the lamp, in a small box because it's dimensions were too big to be fitted in the lamp body.
The 10W warm white LED was glued to a heat-sink and mounted over an old fluorescent lamp base, after removing the fluorescent lamp and it's electronic of course.
The glue used, a thermal compound, was supposed to be very strong, however after a couple of months of use, it lost the grip and the LED detached from the heat-sink.
That caused the LED to become VERY hot, melting in part the power supply cable, causing a very strong and uncomfortable smell.
I had to rebuild the LED attachment, this time drilling the heat-sink.
After removing the old glue from the heat-sink and the LED base, I placed a new coat of thermal glue and then screwed the LED to the heat-sink.
I also used a different kind of wires, supposedly more heat resistant than the previous ones.
Since the power supply is outside the lamp, the lamp socket is not carrying anymore the 110V.
I decided to don't modify the mechanic of the lamp, so the original rotating switch is still in place but not used (switch left always in the ON position).
The new switch for the lamp is on the power supply box.
Here some pictures and notes :
The lab lamp working (a Red Roomba is under maintenance :-) )
Note the small black box containing the LED power supply close to the soldering iron.
The 10W LED glued to the heat-sink.
This picture was taken the first time I built the lamp.
After a while the heat caused the LED to be detached from the heat-sink.
The black/red wire I used started to melt too, causing a very bad and strong smell. Not good at all !
The new assembly.
Now the LED is glued AND screwed to the heat-sink and I used a more heat resistant wires.
This lamp is perfect to work in the electronic lab, on the main desk.
I recommend to use a warm white LED, not a clear white one.
This LED provides around 560 Lumen concentrated on a small area.
Tuesday, October 12, 2010
A dead GXV3000 power supply
After cleaning up my electronic lab (OK OK the garage) and rebuilt my working LED lamp, I found among the junk pile, an old and broken Grandstream GXV 3000 power supply.
This particular one was "in service" in Italy and went dead after a thunderstorm.
Just out of curiosity, I decided to open it and see why it was not working anymore.
Since the box is "melted" and sealed I didn't place any hope to repair it anyway, so I used some strong ways (hammer) to open it.
Here what I found.
As you can see an IC was totally melt down.
A very nice spike, very probably caused by the thunderstorm.
The PCB is broken because I used a quite strong tool to open the box :-)
Of course is very probable that other components are damaged as well, so is totally worthless to try to fix it anyway.
This particular one was "in service" in Italy and went dead after a thunderstorm.
Just out of curiosity, I decided to open it and see why it was not working anymore.
Since the box is "melted" and sealed I didn't place any hope to repair it anyway, so I used some strong ways (hammer) to open it.
Here what I found.
As you can see an IC was totally melt down.
A very nice spike, very probably caused by the thunderstorm.
The PCB is broken because I used a quite strong tool to open the box :-)
Of course is very probable that other components are damaged as well, so is totally worthless to try to fix it anyway.
Sunday, October 10, 2010
Hacking an Infoglobe - part 3
In this article we'll discuss about the way to communicate with the rotating arm of the Infoglobe.
Note: I developed this interface time ago, using the Texas Instrument eZ430-F2013 and the IAR demo environment.
In future I will eventually port the work under MSPGCC and different MSP430 processors (like the eZ430-RF2500).
First prototype
The first thing to do is to develop a little prototype based on the MSP430 family processor, for the first tests.
The chosen micro is the MSP430F2012, with the USB development system bought time ago.
The purpose of the first prototype is to develop a test code capable to generate the 38 kHz burst and the necessary timing.
IR Protocol
The first step is to handle the IR Transmission for the rotating arm.
Here a description of the protocol (from the Andrew article) :
Some basic data :
- the data are transmitted over a 38 kHz IR carrier
- only the zeros are sent
- every byte is sent MSB first
- the bit time is 1ms
- 1 ms 38 kHz burst is a logic '0', the absence of of signal for 1ms is a logic '1'
logic '0'= 1ms burst 38 kHz logic '1' - no IR signal
Transmission example |
Only zeros are transmitted.
Bit time is 1mS.
A 1mS burst of 38 kHz 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.
Bit time is 1mS.
A 1mS burst of 38 kHz 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.
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 has to be sent only if you’re sending one packet of information immediately after another. An example would be sending a scrolling, flashing message.
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.
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.
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.
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:
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.
At this time we want write a code to generate the 38 kHz signal and send characters.You must adhere strictly to 8mS per byte.
- bit 0 = 1ms burst 38 kHz
- bit 1 = 1ms empty
The test code is in C, using the IAR compiler :
IAR Embedded Workbench IDE
4.6B (4.6.2.0)
The compiler is embedded in the micro development kit MSP430F2013
Building notes
The first step is to choose and select on the microcontroller a clock speedy enough to generate and handle the required frequencies.
In the file msp430x20x2.h there are already defined registers and memory areas of the microcontroller, among them the calibration table for the internal clock generator.
Because the requested timing for this test, a 8 Mhz clock is OK.
The timer_A, available in the MSP430F2012 micro, can have different sources for the clock.
Since the generator clock module, by default, is generating the clock from the SMCLK signal, we will use it to feed the timer.
The SMCLK in the standard configuration, is identical to the system clock, in our example 8 Mhz.
So, in the initialization function we will set the clock for 8 Mhz, using the calibration table (the defines for the calibration values position are already present in the file msp430x20x2.h) :
/*
* Set DCO
* Setting the DCO to generate 5 Mhz clock source
*/
BCSCTL1 = CALBC1_8MHZ; // Set up 8 Mhz using internal calibration value
DCOCTL = CALDCO_8MHZ;
The timer will be set on the SMCLK signal and programmed to generate a 38 kHz signal.
The same frequency will be also used to obtain the 1 ms timing, needed for the bit length.
In order to generare the 38 kHz signal, we will need to set the timer for a double frequency, since the timer output will toggle every time the timer interrupt will trigger.
In other words we will need to set the timer to generate a frequency of 38 kHz * 2 = 76 kHz.
We will have a timer interrupt every 13 uSec.
In order to calculate a 1 ms timing, needed to set the bit length, we will use a counter inside the interrupt timer.
Every 76 interrupts (from 13 uSec) we will have 1 ms (13 uSec * 76 = 0.988 ms).
To have EXACTLY 1ms we should set the timer for 13.157 uSec.
The first test environment - the MSP430 plus USB dongle hooked up to the oscilloscope
Here some pictures of a scope, with some measurements on this test program :
The timing is not perfect, of course there is space for improvements.
But is a start.
The next step is to design and build the Infoglobe interface so to be able to control the rotating arm and be able to tune the timing to be compatible with the Infoglobe.
Software
Here the test program :
- Pin 1.0 (LED default test PCB) = 38 kHz burst di 1 ms.
i.e. 1ms pause, 1ms burst 38 kHz - Pin 1.1 - Timer_A generator -> 38 kHz
- Pin 1.4 - SMCLK, i.e. 8 Mhz
/** MSP430x2xx test38kHz
Description: This code is to test a generation of 38 kHz burst
to be used to drive an Infloglobe
Author : Stefano Bodini
Update : May 2007
MSP430x2xx
-----------------
/|\| XIN|-
| | |
--|RST XOUT|-
| |
| P1.0|-->LED
| |
| P1.1|--> Burst out 38 kHz
| |
| P1.4|--> SMCLK
Built with IAR Embedded Workbench Version: 3.40A
*/
#include "msp430x20x2.h"
/*
* Functions prototype
*/
__interrupt void Timer_A (void); /* Timer A0 interrupt service routine */
void Init(void); /* Init LED */
/*
* Global defines
*/
/*
* Global variables
*/
static unsigned char t1ms_cnt;
static unsigned char send_bit;
/*
* Main entry file
*/
void main(void)
{
Init();
}
/*
* Init PWM Management - set timer
*/
void Init(void)
{
/*
* Set Watchdog
*/
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
/*
* Initialize Timer management variables
*/
t1ms_cnt = 0;
send_bit = 0;
/*
* Set I/O
* P1.0 -> I/O output - original LED on the board
* P1.1 -> Timer_A output - Out 0 - control IR LED
* P1.2 -> input - original frame from Infoglobe
* P1.4 -> output - SMCLK
*/
P1DIR |= 0x13; // Set P1.0 and P1.1 and P1.4 output direction
P1SEL |= 0x02; // Set P1.1 on OUT0
P1SEL |= 0x10; // Set P1.4 on SMCLK
P1OUT = 0; // Force out low
/*
* Set DCO
* Setting the DCO to generate 8 Mhz clock source
*/
BCSCTL1 = CALBC1_8MHZ; // Set up 8 Mhz using internal calibration value
DCOCTL = CALDCO_8MHZ;
/*
* Set Timer
* In SMCLK = 8Mhz
*/
CCTL0 = CCIE; // CCR0 interrupt enabled
TACTL = TASSEL_2 + MC_1; // SMCLK, up mode
TACCR0 = 105; // Approx 13uS (26uS / 2)
TACCTL0 |= 0x0080; // Enable Out0
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
/*
* Timer A0 interrupt service routine
*/
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A( void )
{
if(t1ms_cnt++ == 76) // 76 == 38 * 2
{
t1ms_cnt = 0;
send_bit ^= 1;
}
if(send_bit)
P1OUT ^= 0x01; // Toggle LED
else
P1OUT &= ~0x01;
}
Hacking an Infoglobe - part 2
In the first part, we saw how to open an Infoglobe.
Let's see now how to modify it for our purposes.
Infoglobe Modification
In the Andrew original modification, he added a second IR LED, handled by an external generator, after disabling the original one.
It is actually feasible, but the big problem for this approach, is mechanical.
The original IR LED is mounted and glued in the optimal position to transmit to the rotating arm.
Basically the original Andrew circuit, is a duplicate of the original one already present on the Infoglobe, so it make logical to try to reuse the circuit already present instead to duplicate it.
Also, we don't need to optocouple our circuit, since it will be embedded in the Infoglobe anyway.
The first step to better work on the prototype, is to "bring out" from the Infoglobe, 4 signals :
This is a schematic of the modification.
Is important to pay attention to the wiring, so to be sure to connect correctly the external interface (in my case I used an RJ11)
And this is a standard RJ11 color code:
In this picture I marked some optimal places to pick up the power supply and where to connect on the R117.
In my specific case, I reused an old RJ11 outlet 6 positions, using only the 4 central wires.
I used to connect the outlet, a phone wire using the standard color code.
So I had :
Below, some pictures of the modification.
You can notice the black wire attached directly to the transistor, because removing the R117 resistor, the PCB was damaged.
Also it would be better to use a more thin wire than the one I used.
Attaching a square outlet in a curve box is not really easy and my mechanical skills are not very good.
Fortunately the hot glue helps to fix many imperfections and attach strongly the RJ11 outlet :-)
It is true this is just a prototype, the final version will not need holes since the ZigBee module and the circuit will be all inserted inside.
At the end of this work, I have now an Infoglobe modified, with 4 signals ported out, so to be able to experiment and design an interface.
In order to have the Infoglobe working as usual, I prepared an RJ11 plug with a 4k7 resistor between the pins 1 and 4 (the external ones) in order to allow the signal generated by the Infoglobe base to reach the IR LED.
This plug will be substituted by the MSP430 interface connection.
Let's see now how to modify it for our purposes.
Infoglobe Modification
In the Andrew original modification, he added a second IR LED, handled by an external generator, after disabling the original one.
It is actually feasible, but the big problem for this approach, is mechanical.
The original IR LED is mounted and glued in the optimal position to transmit to the rotating arm.
Basically the original Andrew circuit, is a duplicate of the original one already present on the Infoglobe, so it make logical to try to reuse the circuit already present instead to duplicate it.
Also, we don't need to optocouple our circuit, since it will be embedded in the Infoglobe anyway.
The first step to better work on the prototype, is to "bring out" from the Infoglobe, 4 signals :
- VCC (+5v)
- LED IR input (base) transisto
- Infoglobe message generator
- GND
- mount a 4 wire pin connector (DIN - RJ11 - ecc.) in the base (be careful to drill the hole for the connector, since it is better to don't take apart ALL the circuit)
I used an RJ11. - remove the SMD resistor R117 (4k7 ohm)
This resistor enter in the base of the transistor who is driving the IR LED. The other side is connected to the Infoglobe microcontroller. - connect 2 wires of the connector to the places where the resistor R117 was attached
- connect 2 wires for the power supply (+5V - GND)
This is a schematic of the modification.
Is important to pay attention to the wiring, so to be sure to connect correctly the external interface (in my case I used an RJ11)
And this is a standard RJ11 color code:
In this picture I marked some optimal places to pick up the power supply and where to connect on the R117.
In my specific case, I reused an old RJ11 outlet 6 positions, using only the 4 central wires.
I used to connect the outlet, a phone wire using the standard color code.
So I had :
- not used
- black - to the IR LED transistor
- red - +5V
- green - GND
- yellow - to the Infoglobe microcontroller
- not used
Below, some pictures of the modification.
You can notice the black wire attached directly to the transistor, because removing the R117 resistor, the PCB was damaged.
Also it would be better to use a more thin wire than the one I used.
Attaching a square outlet in a curve box is not really easy and my mechanical skills are not very good.
Fortunately the hot glue helps to fix many imperfections and attach strongly the RJ11 outlet :-)
It is true this is just a prototype, the final version will not need holes since the ZigBee module and the circuit will be all inserted inside.
At the end of this work, I have now an Infoglobe modified, with 4 signals ported out, so to be able to experiment and design an interface.
In order to have the Infoglobe working as usual, I prepared an RJ11 plug with a 4k7 resistor between the pins 1 and 4 (the external ones) in order to allow the signal generated by the Infoglobe base to reach the IR LED.
This plug will be substituted by the MSP430 interface connection.
Saturday, October 9, 2010
Hacking an Infoglobe - part 1
The Infoglobe is a Caller ID display that uses a rotating Led array to show the information, displayed on a plastic transparent dome.
The idea is to use a modified Infoglobe to shows messages coming from other sources.
These notes are divided in different parts :
Possible Applications
It is possible to think about different possible uses for a modified Infoglobe capable to shows messages from the Home Automation system and the original purpose (Caller ID/Calendar/time).
Here some :
The idea is to modify an Infoglobe, in order to allow it to display messages coming from the Home Automation system or other sources.
In the Andrew R. Morris article, there is a description about how to temporarily disable the internal message generator (Caller ID/calendar/time/ecc.) and display different contents.
In his project, a PIC 16F84 micro controller is sending saved messages, driving a IR LED mounted close the original Infoglobe IR LED inside the base.
Starting from this idea, I developed an interface using a MSP430 micro controller from Texas Instrument, capable to drive the LED rotor.
Let's Open the Infoglobe
First of all I started from the Andrew R. Morris article which explain how to open and modify an Infoglobe.
The article starts explaining how to open the Infoglobe, that is not so easy if you mind to don't damage it, especially the plastic dome.
To open the Infoglobe, we will need :
First of all, the 4 screws in the base must be removed, as well as the batteries.
Very very gently, try to force the dome out of the base, then as soon as the dome starts to come out, lever on the other point : the one on the left of the keyboard and then the two on the back.
Be careful to don't damage the dome, especially on the left side of the keyboard, since there is a safety micro-switch that cuts off power if the dome is removed.
Here a picture of the Infoglobe without the dome.
Now continue to remove the display arm.
It is screwed to the motor with 3 screws.
Here a picture of the display arm just removed.
It is possible now to remove the plastic protection, attached by the 4 screws on the base (we already removed them).It's enough to gently lever where the dome was inserted in order to remove the cover.
Here a picture of the circuit below :
At this point we can directly access the circuit in the base.
To remove totally the circuit is quite complicate and unnecessary for our purpose, also because in that case it is necessary to take apart the motor and pay attention of small wires.
The pcb is attached to the base with 3 screws.
Arrived at this point, we can start to modify the Infoglobe for our purpose (continue).
The Infoglobe (from an adv) |
The idea is to use a modified Infoglobe to shows messages coming from other sources.
These notes are divided in different parts :
- possible applications
- the project
- let's open the Infoglobe
- modify the Infoglobe
Caution !
Modifying the Infoglobe, you will lose any guarantee on it.
Modifying the Infoglobe, you will lose any guarantee on it.
Exist also the potential to damage it and hurt yourself.
Possible Applications
It is possible to think about different possible uses for a modified Infoglobe capable to shows messages from the Home Automation system and the original purpose (Caller ID/Calendar/time).
Here some :
- display information/notifications from the system
- events notification (maybe adding also a sound alert), like a doorbell
- appointments/scheduling
- alarms
The idea is to modify an Infoglobe, in order to allow it to display messages coming from the Home Automation system or other sources.
In the Andrew R. Morris article, there is a description about how to temporarily disable the internal message generator (Caller ID/calendar/time/ecc.) and display different contents.
In his project, a PIC 16F84 micro controller is sending saved messages, driving a IR LED mounted close the original Infoglobe IR LED inside the base.
Starting from this idea, I developed an interface using a MSP430 micro controller from Texas Instrument, capable to drive the LED rotor.
Let's Open the Infoglobe
First of all I started from the Andrew R. Morris article which explain how to open and modify an Infoglobe.
The article starts explaining how to open the Infoglobe, that is not so easy if you mind to don't damage it, especially the plastic dome.
To open the Infoglobe, we will need :
- one small philips screwdriver, but long (the 4 holes for the screws are deep)
- a precision electronic screwdriver set
- one small long plier (to pick up some screws)
The tools used to open the Infoglobe |
Note the 4 holes and the battery compartment |
Now, looking at the plastic dome close to the base, you can see 4 places where the plastic enter in the base.
Two places in the back and two places in the front, between the keyboard.
The article suggest to starts to leverage with a very small object (like a small flat screwdriver) on the right place of the keyboard, where you can see the dome entering in the base.Very very gently, try to force the dome out of the base, then as soon as the dome starts to come out, lever on the other point : the one on the left of the keyboard and then the two on the back.
Be careful to don't damage the dome, especially on the left side of the keyboard, since there is a safety micro-switch that cuts off power if the dome is removed.
Here a picture of the Infoglobe without the dome.
Now continue to remove the display arm.
It is screwed to the motor with 3 screws.
Here a picture of the display arm just removed.
It is possible now to remove the plastic protection, attached by the 4 screws on the base (we already removed them).It's enough to gently lever where the dome was inserted in order to remove the cover.
Here a picture of the circuit below :
At this point we can directly access the circuit in the base.
To remove totally the circuit is quite complicate and unnecessary for our purpose, also because in that case it is necessary to take apart the motor and pay attention of small wires.
The pcb is attached to the base with 3 screws.
Arrived at this point, we can start to modify the Infoglobe for our purpose (continue).
Subscribe to:
Posts (Atom)