EmbeddedRelated.com

Getting Started With CUDA C on an Nvidia Jetson: GPU Architecture

Mohammed BillooMohammed Billoo March 28, 2024

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).


Understanding Microchip 8-bit PIC Configuration

Luther StantonLuther Stanton March 26, 20244 comments

The second post of a five part series picks up getting started developing with Microchip 8-bit PIC Microcontroller by examining the how and why of processor configuration. Topics discussed include selecting the oscillator to use during processor startup and refining the configuration once the application starts. A walk through of the code generated by the Microchip IDE provides a concrete example of the specific Configuration Word and SFR values needed to configure the project specific clock configuration.


Using (Apache) NuttX Buttons Subsystem

Alan C AssisAlan C Assis March 22, 2024

You do not need to poke GPIO registers to read switches in NuttX, the OS provides a Buttons subsystem that delivers named events, multi-button support, and optional software debouncing. This post walks through wiring two breadboard buttons on a Raspberry Pi Pico, enabling the input and buttons drivers via menuconfig, building nuttx.uf2, and testing the buttons over the usbnsh serial console. It highlights why a simple hardware debounce is still a good idea.


Getting Started With CUDA C on an Nvidia Jetson: Hello CUDA World!

Mohammed BillooMohammed Billoo March 13, 2024

In this blog post, I introduce CUDA, which is a framework designed to allow developers to take advantage of Nvidia's GPU hardware acceleration to efficiently implement certain type of applications. I demonstrate an implementation to perform vector addition using CUDA C and compare it against the traditional implementation in "regular" C.


Getting Started with the Microchip PIC® Microcontroller

Luther StantonLuther Stanton March 11, 2024

This first post of a five part series looks at the available hardware options for getting started with Microchip 8-bit PIC® Microcontroller, explores the MPLAB® X Integrated Development Environment and walks through setting up a project to expose the configured clock to an external pin and implement a single output GPIO to light an LED.


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.


Creating a GPIO HAL and Driver in C

Jacob BeningoJacob Beningo February 28, 20241 comment

Creating a GPIO Hardware Abstraction Layer (HAL) in C allows for flexible microcontroller interfacing, overcoming the challenge of variability across silicon vendors. This method involves reviewing datasheets, identifying features, designing interfaces, and iterative development, as detailed in the "Reusable Firmware" process. A simplified approach prioritizes essential functions like initialization and read/write operations, showcased through a minimal interface example. The post also highlights the use of AI to expedite HAL generation. A detailed GPIO HAL version is provided, featuring extended capabilities and facilitating driver connection through direct assignments or wrappers. The significance of a configuration table for adaptable peripheral setup is emphasized. Ultimately, the blog illustrates the ease and scalability of developing a GPIO HAL and driver in C, promoting hardware-independent and extensible code for various interfaces, such as SPI, I2C, PWM, and timers, underscoring the abstraction benefits.


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.


Using GPIO in (Apache) NuttX RTOS

Alan C AssisAlan C Assis January 21, 20247 comments

Blinking an LED is the embedded Hello World, and this tutorial walks through using GPIOs on NuttX running on a Raspberry Pi Pico. It shows how to enable the GPIO driver and example in menuconfig, build and flash the nuttx.uf2, and use NSH gpio device files to read and write pins. The post also explains polling versus interrupt-driven inputs and the pull-up/edge setup needed for button interrupts.


Getting Started with NuttX RTOS on Three Low Cost Boards

Alan C AssisAlan C Assis November 27, 20238 comments

You can get Linux-like power on cheap microcontroller boards using NuttX, not a full Linux system. This article walks through building and flashing NuttX on three low-cost targets: Raspberry Pi Pico (RP2040), ESP32-DevKitC, and STM32F4Discovery, covering SDKs, toolchains, and serial access. Follow the provided commands to configure, compile, and connect to the NuttShell so you can start experimenting with NuttX quickly.


Introduction to Microcontrollers - Further Beginnings

Mike SilvaMike Silva September 1, 20134 comments

Mike Silva walks through the CPU plumbing every embedded engineer needs to know before writing their first LED blinky. The post explains registers (data, address, stack pointer, link), the fetch-execute cycle, and the main instruction classes such as arithmetic, logic, shifts, branches, and call/return mechanics. Read this to see how C maps to CPU operations and why stack versus link register choices matter.


Absolute Beginner's Guide To Getting Started With Raspberry Pi

Steve BranamSteve Branam July 12, 2020

Getting started with Raspberry Pi can feel overwhelming. This guide strips the noise and shows the simplest path from unboxing to a working desktop. It recommends buying a preloaded NOOBS microSD to avoid imaging hassles, lists exact parts and suppliers, and walks through booting, recovery, and making a backup. If you want embedded electronics it also lists starter parts and ESD safety tips.


Arduino robotics #1 - motor control

Lonnie HoneycuttLonnie Honeycutt October 13, 20133 comments

Clusterbot is Lonnie Honeycutt's first autonomous robot, built on a tight budget to teach practical motor control. This post explains why you cannot drive motors directly from an Arduino, how to wire and enable the Toshiba TB6612FNG motor driver, and offers hands-on PWM and calibration tips for getting smooth motion from cheap Mabuchi FA-130 toy motors.


Introduction to Microcontrollers - Buttons and Bouncing

Mike SilvaMike Silva October 26, 20133 comments

Mechanical buttons lie to your microcontroller, producing bounces and occasional noise that look like multiple presses. Mike Silva walks through practical ways to represent buttons, simple and robust software debounce strategies, and how to convert states into single-use events. The post includes ready-to-use C patterns: N-sample filters, shift-accumulator filtering, per-button data structures, and keypad debouncing examples.


Introduction to Microcontrollers - More On GPIO

Mike SilvaMike Silva September 13, 20134 comments

Polarity matters: an output '1' does not always mean an LED lights, and inputs are just as picky. This post walks through LED driving basics, pull resistors for buttons, and practical bitwise techniques to read and write individual GPIO pins on AVR and STM32 boards. It also explains why polling rates and mechanical bounce make button handling trickier than it looks and what to watch for next.


Visual Studio Code Extensions for Embedded Software Development

Jacob BeningoJacob Beningo March 22, 20238 comments

Visual Studio Code can be a solid embedded development environment, if you equip it with the right extensions. Jacob Beningo walks through tools for Cortex-M debugging, register and RTOS inspection, build system support, formatting, linting, and vendor-specific workflows. It is a practical tour of the extensions that help VS Code feel much less like a general-purpose editor and more like an embedded IDE.


Introduction to Microcontrollers - Button Matrix & Auto Repeating

Mike SilvaMike Silva November 12, 2013

Wiring every button to its own GPIO gets expensive fast, so Mike Silva shows how to read a 4x4 keypad with only eight pins using matrix scanning. He then builds the raw scan into a debounced state machine, adds auto-repeat, and even extends it to a two-stage repeat rate. The result is a practical, code-heavy walkthrough for turning a keypad into clean button events on AVR and STM32.


Introduction to Microcontrollers - 7-segment displays & Multiplexing

Mike SilvaMike Silva August 14, 20141 comment

Seven-segment displays can eat dozens of GPIO pins and dozens of resistors, but multiplexing trades pins for time and cuts component count dramatically. Mike Silva shows a hands-on AVR C implementation with segment encoding, a 100 Hz display scan ISR, several integer-to-digit conversion techniques, and software workarounds for messy pin mappings. He also demonstrates a timer "leapfrog" to reuse one timer for two tasks and compares performance so you can choose the best approach for your MCU.


Cortex-M Exception Handling (Part 1)

Ivan Cibrario BertolottiIvan Cibrario Bertolotti November 28, 20152 comments

This article describes how Cortex-M processors handle interrupts and, more generally, exceptions, a concept that plays a central role in the design and implementation of most embedded systems.


The Least Interesting Circuit in the World

Jason SachsJason Sachs October 7, 20185 comments

Jason Sachs pulls apart the humble power-on reset and shows why the common RC-and-Schmitt trick is the least interesting but most dangerous circuit in your design. He walks through voltage thresholds, brown-out reset behavior, and how slow or noisy Vdd ramps can let parts start in indeterminate states. Read this for practical rules on choosing supervisors, comparators, and reset pulse timing to ensure reliable embedded startup.