Hi, my name is Cezary Sałbut, and on this site I present all the professional activities I have ever been involved in. It should give you a picture of my skills and experience, so if you are looking for embedded software developer, this site may help you to choose me as your new employee.

I got B.Sc. degree in Electrical and Computer Engineering from Warsaw University of Technology (WUT) in 2011. Places I worked in, and projects I worked on, are described below in roughly chronological order.

You can contact me on following address:


Just remove all digits, and replace _AT_ and _DOT_ with appropriate characters.

Institute of Aviation — internship

My first experience in the field of professional engineering was an internship in the Institute of Aviation during 2009 summer holidays. In the Institute I worked on a radar altimeter used in trainer jet aircraft PZL I-22 Iryda. I migrated the old project sources, from various software and paper documentation, into consistent project in Altium Designer environment. I did also some maintenance work on the project: upgraded numerous electronic elements to their newer versions, and made a few minor upgrades in the altimeter circuit.

Skills learned and practiced

  • Basics of PCB design

  • Basics of aircraft electronics technology

Tools used

  • Altium Designer

  • AutoTRAX

Bachelor’s thesis

The aim of my bachelor’s thesis was to design and build a digitally controlled switched-mode power supply (SMPS), with output voltage adjustable over a wide range. The device had a classical flyback topology, and was controlled by an STM32 microcontroller. The processor was responsible not only for controlling digital user interface, but also for the analog energy conversion circuit to a serious extent. Even switching a power MOSFET on and off was commanded by the microcontroller in very precisely calculated moments. In the voltage regulation process, software PID regulator running on the microcontroller was used.

An important advantage of the power supply was the ability to convert 230V mains voltage to low DC voltages (even below 1V) with energy efficiency far exceeding capabilities of linear regulators.

The user interface consisted of a simple, hand-made 4x4 keyboard, and well recognized, 2x16 alphanumerical LCD display, based on HD44780 driver. For this simple I/O devices I designed and built multi-screen interface through which user could navigate, change settings and read working parameters of the power supply.

The entire program was written in the "superloop" paradigm, with just three hardware interrupts incorporated. The critical interrupt came from ADC. The PID regulator was working in its service routine. The output of the regulator had been supplied to a hardware timer, which in turn generated PWM waveform to drive the power MOSFET.

The second most important interrupt was generated by the system timer (SysTick). I used it to generate 1ms-long time intervals. It was useful for easy implementation of the keyboard’s autorepeat feature (hold a proper key for a while, and the voltage goes up smoothly), and refreshing data on the LCD with appropriate frequency.

The interrupt of the lowest priority was assigned to the keyboard itself, so every time a key had been pressed, the processor received an interrupt. This way of handling keyboard input was necessarry to respond immediately to user’s activity, whithout need to poll the keyboard all the time with unreasonable frequency.

In the main program thread, all the interface actions took place. It included actual reading state of the keyboard, navigating the user menu, executing actions demanded by user and printing informations on the display.

Skills learned and practiced

  • Flyback SMPS design.

  • SMPS PCB design.

  • Embedded software design.

  • Programming STM32 microcontrollers.

  • Implementing and tuning PID regulator.

Tools used

  • LTSpice

  • CadSoft Eagle

  • C

  • Eclipse


  • OpenOCD

  • Doxygen


img/IMG017.jpg img/IMG022.jpg





img/DS0026.png img/DS27_mod.png

img/DS0029.png img/DS0031.png

STM32 programming course

In 2011 spring semester, Student’s research group on microsystems "Onyks", in cooperation with STMicroelectronics and Kamami.com on-line store, conducted an introductory course on programming STM32 microcontrollers for WUT students. As Onyks member I was one of organizers and lecturers.

The course consisted of nine sessions:

  • S01: Development environment, General Purpose Input-Output.

  • S02: Hardware timers, introduction to hardware interrupts and Nested Vectored Interrupt Controller.

  • S03: Hardware timers as PWM generators and receivers, external interrupts and events controller.

  • S04: USART controller.

  • S05: ADC, DMA controller.

  • S06: SPI controller.

  • S07: Flash memory controller, USART bootloader.

  • S08: Power-saving modes, watchdogs, Real-Time Clock.

  • S09: Introduction to developing bigger and more complex embedded programs. Software engineering, compiler optimizations, MISRA-C, static analysis tools, documentation generators, revision control systems (everything covered very briefly, of course).

  • Complete course zipped is available for download.

I prepared and lectured sessions S03 and S09. The third session followed common scheme: a piece of peripheral hardware had been introduced in the lecture, and then discussed in a few various software examples. Every attendee had an evaluation board, on which he, or she, ran and modified example programs.

The ninth session however, was quite different, as its purpose was to outline general issues related to embedded software development, which could not have been covered in our introductory course. In this session I decided to present techniques and tools which are helpful and widely used in embedded systems programming, and are not mentioned in Electrical and Computer Engineering studies on my faculty.

The course was a big success. So many students signed in, that we had to divide them into two groups. Additional success was that our course initiated cooperation between STMicroelectronics and Polish universities.

Official website of the course (entirely in Polish).

Skills learned and practiced

  • Public speaking.

  • Creating educational materials.

  • Teamwork.

  • Programming STM32 microcontrollers.

Tools used

  • C

  • Atollic TrueSTUDIO

Onyks STM32 course Onyks STM32 course Onyks STM32 course Onyks STM32 course --- credits: Michał Waśkiewicz

Unmanned Aerial Vehicles Polska sp. z o.o.

Since June 2010 I have been working in Unmanned Aerial Vehicles Polska sp. z o.o. I design and write embedded software for a small unmanned airplane, which is to be used in civilian aerial photography. In this company I created:

  • Airplane’s embedded software architecture and design.

  • Significant amount of the airplane’s software implementation: "backbone" of the program, communication stacks, ground commands execution, preflight procedures, telemetry, diagnostics, drivers of propulsion motor and servomechanisms.

  • Port of lwIP TCP/IP stack for RL-RTX operating system.

  • Design and implementation of STANAG 4586 communication protocol for microcontrollers. The implementation is easily scalable and its memory footprint is only as small as needed to achieve desired airplane’s functionality.

  • Software library implementing CANaerospace communication protocol. Design of the library allows development of new CANaerospace devices to be fast, easy, and not prone to programming errors. The implementation is also highly modular and scalable.

  • Embedded program trace, which provided real-time view on internals of running program, including all RTOS context switches and IRQs occurences. Tracing is possible even in flight.

  • Some simple hardware devices. I designed a few small circuits and PCBs for them, e.g. camera trigger driven by a PC’s speakers output, intelligent driver for servomechanisms, and PCB with double physical interface to CAN bus.

  • Documentation for all of the above.

Skills learned and practiced

  • Developing requirements specification for software and hardware.

  • Developing architecture and design of an embedded program.

  • Programming STM32 microcontrollers.

  • Using RTOS in embedded software.

  • Communicating with PC through Ethernet and TCP/IP stack running under RTOS on a microcontroller.

  • Implementing STANAG 4586 communication protocol on a microcontroller and using it in embedded application.

  • Implementing CANaerospace communication protocol on a microcontroller and using it in embedded application.

  • Teamwork.

Tools used

  • C

  • MDK-ARM (formerly Keil MDK)


  • Mercurial RCS

  • Eclipse

  • Doxygen

  • Trac: wiki, project management and bug-tracking

  • LaTeX

  • CadSoft Eagle

  • Cygwin

  • Resource Standard Metrics




img/doxy_2.png img/doxy_6.png




SensorBox is a handheld measurement device. It was started as a university project on a course "Internet Measurement Systems", in team with Michał Paszta, and under supervision of M.Sc. Grzegorz Kasprowicz. I contributed to the project by making some general design decisions, designing the power management system, and routing about a half of the PCB. Currently we are developing embedded software for the device with aim to make practical, commercial use of the SensorBox.

SensorBox is a battery-powered device equipped with a GPS receiver and a GSM module. Its purpose is to do measurements with sensors attached to it, then append geographical position to the measurement result, and send this data via GPRS connection to the central server. Data from sensors can be then visualised in Google Earth, for example. It is irrelevant how many SensorBoxes work in the same time, and how far they are placed from the server and from one another, as they use GSM network to communicate with the server.

For now, the project is completely open-source. Embedded software of the SensorBox is hosted on BitBucket, and the hardware design files can be found on the Open Hardware Repository.

Skills learned and practiced

  • PCB design.

  • Programming STM32 microcontrollers.

  • Building from scratch freeware development environment for STM32 microcontrollers.

Tools used

  • Altium Designer

  • C

  • gcc

  • Eclipse

img/sbox1.png img/sbox2.png img/sbox3.png