Zephyr and MCUBoot
Project setup, build configuration, and testing of MCUBoot on Zephyr using the Renode emulator and an nrf52
Project setup, build configuration, and testing of MCUBoot on Zephyr using the Renode emulator and an nrf52
Monte-Carlo simulation for exploring how shuffling strategies affect outcomes in the game of War
Setting up a bare-metal port of MCUBoot on an nrf52 and simulating in Renode
Emulating and debugging a Cortex-M4 MCU with Docker + VSCode + OpenOCD + GDB + Renode
Guide to integrating the SCPI-Parser library into embedded projects
Explanation of C(V) and a list of resources for designing
A fast, efficient, and accurate method to use thermistors in embedded systems.
A Python library for analyzing step and pulse responses, inspired by Matlab’s pulse and transition metrics.
Libraries and Custom Strong Types
Effortless CLI options and config management using Pydantic and Dataclasses.
Reproducible and reliable KiCad environments using Docker
Using ATLC2 to improve launch conditions
SIMC tuning and why TECs are great
Quick guide to using KiCad, kicad-xyrs, and kicad-make with MacroFab for PCB assembly.
Semantic Versioning for Electronics Design
Parametric Electro-Magnetic Optimization Workflow with OpenEMS, Docker, and Python
How to structure OpenSCAD projects for reuse and scalability, using OPENSCADPATH, Makefiles, and modular design to manage complexity.
A comparative analysis of total pricing for small-run PCBs from OshPark, PCBWay, and JLCPCB, with a quick overview of U.S. electronics tariffs.
Guide to installing and using OpenEMS FDTD simulator on Ubuntu with Docker
Comparison of tools for generating descriptive timing diagrams
How to wrap a Python CLI in a basic GUI and package it as a standalone Windows executable for firmware updating and field diagnostics.
Understanding KiCad’s origin and axis settings for scripting, plugins, and file exports
The KiCad Testpoints PCM plugin generates test point reports directly from KiCad — filling a gap that most EDA tools handle poorly or not at all.
How ElectroOptical Innovations approaches photoreceiver testing and characterization, with a walkthrough of the AN-1 testing methodology.
How to write a custom KiCad DRC rule to enforce JLCPCB’s minimum trace spacing requirement for boards with low copper coverage.
Why pin 1 markings matter for PCB assembly, and how assembly layers and silkscreen reference designator placement reduce pick-and-place errors.
Solving the 2D rectangle packing problem in Python using the rectpack library, with OpenSCAD for visualizing layouts and generating CNC tool paths.
Using vectors as pseudo-objects in OpenSCAD to write polymorphic, generic algorithms — a practical pattern for more maintainable parametric designs.
A practical approach to preparing SVG files exported from OpenSCAD for laser cutting, including direct XML manipulation to fix common export issues.
Hard-won lessons for writing reliable MCU device drivers — the setup process, debugging methodology, and habits that prevent time-wasting bring-up mistakes.
How to reliably identify multiple identical FTDI USB-to-serial adapters in a test jig using udev rules and device serial numbers.
How to use FreeCAD’s Python scripting interface from an AppImage installation, including setting up the environment to call FreeCAD functions from outside the GUI.
Applying semantic versioning principles to hardware design to communicate revision scope, signal compatibility changes, and manage manufacturing releases.
Evaluating the best library for fixed point algorithm development & testing
How to accelerate new hardware revisions by treating PCB designs as modular, reusing layout sections, schematics, and form factors across product generations.
Part 2 of a series on automated test jig design, covering fixtures, probe hardware, and sourcing off-the-shelf components for electronics testing.
Requirements, design goals, and resource guide for building standardized automated electronics test jigs for low-to-medium production volumes.
An Exploration of Timing Diagram Tools
Getting useful I2C and SPI debug capability from a $10 FX2 logic analyzer using Sigrok — a portable option when away from the lab.
How to use the KiCad PCBNew scripting API outside the built-in terminal, loading boards with LoadBoard and enabling proper unit tests for PCB plugins.
When to move reference designators off the silkscreen onto the fabrication layer in tight KiCad designs, with a Python script to automate the cleanup.
Why Jupyter notebooks are the right tool for photon budgets and optical feasibility analyses, with a practical silicon thermopile measurement example.
Generating Beautiful Jupyter Notebook Reports
Overview of device control approaches for embedded systems, covering Python-based hardware interfaces and design patterns.
A device control dashboard for embedded systems, bringing together Python UI tools for hardware monitoring and control.
A functional teststand design overview — how to structure automated electronics testing for embedded systems.
Recommended directory structure and setup for embedded firmware projects, with an example layout for clean organization.
A case for using LaTeX for technical documents — what it is, why physicists swear by it, and how to get started writing structured reports.