Projects

Things I've built

FPGA logic, microcontroller firmware and the circuits around them. Each page walks through the design, how I tested it, and what I'd change.

The finished physics engine in its 3D-printed housing
Featured

Interactive 2D Physics Engine

Microprocessor Systems (E155) final project · Fall 2024 · with Stephen Xu

A tilt-controlled sand simulator. An FPGA runs the particle physics and drives a 64×64 LED matrix in 12-bit color while an STM32 reads an accelerometer and streams the gravity direction over SPI.

  • FPGA
  • SystemVerilog
  • STM32
  • I2C
  • SPI
Read more
The web page showing temperature readings at different resolutions
Featured

IoT Temperature Sensor & Web Server

Microprocessor Systems (E155) · Fall 2024

An STM32 reads a DS1722 temperature sensor over a register-level SPI driver I wrote and serves live readings, adjustable resolution and LED control on a web page through an ESP8266.

  • STM32
  • SPI
  • UART
  • ESP8266
  • Embedded C
Read more
Dual seven-segment display driven by the FPGA on a breadboard
Featured

Keypad Scanner & Multiplexed Display

Microprocessor Systems (E155) · Fall 2024

FPGA logic in SystemVerilog that scans a 4×4 matrix keypad, debounces it with a state machine, and shows the last two keys on a time-multiplexed dual seven-segment display.

  • FPGA
  • SystemVerilog
  • FSM
  • Debouncing
  • Testbenches
Read more
Schematic of the STM32 driving an LM386 amplifier and speaker
Project

Digital Audio Player

Microprocessor Systems (E155) · Fall 2024

Bare-metal STM32 firmware that plays music through a speaker, using two hardware timers for pitch and note duration, with frequency error checked across three octaves.

  • STM32
  • Timers
  • Embedded C
  • LM386
  • MATLAB
Read more
Flowchart of the interrupt handlers and main loop
Project

Motor Speed Measurement with Interrupts

Microprocessor Systems (E155) · Fall 2024

Interrupt-driven quadrature decoding on an STM32 that measures motor speed and direction to within 0.05%, compared directly against a polling implementation.

  • STM32
  • Interrupts
  • Quadrature encoder
  • Embedded C
Read more
Project

Multicycle Processor

Digital Electronics & Computer Engineering (E85)

A multicycle processor built from scratch in SystemVerilog, with its own datapath and control state machine.

  • SystemVerilog
  • CPU design
  • FSM
Read more