EmbeddedRelated.com

[ C Programming Techniques: integer type optimization ]

Fabien Le MentecFabien Le Mentec May 22, 20131 comment

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 Le MentecFabien Le Mentec May 7, 20132 comments

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

Stephen FriederichsStephen Friederichs April 1, 2013

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

Dr Cagri TanrioverDr Cagri Tanriover March 25, 20132 comments

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

Jason SachsJason Sachs December 27, 201230 comments

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 TanrioverDr Cagri Tanriover November 17, 20129 comments

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

Jason SachsJason Sachs September 30, 201221 comments

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

Tayyar GUZELTayyar GUZEL July 25, 20124 comments

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 DM April 6, 201213 comments

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

Gene BrenimanGene Breniman January 31, 2012

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.


Motion Sensor with Raspberry Pi and MPU6050 - Part 1

Shres LShres L November 21, 2015

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

Ricky BennettRicky Bennett August 25, 20164 comments

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 TanrioverDr Cagri Tanriover November 17, 20129 comments

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 JohanssonPeter Johansson June 14, 20133 comments

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

Ido GendelIdo Gendel September 11, 20244 comments

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

Alan C AssisAlan C Assis September 21, 2024

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

Alan C AssisAlan C Assis February 19, 2024

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

Ido GendelIdo Gendel April 17, 2024

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

Sathyanarayana HadadiSathyanarayana Hadadi July 23, 2013

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)

Nathan JonesNathan Jones March 7, 2024

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.