[ C Programming Techniques: integer type optimization ]
Microcontroller integer width can make or break ISR performance on AVR. In this post Fabien Le Mentec compares using uint8_t versus unsigned int for a timer counter on an ATmega328P and shows how the smaller type cuts instruction and cycle count in the ISR. He also walks through the trade offs: reduced capacity, volatile access costs, and simple portability fixes such as uint_fast8_t or an architecture-aware typedef.
Interfacing LINUX with microcontrollers
Fabien presents a practical pattern: put Internet- facing logic on a Linux board and keep time-critical I/O on a microcontroller, using a Raspberry Pi and a Teensy 3.0. He introduces MASL, a reusable userspace library that hides master-slave details and shows how to use userspace SPI, sysfs GPIO and epoll for programming, reset and event-driven signaling with working code examples.
Debugging with Heartbeat LEDs
Heartbeat LEDs are one of the simplest and most effective debugging tools for embedded systems. Stephen Friederichs explains how a visible 1Hz blink from your main loop or RTOS idle task proves the MCU is executing and quickly highlights problems like failed programming, watchdog resets, infinite loops, or clock misconfiguration. He also explains why using hardware timers instead of delay loops keeps the blink nonblocking and accurate.
A Working Real Time Clock (RTC) Implementation
When the GPRS modem would not provide network time, Dr Cagri Tanriover implemented a compact hardware real time clock using the NXP PCF8523T. The post highlights why automatic backup switching, I2C integration, BCD register handling, and alarm/timer features matter for embedded timestamps. It also shows battery-life math with a CR1225 and offers practical build notes after an initial ESD-related failure.
How to Estimate Encoder Velocity Without Making Stupid Mistakes: Part I
Encoder velocity estimation is easy to get wrong, and Jason Sachs walks through the traps engineers fall into. He demolishes the common advice to time between encoder edges, shows how encoder quantization and state-width errors break that approach, and argues for fixed-rate sampling with sensible filtering for most control uses. Part II will cover more advanced estimators for higher performance needs.
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.
Chebyshev Approximation and How It Can Help You Save Money, Win Friends, and Influence People
Are expensive math libraries or huge lookup tables eating CPU and flash on your microcontroller? In this practical guide Jason Sachs shows how Chebyshev polynomial approximation (with range reduction, splitting, and small interpolated tables) can give near-minimax accuracy while using far less code and runtime. The post compares Taylor series, plain and interpolated tables, and explains how to fit empirical sensor data and evaluate coefficients efficiently.
How to install Ubuntu 12.04 Precise, Xubuntu-desktop and Open JDK-7 on Beagleboard Rev. C2
Want to run Java GUI apps on a BeagleBoard Rev C2? This hands-on post walks through installing Ubuntu 12.04, adding the Xubuntu desktop, and getting OpenJDK-7 running, including SD flashing, u-boot and network setup, display and audio tweaks, and a fix for XFCE login ownership problems. Follow the exact commands and small workarounds the author used to get a monitor, sound, and Java VM working on the board.
Boot sequence for an ARM based embedded system -2
DM walks through the concrete steps of an ARM system startup, from the reset vector to handing control to C. The post explains what the early assembly reset code must do: set system registers, initialize stacks, set up the MMU, copy .data and clear .bss, and remap the vector table into RAM for faster interrupts. It finishes with external memory bring-up and loading an OS image.
Lightweight hardware abstraction
Hardware pin reassignments turned a small firmware tweak into a tangled mess of #ifdefs and scattered port references. Gene Breniman shows how a lightweight hardware abstraction, implemented with per-board include headers and meaningful macros like MODE_LED and LED_ON, cleans up the code and makes it easy to target multiple prototypes. The post emphasizes keeping changes local to configuration headers to reduce validation scope and maintenance.
Getting Started With CUDA C on an Nvidia Jetson: GPU Architecture
In the previous blog post (Getting Started With CUDA C on Jetson Nvidia: Hello CUDA World!) I showed how to develop applications targeted at a GPU on a Nvidia Jetson Nano. As we observed in that blog post, performing a calculation on a 1-D array on a GPU had no performance benefit compared to a traditional CPU implementation, even on an array with many elements. In this blog post, we will learn about the GPU architecture to better explain the behavior and to understand the applications where a GPU shines (hint: it has to do with graphics).
MSP430 LaunchPad Tutorial - Part 3 - ADC
Enrico Garante walks through practical ADC use on the MSP430G2231, from a single-channel read that toggles LaunchPad LEDs to multi-channel repeated conversions. The post includes complete code, an ADC10 interrupt example to wake from low-power mode, and a DTC-backed array transfer so you can collect samples without polling. A short CCS debugging tip shows how to watch ADC variables while running.
Getting Started With CUDA C on an Nvidia Jetson: A Meaningful Algorithm
In this blog post, I demonstrate a use case and corresponding GPU implementation where meaningful performance gains are realized and observed. Specifically, I implement a "blurring" algorithm on a large 1000x1000 pixel image. I show that the GPU-based implementation is 1000x faster than the CPU-based implementation.
Flood Fill, or: The Joy of Resource Constraints
When transferred from the PC world to a microcontroller, a famous, tried-and-true graphics algorithm is no longer viable. The challenge of creating an alternative under severe resource constraints is an intriguing puzzle, the kind that keeps embedded development fun and interesting.
Make Your Own MCU Boards (2023 Teardown Conference)
Ditch the development boards! Products like the Nucleo development boards serve a wonderful purpose, but they’re ill-suited for projects that need to be small and cheap, such as hobby projects or products just beginning a production run. In this talk (a recording from the 2023 Teardown Conference), you’ll learn how to put a microcontroller or other custom circuit on a PCB a little larger than a stick of gum for less than $3 a board.
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.
Debugging with Heartbeat LEDs
Heartbeat LEDs are one of the simplest and most effective debugging tools for embedded systems. Stephen Friederichs explains how a visible 1Hz blink from your main loop or RTOS idle task proves the MCU is executing and quickly highlights problems like failed programming, watchdog resets, infinite loops, or clock misconfiguration. He also explains why using hardware timers instead of delay loops keeps the blink nonblocking and accurate.
Android for Embedded Devices - 5 Reasons why Android is used in Embedded Devices
Android may seem like a phone OS, but it now solves real embedded product problems. This post outlines five practical reasons engineers pick Android for devices with displays, from built-in touch and GUI frameworks to simplified camera and wireless APIs. It also covers vendor BSP and driver support, a large developer pool, and how Android speeds prototyping by reusing phones or tablets as HMIs or processors.
Stand-by or boot-up
Many factors affect the usability of devices - a key one is how long it takes to start up.
Embedded Systems - free EdX course by UT-Austin!
Lonnie shares a free edX Embedded Systems course from UT Austin that teaches hands-on firmware using the TI Tiva Launchpad. The class centers on practical projects, culminating in an arcade-style shooter built with an 80 MHz ARM Cortex-M4 board and inexpensive peripherals like the Nokia 5110 display. It’s a low-cost path to move from hobby tools to industry-style microcontroller development.
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.
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.
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.
My friend, the compiler
Modern compilers were given great powers, but we don't always know where and when they'll use them. This may cause us to either worry needlessly or trust unjustifiably, as demonstrated by a little example in this post.
How to use analog input (ADC) on NuttX RTOS
Hands-on walkthrough showing how to read analog voltages on a Raspberry Pi Pico running NuttX RTOS. The post explains RP2040 ADC basics, which GPIO channels and the internal temperature sensor are exposed, and how rp2040_adc_setup creates /dev/adc0. It also shows the menuconfig options, build and UF2 flash steps, a simple potentiometer test, and a note about RP2040 ADC spike artifacts.
Using (Apache) NuttX USERLED Subsystem
Controlling an LED with raw GPIO works, but NuttX's USERLED subsystem makes it cleaner and portable. This post walks through enabling the LED driver in menuconfig, mapping the RaspberryPi Pico LED in the board files, and using the /dev/userleds device with printf to set up to 32 LEDs with a single write. It finishes with a hands-on challenge to expand the setup to eight LEDs on a breadboard.
Blinkenlights 2.0
Nothing spells old movie computers like a panel of randomly blinking lights, but in fact, these so-called "blinkenlights" can be valuable indicators - especially in embedded systems where the user interface must be minimal, small and cheap. Control of these lights can be achieved using a very simple, real-time interpreted script, and this kind of solution may be extended to other and more complex embedded tasks.
Essential Elements to choose a right Processor
Choosing the right processor can feel overwhelming, especially after a project with many viable parts. In this post Sathyanarayana Hadadi condenses practical criteria into a usable checklist for embedded designers, covering speed, hardware accelerators, peripherals, memory, power, security, availability, and tooling. Read on to turn a long shortlist into a confident selection and avoid costly redesigns.
Make Your Own MCU Boards (2023 Teardown Conference)
Ditch the development boards! Products like the Nucleo development boards serve a wonderful purpose, but they’re ill-suited for projects that need to be small and cheap, such as hobby projects or products just beginning a production run. In this talk (a recording from the 2023 Teardown Conference), you’ll learn how to put a microcontroller or other custom circuit on a PCB a little larger than a stick of gum for less than $3 a board.





















