Follow our illustrated blog on Embedded Software Architecture

How to build a hybrid solar/wind energy harvester?

Real-time scheduling: no locks, please.

In a previous post, the assignment of priorities was discussed. There are a couple of axioms involved. One must mention at least these two: No resource sharing, locks or busy-waits. Static priorities (i.e. the task with the highest static priority that is runnable immediately preempts all other tasks, and the task priority does not change […]

Share

ADC

In order to (attempt to) control things, we need to find out what is going on, we need to measure and quantize: Sensors are the senses of electronics. Without senses, we are deaf and blind. Most micro-controllers we find today, incorporate an Analog-to-Digital-Converter (ADC) peripheral. This ADC enables us to link electronic sensors, which output […]

Share

AC generation experiments

Power with green inspiration. A couple of weeks ago, an electricity blackout in our neighborhood was announced by the power company. We thought this was the ideal time for some experimentation with ‘green’ off-the-shelve products and also explain a bit about the inspiration for the energy harvester project. The various “domain knowledge gathering” experiments (e.g. […]

Share

Real-time scheduling: assigning priorities

Real-time scheduling in practice In one of our previous items we talked about Real-time scheduling. Now, we want to show how priorities could be assigned in practice and how deterministic system response can be designed. Deterministic response needs to take into account the worst case scenario: everything is happening at once, at the worst possible […]

Share

Debounced Buttons

A button-driven handbrake Buttons (or switches, or keys) are quite common in the world of the embedded systems. In most cases buttons trigger a software action and – in our context – we will use buttons for configuring the settings of the charge controller. We can also use the buttons as a debugging utility. The […]

Share

Real-time scheduling

Definition A real-time operating system is a system that schedules execution of tasks in a timely deterministic manner, and is scalable. The scheduler follows a set of algorithms that determine which task executes at each moment. Preemptive priority-based scheduling is a mandatory property of the operating systems we evaluate for use in our application. A […]

Share

Driving LEDs by GPIO: finally resolved!

Introduction Probably one of the most fascinating things you had to do in your early embedded career was controlling some LEDs by means of GPIO (General Purpose I/O). This – of course – is so easy i.e. until your project manager passes by: “I want this LED to blink a little faster” “Why is the […]

Share

MCU pin configuration, GPIOs and a word on software architecture

Basic peripheral setup: pin configuration All MCUs have pins. They might come in different package types such as QFP (Quad Flat Package – Figure left) or BGA (Ball Grid Array – Figure right). But for us, embedded software engineers, pins or balls, we don’t really mind: MCUs have pins and we need to configure them. […]

Share

Operating systems for embedded systems

Loop (no OS) Description The application is one control task which is typically implemented as a delayed loop or as an event-driven loop. Locking (e.g. by disabling interrupts) is usually required to protect the data that is shared between the task and the Interrupt Service Routines (ISR’s). Except e.g. when events are sent with the […]

Share

The energy harvester is ready for iteration 1

Iteration 0 overview A few months passed since the start of our energy harvester project and, given our limited project time, we’re making a steady progress. Implementing a new product in a new domain introduces technological uncertainties, and therefor, we proposed a top-down, bottom-up development approach which is part of an iterative engineering process. At […]

Share