Most commercial altimeters are limited to around 25,000', the reason for that is they want to keep the resolution higher for "typical" high power rocket launches. Most "high altitude" commercial altimeters are limited to around 42,000'. The reason for that limit is the barometric sensor commonly used will only read down to 15kPa (42,000'). About a year ago I came across a new pressure sensor from Honeywell that would read all the way down to vacuum, then I found a company that sells the a PIC 16F87X microcontroller with a boot loader that can be programed through proprietary IDE software that's a free download. The PIC 16F87X is similar to a Basic Stamp 2, but much more powerful. The chip is the Basic Atom, I'm using the 28 pin version. This new barometric sensor and the Basic Atom chip were just meant to be married together in an altimeter.
I debated adding an accelerometer to this altimeter, but quickly decided against it. I just don't like accelerometers in altimeters. The micro accelerometers are fine for basic data, but there seems to me to be too much noise for the data to be reliable. I've used a couple of commercial altimeters with accelerometers, and read a lot of reports on the internet from flights using accelerometers, the data just isn't good enough to be reliable. It's probably good enough to integrate apogee close enough to get the job done. But I think the data is pretty much useless for trying to accurately determine thrust, total impulse and altitude. Well, at least not using a single accelerometer, and or, using some pretty advanced filter algorithms.
The Basic Atom chip comes in several flavors. The easiest to use is the module, which has a power supply regulator and RS232 communications built on the module. But that module is about $60, so I opted to just use the PIC 16F87X chip with the Basic Atom interpreter software pre loaded on the chip, cost about $20. That meant I'd have to program the chip off board, then put the programmed chip into it's socket on the altimeter board. When I first purchased the Basic Atom, I bought an OEM board with a chip. That allows me to program the chip on the OEM board, then move it to the altimeter. You can buy the raw PIC chip for about $7 without the Basic Atom interpreter software on it, but then you have to buy a programmer board, programmer software plus (if you're like me) a basic software package to program the code. That ends up costing around $300, so by buying the chip with the Basic Atom interpreter software on it I can save the $300, paying an extra $13 a chip I'd have to use over 23 chips to break even. The Basic Atom chip looks to be a good deal unless you're doing a lot of chips.

Completed altimeter (top), my OEM module used to program the chip bottom.

Here's the PCB layout. Orange lines are resistors, purple lines are jumper wires, green lines capacitors and the blue line is the 20 MHz resonator chip. All resistors are 10K ohm unless otherwise labeled.
Parts List:
2.25" x 3" Single Sided Copper Clad Board
Honeywell Pressure Sensor: ASDX 015A24R
Basic Atom 28B Interpreter Chip
1) 28 Pin IC Socket
PCB Piezo Speaker
L7805CV 5 volt Regulator
3) IRF 510L Transistors
20 MHz Resonator Chip
10 uF Electrolytic Capacitor
.01 Capacitor
.22 uF Capacitor
1 Meg. Ohm Resistor
3) 3 K Ohm Resistors
7) 10 K Ohm Resistors
4) 2 Position .1" Pitch Terminal Blocks
Click Here for the JPG image to print your own PCB resist on a laser printer. Make sure you print actual size.
On this particular image I added a few traces from unused pins. These don't need to be connected to anything but
could be used for add on sensors, comm out, etc.
Click Here for the source code for BasicMicro version 2.2.1.1. The code for the altimeter is pretty sound, the code for beeping out the altitude after the main chute deploys is very crude. I just started playing with a few lines of code to make the beeps, and ended up copying and pasting it for the entire beep out process. There are much better ways to do it, but it works the way it is now, so I'll leave it since it has no effect on the performance of the altimeter.
How it works:
The first block of code allows for a 1 second warm up of the board. Then it takes 3 barometric samples and averages the sample to get an initial ground level base point.
The next code of block checks for continuity on all three pyro channels. The third pyro channel is not implemented at this point, but available for air starts, extra apogee channel etc. The altimeter beeps out one long beep for good continuity on channel one, a second long beep for good continuity on channel two, a third long beep for continuity on channel three. There is a pause, then the continuity beeps repeat. So if you have channels one and two connected, you should get two beeps, a pause, two beeps, repeat... If you only get one beep, that means you've got bad continuity on a channel, if you get no beeps, you have no continuity on any channels.
At the same time the altimeter beeps out continuity, it is sampling the baro sensor to detect lift off. 5 samples are taken in each loop and averaged. Once the altimeter has detected an altitude of about 400', the unit goes to the next block of code.
This block of code is called "Boost:". The first line of code is the mach delay, the mach delay is set to 5 seconds by the line of code "Pause 5000". This line of code should be fine for most small to mid size rockets flying to at least 2,000' or an apogee after 8 seconds. If you're flying something with an apogee under 8 seconds, you'll likely want to remove this line of code completely. For high performance flights you'll want to set the mach delay to a point in your flight where your rocket has passed through mach, back out of mach, and under the transonic speed range.
The next code of block (called Main:) the altimeter again over samples and averages the result, waiting until the rocket reaches an altitude about 1,000' above ground level. You can change the main deploy altitude on this line until baroav > (groundlevel - 50) You need to multiply the 50 value by 20 get the approximate altitude above ground level the main will deploy. So if you want to deploy the main at 600', you need to change the 50 to 30.
The last block of code is called "Display:" and is used to beep out the altitude. It's such a clumsy block of code I used up all the remaining memory... In fact, I used so much memory I had to REM out the sixth digit of altitude (I came up about 280 bytes short). Which means the altimeter will only beep out altitudes up to 99,999'. Which should be adequate for most of us anyway.
The beeps are pretty standard. One short beep stands for one. One long beep is a zero. Five short beeps followed by a pause would be a 5...
So, an altitude of 13,407 would beep out. One short beep, pause; three short beeps, pause; four short beeps, pause; one long beep, pause; seven short beeps, long pause. Then the sequence starts over and repeats until the power is terminated to the altimeter.
The altimeter would actually work all the way to space (vacuum), and still deploy. The problem when you start getting above 40 or 50 thousand feet is the resolution goes down significantly. The change in pressure per foot gets less and less the higher you go. By the time you get to 100,000', you may have to drop 1,000' before the altimeter detects enough change in pressure to fire the apogee charge. So if you plan to use this at high altitudes, make sure you design the recovery system with high speed deployment in mind.
One extra feature I added for my own use, is a 4 pin connector that uses two pins for data and the other two pins to power an RS232 connector. This will allow me to retrieve altitude data in the even the altimeter loses power, as I store the peak altitude in EEPROM. I'll document its use in future updates.
I'll be tweaking this design and the code a lot in the future, but it's a working starting point. I'll update this page as the unit progresses.