|SHDesigns: Embedded Systems Design, Consulting and Developer Resources
Below are some examples of the jobs I have done. Note, client names are not included here, references available on request.
Note: Some of this work is detailed in the "Sample Designs" area.
Project: Headset Amplifier
Updated a small headset amp for newer parts and automated assembly. Old and new were simulated with SPICE to make sure new matched the old performance precisely. I laid out PCB artwork and provided all needed dockumentation for manufacturing.
Project: Flight Simulator Interface
Using Visual C++, MFC , Win32 and C, developed a flight simulator interface. This application displayed various control panels from a helicopter. These panels could be added, sized, or moved as needed to mimic the layout of the control panels. Switches, breakers and buttons could be toggled with mouse clicks and the application would provide visual feedback of the switch positions by showing different images of the switches in each possible position. The application also launched other simulation programs and restarted them if they terminated. A console dialog allowed user input of simulator parameters and also simulated the motion of the helicopter along a user-defined direction and speed.
Project: MMC interface for Rabbit Modules.
Designed two interfaces for MMC Flash cards connected to Z-World core modules. The first used the serial ports of the Rabbit CPU to communicate with the card. This worked well and only required writing the driver, the hardware just consisted of connecting an MMC socket to the serial port pins.
The Rabbit serial port does not support MSB-first data so it has to reverse the bits in software. It also was not real fast. A CPLD was designed to provide fast 16-bit SPI transfers. This increased the transfer speed considerably. The CPLD also provided 16 I/O pins. File read speeds up to 550kbytes/sec have been achieved. That is the limit for the Rabbit CPU.
Project: Networked Collection box Project 11:
Designed hardware and software for a data collection box for a drive-through application. The box collected data as cars pass through a drive through. The data is then passed onto a PC for analysis by either serial or TCP/IP connection. Design included a Z-World embedded processor module with custom software and additional hardware for interface to the loop detectors and status LEDs. A Windows application was written to configure the box remotely. Also, the new box used a more robust protocol; an application was written to emulate the new network protocol with the old version (serial).
Project: PCI Telephone interface
Revised a previous design for the PCI bus (from AT bus.) New design used the Motorola DSP56309 DSP processors. Old DSP56002 code was ported to the new hardware. Main processor was an AMD80C186ES running code written in C and assembly.
Project: Auto Monitor, Language Lab Project 7
Developed an embedded smart controller for a language lab system. The language lab system was hard-wired for a specific set of features and did not save any user settings when powered down. The controller monitored the keys and LED's of the system (56 switches), and provided additional functionality. Functions included, saving the current settings, automatic stepping through a programmed set of switches, and a test mode that operated each switch and LED in a specific order for automated system testing. Design included complete hardware and software and also included a built-in programmer for the EPROM CPU (Motorola 68HC711).
Project: Conferencing Board, Language Lab Project 8:
A conferencing system for the above language lab. This board provided eight audio conference groups for any of the 48 audio channels. This system used a single chip CPU (PIC16C71) with custom hardware, and software. Software was written in assembly language. Provided PCB design and layout along with all documentation for manufacturing.
Project: Real-Time Performance, Dictation system
The client was having serious stability and performance problems with embedded processors within a PC-based voice dictation system. Work included several trips to customer sites to analyze the problems. Developed software to analyze real-time performance. This revealed the problems and gave measurable benchmarks of results. Problems were found with OS/2 task priorities, SCSI drives (poor performance) and software bugs.
Project: Debugger, Dictation system Project 6:
In the process of debugging the above system, it became apparent that the multi-threaded embedded software was almost impossible to debug. I developed improvements to a clients system debugger (originally my design) and then used the debugger to find several bugs in their embedded system. The debugger was ported to a Visual C++/MFC application. It provided extensive support including, tracing, error log capture and source-level debugging. The application displays multiple windows for code, data, thread status, logs, registers and data structures. This software can connect to the remote system via named pipes, sockets, serial, modem, or debug a saved capture form the card.
One of the features of the debugger was to save the state of the entire system to a file. The file can then be debugged separately, allowing the system to run uninterrupted. This feature along with the network and modem capability saved the client from requiring travel to remote sites.
Project: Transcription Interface, Dictation System Project 4:
Developed a PC-based sound and telephone card that includes a local CPU and DSP for remote access to a proprietary voice recorder. Design included overall architecture, initial hardware specification and all embedded code for both the CPU and DSP processors.
Embedded real-time software development was done using C and assembler code (80186) and extensive DSP assembler code (Motorola 56002.) This software included card startup, audio playback and recording, messaging and extensive diagnostics. The DSP code included DTMF generation and detection, audio compression (ADPCM, CVSD, PCM, DVI) speed control, modem encoding and decoding, synchronous serial communications ,and numerous digital filters.
To support the PC sound card, I developed several Visual C++/MFC programs including console, dialog and frame window applications. These programs included a file I/O driver, a setup program and several diagnostic and debugging tools.
Project: PCI Digital Signal Processing Board. Project 5:
Earlier, I designed the hardware and software for a multi-processor DSP board for Lanier's dictation system. As ISA slots are no longer standard for PCs, a PCI version was needed. A PCI version of the board was developed. The code was ported to the new hardware.
The old card used fixed memory addresses and interrupts. The OS/2 device driver was rewritten to support the PCI card. One of the system DLLs was rewritten to emulate the old ISA cards. As the application made calls to access the ISA card memory, the addresses were translated by the DLL to the new PCI addresses. Additional applications were written or modified to support the PCI card and some additional features. The main system software remained unchanged, thus minimizing the amount of testing required.
Project: Port OS/2 Application to NT, Dictation System
Wrote an NT device driver for NT for access to proprietary PCI and ISA voice processing cards. Client does not want to rewrite applications as Win32. The system would not work under the OS/2 emulation of NT/2k. This required writing wrappers around system DLL's and the driver to allows the OS/2 applications to emulate the old system. This included inter-process communications via named pipes and a "thunk" layer to translate between the 16-bit OS/2 environment and the NT system. This project was an built on a previous project of writing a PCI device driver for OS/2.
Project: Event Monitor, Drive-through system Project 2:
Designed a small board that read various relay inputs and reported the information to a PC via a serial port. This board used a small PIC processor and some custom firmware to emulate a serial port. Board received loop-detect inputs from a drive-through sensors and reported events to a PC. The PC was used to manage user performance (drive-through timing.) Hardware, software and prototype built and tested in 3 days.
Project: Video system Interface
Developed an interface between two incompatible video switching systems. These systems used different serial protocols. Design consisted of a hidden windows application that used two serial ports to communicate with the two systems. The software then translated the two protocols.
Project: 8x3 Phone system Project 3:
Hardware, Software, Firmware and PCB design of an 8x3 PBX phone system. This board contained a small embedded CPU (68HC11) that is controlled by a PC. This design included audio amplifiers, switching power supply, digital logic, processor and memory. Visual C++/MFC applications were written to demonstrate the board features, download the firmware, and provide debugging. On board software written in GNU C. Took over an original design that was wire-wrapped and took over a year to develop. Poor design required a complete redesign of both hardware and software. Entire process of redesign, software development, PCB layout and assembly took only a few months. First PCB design (400 parts) worked with only minor changes.
Project: Voice Announcement Controller
Provided redesign of a clients voice prompt system to reduce parts cost, improve reliability and add some additional features. Also, converted their hand-drawn schematics to CAD to improve readability and allow PCB design. System played and recorded voice prompts for drive-through POS systems.
Project: DTI Replacement, Channel selector Project 1:
A Motorola synchronous to asynchronous interface is no longer
available. Developed hardware and firmware using a Microchip PIC
controller to emulate the old part. This prevented the client
from redesigning their system by using a small board that plugs
into the chip socket.