A while back one of the embedded design newsletters I receive mentioned a kind of "super-ADC", barely more expensive than the usual ADC and about the same size but with a microcontroller embedded (for example, the ST7FOX, S08QD, AVR ATtiny25, and P89LPC90x are all 8 pins, while the AVR ATtiny10 has 4 ADC channels in only 6 pins), allowing for programmable digital filters right on the front end. Think 50/60Hz notch filters to take out noise caused by fluorescent lights (the power grid in Europe and much of the non-US world is 50 Hz, the US is 60, so many devices offer the user a choice). Of course that kind of filter doesn’t need to be done on the front end, but many filters do, such as software radio and CDMA, because they require a sampling rate too high to push through an isolator. Doing the digital signal processing in the ADC then decimating before transmitting as a low-rate easily isolated serial stream solves the problem neatly.
Now, the newsletter, which I can no longer find, wasn’t highlighting that small cheap microcontrollers have ADC, that’s been true for a long time. Rather it was focusing on the availability of integrated ADCs with the same performance as dedicated ADC chips. So when I started the initial design work for the EPCS, I decided to go looking for a super-ADC to control it. For some reason Analog Devices and ARM stuck in my mind, so I went looking there. The ADuC series turns out not to be quite as small or low power as the article had spoken of, but they do have ADC performance as good as a dedicated IC. Also, as I further considered the project I decided I wanted to interface with more devices anyway, so the slightly larger size wasn’t a disadvantage. Furthermore, the ARM7TDMI core is very power efficient for what it offers, the same core is used for cell phones and PDAs that run for days on a charge. In the past project I’ve been involved with have often used Analog Devices’ analog-to-digital conversion chips with great success, so I expect similar good results ADC-wise from the ADuC. I wanted good ADC resolution, low cost, and a respectable number of I/O pins for LEDs and buttons, and those requirements intersected in the ADuC7025.
This processor has a lot of cool features and also presents a few challenges:
- Power – Expect an upcoming post with gory details on getting suitable power and ground connections to the microcontroller.
- JTAG – Supports programming the onboard code memory, but that’s not all. We won’t need an ICE (In-Circuit Emulator) or be reduced to printf debugging (or more usual for embedded systems, GPIO-attached LED debugging), because JTAG promises live debugging. Hooking up to a JTAG adapter, and then setting up the development environment will be topics for future posts.
- UART – Just one UART is included, but RX and TX are multiplexed to two sets of pins. I’ll give more details on why that’s good in a future post.
- GPIOs – Allows interacting with the real world in a myriad of ways. To start with, rather than just being a brick with tubes coming out, the EPCS will let its user know what’s going on with LEDs and a character LCD panel. We’ll even allow the care provider the illusion of control by accepting simple commands activated via push buttons. This will be described in — you guessed it — a future post.
- GPIOs redux – The purpose of the EPCS isn’t pretty blinking lights and push buttons though, we want to actually control pneumatic flow. GPIOs provide the timing to the valve control circuit described here. (Wonder of wonders, already written)
- ADCs – Actuators are great, but adding sensors opens up a whole new world of feedback control. We’ll start out with pressure transducers to monitor the fluid lines we’re controlling. Since the ADuC7025 supports fully differential inputs with an external voltage reference, we could use it as the front-end, but there are advantages to using an instrumentation amplifier as described here. For insight into system health we have an integrated temperature monitor, and maybe battery voltage and solenoid currents. That leaves a number of ADC channels left over which can be used to capture analog data from other monitors.
- SPI – A future post will describe why and how I add a microSD card to the EPCS.
Well there’s plenty more work to do, but this post is long enough. On to more specific points of design.