# Update week 2 training section _Exported on 9/24/2025 at 11:04:29 EDT from Cursor (1.5.11)_ --- **User** in the training section for week2, make a new subsection called how to solder (almost) anything and add the videos for: -- week2/training/wire-solder and explain that you start with one edge as you see in the video to keep the part in place, then solder the rest easy by keeping your wrist stable and the solder tip on the pad to heat it up with part, and slowly bringing in solder -- week2/training/apply-solder-paste with week2/training/place-microcontroller and week2/training/heat-gun-paste (in that order side by side in one row of videos) and explain that you put the solder paste first, place the part , heat up for each video put a caption under it, add links to the guide in the subsection Electronics & Soldering Training in the description --- **Cursor** I'll help you add a new "How to Solder (Almost) Anything" subsection to the training section in week2.html. Let me first read the current file to understand the structure and then add the new content. Now I need to find the training section and add the new "How to Solder (Almost) Anything" subsection. I can see the training section starts around line 219. Let me add the new subsection with the videos and explanations as requested. ```html Week 2 · HTMAA 2025 · Embedded Programming
Profile Image

Week 2

Embedded Programming · HTMAA 2025

Week Highlights

Key achievements and insights from the embedded programming week, including successful microcontroller programming, sensor integration, and the development of the ReactionAge reaction time measurement system.

Hello World! Success

Hello World! Embedded Programming Success

First successful embedded programming implementation with microcontroller and display

ReactionAge Demo

ReactionAge system in action - measuring reaction time and predicting age

Embedded Programming Design Trades

Comprehensive analysis of critical design decisions in embedded system development

Language Tradeoff

Language Tradeoff

Development Workflow Tradeoff

Workflow Tradeoff

Microcontroller Tradeoff

Microcontroller Tradeoff

📊 View Full Analysis

💻 Design Files Available

Download Arduino code, view circuit diagrams, and access all embedded programming assets from this week's assignments

📄 View Design Files

Table of Contents

Embedded Programming

This week focuses on embedded programming fundamentals, exploring how to program microcontrollers and create interactive electronic systems. We'll dive into the world of digital electronics, sensors, and real-time programming to build responsive devices that can sense, process, and react to their environment.

• Introduction to microcontrollers and embedded systems
• Programming fundamentals for real-time applications
• Sensor integration and data processing

This Week's Goals

  • Master Embedded Programming
    Learn microcontroller programming, sensor integration, and real-time system design
  • Build Interactive Systems
    Create responsive electronic devices that can sense and react to environmental inputs
  • Develop ReactionAge Project
    Implement a reaction time measurement system based on research methodologies

Assignments

  • Group Assignment
    Collaborative embedded programming project focusing on sensor integration and real-time data processing
  • Individual Assignment: ReactionAge
    Build a reaction time measurement system based on research methodologies from cognitive science literature

Tools & Materials

  • Microcontrollers
    Arduino, ESP32, or similar development boards
  • Development Environment
    Arduino IDE, PlatformIO, or VS Code with embedded extensions
  • Sensors & Components
    Buttons, LEDs, displays, accelerometers, and other input/output devices
  • Prototyping Tools
    Breadboards, jumper wires, resistors, and basic electronic components

Training Documentation

Essential training materials and resources for embedded programming fundamentals, microcontroller setup, and sensor integration techniques.

Electronics & Soldering Training

Download Notes Slack Discussion

Soldering Fundamentals

Comprehensive guide to soldering techniques for embedded electronics, covering both wire soldering and solder paste methods.

Wire Soldering
  • Temperature: 720-800°F
  • Melt pad onto electrode first
  • Anchor arms for precision control
  • Use appropriate tip size for part
  • Work from low to high profile parts
Solder Paste
  • Use gloves for protection
  • Highest magnification possible
  • Temperature: 270-330°C
  • Heat all sides together
  • Required for SMD components

Safety First:

Always wear safety glasses and use proper ventilation. Lead-free solder requires extra caution due to flux crystallization at high temperatures.

How to Solder (Almost) Anything

Step-by-step video demonstrations of essential soldering techniques for embedded electronics, covering both wire soldering and surface-mount component assembly.

Wire Soldering Technique

Learn the proper technique for soldering wires to components, starting with one edge to keep the part in place, then soldering the rest easily by keeping your wrist stable and the solder tip on the pad to heat it up with the part, and slowly bringing in solder.

Wire soldering demonstration showing proper technique and wrist stability

Solder Paste Assembly

Complete process for surface-mount component assembly: apply solder paste first, place the component, then heat up with a heat gun to create strong, reliable connections.

Applying solder paste to PCB pads

Placing microcontroller on prepared solder paste

Using heat gun to reflow solder paste and complete the connection

Pro Tips:

For detailed soldering guides and advanced techniques, refer to the Electronics & Soldering Training section above for comprehensive documentation and resources.

Microcontroller Programming Basics - Introduction to embedded programming concepts and development environments
Sensor Integration Workshop - Hands-on training for connecting and programming various sensors
Real-time System Design - Principles of creating responsive embedded systems
Debugging Techniques - Tools and methods for troubleshooting embedded code

Helpful Documentation

Comprehensive documentation covering embedded programming fundamentals, electronics theory, and practical implementation guides.

HTMA Electronics Slides

Official course slides covering microcontroller architecture, I/O techniques, sensor integration, and real-time system design.

Key Topics Covered

  • Microcontroller Programming
    Architecture and fundamentals
  • Sensor Integration
    Data processing methods
  • Real-time Systems
    Design principles and optimization

Group Assignment: Embedded Programming Design Trades

Comprehensive analysis of design tradeoffs in embedded programming, covering language selection, development workflows, and microcontroller choices. This collaborative project examines the critical decisions that shape embedded system development and their impact on project success.

Design Tradeoffs Summary

Architecture Example Boards Toolchain / Workflow Strengths Limitations
AVR (8-bit) ATtiny44, ATmega328 (Arduino Uno) avr-gcc, avrdude; Arduino IDE for simplified workflow Mature ecosystem, simple to program, widely taught Limited memory & speed, not ideal for complex tasks
ARM Cortex-M SAMD21, STM32, Teensy arm-none-eabi-gcc, OpenOCD, PlatformIO; Arduino or CircuitPython support High performance, industry standard, strong debugging tools Toolchain setup can be complex
RP2040 Raspberry Pi Pico, XIAO RP2040 Pico SDK (C/C++), MicroPython, Arduino IDE; custom PIO assembly for peripherals Flexible, inexpensive, unique PIO hardware for custom protocols Requires learning PIO for advanced features
ESP8266 / ESP32 NodeMCU, Sparkfun/Adafruit ESP boards Espressif SDK/IDF, Arduino IDE, MicroPython Built-in Wi-Fi/Bluetooth, large community support, IoT-ready Higher power usage, less deterministic timing
RISC-V HiFive boards, experimental dev kits riscv-gnu-toolchain, GDB, newer SDKs Open-source ISA, growing ecosystem, academic/educational interest Toolchain less mature, fewer libraries & examples

Comprehensive comparison of microcontroller architectures and their tradeoffs in embedded programming

Language Tradeoff

Programming Language Tradeoffs in Embedded Systems

Programming language tradeoff analysis showing performance vs development speed considerations

As illustrated in the language tradeoff diagram above, the choice of programming language involves critical tradeoffs between performance and development speed. The analysis shows how different languages balance factors like memory efficiency, execution speed, development time, and ecosystem support for embedded system development.

High Performance Languages

  • C/C++: Maximum control, minimal overhead
  • Rust: Memory safety with performance
  • Assembly: Direct hardware control

Rapid Development Languages

  • Python: Fast prototyping, rich libraries
  • JavaScript: Web integration capabilities
  • MicroPython: Python for microcontrollers

Development Workflow Tradeoff

Development Workflow Tradeoffs in Embedded Systems

Development workflow tradeoff analysis comparing different methodologies and their impact on project outcomes

The development workflow tradeoff diagram above demonstrates how different methodologies balance project timeline, code quality, and team collaboration. This visual analysis compares traditional waterfall approaches with agile methodologies, showing the impact of various toolchains, testing strategies, and deployment processes on embedded system development success.

Traditional Approaches

  • Waterfall: Sequential, documentation-heavy
  • V-Model: Testing integrated with design
  • Spiral: Risk-driven iterative approach

Modern Approaches

  • Agile: Iterative, customer-focused
  • DevOps: Continuous integration/deployment
  • Test-Driven Development: Quality-first

Microcontroller Tradeoff

Microcontroller Selection Tradeoffs

Microcontroller tradeoff analysis showing performance vs power consumption and cost considerations

The microcontroller tradeoff diagram above illustrates the critical balance between performance, power consumption, and cost in embedded system design. This visual analysis evaluates different architectures, processing capabilities, memory configurations, and peripheral options, providing a clear framework for selecting the optimal platform based on specific application requirements.

Low-Power Options

  • ARM Cortex-M0+: Ultra-low power
  • PIC: Simple, cost-effective
  • MSP430: Energy-efficient design

High-Performance Options

  • ARM Cortex-M4: DSP capabilities
  • ESP32: WiFi/Bluetooth integrated
  • STM32: Rich peripheral set

Use Case Analysis

Architecture Workflow Process Key Characteristics
SAMD21 (ARM Cortex-M) • Write code in C/C++ (Arduino IDE or PlatformIO)
• Compile with arm-none-eabi-gcc
• Upload using OpenOCD via USB or SWD debugger
• Debug with GDB or serial monitor
Professional-grade debugging, industry standard tools
RP2040 (Raspberry Pi Pico) • Write code in C/C++ (Pico SDK) or MicroPython
• Compile with CMake + GCC toolchain
• Drag-and-drop .uf2 file to Pico's USB mass storage device
• (Optional) Use custom PIO assembly for hardware interfaces
Accessibility and flexibility, drag-and-drop + PIO

Workflow examples showing different development approaches for ARM and RP2040 architectures

The example workflow table above provides specific recommendations for different embedded system applications, showing how the tradeoff analyses from the previous sections translate into practical implementation strategies. This comprehensive table demonstrates the relationship between project requirements and optimal technology choices.

Key Findings

As demonstrated in the workflow table above, ARM workflows emphasize professional-grade debugging with industry-standard tools, while RP2040 workflows emphasize accessibility and flexibility through drag-and-drop deployment and unique PIO capabilities. The comprehensive architecture comparison shows that optimal design choices depend heavily on project constraints, performance requirements, and development timeline. High-performance applications favor ARM Cortex-M with professional toolchains, while rapid prototyping benefits from RP2040's flexible development environment and built-in features.

Download PDF Report Download PowerPoint

Individual Assignment: ReactionAge

Build a reaction time measurement system based on research methodologies from cognitive science literature. This project combines embedded programming with scientific measurement principles to create a tool for studying human cognitive performance.

Core Features

  • Stimulus Generation
    Visual/auditory stimuli with precise timing
  • Response Detection
    Accurate measurement using buttons/sensors
  • Data Analysis
    Statistical processing and visualization

Research Foundation

Based on PLOS ONE study (2017) examining reaction time variability and cognitive decline.

Repository: github.com/saleemaldajani/reaction-timer-saleemaldajani

Reaction Time vs Age Model

Reaction time model showing the relationship between age and cognitive performance, based on research from PLOS ONE (2017)

Related Research

Parts List / Bill of Materials

Download BOM
# Image Part Description Qty Unit Price Datasheet Price
1 ATmega32 Microcontroller ATmega32 Microcontroller 8-bit AVR MCU, 32 KB Flash, 2 KB SRAM, ADC, timers, USART 1 $7.50 PDF $7.50
2 OLED Display Module 0.96″ OLED Display Module (SSD1306) 128×64 mono OLED, I²C/SPI interface 1 $2.50 PDF $2.50
3 Male Header Pins Male Header Pins (2.54 mm) Breakaway straight male headers 2 $0.20 PDF $0.40
4 Dual-Row Header Dual-Row Header (2×5, 2.54 mm) 10-pin dual-row header, unshrouded 1 $0.50 PDF $0.50
5 SMD MOSFET SMD MOSFET (AO3400A example) N-channel MOSFET, SOT-23 2 $0.15 PDF $0.30
6 SMD Capacitor SMD Capacitor (MLCC 0603 example) Ceramic capacitor, value TBD 5 $0.03 PDF $0.15
7 SMD Resistors SMD Resistors – 1 kΩ (code '1001') Precision SMD resistors 5 $0.02 PDF $0.10
8 SMD LED SMD LED (0603, color TBD) Indicator LED 2 $0.05 PDF $0.10
9 USB-C Connector USB-C Receptacle Surface-mount USB Type‑C connector 1 $0.60 PDF $0.60
10 Custom PCB Custom PCB (Capacitive-Touch Board) Project-specific PCB 1 $10.00 N/A $10.00
TOTAL $22.15

Complete bill of materials for the ReactionAge embedded programming project. All prices are in USD and subject to supplier variations.

Nintendo Switch Controller Training for Toddlers

An interactive training module designed for young children, utilizing Nintendo Switch controller input to create an engaging letter-matching game that develops motor skills and cognitive recognition.

Game Mechanics

  • Button Mapping
    A, B, X, Y in inverted layout
  • Visual Stimulus
    Flashing letters with bright colors
  • Progressive Difficulty
    Adapts based on performance

Educational Benefits

  • Motor Skills
    Hand-eye coordination
  • Letter Recognition
    Alphabet learning
  • Attention Building
    Focus and concentration

Technical Features

  • Controller Support
    Pro Controller & Joy-Con
  • Display System
    Large, colorful letters
  • Progress Tracking
    Analytics & feedback

Design Files

Source code, circuit diagrams, and documentation files for embedded programming projects.

ReactionAge Arduino Code

Download .ino

Key Features

Hardware Integration
  • OLED Display (SSD1306)
  • RGB LED indicators
  • Capacitive touch sensors
  • State machine architecture
Reaction Time Analysis
  • Multiple prediction models
  • Statistical data collection
  • CSV export functionality
  • Real-time age prediction
Code Preview
// Reaction time prediction models
const float A_POOLED = -35.392393f, B_POOLED = 0.1930446f;
const float A_MALE = -58.123019f, B_MALE = 0.2640664f;
const float A_FEMALE = -31.603679f, B_FEMALE = 0.176111015f;

float predictAgeFromRT(unsigned long rt_ms) {
  float x = (float)rt_ms;
  float a, b, c;
  switch (currentModel) {
    case SX_MALE: a=A_MALE; b=B_MALE; c=C_MALE; break;
    case SX_FEMALE: a=A_FEMALE; b=B_FEMALE; c=C_FEMALE; break;
    default: a=A_POOLED; b=B_POOLED; c=C_POOLED; break;
  }
  return a + b*x + c*x*x;
}

Project Resources

Circuit Diagrams

  • Microcontroller connection schematics
  • Sensor integration diagrams
  • Power supply and signal conditioning circuits

Reflections & Learnings

[Reflection notes placeholder.]

Contributions

Acknowledgments for collaborative support and technical assistance during the embedded programming project development.

Technical Support & Collaboration

Eghosa Ohenehn

Contributed valuable insights and technical discussions about microcontroller tradeoffs during the group assignment development. Provided expertise in evaluating different microcontroller architectures and their suitability for various embedded programming applications.

Anthony Pennes

Engaged in extensive discussions throughout the embedded programming design trades section, providing valuable technical insights and collaborative support during the group assignment development process.

Quentin Bolsée

Participated in numerous office hours discussions about embedded programming design trades, contributing significantly to the technical analysis and collaborative development of the group assignment content.

Special thanks to the collaborative learning environment that enabled knowledge sharing and technical problem-solving throughout the embedded programming week.

Ethical AI Use

Transparent documentation of AI assistance used in this week's work, following course guidelines for ethical AI usage.

AI-Assisted Template Generation and Task Planning

Used ChatGPT to generate the weekly template HTML structure and styling framework, and created structured task prompts for week 2 embedded programming content development.

📄 View ChatGPT Transcript 📋 View Task Prompt

AI-Assisted Content Development and Page Structure

Used Cursor AI for iterative content development, page structure optimization, and aesthetic improvements. The AI helped with HTML/CSS implementation, content organization, and maintaining consistent styling across the embedded programming documentation.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted BOM Table Implementation

Used Cursor AI to implement the comprehensive BOM table with clickable images, datasheet links, and full-width responsive design. The AI helped with HTML table structure, CSS styling, and integration of CSV data into an aesthetically pleasing table format.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted Image Recognition and BOM Creation

Used ChatGPT for image recognition of electronic components to identify parts and construct the bill of materials CSV file. The AI analyzed component images and provided detailed part specifications, descriptions, and pricing information for the embedded programming project.

📄 View Full Transcript

AI-Assisted Project Content Updates and Documentation

Used Cursor AI for comprehensive project content updates, documentation improvements, and HTML structure optimization. The AI assisted with content organization, styling consistency, and integration of multimedia elements for the embedded programming documentation.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted Arduino Programming and Code Development

Used ChatGPT for Arduino programming assistance based on the ReactionAge project code from GitHub repository and Quentin Bolsée's QPAD documentation available on the course website embedded system assignment page. The AI provided guidance on embedded programming concepts, code optimization, and integration with the QPAD-xiao board design.

📄 View ChatGPT Transcript 🔗 GitHub Repository 🔗 QPAD-xiao Documentation

AI-Assisted Group Assignment Content Development and Table Implementation

Used Cursor AI for comprehensive development of the embedded programming design trades group assignment section. The AI assisted with creating structured subsections for language, development workflow, and microcontroller tradeoffs, implementing professional HTML tables with data extracted from PowerPoint presentations, and integrating download links for PDF and PPTX files.

📄 View Full Transcript 💾 Download Chat File
``` Perfect! I've successfully added the new "How to Solder (Almost) Anything" subsection to the training section in week2.html. Here's what I've implemented: ## ✅ New Subsection Added **Location**: Within the "Electronics & Soldering Training" section in the training documentation **Features**: 1. **Wire Soldering Section**: - Video: `week2/training/wire-solder.mp4` - Explanation: Describes starting with one edge to keep the part in place, then soldering the rest by keeping wrist stable and solder tip on the pad to heat it up with the part, slowly bringing in solder - Caption: "Wire soldering demonstration showing proper technique and wrist stability" 2. **Solder Paste Assembly Section**: - Three videos arranged as requested: - `week2/training/solder-paste-apply.mp4` and `week2/training/place-microcontroller.mp4` side by side in one row - `week2/training/heat-gun-paste.mp4` below them - Explanation: Describes the complete process - apply solder paste first, place the component, then heat up with heat gun - Individual captions for each video explaining the specific step 3. **Additional Features**: - Professional styling consistent with the existing design - Links to the main "Electronics & Soldering Training" section for additional resources - Responsive video layout that works on different screen sizes - Clear section headers and descriptions The new subsection is now integrated into the training documentation and provides comprehensive video-based instruction for both wire soldering and surface-mount component assembly techniques. --- **User** under training • Microcontroller Programming Basics - Introduction to embedded programming concepts and development environments add a subsection that links the following guides @https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao @https://gitlab.cba.mit.edu/quentinbolsee/qpad21 @https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao-esp32s3 for each link, put a full description of whats in the repo, make explicit links to the code repos and what's in them too for each one @https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao-esp32s3/-/tree/main/code/Arduino?ref_type=heads @https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao/-/tree/main/code?ref_type=heads @https://gitlab.cba.mit.edu/quentinbolsee/qpad21/-/tree/main/code?ref_type=heads make sure to summarize the readme sections on the repo to explain what is necessary to program in a nutshell, qpad-xiao's don't need to be burned by a bootloader, just need to tell the IDE that its a xiao when programming it according to the steps. the d21 needs to be burned by a bootloader using a xiao programmer chip. to get the programmer chip configured you need to follow the steps in the guide and drag and drop the .uf2 file once it shows up as a hard disk after you boot/reset it (add links to how to do these things). add the bootloader steps according to the menu in week2/training/burn-bootloader-settings (read the image and make a list of all the selections) then click burn bootloader once you have the board connected to the IDE, you just compile and upload. you can always debug your code by compiling without IDing the chip, once code is ready, hit upload! make this as descriptive and friendly as possible. be structured. be concise. don't lose key details though! --- **Cursor** I'll add a comprehensive subsection under the Microcontroller Programming Basics that covers the QPAD development boards and their programming requirements. Let me first read the bootloader settings image to get the exact menu selections. Let me search for the current training section structure and then add the new QPAD programming guide subsection. Now I'll add the comprehensive QPAD programming guide subsection right after the training list. Let me insert it before the closing of the training section. ```html Week 2 · HTMAA 2025 · Embedded Programming
Profile Image

Week 2

Embedded Programming · HTMAA 2025

Week Highlights

Key achievements and insights from the embedded programming week, including successful microcontroller programming, sensor integration, and the development of the ReactionAge reaction time measurement system.

Hello World! Success

Hello World! Embedded Programming Success

First successful embedded programming implementation with microcontroller and display

ReactionAge Demo

ReactionAge system in action - measuring reaction time and predicting age

Embedded Programming Design Trades

Comprehensive analysis of critical design decisions in embedded system development

Language Tradeoff

Language Tradeoff

Development Workflow Tradeoff

Workflow Tradeoff

Microcontroller Tradeoff

Microcontroller Tradeoff

📊 View Full Analysis

💻 Design Files Available

Download Arduino code, view circuit diagrams, and access all embedded programming assets from this week's assignments

📄 View Design Files

Table of Contents

Embedded Programming

This week focuses on embedded programming fundamentals, exploring how to program microcontrollers and create interactive electronic systems. We'll dive into the world of digital electronics, sensors, and real-time programming to build responsive devices that can sense, process, and react to their environment.

• Introduction to microcontrollers and embedded systems
• Programming fundamentals for real-time applications
• Sensor integration and data processing

This Week's Goals

  • Master Embedded Programming
    Learn microcontroller programming, sensor integration, and real-time system design
  • Build Interactive Systems
    Create responsive electronic devices that can sense and react to environmental inputs
  • Develop ReactionAge Project
    Implement a reaction time measurement system based on research methodologies

Assignments

  • Group Assignment
    Collaborative embedded programming project focusing on sensor integration and real-time data processing
  • Individual Assignment: ReactionAge
    Build a reaction time measurement system based on research methodologies from cognitive science literature

Tools & Materials

  • Microcontrollers
    Arduino, ESP32, or similar development boards
  • Development Environment
    Arduino IDE, PlatformIO, or VS Code with embedded extensions
  • Sensors & Components
    Buttons, LEDs, displays, accelerometers, and other input/output devices
  • Prototyping Tools
    Breadboards, jumper wires, resistors, and basic electronic components

Training Documentation

Essential training materials and resources for embedded programming fundamentals, microcontroller setup, and sensor integration techniques.

Electronics & Soldering Training

Download Notes Slack Discussion

Soldering Fundamentals

Comprehensive guide to soldering techniques for embedded electronics, covering both wire soldering and solder paste methods.

Wire Soldering
  • Temperature: 720-800°F
  • Melt pad onto electrode first
  • Anchor arms for precision control
  • Use appropriate tip size for part
  • Work from low to high profile parts
Solder Paste
  • Use gloves for protection
  • Highest magnification possible
  • Temperature: 270-330°C
  • Heat all sides together
  • Required for SMD components

Safety First:

Always wear safety glasses and use proper ventilation. Lead-free solder requires extra caution due to flux crystallization at high temperatures.

How to Solder (Almost) Anything

Step-by-step video demonstrations of essential soldering techniques for embedded electronics, covering both wire soldering and surface-mount component assembly.

Wire Soldering Technique

Learn the proper technique for soldering wires to components, starting with one edge to keep the part in place, then soldering the rest easily by keeping your wrist stable and the solder tip on the pad to heat it up with the part, and slowly bringing in solder.

Wire soldering demonstration showing proper technique and wrist stability

Solder Paste Assembly

Complete process for surface-mount component assembly: apply solder paste first, place the component, then heat up with a heat gun to create strong, reliable connections.

Applying solder paste to PCB pads

Placing microcontroller on prepared solder paste

Using heat gun to reflow solder paste and complete the connection

Pro Tips:

For detailed soldering guides and advanced techniques, refer to the Electronics & Soldering Training section above for comprehensive documentation and resources.

Microcontroller Programming Basics - Introduction to embedded programming concepts and development environments
Sensor Integration Workshop - Hands-on training for connecting and programming various sensors
Real-time System Design - Principles of creating responsive embedded systems
Debugging Techniques - Tools and methods for troubleshooting embedded code

QPAD Development Boards Programming Guide

Complete programming setup and workflow for QPAD development boards, covering bootloader configuration, IDE setup, and code deployment for different microcontroller architectures.

QPAD-XIAO (RP2040)

The QPAD-XIAO features a Raspberry Pi RP2040 microcontroller with built-in bootloader support. No bootloader burning required - simply configure your IDE and start programming!

Programming Steps:
  1. Connect QPAD-XIAO to your computer via USB-C
  2. In Arduino IDE, select Tools → Board → Raspberry Pi RP2040 Boards → XIAO RP2040
  3. Select the correct COM port under Tools → Port
  4. Write your code and click Upload - the board handles everything automatically!
Main Repository Code Examples
QPAD21 (SAMD21)

The QPAD21 uses an ATSAMD21 microcontroller that requires bootloader programming using a XIAO programmer chip. Follow these steps to get it ready for development.

Bootloader Programming Steps:
  1. Connect XIAO programmer to QPAD21 using the programming header
  2. Connect XIAO programmer to your computer via USB
  3. In Arduino IDE, select Tools → Board → Arduino SAMD (32-bits ARM Cortex-M0+) → Arduino MKR WiFi 1010
  4. Select the correct COM port for the XIAO programmer
  5. Configure bootloader settings:
    • Bootloader: Adafruit Circuit Playground Express
    • Clock: 48 MHz (USB)
    • USB Stack: Arduino
    • Debug Level: None
    • Erase Flash: All Flash Contents
    • Bootloader Version: 1.0.0
  6. Click Burn Bootloader and wait for completion
Programming Steps (After Bootloader):
  1. Disconnect XIAO programmer and connect QPAD21 directly via USB
  2. Select Tools → Board → Arduino SAMD (32-bits ARM Cortex-M0+) → Arduino MKR WiFi 1010
  3. Select the correct COM port for QPAD21
  4. Write your code and click Upload
Main Repository Code Examples
QPAD-XIAO-ESP32S3 (ESP32-S3)

The QPAD-XIAO-ESP32S3 features an ESP32-S3 microcontroller with built-in WiFi and Bluetooth capabilities. No bootloader burning required - just configure your IDE and start programming!

Programming Steps:
  1. Connect QPAD-XIAO-ESP32S3 to your computer via USB-C
  2. In Arduino IDE, select Tools → Board → ESP32 Arduino → XIAO_ESP32S3
  3. Select the correct COM port under Tools → Port
  4. Configure additional settings:
    • Upload Speed: 921600
    • CPU Frequency: 240MHz (WiFi/BT)
    • Flash Mode: QIO
    • Flash Size: 8MB (64Mb)
    • Partition Scheme: Default 4MB with spiffs
  5. Write your code and click Upload
Main Repository Arduino Code Examples
💡 Pro Programming Tips:
  • Always test your code first: Use Verify/Compile to check for errors before uploading
  • Debug without uploading: You can compile and check your code without identifying the specific chip
  • Ready to deploy: Once your code compiles successfully, hit Upload to program your board
  • Serial Monitor: Use Tools → Serial Monitor to debug and monitor your program's output
  • Board Manager: Install board support packages through Tools → Board → Boards Manager if needed

Helpful Documentation

Comprehensive documentation covering embedded programming fundamentals, electronics theory, and practical implementation guides.

HTMA Electronics Slides

Official course slides covering microcontroller architecture, I/O techniques, sensor integration, and real-time system design.

Key Topics Covered

  • Microcontroller Programming
    Architecture and fundamentals
  • Sensor Integration
    Data processing methods
  • Real-time Systems
    Design principles and optimization

Group Assignment: Embedded Programming Design Trades

Comprehensive analysis of design tradeoffs in embedded programming, covering language selection, development workflows, and microcontroller choices. This collaborative project examines the critical decisions that shape embedded system development and their impact on project success.

Design Tradeoffs Summary

Architecture Example Boards Toolchain / Workflow Strengths Limitations
AVR (8-bit) ATtiny44, ATmega328 (Arduino Uno) avr-gcc, avrdude; Arduino IDE for simplified workflow Mature ecosystem, simple to program, widely taught Limited memory & speed, not ideal for complex tasks
ARM Cortex-M SAMD21, STM32, Teensy arm-none-eabi-gcc, OpenOCD, PlatformIO; Arduino or CircuitPython support High performance, industry standard, strong debugging tools Toolchain setup can be complex
RP2040 Raspberry Pi Pico, XIAO RP2040 Pico SDK (C/C++), MicroPython, Arduino IDE; custom PIO assembly for peripherals Flexible, inexpensive, unique PIO hardware for custom protocols Requires learning PIO for advanced features
ESP8266 / ESP32 NodeMCU, Sparkfun/Adafruit ESP boards Espressif SDK/IDF, Arduino IDE, MicroPython Built-in Wi-Fi/Bluetooth, large community support, IoT-ready Higher power usage, less deterministic timing
RISC-V HiFive boards, experimental dev kits riscv-gnu-toolchain, GDB, newer SDKs Open-source ISA, growing ecosystem, academic/educational interest Toolchain less mature, fewer libraries & examples

Comprehensive comparison of microcontroller architectures and their tradeoffs in embedded programming

Language Tradeoff

Programming Language Tradeoffs in Embedded Systems

Programming language tradeoff analysis showing performance vs development speed considerations

As illustrated in the language tradeoff diagram above, the choice of programming language involves critical tradeoffs between performance and development speed. The analysis shows how different languages balance factors like memory efficiency, execution speed, development time, and ecosystem support for embedded system development.

High Performance Languages

  • C/C++: Maximum control, minimal overhead
  • Rust: Memory safety with performance
  • Assembly: Direct hardware control

Rapid Development Languages

  • Python: Fast prototyping, rich libraries
  • JavaScript: Web integration capabilities
  • MicroPython: Python for microcontrollers

Development Workflow Tradeoff

Development Workflow Tradeoffs in Embedded Systems

Development workflow tradeoff analysis comparing different methodologies and their impact on project outcomes

The development workflow tradeoff diagram above demonstrates how different methodologies balance project timeline, code quality, and team collaboration. This visual analysis compares traditional waterfall approaches with agile methodologies, showing the impact of various toolchains, testing strategies, and deployment processes on embedded system development success.

Traditional Approaches

  • Waterfall: Sequential, documentation-heavy
  • V-Model: Testing integrated with design
  • Spiral: Risk-driven iterative approach

Modern Approaches

  • Agile: Iterative, customer-focused
  • DevOps: Continuous integration/deployment
  • Test-Driven Development: Quality-first

Microcontroller Tradeoff

Microcontroller Selection Tradeoffs

Microcontroller tradeoff analysis showing performance vs power consumption and cost considerations

The microcontroller tradeoff diagram above illustrates the critical balance between performance, power consumption, and cost in embedded system design. This visual analysis evaluates different architectures, processing capabilities, memory configurations, and peripheral options, providing a clear framework for selecting the optimal platform based on specific application requirements.

Low-Power Options

  • ARM Cortex-M0+: Ultra-low power
  • PIC: Simple, cost-effective
  • MSP430: Energy-efficient design

High-Performance Options

  • ARM Cortex-M4: DSP capabilities
  • ESP32: WiFi/Bluetooth integrated
  • STM32: Rich peripheral set

Use Case Analysis

Architecture Workflow Process Key Characteristics
SAMD21 (ARM Cortex-M) • Write code in C/C++ (Arduino IDE or PlatformIO)
• Compile with arm-none-eabi-gcc
• Upload using OpenOCD via USB or SWD debugger
• Debug with GDB or serial monitor
Professional-grade debugging, industry standard tools
RP2040 (Raspberry Pi Pico) • Write code in C/C++ (Pico SDK) or MicroPython
• Compile with CMake + GCC toolchain
• Drag-and-drop .uf2 file to Pico's USB mass storage device
• (Optional) Use custom PIO assembly for hardware interfaces
Accessibility and flexibility, drag-and-drop + PIO

Workflow examples showing different development approaches for ARM and RP2040 architectures

The example workflow table above provides specific recommendations for different embedded system applications, showing how the tradeoff analyses from the previous sections translate into practical implementation strategies. This comprehensive table demonstrates the relationship between project requirements and optimal technology choices.

Key Findings

As demonstrated in the workflow table above, ARM workflows emphasize professional-grade debugging with industry-standard tools, while RP2040 workflows emphasize accessibility and flexibility through drag-and-drop deployment and unique PIO capabilities. The comprehensive architecture comparison shows that optimal design choices depend heavily on project constraints, performance requirements, and development timeline. High-performance applications favor ARM Cortex-M with professional toolchains, while rapid prototyping benefits from RP2040's flexible development environment and built-in features.

Download PDF Report Download PowerPoint

Individual Assignment: ReactionAge

Build a reaction time measurement system based on research methodologies from cognitive science literature. This project combines embedded programming with scientific measurement principles to create a tool for studying human cognitive performance.

Core Features

  • Stimulus Generation
    Visual/auditory stimuli with precise timing
  • Response Detection
    Accurate measurement using buttons/sensors
  • Data Analysis
    Statistical processing and visualization

Research Foundation

Based on PLOS ONE study (2017) examining reaction time variability and cognitive decline.

Repository: github.com/saleemaldajani/reaction-timer-saleemaldajani

Reaction Time vs Age Model

Reaction time model showing the relationship between age and cognitive performance, based on research from PLOS ONE (2017)

Related Research

Parts List / Bill of Materials

Download BOM
# Image Part Description Qty Unit Price Datasheet Price
1 ATmega32 Microcontroller ATmega32 Microcontroller 8-bit AVR MCU, 32 KB Flash, 2 KB SRAM, ADC, timers, USART 1 $7.50 PDF $7.50
2 OLED Display Module 0.96″ OLED Display Module (SSD1306) 128×64 mono OLED, I²C/SPI interface 1 $2.50 PDF $2.50
3 Male Header Pins Male Header Pins (2.54 mm) Breakaway straight male headers 2 $0.20 PDF $0.40
4 Dual-Row Header Dual-Row Header (2×5, 2.54 mm) 10-pin dual-row header, unshrouded 1 $0.50 PDF $0.50
5 SMD MOSFET SMD MOSFET (AO3400A example) N-channel MOSFET, SOT-23 2 $0.15 PDF $0.30
6 SMD Capacitor SMD Capacitor (MLCC 0603 example) Ceramic capacitor, value TBD 5 $0.03 PDF $0.15
7 SMD Resistors SMD Resistors – 1 kΩ (code '1001') Precision SMD resistors 5 $0.02 PDF $0.10
8 SMD LED SMD LED (0603, color TBD) Indicator LED 2 $0.05 PDF $0.10
9 USB-C Connector USB-C Receptacle Surface-mount USB Type‑C connector 1 $0.60 PDF $0.60
10 Custom PCB Custom PCB (Capacitive-Touch Board) Project-specific PCB 1 $10.00 N/A $10.00
TOTAL $22.15

Complete bill of materials for the ReactionAge embedded programming project. All prices are in USD and subject to supplier variations.

Nintendo Switch Controller Training for Toddlers

An interactive training module designed for young children, utilizing Nintendo Switch controller input to create an engaging letter-matching game that develops motor skills and cognitive recognition.

Game Mechanics

  • Button Mapping
    A, B, X, Y in inverted layout
  • Visual Stimulus
    Flashing letters with bright colors
  • Progressive Difficulty
    Adapts based on performance

Educational Benefits

  • Motor Skills
    Hand-eye coordination
  • Letter Recognition
    Alphabet learning
  • Attention Building
    Focus and concentration

Technical Features

  • Controller Support
    Pro Controller & Joy-Con
  • Display System
    Large, colorful letters
  • Progress Tracking
    Analytics & feedback

Design Files

Source code, circuit diagrams, and documentation files for embedded programming projects.

ReactionAge Arduino Code

Download .ino

Key Features

Hardware Integration
  • OLED Display (SSD1306)
  • RGB LED indicators
  • Capacitive touch sensors
  • State machine architecture
Reaction Time Analysis
  • Multiple prediction models
  • Statistical data collection
  • CSV export functionality
  • Real-time age prediction
Code Preview
// Reaction time prediction models
const float A_POOLED = -35.392393f, B_POOLED = 0.1930446f;
const float A_MALE = -58.123019f, B_MALE = 0.2640664f;
const float A_FEMALE = -31.603679f, B_FEMALE = 0.176111015f;

float predictAgeFromRT(unsigned long rt_ms) {
  float x = (float)rt_ms;
  float a, b, c;
  switch (currentModel) {
    case SX_MALE: a=A_MALE; b=B_MALE; c=C_MALE; break;
    case SX_FEMALE: a=A_FEMALE; b=B_FEMALE; c=C_FEMALE; break;
    default: a=A_POOLED; b=B_POOLED; c=C_POOLED; break;
  }
  return a + b*x + c*x*x;
}

Project Resources

Circuit Diagrams

  • Microcontroller connection schematics
  • Sensor integration diagrams
  • Power supply and signal conditioning circuits

Reflections & Learnings

[Reflection notes placeholder.]

Contributions

Acknowledgments for collaborative support and technical assistance during the embedded programming project development.

Technical Support & Collaboration

Eghosa Ohenehn

Contributed valuable insights and technical discussions about microcontroller tradeoffs during the group assignment development. Provided expertise in evaluating different microcontroller architectures and their suitability for various embedded programming applications.

Anthony Pennes

Engaged in extensive discussions throughout the embedded programming design trades section, providing valuable technical insights and collaborative support during the group assignment development process.

Quentin Bolsée

Participated in numerous office hours discussions about embedded programming design trades, contributing significantly to the technical analysis and collaborative development of the group assignment content.

Special thanks to the collaborative learning environment that enabled knowledge sharing and technical problem-solving throughout the embedded programming week.

Ethical AI Use

Transparent documentation of AI assistance used in this week's work, following course guidelines for ethical AI usage.

AI-Assisted Template Generation and Task Planning

Used ChatGPT to generate the weekly template HTML structure and styling framework, and created structured task prompts for week 2 embedded programming content development.

📄 View ChatGPT Transcript 📋 View Task Prompt

AI-Assisted Content Development and Page Structure

Used Cursor AI for iterative content development, page structure optimization, and aesthetic improvements. The AI helped with HTML/CSS implementation, content organization, and maintaining consistent styling across the embedded programming documentation.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted BOM Table Implementation

Used Cursor AI to implement the comprehensive BOM table with clickable images, datasheet links, and full-width responsive design. The AI helped with HTML table structure, CSS styling, and integration of CSV data into an aesthetically pleasing table format.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted Image Recognition and BOM Creation

Used ChatGPT for image recognition of electronic components to identify parts and construct the bill of materials CSV file. The AI analyzed component images and provided detailed part specifications, descriptions, and pricing information for the embedded programming project.

📄 View Full Transcript

AI-Assisted Project Content Updates and Documentation

Used Cursor AI for comprehensive project content updates, documentation improvements, and HTML structure optimization. The AI assisted with content organization, styling consistency, and integration of multimedia elements for the embedded programming documentation.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted Arduino Programming and Code Development

Used ChatGPT for Arduino programming assistance based on the ReactionAge project code from GitHub repository and Quentin Bolsée's QPAD documentation available on the course website embedded system assignment page. The AI provided guidance on embedded programming concepts, code optimization, and integration with the QPAD-xiao board design.

📄 View ChatGPT Transcript 🔗 GitHub Repository 🔗 QPAD-xiao Documentation

AI-Assisted Group Assignment Content Development and Table Implementation

Used Cursor AI for comprehensive development of the embedded programming design trades group assignment section. The AI assisted with creating structured subsections for language, development workflow, and microcontroller tradeoffs, implementing professional HTML tables with data extracted from PowerPoint presentations, and integrating download links for PDF and PPTX files.

📄 View Full Transcript 💾 Download Chat File
``` Perfect! I've successfully added a comprehensive "QPAD Development Boards Programming Guide" subsection under the Microcontroller Programming Basics section. Here's what I've implemented: ## ✅ QPAD Programming Guide Added **Location**: Under "Microcontroller Programming Basics" in the training section **Features**: ### 1. **QPAD-XIAO (RP2040)** - **Repository Links**: - Main: [https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao](https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao) - Code Examples: [https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao/-/tree/main/code?ref_type=heads](https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao/-/tree/main/code?ref_type=heads) - **Key Point**: No bootloader burning required - just configure IDE and upload - **Programming Steps**: Clear step-by-step instructions for Arduino IDE setup ### 2. **QPAD21 (SAMD21)** - **Repository Links**: - Main: [https://gitlab.cba.mit.edu/quentinbolsee/qpad21](https://gitlab.cba.mit.edu/quentinbolsee/qpad21) - Code Examples: [https://gitlab.cba.mit.edu/quentinbolsee/qpad21/-/tree/main/code?ref_type=heads](https://gitlab.cba.mit.edu/quentinbolsee/qpad21/-/tree/main/code?ref_type=heads) - **Key Point**: Requires bootloader programming using XIAO programmer chip - **Bootloader Settings**: Complete configuration list based on the bootloader settings image: - Bootloader: Adafruit Circuit Playground Express - Clock: 48 MHz (USB) - USB Stack: Arduino - Debug Level: None - Erase Flash: All Flash Contents - Bootloader Version: 1.0.0 - **Two-Phase Process**: Bootloader programming first, then regular programming ### 3. **QPAD-XIAO-ESP32S3 (ESP32-S3)** - **Repository Links**: - Main: [https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao-esp32s3](https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao-esp32s3) - Arduino Code: [https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao-esp32s3/-/tree/main/code/Arduino?ref_type=heads](https://gitlab.cba.mit.edu/quentinbolsee/qpad-xiao-esp32s3/-/tree/main/code/Arduino?ref_type=heads) - **Key Point**: No bootloader burning required - built-in WiFi/Bluetooth capabilities - **Advanced Configuration**: Detailed IDE settings for optimal performance ### 4. **Pro Programming Tips Section** - Always test code with Verify/Compile first - Debug without uploading - Use Serial Monitor for debugging - Board Manager for installing support packages The guide is structured, descriptive, and friendly while maintaining all the key technical details. Each board has clear differentiation between those requiring bootloader programming (QPAD21) versus those that work out-of-the-box (QPAD-XIAO variants). --- **User** add a subsection in helpful documentation for board design and put the image week2/training/usbc-board-design describe it and add a caption then in the design files section at the bottom make a board design subsection and put download links to all the files in week2/pcb-design then go back and link the design files in the board design subsection for board design --- **Cursor** I'll add the board design subsection to the helpful documentation, then create a board design subsection in the design files section with download links. Let me start by exploring the PCB design files and then make the updates. Now let me add the board design subsection to the helpful documentation section: ```html Week 2 · HTMAA 2025 · Embedded Programming
Profile Image

Week 2

Embedded Programming · HTMAA 2025

Week Highlights

Key achievements and insights from the embedded programming week, including successful microcontroller programming, sensor integration, and the development of the ReactionAge reaction time measurement system.

Hello World! Success

Hello World! Embedded Programming Success

First successful embedded programming implementation with microcontroller and display

ReactionAge Demo

ReactionAge system in action - measuring reaction time and predicting age

Embedded Programming Design Trades

Comprehensive analysis of critical design decisions in embedded system development

Language Tradeoff

Language Tradeoff

Development Workflow Tradeoff

Workflow Tradeoff

Microcontroller Tradeoff

Microcontroller Tradeoff

📊 View Full Analysis

💻 Design Files Available

Download Arduino code, view circuit diagrams, and access all embedded programming assets from this week's assignments

📄 View Design Files

Table of Contents

Embedded Programming

This week focuses on embedded programming fundamentals, exploring how to program microcontrollers and create interactive electronic systems. We'll dive into the world of digital electronics, sensors, and real-time programming to build responsive devices that can sense, process, and react to their environment.

• Introduction to microcontrollers and embedded systems
• Programming fundamentals for real-time applications
• Sensor integration and data processing

This Week's Goals

  • Master Embedded Programming
    Learn microcontroller programming, sensor integration, and real-time system design
  • Build Interactive Systems
    Create responsive electronic devices that can sense and react to environmental inputs
  • Develop ReactionAge Project
    Implement a reaction time measurement system based on research methodologies

Assignments

  • Group Assignment
    Collaborative embedded programming project focusing on sensor integration and real-time data processing
  • Individual Assignment: ReactionAge
    Build a reaction time measurement system based on research methodologies from cognitive science literature

Tools & Materials

  • Microcontrollers
    Arduino, ESP32, or similar development boards
  • Development Environment
    Arduino IDE, PlatformIO, or VS Code with embedded extensions
  • Sensors & Components
    Buttons, LEDs, displays, accelerometers, and other input/output devices
  • Prototyping Tools
    Breadboards, jumper wires, resistors, and basic electronic components

Training Documentation

Essential training materials and resources for embedded programming fundamentals, microcontroller setup, and sensor integration techniques.

Electronics & Soldering Training

Download Notes Slack Discussion

Soldering Fundamentals

Comprehensive guide to soldering techniques for embedded electronics, covering both wire soldering and solder paste methods.

Wire Soldering
  • Temperature: 720-800°F
  • Melt pad onto electrode first
  • Anchor arms for precision control
  • Use appropriate tip size for part
  • Work from low to high profile parts
Solder Paste
  • Use gloves for protection
  • Highest magnification possible
  • Temperature: 270-330°C
  • Heat all sides together
  • Required for SMD components

Safety First:

Always wear safety glasses and use proper ventilation. Lead-free solder requires extra caution due to flux crystallization at high temperatures.

How to Solder (Almost) Anything

Step-by-step video demonstrations of essential soldering techniques for embedded electronics, covering both wire soldering and surface-mount component assembly.

Wire Soldering Technique

Learn the proper technique for soldering wires to components, starting with one edge to keep the part in place, then soldering the rest easily by keeping your wrist stable and the solder tip on the pad to heat it up with the part, and slowly bringing in solder.

Wire soldering demonstration showing proper technique and wrist stability

Solder Paste Assembly

Complete process for surface-mount component assembly: apply solder paste first, place the component, then heat up with a heat gun to create strong, reliable connections.

Applying solder paste to PCB pads

Placing microcontroller on prepared solder paste

Using heat gun to reflow solder paste and complete the connection

Pro Tips:

For detailed soldering guides and advanced techniques, refer to the Electronics & Soldering Training section above for comprehensive documentation and resources.

Microcontroller Programming Basics - Introduction to embedded programming concepts and development environments
Sensor Integration Workshop - Hands-on training for connecting and programming various sensors
Real-time System Design - Principles of creating responsive embedded systems
Debugging Techniques - Tools and methods for troubleshooting embedded code

QPAD Development Boards Programming Guide

Complete programming setup and workflow for QPAD development boards, covering bootloader configuration, IDE setup, and code deployment for different microcontroller architectures.

QPAD-XIAO (RP2040)

The QPAD-XIAO features a Raspberry Pi RP2040 microcontroller with built-in bootloader support. No bootloader burning required - simply configure your IDE and start programming!

Programming Steps:
  1. Connect QPAD-XIAO to your computer via USB-C
  2. In Arduino IDE, select Tools → Board → Raspberry Pi RP2040 Boards → XIAO RP2040
  3. Select the correct COM port under Tools → Port
  4. Write your code and click Upload - the board handles everything automatically!
Main Repository Code Examples
QPAD21 (SAMD21)

The QPAD21 uses an ATSAMD21 microcontroller that requires bootloader programming using a XIAO programmer chip. Follow these steps to get it ready for development.

Bootloader Programming Steps:
  1. Connect XIAO programmer to QPAD21 using the programming header
  2. Connect XIAO programmer to your computer via USB
  3. In Arduino IDE, select Tools → Board → Arduino SAMD (32-bits ARM Cortex-M0+) → Arduino MKR WiFi 1010
  4. Select the correct COM port for the XIAO programmer
  5. Configure bootloader settings:
    • Bootloader: Adafruit Circuit Playground Express
    • Clock: 48 MHz (USB)
    • USB Stack: Arduino
    • Debug Level: None
    • Erase Flash: All Flash Contents
    • Bootloader Version: 1.0.0
  6. Click Burn Bootloader and wait for completion
Programming Steps (After Bootloader):
  1. Disconnect XIAO programmer and connect QPAD21 directly via USB
  2. Select Tools → Board → Arduino SAMD (32-bits ARM Cortex-M0+) → Arduino MKR WiFi 1010
  3. Select the correct COM port for QPAD21
  4. Write your code and click Upload
Main Repository Code Examples
QPAD-XIAO-ESP32S3 (ESP32-S3)

The QPAD-XIAO-ESP32S3 features an ESP32-S3 microcontroller with built-in WiFi and Bluetooth capabilities. No bootloader burning required - just configure your IDE and start programming!

Programming Steps:
  1. Connect QPAD-XIAO-ESP32S3 to your computer via USB-C
  2. In Arduino IDE, select Tools → Board → ESP32 Arduino → XIAO_ESP32S3
  3. Select the correct COM port under Tools → Port
  4. Configure additional settings:
    • Upload Speed: 921600
    • CPU Frequency: 240MHz (WiFi/BT)
    • Flash Mode: QIO
    • Flash Size: 8MB (64Mb)
    • Partition Scheme: Default 4MB with spiffs
  5. Write your code and click Upload
Main Repository Arduino Code Examples
💡 Pro Programming Tips:
  • Always test your code first: Use Verify/Compile to check for errors before uploading
  • Debug without uploading: You can compile and check your code without identifying the specific chip
  • Ready to deploy: Once your code compiles successfully, hit Upload to program your board
  • Serial Monitor: Use Tools → Serial Monitor to debug and monitor your program's output
  • Board Manager: Install board support packages through Tools → Board → Boards Manager if needed

Helpful Documentation

Comprehensive documentation covering embedded programming fundamentals, electronics theory, and practical implementation guides.

HTMA Electronics Slides

Official course slides covering microcontroller architecture, I/O techniques, sensor integration, and real-time system design.

Key Topics Covered

  • Microcontroller Programming
    Architecture and fundamentals
  • Sensor Integration
    Data processing methods
  • Real-time Systems
    Design principles and optimization

Board Design Documentation

Essential resources for designing custom PCBs and development boards for embedded programming projects, covering schematic design, layout principles, and manufacturing considerations.

USB-C Board Design Layout

USB-C board design showing proper connector placement, power routing, and signal integrity considerations for embedded development boards

Design Principles

  • USB-C connector placement and orientation
  • Power distribution and ground plane design
  • Signal integrity and trace routing
  • Component placement optimization

Manufacturing Considerations

  • Layer stackup and via design
  • Silkscreen and assembly markings
  • Test point placement
  • Design rule checking (DRC)

Design Files Available:

Complete KiCad project files, schematics, and PCB layouts are available in the Design Files section below for download and modification.

Group Assignment: Embedded Programming Design Trades

Comprehensive analysis of design tradeoffs in embedded programming, covering language selection, development workflows, and microcontroller choices. This collaborative project examines the critical decisions that shape embedded system development and their impact on project success.

Design Tradeoffs Summary

Architecture Example Boards Toolchain / Workflow Strengths Limitations
AVR (8-bit) ATtiny44, ATmega328 (Arduino Uno) avr-gcc, avrdude; Arduino IDE for simplified workflow Mature ecosystem, simple to program, widely taught Limited memory & speed, not ideal for complex tasks
ARM Cortex-M SAMD21, STM32, Teensy arm-none-eabi-gcc, OpenOCD, PlatformIO; Arduino or CircuitPython support High performance, industry standard, strong debugging tools Toolchain setup can be complex
RP2040 Raspberry Pi Pico, XIAO RP2040 Pico SDK (C/C++), MicroPython, Arduino IDE; custom PIO assembly for peripherals Flexible, inexpensive, unique PIO hardware for custom protocols Requires learning PIO for advanced features
ESP8266 / ESP32 NodeMCU, Sparkfun/Adafruit ESP boards Espressif SDK/IDF, Arduino IDE, MicroPython Built-in Wi-Fi/Bluetooth, large community support, IoT-ready Higher power usage, less deterministic timing
RISC-V HiFive boards, experimental dev kits riscv-gnu-toolchain, GDB, newer SDKs Open-source ISA, growing ecosystem, academic/educational interest Toolchain less mature, fewer libraries & examples

Comprehensive comparison of microcontroller architectures and their tradeoffs in embedded programming

Language Tradeoff

Programming Language Tradeoffs in Embedded Systems

Programming language tradeoff analysis showing performance vs development speed considerations

As illustrated in the language tradeoff diagram above, the choice of programming language involves critical tradeoffs between performance and development speed. The analysis shows how different languages balance factors like memory efficiency, execution speed, development time, and ecosystem support for embedded system development.

High Performance Languages

  • C/C++: Maximum control, minimal overhead
  • Rust: Memory safety with performance
  • Assembly: Direct hardware control

Rapid Development Languages

  • Python: Fast prototyping, rich libraries
  • JavaScript: Web integration capabilities
  • MicroPython: Python for microcontrollers

Development Workflow Tradeoff

Development Workflow Tradeoffs in Embedded Systems

Development workflow tradeoff analysis comparing different methodologies and their impact on project outcomes

The development workflow tradeoff diagram above demonstrates how different methodologies balance project timeline, code quality, and team collaboration. This visual analysis compares traditional waterfall approaches with agile methodologies, showing the impact of various toolchains, testing strategies, and deployment processes on embedded system development success.

Traditional Approaches

  • Waterfall: Sequential, documentation-heavy
  • V-Model: Testing integrated with design
  • Spiral: Risk-driven iterative approach

Modern Approaches

  • Agile: Iterative, customer-focused
  • DevOps: Continuous integration/deployment
  • Test-Driven Development: Quality-first

Microcontroller Tradeoff

Microcontroller Selection Tradeoffs

Microcontroller tradeoff analysis showing performance vs power consumption and cost considerations

The microcontroller tradeoff diagram above illustrates the critical balance between performance, power consumption, and cost in embedded system design. This visual analysis evaluates different architectures, processing capabilities, memory configurations, and peripheral options, providing a clear framework for selecting the optimal platform based on specific application requirements.

Low-Power Options

  • ARM Cortex-M0+: Ultra-low power
  • PIC: Simple, cost-effective
  • MSP430: Energy-efficient design

High-Performance Options

  • ARM Cortex-M4: DSP capabilities
  • ESP32: WiFi/Bluetooth integrated
  • STM32: Rich peripheral set

Use Case Analysis

Architecture Workflow Process Key Characteristics
SAMD21 (ARM Cortex-M) • Write code in C/C++ (Arduino IDE or PlatformIO)
• Compile with arm-none-eabi-gcc
• Upload using OpenOCD via USB or SWD debugger
• Debug with GDB or serial monitor
Professional-grade debugging, industry standard tools
RP2040 (Raspberry Pi Pico) • Write code in C/C++ (Pico SDK) or MicroPython
• Compile with CMake + GCC toolchain
• Drag-and-drop .uf2 file to Pico's USB mass storage device
• (Optional) Use custom PIO assembly for hardware interfaces
Accessibility and flexibility, drag-and-drop + PIO

Workflow examples showing different development approaches for ARM and RP2040 architectures

The example workflow table above provides specific recommendations for different embedded system applications, showing how the tradeoff analyses from the previous sections translate into practical implementation strategies. This comprehensive table demonstrates the relationship between project requirements and optimal technology choices.

Key Findings

As demonstrated in the workflow table above, ARM workflows emphasize professional-grade debugging with industry-standard tools, while RP2040 workflows emphasize accessibility and flexibility through drag-and-drop deployment and unique PIO capabilities. The comprehensive architecture comparison shows that optimal design choices depend heavily on project constraints, performance requirements, and development timeline. High-performance applications favor ARM Cortex-M with professional toolchains, while rapid prototyping benefits from RP2040's flexible development environment and built-in features.

Download PDF Report Download PowerPoint

Individual Assignment: ReactionAge

Build a reaction time measurement system based on research methodologies from cognitive science literature. This project combines embedded programming with scientific measurement principles to create a tool for studying human cognitive performance.

Core Features

  • Stimulus Generation
    Visual/auditory stimuli with precise timing
  • Response Detection
    Accurate measurement using buttons/sensors
  • Data Analysis
    Statistical processing and visualization

Research Foundation

Based on PLOS ONE study (2017) examining reaction time variability and cognitive decline.

Repository: github.com/saleemaldajani/reaction-timer-saleemaldajani

Reaction Time vs Age Model

Reaction time model showing the relationship between age and cognitive performance, based on research from PLOS ONE (2017)

Related Research

Parts List / Bill of Materials

Download BOM
# Image Part Description Qty Unit Price Datasheet Price
1 ATmega32 Microcontroller ATmega32 Microcontroller 8-bit AVR MCU, 32 KB Flash, 2 KB SRAM, ADC, timers, USART 1 $7.50 PDF $7.50
2 OLED Display Module 0.96″ OLED Display Module (SSD1306) 128×64 mono OLED, I²C/SPI interface 1 $2.50 PDF $2.50
3 Male Header Pins Male Header Pins (2.54 mm) Breakaway straight male headers 2 $0.20 PDF $0.40
4 Dual-Row Header Dual-Row Header (2×5, 2.54 mm) 10-pin dual-row header, unshrouded 1 $0.50 PDF $0.50
5 SMD MOSFET SMD MOSFET (AO3400A example) N-channel MOSFET, SOT-23 2 $0.15 PDF $0.30
6 SMD Capacitor SMD Capacitor (MLCC 0603 example) Ceramic capacitor, value TBD 5 $0.03 PDF $0.15
7 SMD Resistors SMD Resistors – 1 kΩ (code '1001') Precision SMD resistors 5 $0.02 PDF $0.10
8 SMD LED SMD LED (0603, color TBD) Indicator LED 2 $0.05 PDF $0.10
9 USB-C Connector USB-C Receptacle Surface-mount USB Type‑C connector 1 $0.60 PDF $0.60
10 Custom PCB Custom PCB (Capacitive-Touch Board) Project-specific PCB 1 $10.00 N/A $10.00
TOTAL $22.15

Complete bill of materials for the ReactionAge embedded programming project. All prices are in USD and subject to supplier variations.

Nintendo Switch Controller Training for Toddlers

An interactive training module designed for young children, utilizing Nintendo Switch controller input to create an engaging letter-matching game that develops motor skills and cognitive recognition.

Game Mechanics

  • Button Mapping
    A, B, X, Y in inverted layout
  • Visual Stimulus
    Flashing letters with bright colors
  • Progressive Difficulty
    Adapts based on performance

Educational Benefits

  • Motor Skills
    Hand-eye coordination
  • Letter Recognition
    Alphabet learning
  • Attention Building
    Focus and concentration

Technical Features

  • Controller Support
    Pro Controller & Joy-Con
  • Display System
    Large, colorful letters
  • Progress Tracking
    Analytics & feedback

Design Files

Source code, circuit diagrams, and documentation files for embedded programming projects.

ReactionAge Arduino Code

Download .ino

Key Features

Hardware Integration
  • OLED Display (SSD1306)
  • RGB LED indicators
  • Capacitive touch sensors
  • State machine architecture
Reaction Time Analysis
  • Multiple prediction models
  • Statistical data collection
  • CSV export functionality
  • Real-time age prediction
Code Preview
// Reaction time prediction models
const float A_POOLED = -35.392393f, B_POOLED = 0.1930446f;
const float A_MALE = -58.123019f, B_MALE = 0.2640664f;
const float A_FEMALE = -31.603679f, B_FEMALE = 0.176111015f;

float predictAgeFromRT(unsigned long rt_ms) {
  float x = (float)rt_ms;
  float a, b, c;
  switch (currentModel) {
    case SX_MALE: a=A_MALE; b=B_MALE; c=C_MALE; break;
    case SX_FEMALE: a=A_FEMALE; b=B_FEMALE; c=C_FEMALE; break;
    default: a=A_POOLED; b=B_POOLED; c=C_POOLED; break;
  }
  return a + b*x + c*x*x;
}

Project Resources

Circuit Diagrams

  • Microcontroller connection schematics
  • Sensor integration diagrams
  • Power supply and signal conditioning circuits

Reflections & Learnings

[Reflection notes placeholder.]

Contributions

Acknowledgments for collaborative support and technical assistance during the embedded programming project development.

Technical Support & Collaboration

Eghosa Ohenehn

Contributed valuable insights and technical discussions about microcontroller tradeoffs during the group assignment development. Provided expertise in evaluating different microcontroller architectures and their suitability for various embedded programming applications.

Anthony Pennes

Engaged in extensive discussions throughout the embedded programming design trades section, providing valuable technical insights and collaborative support during the group assignment development process.

Quentin Bolsée

Participated in numerous office hours discussions about embedded programming design trades, contributing significantly to the technical analysis and collaborative development of the group assignment content.

Special thanks to the collaborative learning environment that enabled knowledge sharing and technical problem-solving throughout the embedded programming week.

Ethical AI Use

Transparent documentation of AI assistance used in this week's work, following course guidelines for ethical AI usage.

AI-Assisted Template Generation and Task Planning

Used ChatGPT to generate the weekly template HTML structure and styling framework, and created structured task prompts for week 2 embedded programming content development.

📄 View ChatGPT Transcript 📋 View Task Prompt

AI-Assisted Content Development and Page Structure

Used Cursor AI for iterative content development, page structure optimization, and aesthetic improvements. The AI helped with HTML/CSS implementation, content organization, and maintaining consistent styling across the embedded programming documentation.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted BOM Table Implementation

Used Cursor AI to implement the comprehensive BOM table with clickable images, datasheet links, and full-width responsive design. The AI helped with HTML table structure, CSS styling, and integration of CSV data into an aesthetically pleasing table format.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted Image Recognition and BOM Creation

Used ChatGPT for image recognition of electronic components to identify parts and construct the bill of materials CSV file. The AI analyzed component images and provided detailed part specifications, descriptions, and pricing information for the embedded programming project.

📄 View Full Transcript

AI-Assisted Project Content Updates and Documentation

Used Cursor AI for comprehensive project content updates, documentation improvements, and HTML structure optimization. The AI assisted with content organization, styling consistency, and integration of multimedia elements for the embedded programming documentation.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted Arduino Programming and Code Development

Used ChatGPT for Arduino programming assistance based on the ReactionAge project code from GitHub repository and Quentin Bolsée's QPAD documentation available on the course website embedded system assignment page. The AI provided guidance on embedded programming concepts, code optimization, and integration with the QPAD-xiao board design.

📄 View ChatGPT Transcript 🔗 GitHub Repository 🔗 QPAD-xiao Documentation

AI-Assisted Group Assignment Content Development and Table Implementation

Used Cursor AI for comprehensive development of the embedded programming design trades group assignment section. The AI assisted with creating structured subsections for language, development workflow, and microcontroller tradeoffs, implementing professional HTML tables with data extracted from PowerPoint presentations, and integrating download links for PDF and PPTX files.

📄 View Full Transcript 💾 Download Chat File
``` Now let me add the board design subsection to the design files section. First, let me find the design files section: Now let me find the end of the design files section to add the board design subsection: Now I'll add the board design subsection to the design files section: ```html Week 2 · HTMAA 2025 · Embedded Programming
Profile Image

Week 2

Embedded Programming · HTMAA 2025

Week Highlights

Key achievements and insights from the embedded programming week, including successful microcontroller programming, sensor integration, and the development of the ReactionAge reaction time measurement system.

Hello World! Success

Hello World! Embedded Programming Success

First successful embedded programming implementation with microcontroller and display

ReactionAge Demo

ReactionAge system in action - measuring reaction time and predicting age

Embedded Programming Design Trades

Comprehensive analysis of critical design decisions in embedded system development

Language Tradeoff

Language Tradeoff

Development Workflow Tradeoff

Workflow Tradeoff

Microcontroller Tradeoff

Microcontroller Tradeoff

📊 View Full Analysis

💻 Design Files Available

Download Arduino code, view circuit diagrams, and access all embedded programming assets from this week's assignments

📄 View Design Files

Table of Contents

Embedded Programming

This week focuses on embedded programming fundamentals, exploring how to program microcontrollers and create interactive electronic systems. We'll dive into the world of digital electronics, sensors, and real-time programming to build responsive devices that can sense, process, and react to their environment.

• Introduction to microcontrollers and embedded systems
• Programming fundamentals for real-time applications
• Sensor integration and data processing

This Week's Goals

  • Master Embedded Programming
    Learn microcontroller programming, sensor integration, and real-time system design
  • Build Interactive Systems
    Create responsive electronic devices that can sense and react to environmental inputs
  • Develop ReactionAge Project
    Implement a reaction time measurement system based on research methodologies

Assignments

  • Group Assignment
    Collaborative embedded programming project focusing on sensor integration and real-time data processing
  • Individual Assignment: ReactionAge
    Build a reaction time measurement system based on research methodologies from cognitive science literature

Tools & Materials

  • Microcontrollers
    Arduino, ESP32, or similar development boards
  • Development Environment
    Arduino IDE, PlatformIO, or VS Code with embedded extensions
  • Sensors & Components
    Buttons, LEDs, displays, accelerometers, and other input/output devices
  • Prototyping Tools
    Breadboards, jumper wires, resistors, and basic electronic components

Training Documentation

Essential training materials and resources for embedded programming fundamentals, microcontroller setup, and sensor integration techniques.

Electronics & Soldering Training

Download Notes Slack Discussion

Soldering Fundamentals

Comprehensive guide to soldering techniques for embedded electronics, covering both wire soldering and solder paste methods.

Wire Soldering
  • Temperature: 720-800°F
  • Melt pad onto electrode first
  • Anchor arms for precision control
  • Use appropriate tip size for part
  • Work from low to high profile parts
Solder Paste
  • Use gloves for protection
  • Highest magnification possible
  • Temperature: 270-330°C
  • Heat all sides together
  • Required for SMD components

Safety First:

Always wear safety glasses and use proper ventilation. Lead-free solder requires extra caution due to flux crystallization at high temperatures.

How to Solder (Almost) Anything

Step-by-step video demonstrations of essential soldering techniques for embedded electronics, covering both wire soldering and surface-mount component assembly.

Wire Soldering Technique

Learn the proper technique for soldering wires to components, starting with one edge to keep the part in place, then soldering the rest easily by keeping your wrist stable and the solder tip on the pad to heat it up with the part, and slowly bringing in solder.

Wire soldering demonstration showing proper technique and wrist stability

Solder Paste Assembly

Complete process for surface-mount component assembly: apply solder paste first, place the component, then heat up with a heat gun to create strong, reliable connections.

Applying solder paste to PCB pads

Placing microcontroller on prepared solder paste

Using heat gun to reflow solder paste and complete the connection

Pro Tips:

For detailed soldering guides and advanced techniques, refer to the Electronics & Soldering Training section above for comprehensive documentation and resources.

Microcontroller Programming Basics - Introduction to embedded programming concepts and development environments
Sensor Integration Workshop - Hands-on training for connecting and programming various sensors
Real-time System Design - Principles of creating responsive embedded systems
Debugging Techniques - Tools and methods for troubleshooting embedded code

QPAD Development Boards Programming Guide

Complete programming setup and workflow for QPAD development boards, covering bootloader configuration, IDE setup, and code deployment for different microcontroller architectures.

QPAD-XIAO (RP2040)

The QPAD-XIAO features a Raspberry Pi RP2040 microcontroller with built-in bootloader support. No bootloader burning required - simply configure your IDE and start programming!

Programming Steps:
  1. Connect QPAD-XIAO to your computer via USB-C
  2. In Arduino IDE, select Tools → Board → Raspberry Pi RP2040 Boards → XIAO RP2040
  3. Select the correct COM port under Tools → Port
  4. Write your code and click Upload - the board handles everything automatically!
Main Repository Code Examples
QPAD21 (SAMD21)

The QPAD21 uses an ATSAMD21 microcontroller that requires bootloader programming using a XIAO programmer chip. Follow these steps to get it ready for development.

Bootloader Programming Steps:
  1. Connect XIAO programmer to QPAD21 using the programming header
  2. Connect XIAO programmer to your computer via USB
  3. In Arduino IDE, select Tools → Board → Arduino SAMD (32-bits ARM Cortex-M0+) → Arduino MKR WiFi 1010
  4. Select the correct COM port for the XIAO programmer
  5. Configure bootloader settings:
    • Bootloader: Adafruit Circuit Playground Express
    • Clock: 48 MHz (USB)
    • USB Stack: Arduino
    • Debug Level: None
    • Erase Flash: All Flash Contents
    • Bootloader Version: 1.0.0
  6. Click Burn Bootloader and wait for completion
Programming Steps (After Bootloader):
  1. Disconnect XIAO programmer and connect QPAD21 directly via USB
  2. Select Tools → Board → Arduino SAMD (32-bits ARM Cortex-M0+) → Arduino MKR WiFi 1010
  3. Select the correct COM port for QPAD21
  4. Write your code and click Upload
Main Repository Code Examples
QPAD-XIAO-ESP32S3 (ESP32-S3)

The QPAD-XIAO-ESP32S3 features an ESP32-S3 microcontroller with built-in WiFi and Bluetooth capabilities. No bootloader burning required - just configure your IDE and start programming!

Programming Steps:
  1. Connect QPAD-XIAO-ESP32S3 to your computer via USB-C
  2. In Arduino IDE, select Tools → Board → ESP32 Arduino → XIAO_ESP32S3
  3. Select the correct COM port under Tools → Port
  4. Configure additional settings:
    • Upload Speed: 921600
    • CPU Frequency: 240MHz (WiFi/BT)
    • Flash Mode: QIO
    • Flash Size: 8MB (64Mb)
    • Partition Scheme: Default 4MB with spiffs
  5. Write your code and click Upload
Main Repository Arduino Code Examples
💡 Pro Programming Tips:
  • Always test your code first: Use Verify/Compile to check for errors before uploading
  • Debug without uploading: You can compile and check your code without identifying the specific chip
  • Ready to deploy: Once your code compiles successfully, hit Upload to program your board
  • Serial Monitor: Use Tools → Serial Monitor to debug and monitor your program's output
  • Board Manager: Install board support packages through Tools → Board → Boards Manager if needed

Helpful Documentation

Comprehensive documentation covering embedded programming fundamentals, electronics theory, and practical implementation guides.

HTMA Electronics Slides

Official course slides covering microcontroller architecture, I/O techniques, sensor integration, and real-time system design.

Key Topics Covered

  • Microcontroller Programming
    Architecture and fundamentals
  • Sensor Integration
    Data processing methods
  • Real-time Systems
    Design principles and optimization

Board Design Documentation

Essential resources for designing custom PCBs and development boards for embedded programming projects, covering schematic design, layout principles, and manufacturing considerations.

USB-C Board Design Layout

USB-C board design showing proper connector placement, power routing, and signal integrity considerations for embedded development boards

Design Principles

  • USB-C connector placement and orientation
  • Power distribution and ground plane design
  • Signal integrity and trace routing
  • Component placement optimization

Manufacturing Considerations

  • Layer stackup and via design
  • Silkscreen and assembly markings
  • Test point placement
  • Design rule checking (DRC)

Design Files Available:

Complete KiCad project files, schematics, and PCB layouts are available in the Design Files section below for download and modification.

Group Assignment: Embedded Programming Design Trades

Comprehensive analysis of design tradeoffs in embedded programming, covering language selection, development workflows, and microcontroller choices. This collaborative project examines the critical decisions that shape embedded system development and their impact on project success.

Design Tradeoffs Summary

Architecture Example Boards Toolchain / Workflow Strengths Limitations
AVR (8-bit) ATtiny44, ATmega328 (Arduino Uno) avr-gcc, avrdude; Arduino IDE for simplified workflow Mature ecosystem, simple to program, widely taught Limited memory & speed, not ideal for complex tasks
ARM Cortex-M SAMD21, STM32, Teensy arm-none-eabi-gcc, OpenOCD, PlatformIO; Arduino or CircuitPython support High performance, industry standard, strong debugging tools Toolchain setup can be complex
RP2040 Raspberry Pi Pico, XIAO RP2040 Pico SDK (C/C++), MicroPython, Arduino IDE; custom PIO assembly for peripherals Flexible, inexpensive, unique PIO hardware for custom protocols Requires learning PIO for advanced features
ESP8266 / ESP32 NodeMCU, Sparkfun/Adafruit ESP boards Espressif SDK/IDF, Arduino IDE, MicroPython Built-in Wi-Fi/Bluetooth, large community support, IoT-ready Higher power usage, less deterministic timing
RISC-V HiFive boards, experimental dev kits riscv-gnu-toolchain, GDB, newer SDKs Open-source ISA, growing ecosystem, academic/educational interest Toolchain less mature, fewer libraries & examples

Comprehensive comparison of microcontroller architectures and their tradeoffs in embedded programming

Language Tradeoff

Programming Language Tradeoffs in Embedded Systems

Programming language tradeoff analysis showing performance vs development speed considerations

As illustrated in the language tradeoff diagram above, the choice of programming language involves critical tradeoffs between performance and development speed. The analysis shows how different languages balance factors like memory efficiency, execution speed, development time, and ecosystem support for embedded system development.

High Performance Languages

  • C/C++: Maximum control, minimal overhead
  • Rust: Memory safety with performance
  • Assembly: Direct hardware control

Rapid Development Languages

  • Python: Fast prototyping, rich libraries
  • JavaScript: Web integration capabilities
  • MicroPython: Python for microcontrollers

Development Workflow Tradeoff

Development Workflow Tradeoffs in Embedded Systems

Development workflow tradeoff analysis comparing different methodologies and their impact on project outcomes

The development workflow tradeoff diagram above demonstrates how different methodologies balance project timeline, code quality, and team collaboration. This visual analysis compares traditional waterfall approaches with agile methodologies, showing the impact of various toolchains, testing strategies, and deployment processes on embedded system development success.

Traditional Approaches

  • Waterfall: Sequential, documentation-heavy
  • V-Model: Testing integrated with design
  • Spiral: Risk-driven iterative approach

Modern Approaches

  • Agile: Iterative, customer-focused
  • DevOps: Continuous integration/deployment
  • Test-Driven Development: Quality-first

Microcontroller Tradeoff

Microcontroller Selection Tradeoffs

Microcontroller tradeoff analysis showing performance vs power consumption and cost considerations

The microcontroller tradeoff diagram above illustrates the critical balance between performance, power consumption, and cost in embedded system design. This visual analysis evaluates different architectures, processing capabilities, memory configurations, and peripheral options, providing a clear framework for selecting the optimal platform based on specific application requirements.

Low-Power Options

  • ARM Cortex-M0+: Ultra-low power
  • PIC: Simple, cost-effective
  • MSP430: Energy-efficient design

High-Performance Options

  • ARM Cortex-M4: DSP capabilities
  • ESP32: WiFi/Bluetooth integrated
  • STM32: Rich peripheral set

Use Case Analysis

Architecture Workflow Process Key Characteristics
SAMD21 (ARM Cortex-M) • Write code in C/C++ (Arduino IDE or PlatformIO)
• Compile with arm-none-eabi-gcc
• Upload using OpenOCD via USB or SWD debugger
• Debug with GDB or serial monitor
Professional-grade debugging, industry standard tools
RP2040 (Raspberry Pi Pico) • Write code in C/C++ (Pico SDK) or MicroPython
• Compile with CMake + GCC toolchain
• Drag-and-drop .uf2 file to Pico's USB mass storage device
• (Optional) Use custom PIO assembly for hardware interfaces
Accessibility and flexibility, drag-and-drop + PIO

Workflow examples showing different development approaches for ARM and RP2040 architectures

The example workflow table above provides specific recommendations for different embedded system applications, showing how the tradeoff analyses from the previous sections translate into practical implementation strategies. This comprehensive table demonstrates the relationship between project requirements and optimal technology choices.

Key Findings

As demonstrated in the workflow table above, ARM workflows emphasize professional-grade debugging with industry-standard tools, while RP2040 workflows emphasize accessibility and flexibility through drag-and-drop deployment and unique PIO capabilities. The comprehensive architecture comparison shows that optimal design choices depend heavily on project constraints, performance requirements, and development timeline. High-performance applications favor ARM Cortex-M with professional toolchains, while rapid prototyping benefits from RP2040's flexible development environment and built-in features.

Download PDF Report Download PowerPoint

Individual Assignment: ReactionAge

Build a reaction time measurement system based on research methodologies from cognitive science literature. This project combines embedded programming with scientific measurement principles to create a tool for studying human cognitive performance.

Core Features

  • Stimulus Generation
    Visual/auditory stimuli with precise timing
  • Response Detection
    Accurate measurement using buttons/sensors
  • Data Analysis
    Statistical processing and visualization

Research Foundation

Based on PLOS ONE study (2017) examining reaction time variability and cognitive decline.

Repository: github.com/saleemaldajani/reaction-timer-saleemaldajani

Reaction Time vs Age Model

Reaction time model showing the relationship between age and cognitive performance, based on research from PLOS ONE (2017)

Related Research

Parts List / Bill of Materials

Download BOM
# Image Part Description Qty Unit Price Datasheet Price
1 ATmega32 Microcontroller ATmega32 Microcontroller 8-bit AVR MCU, 32 KB Flash, 2 KB SRAM, ADC, timers, USART 1 $7.50 PDF $7.50
2 OLED Display Module 0.96″ OLED Display Module (SSD1306) 128×64 mono OLED, I²C/SPI interface 1 $2.50 PDF $2.50
3 Male Header Pins Male Header Pins (2.54 mm) Breakaway straight male headers 2 $0.20 PDF $0.40
4 Dual-Row Header Dual-Row Header (2×5, 2.54 mm) 10-pin dual-row header, unshrouded 1 $0.50 PDF $0.50
5 SMD MOSFET SMD MOSFET (AO3400A example) N-channel MOSFET, SOT-23 2 $0.15 PDF $0.30
6 SMD Capacitor SMD Capacitor (MLCC 0603 example) Ceramic capacitor, value TBD 5 $0.03 PDF $0.15
7 SMD Resistors SMD Resistors – 1 kΩ (code '1001') Precision SMD resistors 5 $0.02 PDF $0.10
8 SMD LED SMD LED (0603, color TBD) Indicator LED 2 $0.05 PDF $0.10
9 USB-C Connector USB-C Receptacle Surface-mount USB Type‑C connector 1 $0.60 PDF $0.60
10 Custom PCB Custom PCB (Capacitive-Touch Board) Project-specific PCB 1 $10.00 N/A $10.00
TOTAL $22.15

Complete bill of materials for the ReactionAge embedded programming project. All prices are in USD and subject to supplier variations.

Nintendo Switch Controller Training for Toddlers

An interactive training module designed for young children, utilizing Nintendo Switch controller input to create an engaging letter-matching game that develops motor skills and cognitive recognition.

Game Mechanics

  • Button Mapping
    A, B, X, Y in inverted layout
  • Visual Stimulus
    Flashing letters with bright colors
  • Progressive Difficulty
    Adapts based on performance

Educational Benefits

  • Motor Skills
    Hand-eye coordination
  • Letter Recognition
    Alphabet learning
  • Attention Building
    Focus and concentration

Technical Features

  • Controller Support
    Pro Controller & Joy-Con
  • Display System
    Large, colorful letters
  • Progress Tracking
    Analytics & feedback

Design Files

Source code, circuit diagrams, and documentation files for embedded programming projects.

ReactionAge Arduino Code

Download .ino

Key Features

Hardware Integration
  • OLED Display (SSD1306)
  • RGB LED indicators
  • Capacitive touch sensors
  • State machine architecture
Reaction Time Analysis
  • Multiple prediction models
  • Statistical data collection
  • CSV export functionality
  • Real-time age prediction
Code Preview
// Reaction time prediction models
const float A_POOLED = -35.392393f, B_POOLED = 0.1930446f;
const float A_MALE = -58.123019f, B_MALE = 0.2640664f;
const float A_FEMALE = -31.603679f, B_FEMALE = 0.176111015f;

float predictAgeFromRT(unsigned long rt_ms) {
  float x = (float)rt_ms;
  float a, b, c;
  switch (currentModel) {
    case SX_MALE: a=A_MALE; b=B_MALE; c=C_MALE; break;
    case SX_FEMALE: a=A_FEMALE; b=B_FEMALE; c=C_FEMALE; break;
    default: a=A_POOLED; b=B_POOLED; c=C_POOLED; break;
  }
  return a + b*x + c*x*x;
}

Project Resources

Circuit Diagrams

  • Microcontroller connection schematics
  • Sensor integration diagrams
  • Power supply and signal conditioning circuits

Board Design Files

Complete KiCad project files for custom PCB design, including schematics, PCB layouts, and project configurations for embedded development boards.

File Type Description Download
KiCad Project Complete KiCad project file containing all design data and settings .kicad_pro
Schematic Circuit schematic showing component connections and electrical design .kicad_sch
PCB Layout Physical PCB layout with component placement and trace routing .kicad_pcb

Design Documentation:

For detailed board design principles, USB-C connector placement, and manufacturing considerations, refer to the Board Design Documentation section above.

Reflections & Learnings

[Reflection notes placeholder.]

Contributions

Acknowledgments for collaborative support and technical assistance during the embedded programming project development.

Technical Support & Collaboration

Eghosa Ohenehn

Contributed valuable insights and technical discussions about microcontroller tradeoffs during the group assignment development. Provided expertise in evaluating different microcontroller architectures and their suitability for various embedded programming applications.

Anthony Pennes

Engaged in extensive discussions throughout the embedded programming design trades section, providing valuable technical insights and collaborative support during the group assignment development process.

Quentin Bolsée

Participated in numerous office hours discussions about embedded programming design trades, contributing significantly to the technical analysis and collaborative development of the group assignment content.

Special thanks to the collaborative learning environment that enabled knowledge sharing and technical problem-solving throughout the embedded programming week.

Ethical AI Use

Transparent documentation of AI assistance used in this week's work, following course guidelines for ethical AI usage.

AI-Assisted Template Generation and Task Planning

Used ChatGPT to generate the weekly template HTML structure and styling framework, and created structured task prompts for week 2 embedded programming content development.

📄 View ChatGPT Transcript 📋 View Task Prompt

AI-Assisted Content Development and Page Structure

Used Cursor AI for iterative content development, page structure optimization, and aesthetic improvements. The AI helped with HTML/CSS implementation, content organization, and maintaining consistent styling across the embedded programming documentation.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted BOM Table Implementation

Used Cursor AI to implement the comprehensive BOM table with clickable images, datasheet links, and full-width responsive design. The AI helped with HTML table structure, CSS styling, and integration of CSV data into an aesthetically pleasing table format.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted Image Recognition and BOM Creation

Used ChatGPT for image recognition of electronic components to identify parts and construct the bill of materials CSV file. The AI analyzed component images and provided detailed part specifications, descriptions, and pricing information for the embedded programming project.

📄 View Full Transcript

AI-Assisted Project Content Updates and Documentation

Used Cursor AI for comprehensive project content updates, documentation improvements, and HTML structure optimization. The AI assisted with content organization, styling consistency, and integration of multimedia elements for the embedded programming documentation.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted Arduino Programming and Code Development

Used ChatGPT for Arduino programming assistance based on the ReactionAge project code from GitHub repository and Quentin Bolsée's QPAD documentation available on the course website embedded system assignment page. The AI provided guidance on embedded programming concepts, code optimization, and integration with the QPAD-xiao board design.

📄 View ChatGPT Transcript 🔗 GitHub Repository 🔗 QPAD-xiao Documentation

AI-Assisted Group Assignment Content Development and Table Implementation

Used Cursor AI for comprehensive development of the embedded programming design trades group assignment section. The AI assisted with creating structured subsections for language, development workflow, and microcontroller tradeoffs, implementing professional HTML tables with data extracted from PowerPoint presentations, and integrating download links for PDF and PPTX files.

📄 View Full Transcript 💾 Download Chat File
``` Perfect! I've successfully added both sections as requested: ## ✅ Board Design Documentation Added ### 1. **Helpful Documentation Section** - **Location**: Added under the "Helpful Documentation" section - **Image**: `week2/training/usbc-board-design.png` with descriptive caption - **Content**: - Description of USB-C board design principles - Design principles covering connector placement, power routing, signal integrity - Manufacturing considerations including layer stackup, silkscreen, test points - Link to design files section ### 2. **Design Files Section - Board Design Subsection** - **Location**: Added to the existing "Design Files" section - **Content**: - Professional table with all three KiCad files from `week2/pcb-design/`: - `QPAD21.kicad_pro` - Complete KiCad project file - `QPAD21.kicad_sch` - Circuit schematic - `QPAD21.kicad_pcb` - PCB layout - Download links for each file with proper styling - Cross-reference link back to the Board Design Documentation section ### 3. **Cross-Linking** - The Board Design Documentation section links to the Design Files section - The Board Design Files section links back to the Board Design Documentation section - Both sections are properly integrated into the existing page structure The implementation provides a complete workflow for users to understand board design principles, view the reference image, and download the actual design files for modification and learning. --- **User** ok now under board design put common troubleshooting 1. voltage regulator and put the image of the week2/training/voltage-regulator 2. usb-c pinout and put the image of the week2/training/usb-c-pinot explain under each get a multimeter and check the voltages on these channels to make sure its working with power connected to a board helpful tip, get a portable multimeter @https://www.amazon.com/ALLOSUN-Multimeter-Capacitance-Frequency-Continuity/dp/B08HK295HK/ref=sr_1_1_sspa?dib=eyJ2IjoiMSJ9.1PikVmgloQYjRPbb4ovm5mkddqvnWRydHbdhAatNVTvZRVlO3s9TlQMPn5XHJ6U-K21afYaxWksdJTFzpO7HOcV0lMWp_W3TvunO2KrzV5ng9m6DgwI9pB-zMWVA2PvoUDYf9fNb1VJ6VodvLzpNudatd4a5pjvJxb17_54ohiOqEYatH705sMIDuylV8MDylw_6V9yD3F4zhgIxeohsilNRfeaks6xRX4joCOSeqc5RQKb9TF-mK0ul1lAicsoi4h8Am-G0HOPh3qgfFhBaQ15NdtjaECe4MOCKFB77FIg.PitTq4zDZSaK4EXf4ekBZgN6GbNXrLR0RDoZIT02v0c&dib_tag=se&keywords=pocket+multimeter&qid=1758726175&sr=8-1-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1 and put a link to this as an example --- **Cursor** I'll add a common troubleshooting section under the board design documentation with voltage regulator and USB-C pinout troubleshooting guides. Let me add this to the board design section. ```html Week 2 · HTMAA 2025 · Embedded Programming
Profile Image

Week 2

Embedded Programming · HTMAA 2025

Week Highlights

Key achievements and insights from the embedded programming week, including successful microcontroller programming, sensor integration, and the development of the ReactionAge reaction time measurement system.

Hello World! Success

Hello World! Embedded Programming Success

First successful embedded programming implementation with microcontroller and display

ReactionAge Demo

ReactionAge system in action - measuring reaction time and predicting age

Embedded Programming Design Trades

Comprehensive analysis of critical design decisions in embedded system development

Language Tradeoff

Language Tradeoff

Development Workflow Tradeoff

Workflow Tradeoff

Microcontroller Tradeoff

Microcontroller Tradeoff

📊 View Full Analysis

💻 Design Files Available

Download Arduino code, view circuit diagrams, and access all embedded programming assets from this week's assignments

📄 View Design Files

Table of Contents

Embedded Programming

This week focuses on embedded programming fundamentals, exploring how to program microcontrollers and create interactive electronic systems. We'll dive into the world of digital electronics, sensors, and real-time programming to build responsive devices that can sense, process, and react to their environment.

• Introduction to microcontrollers and embedded systems
• Programming fundamentals for real-time applications
• Sensor integration and data processing

This Week's Goals

  • Master Embedded Programming
    Learn microcontroller programming, sensor integration, and real-time system design
  • Build Interactive Systems
    Create responsive electronic devices that can sense and react to environmental inputs
  • Develop ReactionAge Project
    Implement a reaction time measurement system based on research methodologies

Assignments

  • Group Assignment
    Collaborative embedded programming project focusing on sensor integration and real-time data processing
  • Individual Assignment: ReactionAge
    Build a reaction time measurement system based on research methodologies from cognitive science literature

Tools & Materials

  • Microcontrollers
    Arduino, ESP32, or similar development boards
  • Development Environment
    Arduino IDE, PlatformIO, or VS Code with embedded extensions
  • Sensors & Components
    Buttons, LEDs, displays, accelerometers, and other input/output devices
  • Prototyping Tools
    Breadboards, jumper wires, resistors, and basic electronic components

Training Documentation

Essential training materials and resources for embedded programming fundamentals, microcontroller setup, and sensor integration techniques.

Electronics & Soldering Training

Download Notes Slack Discussion

Soldering Fundamentals

Comprehensive guide to soldering techniques for embedded electronics, covering both wire soldering and solder paste methods.

Wire Soldering
  • Temperature: 720-800°F
  • Melt pad onto electrode first
  • Anchor arms for precision control
  • Use appropriate tip size for part
  • Work from low to high profile parts
Solder Paste
  • Use gloves for protection
  • Highest magnification possible
  • Temperature: 270-330°C
  • Heat all sides together
  • Required for SMD components

Safety First:

Always wear safety glasses and use proper ventilation. Lead-free solder requires extra caution due to flux crystallization at high temperatures.

How to Solder (Almost) Anything

Step-by-step video demonstrations of essential soldering techniques for embedded electronics, covering both wire soldering and surface-mount component assembly.

Wire Soldering Technique

Learn the proper technique for soldering wires to components, starting with one edge to keep the part in place, then soldering the rest easily by keeping your wrist stable and the solder tip on the pad to heat it up with the part, and slowly bringing in solder.

Wire soldering demonstration showing proper technique and wrist stability

Solder Paste Assembly

Complete process for surface-mount component assembly: apply solder paste first, place the component, then heat up with a heat gun to create strong, reliable connections.

Applying solder paste to PCB pads

Placing microcontroller on prepared solder paste

Using heat gun to reflow solder paste and complete the connection

Pro Tips:

For detailed soldering guides and advanced techniques, refer to the Electronics & Soldering Training section above for comprehensive documentation and resources.

Microcontroller Programming Basics - Introduction to embedded programming concepts and development environments
Sensor Integration Workshop - Hands-on training for connecting and programming various sensors
Real-time System Design - Principles of creating responsive embedded systems
Debugging Techniques - Tools and methods for troubleshooting embedded code

QPAD Development Boards Programming Guide

Complete programming setup and workflow for QPAD development boards, covering bootloader configuration, IDE setup, and code deployment for different microcontroller architectures.

QPAD-XIAO (RP2040)

The QPAD-XIAO features a Raspberry Pi RP2040 microcontroller with built-in bootloader support. No bootloader burning required - simply configure your IDE and start programming!

Programming Steps:
  1. Connect QPAD-XIAO to your computer via USB-C
  2. In Arduino IDE, select Tools → Board → Raspberry Pi RP2040 Boards → XIAO RP2040
  3. Select the correct COM port under Tools → Port
  4. Write your code and click Upload - the board handles everything automatically!
Main Repository Code Examples
QPAD21 (SAMD21)

The QPAD21 uses an ATSAMD21 microcontroller that requires bootloader programming using a XIAO programmer chip. Follow these steps to get it ready for development.

Bootloader Programming Steps:
  1. Connect XIAO programmer to QPAD21 using the programming header
  2. Connect XIAO programmer to your computer via USB
  3. In Arduino IDE, select Tools → Board → Arduino SAMD (32-bits ARM Cortex-M0+) → Arduino MKR WiFi 1010
  4. Select the correct COM port for the XIAO programmer
  5. Configure bootloader settings:
    • Bootloader: Adafruit Circuit Playground Express
    • Clock: 48 MHz (USB)
    • USB Stack: Arduino
    • Debug Level: None
    • Erase Flash: All Flash Contents
    • Bootloader Version: 1.0.0
  6. Click Burn Bootloader and wait for completion
Programming Steps (After Bootloader):
  1. Disconnect XIAO programmer and connect QPAD21 directly via USB
  2. Select Tools → Board → Arduino SAMD (32-bits ARM Cortex-M0+) → Arduino MKR WiFi 1010
  3. Select the correct COM port for QPAD21
  4. Write your code and click Upload
Main Repository Code Examples
QPAD-XIAO-ESP32S3 (ESP32-S3)

The QPAD-XIAO-ESP32S3 features an ESP32-S3 microcontroller with built-in WiFi and Bluetooth capabilities. No bootloader burning required - just configure your IDE and start programming!

Programming Steps:
  1. Connect QPAD-XIAO-ESP32S3 to your computer via USB-C
  2. In Arduino IDE, select Tools → Board → ESP32 Arduino → XIAO_ESP32S3
  3. Select the correct COM port under Tools → Port
  4. Configure additional settings:
    • Upload Speed: 921600
    • CPU Frequency: 240MHz (WiFi/BT)
    • Flash Mode: QIO
    • Flash Size: 8MB (64Mb)
    • Partition Scheme: Default 4MB with spiffs
  5. Write your code and click Upload
Main Repository Arduino Code Examples
💡 Pro Programming Tips:
  • Always test your code first: Use Verify/Compile to check for errors before uploading
  • Debug without uploading: You can compile and check your code without identifying the specific chip
  • Ready to deploy: Once your code compiles successfully, hit Upload to program your board
  • Serial Monitor: Use Tools → Serial Monitor to debug and monitor your program's output
  • Board Manager: Install board support packages through Tools → Board → Boards Manager if needed

Helpful Documentation

Comprehensive documentation covering embedded programming fundamentals, electronics theory, and practical implementation guides.

HTMA Electronics Slides

Official course slides covering microcontroller architecture, I/O techniques, sensor integration, and real-time system design.

Key Topics Covered

  • Microcontroller Programming
    Architecture and fundamentals
  • Sensor Integration
    Data processing methods
  • Real-time Systems
    Design principles and optimization

Board Design Documentation

Essential resources for designing custom PCBs and development boards for embedded programming projects, covering schematic design, layout principles, and manufacturing considerations.

USB-C Board Design Layout

USB-C board design showing proper connector placement, power routing, and signal integrity considerations for embedded development boards

Design Principles

  • USB-C connector placement and orientation
  • Power distribution and ground plane design
  • Signal integrity and trace routing
  • Component placement optimization

Manufacturing Considerations

  • Layer stackup and via design
  • Silkscreen and assembly markings
  • Test point placement
  • Design rule checking (DRC)

Design Files Available:

Complete KiCad project files, schematics, and PCB layouts are available in the Design Files section below for download and modification.

Common Troubleshooting

Essential troubleshooting techniques for embedded development boards, covering power supply verification and connector testing using multimeter measurements.

Voltage Regulator Troubleshooting

Verify that your voltage regulator is functioning correctly by measuring output voltages with a multimeter when power is connected to the board.

Voltage Regulator Testing Points

Voltage regulator testing points showing input, output, and ground connections for multimeter verification

Testing Steps:
  1. Connect power to your development board
  2. Set multimeter to DC voltage mode
  3. Measure input voltage (VIN) - should match your power supply voltage
  4. Measure output voltage (VOUT) - should be the regulated voltage (e.g., 3.3V or 5V)
  5. Check ground continuity between input and output ground pins
  6. Verify no voltage drop under load conditions

💡 Pro Tip:

Use a portable multimeter for easy on-the-go testing and debugging of embedded circuits.

USB-C Pinout Troubleshooting

Verify USB-C connector functionality by testing power delivery, data lines, and ground connections using multimeter measurements.

USB-C Pinout Testing Diagram

USB-C pinout diagram showing power, data, and ground connections for multimeter testing and verification

Testing Steps:
  1. Connect USB-C cable to your development board
  2. Set multimeter to DC voltage mode
  3. Measure VBUS (pin A4/B4) - should read 5V when connected to power
  4. Test ground continuity (pins A1/B1, A12/B12) - should show 0Ω resistance
  5. Check CC1/CC2 pins (A5/B5) for proper connection detection
  6. Verify D+ and D- data lines (A6/A7, B6/B7) for continuity
  7. Test both orientations of the USB-C connector

🔧 Troubleshooting Tips:

  • If VBUS shows 0V, check cable and power source
  • If ground shows high resistance, check solder joints
  • If data lines show no continuity, verify connector orientation
  • Test with known working USB-C cable for comparison

Group Assignment: Embedded Programming Design Trades

Comprehensive analysis of design tradeoffs in embedded programming, covering language selection, development workflows, and microcontroller choices. This collaborative project examines the critical decisions that shape embedded system development and their impact on project success.

Design Tradeoffs Summary

Architecture Example Boards Toolchain / Workflow Strengths Limitations
AVR (8-bit) ATtiny44, ATmega328 (Arduino Uno) avr-gcc, avrdude; Arduino IDE for simplified workflow Mature ecosystem, simple to program, widely taught Limited memory & speed, not ideal for complex tasks
ARM Cortex-M SAMD21, STM32, Teensy arm-none-eabi-gcc, OpenOCD, PlatformIO; Arduino or CircuitPython support High performance, industry standard, strong debugging tools Toolchain setup can be complex
RP2040 Raspberry Pi Pico, XIAO RP2040 Pico SDK (C/C++), MicroPython, Arduino IDE; custom PIO assembly for peripherals Flexible, inexpensive, unique PIO hardware for custom protocols Requires learning PIO for advanced features
ESP8266 / ESP32 NodeMCU, Sparkfun/Adafruit ESP boards Espressif SDK/IDF, Arduino IDE, MicroPython Built-in Wi-Fi/Bluetooth, large community support, IoT-ready Higher power usage, less deterministic timing
RISC-V HiFive boards, experimental dev kits riscv-gnu-toolchain, GDB, newer SDKs Open-source ISA, growing ecosystem, academic/educational interest Toolchain less mature, fewer libraries & examples

Comprehensive comparison of microcontroller architectures and their tradeoffs in embedded programming

Language Tradeoff

Programming Language Tradeoffs in Embedded Systems

Programming language tradeoff analysis showing performance vs development speed considerations

As illustrated in the language tradeoff diagram above, the choice of programming language involves critical tradeoffs between performance and development speed. The analysis shows how different languages balance factors like memory efficiency, execution speed, development time, and ecosystem support for embedded system development.

High Performance Languages

  • C/C++: Maximum control, minimal overhead
  • Rust: Memory safety with performance
  • Assembly: Direct hardware control

Rapid Development Languages

  • Python: Fast prototyping, rich libraries
  • JavaScript: Web integration capabilities
  • MicroPython: Python for microcontrollers

Development Workflow Tradeoff

Development Workflow Tradeoffs in Embedded Systems

Development workflow tradeoff analysis comparing different methodologies and their impact on project outcomes

The development workflow tradeoff diagram above demonstrates how different methodologies balance project timeline, code quality, and team collaboration. This visual analysis compares traditional waterfall approaches with agile methodologies, showing the impact of various toolchains, testing strategies, and deployment processes on embedded system development success.

Traditional Approaches

  • Waterfall: Sequential, documentation-heavy
  • V-Model: Testing integrated with design
  • Spiral: Risk-driven iterative approach

Modern Approaches

  • Agile: Iterative, customer-focused
  • DevOps: Continuous integration/deployment
  • Test-Driven Development: Quality-first

Microcontroller Tradeoff

Microcontroller Selection Tradeoffs

Microcontroller tradeoff analysis showing performance vs power consumption and cost considerations

The microcontroller tradeoff diagram above illustrates the critical balance between performance, power consumption, and cost in embedded system design. This visual analysis evaluates different architectures, processing capabilities, memory configurations, and peripheral options, providing a clear framework for selecting the optimal platform based on specific application requirements.

Low-Power Options

  • ARM Cortex-M0+: Ultra-low power
  • PIC: Simple, cost-effective
  • MSP430: Energy-efficient design

High-Performance Options

  • ARM Cortex-M4: DSP capabilities
  • ESP32: WiFi/Bluetooth integrated
  • STM32: Rich peripheral set

Use Case Analysis

Architecture Workflow Process Key Characteristics
SAMD21 (ARM Cortex-M) • Write code in C/C++ (Arduino IDE or PlatformIO)
• Compile with arm-none-eabi-gcc
• Upload using OpenOCD via USB or SWD debugger
• Debug with GDB or serial monitor
Professional-grade debugging, industry standard tools
RP2040 (Raspberry Pi Pico) • Write code in C/C++ (Pico SDK) or MicroPython
• Compile with CMake + GCC toolchain
• Drag-and-drop .uf2 file to Pico's USB mass storage device
• (Optional) Use custom PIO assembly for hardware interfaces
Accessibility and flexibility, drag-and-drop + PIO

Workflow examples showing different development approaches for ARM and RP2040 architectures

The example workflow table above provides specific recommendations for different embedded system applications, showing how the tradeoff analyses from the previous sections translate into practical implementation strategies. This comprehensive table demonstrates the relationship between project requirements and optimal technology choices.

Key Findings

As demonstrated in the workflow table above, ARM workflows emphasize professional-grade debugging with industry-standard tools, while RP2040 workflows emphasize accessibility and flexibility through drag-and-drop deployment and unique PIO capabilities. The comprehensive architecture comparison shows that optimal design choices depend heavily on project constraints, performance requirements, and development timeline. High-performance applications favor ARM Cortex-M with professional toolchains, while rapid prototyping benefits from RP2040's flexible development environment and built-in features.

Download PDF Report Download PowerPoint

Individual Assignment: ReactionAge

Build a reaction time measurement system based on research methodologies from cognitive science literature. This project combines embedded programming with scientific measurement principles to create a tool for studying human cognitive performance.

Core Features

  • Stimulus Generation
    Visual/auditory stimuli with precise timing
  • Response Detection
    Accurate measurement using buttons/sensors
  • Data Analysis
    Statistical processing and visualization

Research Foundation

Based on PLOS ONE study (2017) examining reaction time variability and cognitive decline.

Repository: github.com/saleemaldajani/reaction-timer-saleemaldajani

Reaction Time vs Age Model

Reaction time model showing the relationship between age and cognitive performance, based on research from PLOS ONE (2017)

Related Research

Parts List / Bill of Materials

Download BOM
# Image Part Description Qty Unit Price Datasheet Price
1 ATmega32 Microcontroller ATmega32 Microcontroller 8-bit AVR MCU, 32 KB Flash, 2 KB SRAM, ADC, timers, USART 1 $7.50 PDF $7.50
2 OLED Display Module 0.96″ OLED Display Module (SSD1306) 128×64 mono OLED, I²C/SPI interface 1 $2.50 PDF $2.50
3 Male Header Pins Male Header Pins (2.54 mm) Breakaway straight male headers 2 $0.20 PDF $0.40
4 Dual-Row Header Dual-Row Header (2×5, 2.54 mm) 10-pin dual-row header, unshrouded 1 $0.50 PDF $0.50
5 SMD MOSFET SMD MOSFET (AO3400A example) N-channel MOSFET, SOT-23 2 $0.15 PDF $0.30
6 SMD Capacitor SMD Capacitor (MLCC 0603 example) Ceramic capacitor, value TBD 5 $0.03 PDF $0.15
7 SMD Resistors SMD Resistors – 1 kΩ (code '1001') Precision SMD resistors 5 $0.02 PDF $0.10
8 SMD LED SMD LED (0603, color TBD) Indicator LED 2 $0.05 PDF $0.10
9 USB-C Connector USB-C Receptacle Surface-mount USB Type‑C connector 1 $0.60 PDF $0.60
10 Custom PCB Custom PCB (Capacitive-Touch Board) Project-specific PCB 1 $10.00 N/A $10.00
TOTAL $22.15

Complete bill of materials for the ReactionAge embedded programming project. All prices are in USD and subject to supplier variations.

Nintendo Switch Controller Training for Toddlers

An interactive training module designed for young children, utilizing Nintendo Switch controller input to create an engaging letter-matching game that develops motor skills and cognitive recognition.

Game Mechanics

  • Button Mapping
    A, B, X, Y in inverted layout
  • Visual Stimulus
    Flashing letters with bright colors
  • Progressive Difficulty
    Adapts based on performance

Educational Benefits

  • Motor Skills
    Hand-eye coordination
  • Letter Recognition
    Alphabet learning
  • Attention Building
    Focus and concentration

Technical Features

  • Controller Support
    Pro Controller & Joy-Con
  • Display System
    Large, colorful letters
  • Progress Tracking
    Analytics & feedback

Design Files

Source code, circuit diagrams, and documentation files for embedded programming projects.

ReactionAge Arduino Code

Download .ino

Key Features

Hardware Integration
  • OLED Display (SSD1306)
  • RGB LED indicators
  • Capacitive touch sensors
  • State machine architecture
Reaction Time Analysis
  • Multiple prediction models
  • Statistical data collection
  • CSV export functionality
  • Real-time age prediction
Code Preview
// Reaction time prediction models
const float A_POOLED = -35.392393f, B_POOLED = 0.1930446f;
const float A_MALE = -58.123019f, B_MALE = 0.2640664f;
const float A_FEMALE = -31.603679f, B_FEMALE = 0.176111015f;

float predictAgeFromRT(unsigned long rt_ms) {
  float x = (float)rt_ms;
  float a, b, c;
  switch (currentModel) {
    case SX_MALE: a=A_MALE; b=B_MALE; c=C_MALE; break;
    case SX_FEMALE: a=A_FEMALE; b=B_FEMALE; c=C_FEMALE; break;
    default: a=A_POOLED; b=B_POOLED; c=C_POOLED; break;
  }
  return a + b*x + c*x*x;
}

Project Resources

Circuit Diagrams

  • Microcontroller connection schematics
  • Sensor integration diagrams
  • Power supply and signal conditioning circuits

Board Design Files

Complete KiCad project files for custom PCB design, including schematics, PCB layouts, and project configurations for embedded development boards.

File Type Description Download
KiCad Project Complete KiCad project file containing all design data and settings .kicad_pro
Schematic Circuit schematic showing component connections and electrical design .kicad_sch
PCB Layout Physical PCB layout with component placement and trace routing .kicad_pcb

Design Documentation:

For detailed board design principles, USB-C connector placement, and manufacturing considerations, refer to the Board Design Documentation section above.

Reflections & Learnings

[Reflection notes placeholder.]

Contributions

Acknowledgments for collaborative support and technical assistance during the embedded programming project development.

Technical Support & Collaboration

Eghosa Ohenehn

Contributed valuable insights and technical discussions about microcontroller tradeoffs during the group assignment development. Provided expertise in evaluating different microcontroller architectures and their suitability for various embedded programming applications.

Anthony Pennes

Engaged in extensive discussions throughout the embedded programming design trades section, providing valuable technical insights and collaborative support during the group assignment development process.

Quentin Bolsée

Participated in numerous office hours discussions about embedded programming design trades, contributing significantly to the technical analysis and collaborative development of the group assignment content.

Special thanks to the collaborative learning environment that enabled knowledge sharing and technical problem-solving throughout the embedded programming week.

Ethical AI Use

Transparent documentation of AI assistance used in this week's work, following course guidelines for ethical AI usage.

AI-Assisted Template Generation and Task Planning

Used ChatGPT to generate the weekly template HTML structure and styling framework, and created structured task prompts for week 2 embedded programming content development.

📄 View ChatGPT Transcript 📋 View Task Prompt

AI-Assisted Content Development and Page Structure

Used Cursor AI for iterative content development, page structure optimization, and aesthetic improvements. The AI helped with HTML/CSS implementation, content organization, and maintaining consistent styling across the embedded programming documentation.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted BOM Table Implementation

Used Cursor AI to implement the comprehensive BOM table with clickable images, datasheet links, and full-width responsive design. The AI helped with HTML table structure, CSS styling, and integration of CSV data into an aesthetically pleasing table format.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted Image Recognition and BOM Creation

Used ChatGPT for image recognition of electronic components to identify parts and construct the bill of materials CSV file. The AI analyzed component images and provided detailed part specifications, descriptions, and pricing information for the embedded programming project.

📄 View Full Transcript

AI-Assisted Project Content Updates and Documentation

Used Cursor AI for comprehensive project content updates, documentation improvements, and HTML structure optimization. The AI assisted with content organization, styling consistency, and integration of multimedia elements for the embedded programming documentation.

📄 View Full Transcript 💾 Download Chat File

AI-Assisted Arduino Programming and Code Development

Used ChatGPT for Arduino programming assistance based on the ReactionAge project code from GitHub repository and Quentin Bolsée's QPAD documentation available on the course website embedded system assignment page. The AI provided guidance on embedded programming concepts, code optimization, and integration with the QPAD-xiao board design.

📄 View ChatGPT Transcript 🔗 GitHub Repository 🔗 QPAD-xiao Documentation

AI-Assisted Group Assignment Content Development and Table Implementation

Used Cursor AI for comprehensive development of the embedded programming design trades group assignment section. The AI assisted with creating structured subsections for language, development workflow, and microcontroller tradeoffs, implementing professional HTML tables with data extracted from PowerPoint presentations, and integrating download links for PDF and PPTX files.

📄 View Full Transcript 💾 Download Chat File
``` Perfect! I've successfully added a comprehensive "Common Troubleshooting" section under the board design documentation. Here's what I've implemented: ## ✅ Common Troubleshooting Section Added **Location**: Under the Board Design Documentation section in the Helpful Documentation ### 1. **Voltage Regulator Troubleshooting** - **Image**: `week2/training/voltage-regulator.png` with descriptive caption - **Content**: - Clear explanation of testing voltage regulator functionality - Step-by-step testing procedure using multimeter - Specific measurements: VIN, VOUT, ground continuity, load testing - Pro tip with link to the [portable multimeter](https://www.amazon.com/ALLOSUN-Multimeter-Capacitance-Frequency-Continuity/dp/B08HK295HK/ref=sr_1_1_sspa?dib=eyJ2IjoiMSJ9.1PikVmgloQYjRPbb4ovm5mkddqvnWRydHbdhAatNVTvZRVlO3s9TlQMPn5XHJ6U-K21afYaxWksdJTFzpO7HOcV0lMWp_W3TvunO2KrzV5ng9m6DgwI9pB-zMWVA2PvoUDYf9fNb1VJ6VodvLzpNudatd4a5pjvJxb17_54ohiOqEYatH705sMIDuylV8MDylw_6V9yD3F4zhgIxeohsilNRfeaks6xRX4joCOSeqc5RQKb9TF-mK0ul1lAicsoi4h8Am-G0HOPh3qgfFhBaQ15NdtjaECe4MOCKFB77FIg.PitTq4zDZSaK4EXf4ekBZgN6GbNXrLR0RDoZIT02v0c&dib_tag=se&keywords=pocket+multimeter&qid=1758726175&sr=8-1-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1) on Amazon ### 2. **USB-C Pinout Troubleshooting** - **Image**: `week2/training/usb-c-pinot.png` with descriptive caption - **Content**: - Comprehensive USB-C connector testing guide - Detailed pinout testing procedure (VBUS, ground, CC1/CC2, D+/D-) - Testing both orientations of USB-C connector - Troubleshooting tips for common issues ### 3. **Key Features** - **Professional Layout**: Each troubleshooting section has its own card with clear visual hierarchy - **Step-by-Step Instructions**: Detailed multimeter testing procedures for both components - **Visual Aids**: Images with descriptive captions showing testing points and pinouts - **Pro Tips**: Helpful advice including the multimeter recommendation - **Troubleshooting Tips**: Specific guidance for common problems and solutions - **Consistent Styling**: Matches the existing design language of the page The section provides practical, hands-on guidance for debugging embedded development boards, making it easy for users to verify their hardware is working correctly before diving into software development.