An IRWidget is an instrument used to analyze carrier-based PWM signals of the type where an infrared carrier is gated on and off with precise timing to encode addresses and commands. Better than 90% of all infrared remote controls use some variant of this system. A remote's infrared LED is driven in bursts at a frequency typically in the range of 30KHz to 60KHz. With some protocols the data "1"s and "0"s are encoded by the length of carrier ON bursts, with constant length OFF periods between bursts. With others it is just the oposite. Still others use completely different encoding schemes.
When a user clicks on the CAPTURE button on his PC screen the PC sends a USB signal to the IRWidget telling it to start looking for infrared pulses (with a 6 seconds time-out for the first pulse) and another signal later when to stop looking. The Widget's sensor sees each individual LED pulse in a carrier burst and counts them, starting with the first pulse seen at the beginning of a remote signal. Every 100 uS the Widget transmits serially to the PC a single byte containing the hex value of the least significant 8 bits of the carrier pulse count. At a speed of 115.2K baud, transmission of a single byte (START bit, 8 DATA bits, and 1 STOP bit) takes less than 100 uS (actually 86.8 uS), so the Widget has no problem keeping up with very long captures that can last for thousands of bytes (tenths of seconds). In summary, each byte sent to the PC has a value N larger than the previous byte, where N = the number of IR LED pulses detected during the last 100 uS interval. During OFF times between carrier bursts the byte values obviously stop incrementing (N = 0). To avoid missing the leading edge of a pulse the counter is never cleared while capturing a signal.
Here's an example showing the bytes sent to the PC from the Widget while capturing a remote signal that happened to be Sony12 protocol.
00 05 09 0D 11 15 19 1D 21 25 29 2D 31 35 39 3D
41 45 49 4D 51 55 59 5D 60 60 60 60 60 60 61 65
69 6D 71 75 79 7D 81 85 89 8D 90 90 90 90 90 90
91 95 99 9D A1 A5 A8 A8 A8 A8 A8 A8 A9 AD B1 B5
B9 BD C1 C5 C9 CD D1 D5 D8 D8 D8 D8 D8 D8 D9 DD
E1 E5 E9 ED F0 F0 F0 F0 F0 F0 F1 F5 F9 FD 01 05
09 0D 11 15 19 1D 20 20 20 20 20 20 21 25 29 2D
31 35 38 38 38 38 38 38 39 3D 41 45 49 4D 50 50
50 50 50 50 51 55 59 5D 61 65 69 6D 71 75 79 7D
80 80 80 80 80 80 81 85 89 8D 91 95 98 98 98 98
98 98 99 9D A1 A5 A9 AD B0 B0 B0 B0 B0 B0 B1 B5
B9 BD C1 C5 C8 C8 C8 C8 C8 C8 C9 CD D1 D5 D9 DD
E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0
E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0
E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0
E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0 E0
E0 E0 E0 E0 E0 E0 E0 .....
For the Widget, that's all there is to it ! That string of data is all the PC app needs to calculate the carrier frequency, the ON time of each carrier burst, and the OFF time between bursts. It then searches through its data files to identify the signal protocol and coding, and almost instantly provides a picture of the waveform complete with all timing in microseconds. The picture can be saved, zoomed in or out, exported in various formats, etc. There's enough information in the picture to completely reproduce the waveform. You never actually see the raw data transmitted from the IRWidget.
I was part of the JP1 Forum team that developed and sold hardware for the IRWidget a dozen years ago. I've reached the age of 92, and as I prepare for the inevitable I want to preserve this incredibly wonderful tool by publishing an article that details how any semi-skilled hobbyist can build an IRWidget using less than $12 in parts and without special tools or experience handling small surface mount components. I believe an Arduino NANO is the ideal candidate for this task. It is small and inexpensive. It has more than enough speed, more than enough I/O and memory, and built-in USB communications. The only technical part of the project the hobbyist will be stuck with is downloading the Arduino IDE and using it to upload the sketch into the NANO.
I don't have the skill and ability to convert the present program running in a PIC12F629 to an Arduino sketch for this project, but there are many ways I expect to help. I can provide a detailed description of the way an IRWidget collects data and sends it to a Windows PC in real time without it being corrupted by Windows activity. The Windows app is a freeware download. I can provide that and an IRWidget for you to use with it. I can provide Asm source and hex files for the PIC12F629 program in case it is of any help in porting everything over to the NANO.
This is a project that is challenging (but do-able) as well as fun. I plan to publish an illustrated article in Circuit Cellar or Nuts and Volts magazine. I will give complete credit in the article to whomever helps me by writing the firmware, and you can be sure you have made a lot of people very happy. I can't afford to pay for this help, but I do think it would be fair to share 50% of any renumeration paid to me by the publisher. I was paid $600 for the last article I published two years ago