Detail oriented, team focused, Embedded Software Engineer available for embedded software development opportunities. Contact for details.
Technical expertise resides in designing and developing low level C/C++ embedded programs using real-time programming techniques for embedded applications and device drivers implementing a low maintenance structure for efficient product support throughout the entire development lifecycle, from requirements to test to post-deployment field support.
Additional competencies, beyond developing embedded firmware, include the development of PC-interface software for embedded systems using the C# programming language and low-level embedded debugging techniques.
Previous work focused on the development of firmware for USB, CAN, SPI, RS-232, RS-485, and ADC/DAC drivers, as well as implementing low-power embedded solutions across a broad range of embedded platform families, shown to the right.
Rain Bird Corporation
Black Diamond Networks
Senior Firmware Engineer
October 2017 to Present
- Worked with existing team to identify and fix bugs in firmware for ST Microelectronics STM32L4xx series ARM® Cortex® M4 processor for Rain Bird’s next generation irrigation control system for residential and light commercial customer sites.
- Integrated product firmware for use with new custom LCD user interface by updating LCD driver segment map.
- Assisted in debugging of embedded C++ code base using IAR Embedded Workbench, I-jet Trace and ST-Link JTAG debuggers, and Perforce (PV4) version control management tool.
Embedded Software Engineer
Cary, North Carolina
October 2016 to September 2017
- Developed drivers for next generation hospital bed using ST Microelectronics’ STM32F4xx series ARM Cortex-M4 based 32-bit microcontroller with winIDEA IDE and iSYSTEM (“blue-box”) JTAG debugging interface.
- Completed rewrite of power supply driver monitoring various voltage, current, and temperature sensors to take appropriate time-based action when fault conditions presented and cleared. Utilized multiple state machines for sensor monitoring and response handling.
- Enhanced modular SPI driver to utilize peripheral loopback paths to help ensure bi-directional message integrity.
- Updated ADC driver to detect sensor faults by monitoring for voltage drift created by a weak burnout current when a sensor lines become open or shorted.
- Added updates to QT diagnostic tool to support PC interface to new and existing features.
- Worked closely with hardware design counterparts and test engineers in cross-functional, geographically distributed team using Agile methodology to meet product design and launch targets.
- Supported system level integration efforts for new product with deep technical knowledge and hand-on low-level debugging of issues raised.
Triple Crown Consulting
Embedded Software Engineer
August 2016 to September 2016
- Created a feature module, utilizing embedded C++ and object-oriented programming (OOP) techniques, to develope a feature module to enable machine-to-machine (M2M) communication between ORBCOMM’s PT 7000 product, a ruggedized wireless—cellular or dual-mode—construction equipment tracking and monitoring device, and an industrial belt scale by parsing human readable ASCII data transacted on a SCI/UART over RS-232 single ended communication bus.
Cyient until September 2015 then Direct
January 2015 to August 2016
- Developed APIs using ANSI C and CVI for MMOS displays in support of tools for Caterpillar’s automated quality assurance initiative including: data logging and signal analysis of discrete analog signal by interfacing with a DAQmx PXI from National Instruments (NI) and Cat DataLink (CDL) packet analysis from information contained in SuperLink capture file.
- Lead team efforts for improving Git usage, repository organization, and overall general understanding of Git.
- Spearheading effort to improve exception and error handling during code development.
- Authored and updated documents for new and existing processes.
Milwaukee Homes Now
Owner / Manager
April 2013 to December 2014
- Founded real estate investing company focusing on improving distressed single family homes in the Milwaukee area.
- Interviewed and hired office assistant and building contractor.
- Purchased, renovated, and sold (flipped) single family home on Milwaukee’s North side.
October 2012 to April 2013
- Developed USB driver using Freescale’s USB stack and MCF51JM128 ColdFire V1 microcontroller utilizing the chip’s integrated USB peripheral for a Full Speed implementation of the USB 2.0 standard.
- Modified existing code base to integrate new USB driver into OBD scanner firmware.
- Updated ELF linker command files, so that USB driver would reside in segregated portion of program memory, to be used by both boot code and main code.
- Implemented a USB vector table, so that USB driver and stack would be accessible to both boot and main code.
Senior Software Engineer
August 2010 to September 2012
- Developed SPI and serial Flash drivers to be used on new JCI rooftop controller board. The SPI bus was used to bridge communications between a Renesas RX63N 32-bit microcontroller and Micron M25P series serial Flash chip. These drivers were integrated into the low-level strategy functions of an fsys file system.
- Implemented fsys file system on Rowebots Unison RTOS.
- Wrote firmware based on TI Z-Stack embedded OS for USB-to-ZigBee network adapter replacing an obsolete product. Based on Texas Instruments’ Chipcon CC2530/CC2591 chipset solution, the adapter allows field technicians to wirelessly connect to deployed JCI Metasys wireless building management system.
- Developed C++ middleware to allow existing PC diagnostic applications to connect to the new wireless adapter with only minimal changes to those applications. I added a DLL selection algorithms, written in both C++ and C#, to accommodate existing applications by using the WMI to dynamically scan for and load the proper DLLs at runtime to interact with whichever wireless adapter was found physically present on the system.
- Integrated serial boot loader into new firmware image to be used for future automated firmware updates.
- Refactored an existing C# build tool for automated generation of XML files used to configure product communication objects, prior to builds. This refactored tool would interrogate the Access database by making complex SQL queries.
- Responsible for overseeing the daily activities of an intern, preparing work assignments and reviewing completed work.
- Collaborated to develop new processes for assigning USB product IDs to new products and validating new Windows drivers with Microsoft.
- Interfaced with overseas third-party hardware OEM regarding updates to their design and provided detailed documentation for programming branded USB device information and production firmware, as well as how to use the custom firmware in their end of line hardware validation testing.
- Delivered detailed design documentation for firmware and PC software deliverables of the USB-to-ZigBee network adapter.
Generac Power Systems
August 2009 to August 2010
- Developed CAN bus driver for networking generator controllers and human interface devices for generators targeted at the commercial and industrial markets. The CAN bus driver handles all low-level data exchange between nodes providing a means of constantly maintaining vital inter-node data for rapid access by the application-level firmware, critical for maintaining safe and predicable operation of the generator. Efficient team working and communication skills were necessary for the successful system integration of this driver across multiple products.
- Completed rewrite of a C language boot-loader supporting RS-232 and CAN communications interfaces improving stability and reliability of the boot application while at the same time reducing its overall code size by eliminating redundant, unnecessary, and/or dead code, as well as re-implementing over-used lengthy macros as functions. This involved updating the linker script file to limit the boot-loader application and its startup code to the PIC32 microcontroller’s Boot Flash. The respective C# PC firmware loader tool was updated and largely re-written to improve its stability and reliability, while at the same time adding user-controls and reducing programming time by about 75%.
- Designed, developed, tested (unit, bench, & system), and deployed UL certified, reusable I2T algorithm module. This new module allowed for varied use, so that the user could decide the trade-off of execution time versus output resolution. It was deployed on both legacy and new systems reducing code size in the older and existing units by 10KB.
- Updated existing, designed new, and implemented test firmware for use in production end-of-line testing for multiple product lines. Loop-back and “intelligent” test fixture design approaches were used depending on the product. The test firmware was integrated into the application, so as to avoid reprogramming the product after testing.
- Developed PC tools (Visual C++, Win32 Console, and C#) to support loading firmware images via a boot loader, generate 32-bit CRC values for firmware images formatted as Intel-HEX, and debug Modbus and CAN communication interfaces.
- Wrote and maintained technical documentation supporting software I developed: User’s Guide and Quick Start Guide for PC firmware loader and test procedures for use by production personnel.
September 2007 to July 2009
- Developed MSP430 firmware and digital circuitry for wireless version of the Christmas Tree Safety System. It was designed to alert those in the home in the event of a Christmas tree catching fire.
- Developed MC1321x/HCS08 firmware for a wireless remote control for a portable radio designed for use in military applications.
- Evaluated use of Chipcon CC2431 location engine for use in high-resolution location applications.
- Developed CC2430 firmware for RS-485 to ZigBee adapter module for industrial thermostats. The modules made use of the TI Z-Stack and were designed to allow the client to retrofit their existing RS-485 thermostat networks with wireless capability.
- Added error-handling use cases for CAN bus application firmware using the AT90CAN. The system was developed for use in industrial/construction equipment, which employed RFID to read a nearby key-fob, to secure starting of the vehicle only with pre-authorized keys.
- Developed theoretical battery analyses based on datasheet electrical characterizations and suggested means of improving designs.
- Researched available technologies and tendered recommendations for turnkey solutions.
Astronautics Corporation of America
National Software Associates
Software Verification Engineer
July 2006 to September 2007
- Responsible for ownership of a team, as “team leader” for coordination overseas communication for software verification efforts.
- Served diligently as a team leader by coordinating the international communication and verification efforts to produce DO-178B Level C certified software for the Boeing 777 and 787 Electronic Flight Bags.
- Collaborated with team in Russia to successfully duplicate their Linux software build and test processes on native hardware. This was accomplished by reverse engineering of some of the software.
- Conducted code and documentation audits and reviews. During which, I was recognized for my high level of quality and detailed observation.
Associate Applications Engineer
April 2004 to June 2006
- Interfaced with TI customers to provide hardware and software solutions by coding and debugging assembly and C for applications utilizing the ultra-low-power MSP430 and ARM7-based TMS470 micro-controllers.
- Trained TI staff on TMS470 and the Eclipse-based Code Composer Essentials.
- Mentored peers in gaining expertise on MSP430.
- Drove the development and publication of new internal processes for efficient communication between TI businesses.
Graduated: October 2003
Bachelor of Science in Computer Engineering Technology (BSCET)
Awarded Outstanding Senior Project Award (1st place)
Dynamic encryption algorithm utilizing C/C++ DLLs interfaced to a wizard written using Microsoft Visual Studio 6.0 C++.
Digital Circuits, Digital Systems, Data Structures and Algorithms, Embedded Microcontroller Systems, Data Communications and Networking
ST Micro STM32L4
Intel MCS-51 (8051)
Renesas RX63N, RX631
ST Micro STM32F4
Intel 80×86 (8086)
Texas Instruments MSP430
Texas Instruments TMS470
- Bare metal
- Fixed point math
- Boot loaders
- Digital Design
- Digital multimeter
- Function generator
- Bench supply
- Signal analyzer
- Spectrum analyzer
- Visual studio
- Version control
- Microsoft Office