This page summarizes some of my firmware development projects for numerous platforms (80C51/52, C167CR, Atmel AVR, PIC, R3700 and the STM32 series (Cortex M0 and M3)) and various application areas.
Scroll down to Current Projects.
Legacy Projects (2001-2009) |
The following microcontroller development projects represent some of my early works.
Content is provided with explicit consent of the property owner (Light & Motion Lichttechnik GmbH -- liquidated 2010).
Notice, all these technologies are rather outdated -- for current works, please have a look at Current Projects
Single Board Computer for School Education with the Siemens C167CR (2000)
Mission goal: Design (HW/FW) of a single board computer with numerous hardware extensions (which were state of the art in the late 90's, such as ISA network interface cards) for educational purposes at the higher technical college. The board should be cheap, however, widely extensible and allow the students the use in a wide range of application areas. The processors and tools were sponsored by Siemens/Infineon. The board was designed with a free version of OrCAD.
Technologies used: Hardware: Infineon C167CR-LM with external FLASH and SRAM extension, RS232 interface via UART and extension connectors for 8bit and 16bit-ISA cards (e.g., parallel Port cards and network interface cards); matrix display module; Firmware: monitoring solution with Minimon; demo programs created with the KEIL C167 C compiler.
Resources:
C167CR Legacy Site @ Infineon: https://www.infineon.com/cms/de/product/microcontroller/legacy-products-c500-c166-xc166-audo1-family/c166-family/c167crsr/
Minimon: http://www.perschl.at/minimon.html OrCAD PCB solutions: https://www.orcad.com/
DMX512 Signalling over Power Line Carrier (2001)
Mission goal: Design and implementation of a communication platform that transfers DMX512-frames over power-line carrier for controlling LED color changing lamps. Since this was a proof-of-concept installation, several COTS products were used, including PLC equipment for IP networks. Also, implementing a remote access solution for this system was part of the project, which was realized with an industry PC and an ISDN extension card. Operating system was a modified Windows 98 version capable of running on a 128 MB compact flash card.
Technologies used: Software developed with gcc on Windows 98; PLC modems via USB, Remote Access via ISDN and RAS interface. DMX data is broadcasted via UDP, while measurement values (light density and the like) are fetched from the nodes in a round trip manner via TCP/IP.
Resources:
DMX512 Standard: https://en.wikipedia.org/wiki/DMX512
Power Line Communication (PLC): https://en.wikipedia.org/wiki/Power-line_communication
Professional Measurement System for Electroluminescence Thin Films (2002)
Mission goal: Design and implementation of a microcontroller-based measurement system to determine the durability of electroluminescence thin films. Up to 48 film samples can be placed on a board for which the voltage/current settings as well as the light density and color coordiantes are sampled in regular intervals (couple of minutes to hours) over weeks and months. In order to keep costs low only one light sensor is used, which is placed step by step and fully automatically on an (x,y)-table by two powerful step motors and a servo motor. Measurement values are stored in an on-board flash memory and can be retrieved (RS232 serial cable) and visualized via a PC-based analysis software.
Technologies used: Firmware: Programmed with the Franklin C Compiler for 8051; step motors in fine-step mode (generation of precise sine waves via the firmware), flash data management (ring buffer); terminal mode; retrieval of values with a PC software; PC Software: Developed with the Borland C++ Builder 6, Visualization of measurement values; export of graphs in standard file formats.
Resources:
Electtroluminescence effect: https://en.wikipedia.org/wiki/Electroluminescence
8051 Microcontroller family (Atmel derivates): https://en.wikipedia.org/wiki/Atmel_AT89_series
Franklin C Compiler http://www.fsinc.com/devtools/index.htm
Analysis Extension for Digital Oscilloscopes (2002)
Mission goal: Design and implementation of a PC-based tool that captures measurement data from a THS-720 digital memory oscilloscope via a serial link, visualizes measuements, and performs an extended analysis which hte standard software of the THS720 cannot do.
Technologies used: Programmed in Borland C++ Builder 6 Professional using the Visual Component Library (VLC); serial link (RS-232 and RS-485) to the hardware
Resources:
The THS720 oscilloscope: http://w140.com/tekwiki/wiki/THS720
Remote Controlled LED lamps over TCP/IP using PHP/CGI or Java/JNI (2003)
Mission goal: Lamps with a standard DMX interface shall be remotely controlled, i.e., the light color and intensity should be set not only via a remote DMX bus but over a TCP/IP-based wide-area network. No special requirements concerning the data rate, roundtrip time etc, but simple commands without real-time requriements shall be issued to the lamps' controllers. In order to achieve this with minimum effort and existing hardware, two Web-based solutions were evaluated (which were pretty much state of the art back in 2002/03): First, a Java Servlet allows the transfer of simple commands via a remote terminal to the local LPT interface, where a simple converter takes the data and transforms them into DMX-compatible frames. Second, a PHP-enabled Web form, hosted on the Apache Webserver, takes input values and hands them over to a small executable file which drives the LPT/DMX converter directly. Both solutions are rather basic, but easy to deploy and maintain.
Technologies used: Java/JNI version: programmed in Borland Java Builder, Java Native Interface (JNI) to access the LPT interface of the LP/DMX converter, PHP/CGI version: Apache WebServer and activated CGI module to call a small executable (Windows exe) that drives the LPT/DMX converter.
Notice, both version are from a security perspective by no means fit for deployment today.
Resources:
Java programming with JNI: https://www.ibm.com/developerworks/java/tutorials/j-jni/j-jni.html
CGI and command line setups: http://php.net/manual/en/install.unix.commandline.php
LED Lights Control Software for Large-scale Installations (2003)
Mission goal: Design and implementation of a hardware/software solution for convenient programming of large-scale DMX-controlled installations with up to several thousand channels. Here, the challenge is to manage the mapping of independent DMX busses (each with up to 512 channels) to installed lamps and allow light designers to program them with a customizable GUI software. The images below show some screenshots of the solution which basically maps installed lamps to an architect's plan and allow the manipulation of the light colors for single lamps and group of lamps. Furthermore, the solution allows to set patterns over the whole address range (e.g., "every third channel within range (x,y) should get the value z"). Eventually the control solution allows three different modes: First, a simulation mode can simulate the "light show" directly in the GUI visualization. This allows to quickly verify the timing and also correct movements of light patterns, as well as identifying any addressing issues. Furthermore, this mode offers the ability to adapt a light show without being connected to the actual installation. Second, a loop-through mode additionally outputs these light shows over up to 8 USB/DMX converters (see project below). Also, the output via a WLAN proxy is possible so that light designers can wander aorund with the laptop and inspect the result of any outputs without being physically connected. Third, a standalone player can play the final versions of light shows, timed through a real-time clock, without the need of a PC.
Technologies used: Programmed in Borland C++ Builder 6 Professional, USB/DMX Converter over USB, light shows stored in XML, streaming of DMX data over WiFi.
Resources:
Borland C++ Builder @ Wikipedia: https://en.wikipedia.org/wiki/C%2B%2BBuilder
Win32-API Development: Keylogger (2003)
Mission goal: Making use of the Win32 API directly without any encapsulating library such as Microsoft's Foundation Classes (MFC) or Borland's Visual Component Library (VCL). Numerous API functions are only accessible directly or offer extended capabilities when used directly (especially the OS-near functions), including file I/O, memory access, socket communication, driver access, DLL hooks etc. The goal of this project was to extend Borland's VCL with addtional features. An example on how to access external dynamic link libraries (DLLs) and create system hooks (here to capture keyboard input via a keylogger) is depcited in the figures below.
Technologies used: Programmed in Borland C++ Builder 6 Professional, using VCL and the WinAPI directly to access system DLLs and build a tray application that hooks into the keyboard driver.
Resources:
Borland C++ Builder @ Wikipedia: https://en.wikipedia.org/wiki/C%2B%2BBuilder
Microsoft Windows API: https://msdn.microsoft.com/en-us/library/cc433218(VS.85).aspx
Numerous LED controller (2003-2009)
Mission goal: Firmware design and implementation of various DMX-enabled controllers for LEDs and similar kinds of ballasts. Systems are designed to either drive LEDs directly (output stages for 4 or 8 channels for single LEDs with up to 10 Watt), or via a propriatory bus-system capable of driving 48 channels (and with additional features such as broadcast modes). The controllers additionally allow input via a 1-10V standard interface, as well as offer the ability to regulate the brightness of the channels with on-board potentiometers. Furthermore, fixed demo programs can be stored in the on-board chip.
Furthermore, individually adapted PC software allows to configure and customize the devices and their behavior. In certain cases whole mixer consoles were simulated to reproduce the look and feel of profesional hardware for a low price.
Technologies used: Hardware: Atmel Atmega8 (sender) and Attiny12/13 (receiver), output stages for 0.25W LEDs up to 10W high-power LEDs, DMX input; Firmware: designed with CodevisionAVR and AVRStudio4, sender programmed in C, receivers in Assembler.
Resources:
AVR Microcontrollers: http://www.microchip.com/design-centers/8-bit/avr-mcus
Datasheet of DMX_LED48
Datasheet of LUM_DA_4_5
USB/DMX Converter (2004-2008)
Mission goal: Hardware and Software/Firmware design and implementation of a DMX controller which can be programmed via USB. DMX is a standard bus system to control the color and brightness of individually addressable color-changing lamps (e.g., 3 channel RGB-LED lamps; up to 512 channels per bus). The device is capable of a loop-through mode to "replay" color changing programs (i.e., a series of "scenes") via a personal computer, and offers a standalone mode to replay individually designed and stored DMX scenes from the device. It further offers a real time clock (RTC) module, a scheduler to play different programs at different times of a day, and external trigger inputs, e.g., to play a program in case of an external event (such as the interruption of a light barrier).
The PC software is a standard Win32 application which helps to design DMX programs, can load programs from and to the device's EEPROM and offers convenient support for quick program creation, such as insertion of "value patterns", "mirroring of channel values" and the like.
Technologies used: Hardware: Atmel Atmega16, external EEPROM via I2C, ISP interface, FTDI FT245BM parallel/usb chipset for USB1.1 full speed mode; Firmware: programmed with CodevisionAVR, CSV-based interface design for up/download of DMX scenes; Software: Win32 application built with Borland C++ Builder 6, Visual Component Library (VCL), XML for program storage.
Resources:
FTDI USB Chip FT245BM: http://www.ftdichip.com/Products/ICs/FT245BM.htm
DMX512 Standard @ Wikipedia: https://en.wikipedia.org/wiki/DMX512
Flexible Sine Wave Generation via DDS (2005)
Mission goal: Implementation of direct digital synthesis for flexible sine wave generation with configurable fine granular frequency and amplitude. Harmonic distortion need to be decreased to a configurable upper bound, which requires a high speed digital signal processor to recalculate the sampling points of an ideal sine wave for a given frequency and amplitude on the fly. This project delivered an important component for the next generation measurement unit for electroluminescence thin films.
Technologies used: Hardware: Analog Devices Evaluation Board consisting of an ADSP-2189M with individual extensions; Firmware: developed with Code Composer Studio
Resources:
Direct Digital Synthesis @ Wikipedia: https://en.wikipedia.org/wiki/Direct_digital_synthesis
Analog Devices ADSP-2189M: http://www.analog.com/en/products/processors-dsp/dsp/adsp-21xx-processors/adsp-2189m.html
Texas Instruments Code Composer Studio: http://www.ti.com/tool/CCSTUDIO
Ethernet-enabled Ballast Controller (2005-2008)
Mission goal: Firmware design and implementation of a TCP/IP and HTTP-enabled controller for high pressure sodium lamps (and similar ballasts) that can control switching cycles of the lamp and enables monitoring of the operating conditions (hours of operation, lamp ignition cycles, looming failures etc.) over an IP network. Further features include the time synchronization via NTP, configuration via HTTP(S), network integration via DHCP, direct control via an XML-based command line interface on a raw TCP/IP socket and firmware update capabilities through a centralized Web server.
Technologies used: R3700 Rabbit controller programmed with the Dynamic C compiler, CGI and SSI (server side includes) to control and get feedback from the controller via HTTP, SSL/TLS library, XML for a direct command line interface (CLI), bootloader, firmware update via HTTP, NTP, DHCP
Resources:
Rabbit Semiconductor R3700 module: https://www.digi.com/products/embedded-systems/system-on-modules/rcm3700
Current Projects (2010+) |
Current firmware projects are company-confidential. They are centered on similar topics as described above, however -- keeping up with the times -- with much more mature technologies, including the STM32 microcontroller family and KEIL MDK toolchain. Modern platforms, such as the Cortex-M3 derivates from ST Microelectronics (STM32) are a powerful basis for challenging application areas. They come with built-in USB support, run at 128MHz clock speed and above, and offer modern interfaces to BlueTooth, WiFi and LAN controllers.
Nowadays, compared with the situation 20 years ago, a specific focus lies on the security aspects. While in previous years, it was already challenging to get a TCP/IP stack and a simple HTTP server working, this is far from being sufficient for the emerging Internet of Things (IoT).
Many current projects are based on the light-weight IP stack (lwIP). Although lwIP is a fine basis to get a system Internet-enabled, it does not offer any kind of security features. Numerous projects and commercial vendors exist that add at least SSL/TLS to lwIP, however, common features under Linux, such as IPSec, VPNs, strong authentication and the like are hardly availble.
The focus of my current projects is therefore to create a technological basis mainly for IoT devices in so-called zero trust networks.
Resources:
STM32 Nucleo-144 development board: https://www.st.com/en/evaluation-tools/nucleo-f429zi.html
Light-Weight IP Stack (lwIP): https://savannah.nongnu.org/projects/lwip/
KEIL MDK Compiler: http://www.keil.com/products/arm/mdk.asp
STM32Cube initialization code generator : https://www.st.com/en/development-tools/stm32cubemx.html
Contributions to the Community (2019+) |
espressif ESP32
- A step-by-step guide getting mutual authentication and communiation with ESP32-AT FW over REST to work with Amazon's AWS - espressif forum, February 2019.
- A step-by-step guide to securely connect ESP32-AT FW to PTC thingworx via REST interfaces - espressif forum, February 2019.
- A step-by-step guide to enable AT commands for ES32P-AT via USB on DevKitC - espressif forum, January 2019.
Offenlegung gemäß §25 Mediengesetz, Österreich: Inhaber der Website ist DDr. Florian Skopik, Himmelbauerstrasse 36, 2000 Stockerau. Ich distanziere mich von den Inhalten aller extern gelinkten Seiten und übernehme diesbezüglich keine Haftung. Alle Texte auf dieser Homepage wurden sorgfältig geprüft. Nichtsdestotrotz kann keine Garantie für die Richtigkeit, Vollständigkeit und Aktualität der Angaben übernommen werden. Eine Haftung meinerseits wird daher ausgeschlossen. Die Links zu anderen Webseiten wurden sorgfältig ausgewählt. Da ich auf deren Inhalt keinen Einfluss habe, übernehme ich dafür keine Verantwortung.