Deeply embedded design example - Logic replacement
Gene Breniman shows how a tiny PIC10F200 can replace a forest of discrete timing components to control six 10A H-bridges, letting firmware tune sequencing to cut EMI and reduce cost. He walks through analyzing the original RC/inverter delays, choosing the PIC, pinout and timer setup, and implementing compact assembly firmware that reproduces and improves the timing behavior. The result is fewer parts, saved board space, and better EMI control.
VHDL tutorial - A practical example - part 3 - VHDL testbench
Gene Breniman walks a complete VHDL testbench workflow for a CPLD-based data acquisition engine, from Xilinx ISE testbench generation to stimulus processes. He shows clock and SPI gating, a simulated ADC data generator tied to ADC_LRCK and ADC_BCK, and how simulation revealed a timing bug in the nvSRAM header that was then fixed in the VHDL. Practical and hands-on for verification work.
Thermistor signal conditioning: Dos and Don'ts, Tips and Tricks
Jason Sachs shows how to keep thermistor conditioning simple and accurate for embedded systems. He warns against analog linearization and excessive analog stages, and explains why ratiometric dividers, proper ADC buffering, and using the same reference voltage give better results. The post also covers thermal pitfalls like self-heating and lead conduction, plus practical tips for ADC autocalibration and polynomial temperature conversion.
Real-time clocks: Does anybody really know what time it is?
Most RTC chips still expose calendar fields rather than seconds-since-epoch, forcing embedded engineers to write ugly conversion code. Jason Sachs makes the case for offset encoding, subseconds, and an explicit snapshot feature to simplify interval math, raise precision, and avoid rare timing bugs. Read this practical take on RTC trade-offs and a short wishlist for chip makers.
VHDL tutorial - A practical example - part 2 - VHDL coding
Gene Breniman walks through the VHDL coding for a CPLD-based data acquisition engine, turning the hardware spec into a working state machine and signal generators. The article explains SPI and I2S timing choices, an internal SPI peripheral latch, and counter-based timing (seqCount and CycleCnt) used to create LRCK, BCK, SPI SCK and nvSRAM write control. It’s a practical, implementation-focused guide for embedded designers.
Tracing code and checking timings
When you cannot afford logs or to stop the CPU, GPIO toggles become a powerful real-time tracer. Richard shows how driving IO pins and watching them with an oscilloscope or logic analyzer reveals control flow, function timings, and ISR activity with very little overhead. He also explains using direct port writes and conditional compilation to keep measurements noninvasive and easy to enable or disable.
VHDL tutorial - A practical example - part 1 - Hardware
Gene Breniman walks through a practical CPLD-based data acquisition engine built for a low-power handheld instrument, focusing on hardware choices, signal flow, and pin assignments. The article explains component selection including a PCM1870 ADC, CY14B101Q2 serial nvSRAM, and an XC2C64A CPLD, and shows how the CPLD acts as an SPI sequencer and I2S clock master while minimizing microcontroller pins and power draw.
Byte and Switch (Part 1)
Driving a 24V electromagnet from a 3.3V microcontroller looks trivial, but Jason Sachs shows how that simple switch can fail spectacularly. He walks through the cause of MOSFET destruction when an inductive load is turned off, and explains the practical fixes you actually need: a flyback diode, a gate series resistor, and a gate pulldown to keep the transistor well behaved.
Good old multiplexed keypad in an embedded system
Multiplexed keypads remain the most practical input for mid-budget embedded projects, especially where hard-wired keys survive harsh environments and rough usage. Jayaraman lays out a simple, reusable approach by splitting key handling into three tiny modules: a GlanceKey quick check, on-demand Decode, and a compact state machine. The pattern cuts CPU time, runs from a timer, and boosts portability across MCUs.
VHDL tutorial - Creating a hierarchical design
Complex VHDL files quickly become hard to read and maintain. This tutorial demonstrates how to break a design into reusable entities by building a divide-by-10 component, explaining ports, sensitivity lists, and the inout usage for a toggled output. It then shows how to instantiate and chain three instances into a ÷1000 divider, with synthesis notes from compiling to an XC2C128 device.
Coding Step 2 - Source Control
Articles in this series:
- Coding Step 0 - Development Environments
- Coding Step 1 - Hello World and Makefiles
- Coding Step 2 - Source Control
- Coding Step 3 - High-Level Requirements
- Coding Step 4 - Design
When I first started out in programming, version control was not an introductory topic. Not in the least because it required a 'server' (ie, a computer which a teenaged me couldn't afford) but because it seemed difficult and only useful to teams rather than...
Designing Embedded System with FPGA - 1
Getting an embedded system running on an FPGA is much simpler than it sounds when you use Xilinx EDK and a soft processor. Pragnesh Patel walks through a beginner-friendly approach using the MicroBlaze CPU, drag-and-drop IP cores, and a Spartan-3E starter kit so you can assemble peripherals without deep VHDL knowledge. The post focuses on the EDK base system builder and first setup steps to generate a working design.
Designing Embedded Systems with FPGA-2
Turning an FPGA hardware design into a running embedded system is mostly tool work. This post walks through using Xilinx EDK to compile a base design into a .bit bitstream, generate libraries and board support packages from .mhs and .mss files, and build MicroBlaze applications with GCC. It highlights the default boot placement at 0x0 and why some apps need an explicit execution transfer.
Intro to Microcontrollers Part 2: AVR Microcontrollers
This follow-up explores getting an AVR Dragon working with an ATtiny24A, covering the necessary cables, BOM choices, and Atmel Studio setup. It walks through firmware updates, an ADC-based internal temperature sensor example using reduced-noise ADC and ISR handling, and practical debugging tips including debugWire versus ISP and high-voltage recovery. Expect candid hardware caveats like weak drive strength and 5V power quirks.
Motion Sensor with Raspberry Pi and MPU6050 - Part 1
This blog will help you build your own, low cost 3-axis motion sensor using Raspberry Pi and Invensense MPU6050.
NXP LPC17xx/40xx: Decoding the Part ID
Richard Bennett explains how the LPC17xx/40xx part ID is not a simple model number but a packed set of capability flags. The post shows how to call the NXP IAP routine at 0x1FFF1FF1 with command 54 to read the part ID, and how to decode family, group, RAM, flash and feature bits with shifts and masks, including the important interrupt-disable gotcha.
Coding Step 4 - Design
Articles in this series:
- Coding Step 0 - Development Environments
- Coding Step 1 - Hello World and Makefiles
- Coding Step 2 - Source Control
- Coding Step 3 - High-Level Requirements
- Coding Step 4 - Design
The last article in this series discussed how to write functional high-level requirements: specifications for what your software is supposed to do. Software design is the other side of the coin....
An Introduction to Embedded Development
Peter Johansson launches a beginner-friendly series that teaches embedded development from the ground up, using the TI MSP430 while keeping lessons portable to other microcontrollers. No prior embedded experience is assumed, though a solid grasp of C and basic electronics will help. The series covers tool selection, the MSP430 LaunchPad, recommended books and online resources, and a hands-on roadmap toward writing your first program.
Embedded Software Creation II - European Normative & Legislation
In this post I will explain the European Normative. I will answer the main questions and I will be open to answer all the doubts any of you could have. Please leave a comment and I will answer if i could.
Why I need to look and accomplish some standards?The main reason is if you want to comercialize the product in the European Union, if exists any European Directive that cover the product, the product must be marked with the CE mark. For USA it work in the same way by the...
Layout recomendations and tips for best performance against EMC
Good PCB layout will prevent many EMC headaches before you even power the board. Maykel Alonso offers a practical checklist covering component and feed analysis, package and PCB choices, placement, routing, and via rules. The post focuses on concrete, low-effort measures like preferring SMD parts, using a 4-layer FR-4 stack with dedicated ground and power planes, and keeping return paths tight to cut emissions and susceptibility.
NXP LPC17xx/40xx: Decoding the Part ID
Richard Bennett explains how the LPC17xx/40xx part ID is not a simple model number but a packed set of capability flags. The post shows how to call the NXP IAP routine at 0x1FFF1FF1 with command 54 to read the part ID, and how to decode family, group, RAM, flash and feature bits with shifts and masks, including the important interrupt-disable gotcha.
An Introduction to Embedded Development
Peter Johansson launches a beginner-friendly series that teaches embedded development from the ground up, using the TI MSP430 while keeping lessons portable to other microcontrollers. No prior embedded experience is assumed, though a solid grasp of C and basic electronics will help. The series covers tool selection, the MSP430 LaunchPad, recommended books and online resources, and a hands-on roadmap toward writing your first program.
LCD Control with an MCU
Dr Cagri Tanriover set out to add a cheap 2x16 JHD162A LCD to an MCU project and ran into surprisingly opaque datasheets and quirky behavior. This post walks through the wiring, a reliable initialization sequence, contrast troubleshooting, and practical scrolling and CGRAM tips that saved debugging time. Read it for hands-on fixes and gotchas that datasheets often omit.
Motion Sensor with Raspberry Pi and MPU6050 - Part 1
This blog will help you build your own, low cost 3-axis motion sensor using Raspberry Pi and Invensense MPU6050.
Handling Translations in an Embedded Project
A brief walkthrough on how to handle human language translations in a low level C application. Some options are listed, each with advantages and disadvantages laid out.
Kind of Buggy! The state machine fantastic//
Richard Dorfner shows a compact way to debug an intermittent homing failure in a Pan/Tilt camera by logging the last 30 state transitions in a circular buffer. He tags each entry with a function identifier and uses breakpoints to walk the recorded sequence backwards. That reveals a timing interaction between a 100 ms periodic flag and the homing code that stopped the motor state machine. The method is low-overhead and ideal for single-threaded embedded systems.
How 5G impacts future IoT development
The Internet of Things (IoT) applications are ubiquitous today. IoT is used in almost every industrial, commercial, and consumer market segment, including autonomous driving, smart factories, automation and preventive maintenance, smart homes, smart cities, security, asset tracking, supply chain management, agriculture, farming, healthcare, smart medicine and remote surgery, augmented reality applications, activity monitoring, and more. The three most promising uses of IoT are smart manufacturing, autonomous driving, and healthcare, particularly remote surgery.
When a Mongoose met a MicroPython, part II
In the first part of this blog, we introduced this little framework to integrate MicroPython and Cesanta's Mongoose; where Mongoose runs when called by MicroPython and is able to run Python functions as callbacks for the events you decide in your event handler. Now we add MQTT to the equation, so we can subscribe to topics and publish messages right from MicroPython.
Bellegram, a wireless DIY doorbell that sends you a Telegram message
A wireless button that uses the M5 STAMP PICO and Mongoose to send a Telegram message when pressed. The code is written in C
Embedded Software Creation II - European Normative & Legislation
In this post I will explain the European Normative. I will answer the main questions and I will be open to answer all the doubts any of you could have. Please leave a comment and I will answer if i could.
Why I need to look and accomplish some standards?The main reason is if you want to comercialize the product in the European Union, if exists any European Directive that cover the product, the product must be marked with the CE mark. For USA it work in the same way by the...


















