- Thu Apr 28, 2011 4:38 pm
#126259
Hi, first-time poster asking for some advice before I start a project. What I'm looking to do is make a non-universal, dedicated-for-the-TV-only, big button remote for my mother (who is 85). As is typical for people her age, she's not exactly "tech savvy" and her eyesight is quite bad due to macular degeneration. Thus the remote included with her new TV (a Vizio) is very hard for her to use (too many small, indistinguishable buttons). I got her a reasonable BB remote but it seems to loose it's device code too often as of late and the "extra" controls for the DVD, sat, etc tend to confuse her.
I have a non-functional, multi-button BB remote I can scavenge for (some of) it's big buttons and the rest I figure I can build myself, with a micro (probably a PIC but ...) as the heart. What I'd like is some advice on what micro best suits the project, as well as any other general comments people think apply.
As for requirements I believe the remote needs 20-22 buttons (0-9, -, pwr, vol+, vol-, mute, chan+, chan-, back and 2-4 favorites) which says to me 10 I/O lines to make a scan matrix. Ideally the inputs would have a interrupt on change capability so the micro can sleep and conserve power when not doing anything. When a button has been pushed (and validated) two things then happen in sequence. First the modulated IR (38 KHz, ~30% DC) is transmitted with the needed encoding (NEC1) for that buttons function. My thinking is to store a set of timings corresponding to the timings for each mark and space in the encoded IR stream. IIRC the NEC1 format is a preamble plus 32 bits. Using a byte to store the time of each mark or space means about 750 bytes to store the timings. The shortest timing is 560 usec and the longest is 9 msec so I don't think I need a high speed micro but I do need a timer to cover that range. Timing accuracy to a few % should work OK so I don't think an external crystal is required.
But here I have a question re: the actual IR output. I can use an external oscillator (think 555-ish) to do the IR modulation and drive the LED. The micro could then enable/disable it with a single output line. Or I could use a PWM function (setting the period and DC in software) and enable/disable that function (and thus output) via software. The downside to the latter is I think the output pins of micros are limited in drive current to less than the amount desired (? 50 - 80 ma ?) and I have need for a PWM to do another function (see below). Using an internal PWM function also mandates a certain speed to get the 38 kHz mod frequency, though I don't think that's a big design driver. (?) OTOH adding an external oscillator means more shakey hand soldering by me though it simplifies the code and takes care of any "high" LED drive current concerns. Hmmmm.
Second (once the micro has sent all the marks and spaces) I'd like the remote to audibly tell Mom what button she's pushed. These BB remotes don't have much tactile feedback and she has a hard time seeing the small channel number display on the TV. This leads her to hit 5 5 5 5 5 ... when she wants channel 55 and the TV quite naturally rejects 55555... as a valid input. I get the resulting phone call that the remote or TV is "broken". So having the remote speak to her let's her know what button she's pushed and when to stop pushing. I figure on using a PWM (see I said there was a another use) to drive a small piezo-type speaker just to say "one" or "back" or "louder", etc. Telephone quality speech shouldn't be too hard and I'm thinking 8 ksample/sec with 8 bits and perhaps 0.5 - 1.0 sec in duration for each button confirmation (22 x 8K => 176B of memory needed). This in turn means I need enough memory to store all the .wavs and I think this means using some form of external (to the micro) memory. Right now I'm thinking SF sells a SD card socket that would allow me to record and edit .wavs on my PC and easily inject/change them (via an SD card) into the project. This then requires code to handle the file system. So I'm open to other ideas as well. Thus the micro needs (another ?) PWM and output line, and I/O to interface to external memory, probably via I2C or SPI. So that's 4 more I/O lines and enough RAM to buffer the memory ?
Summing up I think the micro needs to have 1 or 2 PWM outputs (could 1 PWM's output be reassigned to a different output pin ?), 13-15 more I/O lines (buttons + ext mem interface), I2C or SPI capability, enough (I have no guess as to what's needed to read from external memory) flash to hold the button timings + program and enough (???) SRAM to buffer the .wav data. It should be able to enter and wake from a low power state, allowing it to run (intermittently) off 2-4 AA batteries for 6 months. Simple is better and I'm not planning on getting a PWB made as I'll only be making 2 of these. Lastly I think the 950 nm diode is the right one for TV remotes but ...
Man, that's one looooong post. Thx for reading it and any advice.
I have a non-functional, multi-button BB remote I can scavenge for (some of) it's big buttons and the rest I figure I can build myself, with a micro (probably a PIC but ...) as the heart. What I'd like is some advice on what micro best suits the project, as well as any other general comments people think apply.
As for requirements I believe the remote needs 20-22 buttons (0-9, -, pwr, vol+, vol-, mute, chan+, chan-, back and 2-4 favorites) which says to me 10 I/O lines to make a scan matrix. Ideally the inputs would have a interrupt on change capability so the micro can sleep and conserve power when not doing anything. When a button has been pushed (and validated) two things then happen in sequence. First the modulated IR (38 KHz, ~30% DC) is transmitted with the needed encoding (NEC1) for that buttons function. My thinking is to store a set of timings corresponding to the timings for each mark and space in the encoded IR stream. IIRC the NEC1 format is a preamble plus 32 bits. Using a byte to store the time of each mark or space means about 750 bytes to store the timings. The shortest timing is 560 usec and the longest is 9 msec so I don't think I need a high speed micro but I do need a timer to cover that range. Timing accuracy to a few % should work OK so I don't think an external crystal is required.
But here I have a question re: the actual IR output. I can use an external oscillator (think 555-ish) to do the IR modulation and drive the LED. The micro could then enable/disable it with a single output line. Or I could use a PWM function (setting the period and DC in software) and enable/disable that function (and thus output) via software. The downside to the latter is I think the output pins of micros are limited in drive current to less than the amount desired (? 50 - 80 ma ?) and I have need for a PWM to do another function (see below). Using an internal PWM function also mandates a certain speed to get the 38 kHz mod frequency, though I don't think that's a big design driver. (?) OTOH adding an external oscillator means more shakey hand soldering by me though it simplifies the code and takes care of any "high" LED drive current concerns. Hmmmm.
Second (once the micro has sent all the marks and spaces) I'd like the remote to audibly tell Mom what button she's pushed. These BB remotes don't have much tactile feedback and she has a hard time seeing the small channel number display on the TV. This leads her to hit 5 5 5 5 5 ... when she wants channel 55 and the TV quite naturally rejects 55555... as a valid input. I get the resulting phone call that the remote or TV is "broken". So having the remote speak to her let's her know what button she's pushed and when to stop pushing. I figure on using a PWM (see I said there was a another use) to drive a small piezo-type speaker just to say "one" or "back" or "louder", etc. Telephone quality speech shouldn't be too hard and I'm thinking 8 ksample/sec with 8 bits and perhaps 0.5 - 1.0 sec in duration for each button confirmation (22 x 8K => 176B of memory needed). This in turn means I need enough memory to store all the .wavs and I think this means using some form of external (to the micro) memory. Right now I'm thinking SF sells a SD card socket that would allow me to record and edit .wavs on my PC and easily inject/change them (via an SD card) into the project. This then requires code to handle the file system. So I'm open to other ideas as well. Thus the micro needs (another ?) PWM and output line, and I/O to interface to external memory, probably via I2C or SPI. So that's 4 more I/O lines and enough RAM to buffer the memory ?
Summing up I think the micro needs to have 1 or 2 PWM outputs (could 1 PWM's output be reassigned to a different output pin ?), 13-15 more I/O lines (buttons + ext mem interface), I2C or SPI capability, enough (I have no guess as to what's needed to read from external memory) flash to hold the button timings + program and enough (???) SRAM to buffer the .wav data. It should be able to enter and wake from a low power state, allowing it to run (intermittently) off 2-4 AA batteries for 6 months. Simple is better and I'm not planning on getting a PWB made as I'll only be making 2 of these. Lastly I think the 950 nm diode is the right one for TV remotes but ...
Man, that's one looooong post. Thx for reading it and any advice.