EMBEDDED SOFTWARE ENGINEER

Ryan Sadeghi-Javid

I design and develop embedded systems, writing firmware that bridges hardware and software. Specializing in microcontrollers, real-time systems, and low-level programming.

PROJECTS

Featured Work

A selection of firmware and embedded systems projects I have worked on.

ION Train Model

A fully autonomous train model inspired by the Ion train intersection at University Avenue in Waterloo. This project simulates real-world train operations with motion control, gate automation, traffic signals, and sensor integration.

Key Features

  • Event-driven MCU firmware using a non-blocking FSM (no delay-based logic)
  • Stepper motor motion control for bi-directional train movement (single-motor cross-belt mechanism)
  • Gate + signal automation with interlocked safety logic and timed state transitions
  • IR + electromagnetic sensing for train detection, direction inference, and state triggers
  • Custom traffic-light PCB + firmware GPIO control (sequencing, timing, and fail-safe states)
  • Reusable stepper driver library (timers/step scheduling, acceleration-ready structure, deterministic timing)
  • I²C peripheral integration for sensor/IO expansion, with robust readouts used as FSM state triggers
Embedded Firmware (C/C++)Microcontrollers (MCU)Finite State Machines (FSM)Stepper Motor ControlSensor Integration (IR + Magnetic)
View on GitHub
Watch - Image 1

Watch

Custom STM32-based wearable platform with low-power firmware to drive a 1.69" display over SPI, manage power states, and interface with onboard peripherals. Built as a full embedded system: PCB + bring-up + firmware for reliable startup, debugging, and future sensor expansion.

Key Features

  • STM32 embedded firmware with low-power modes (sleep/stop), wake events, and deterministic main-loop scheduling
  • SPI display driver for the 1.69" screen (init sequence, frame updates, and interface timing)
  • Board bring-up firmware: GPIO validation, power-rail checks, and peripheral smoke tests during early hardware validation
  • Power-aware design support: firmware coordinated with regulation/protection (startup sequencing + safe defaults)
  • SWD debug workflow for iterative firmware development (flash/debug, register-level bring-up, fault isolation)
Embedded Firmware (C/C++)STM32Low PowerSPI (Display Interface)
View on GitHub
Tiny Canvas (Tiny Tapeout ASIC) - Image 1

Tiny Canvas (Tiny Tapeout ASIC)

MS Paint-style pixel art engine implemented in Verilog for Tiny Tapeout (SKY130), driven by an SNES-compatible gamepad and exposed as an I2C slave for host-side capture/visualization. Built as a full hardware/software system: controller protocol decode + real-time drawing pipeline + memory-constrained undo/redo + I2C state streaming, validated with a Python/Pygame emulator and cocotb tests.

Key Features

  • Real-time digital design in Verilog: modular pipeline (input decode → cursor/brush/symmetry → pixel generation → I2C streaming) optimized to fit a 1×1 Tiny Tapeout tile (~167×108 µm) at high utilization
  • I2C slave interface (addr 0x64) with packed 4-byte status protocol (position, mode, RGB color, brush settings) designed for reliable host-side polling and telemetry-style state capture
  • Hardware gamepad integration: SNES controller protocol decoder (latch/clk/data) mapped to UX features (RGB mixing, brush sizing, symmetry, fill-rect) with deterministic state machines
  • Memory-constrained undo/redo: 4-entry circular buffer storing pixel edits; designed tradeoffs for silicon area while preserving usability (stroke-based undo implemented in emulator)
  • Verification + tooling: cocotb + Icarus tests plus a Python/Pygame interactive emulator with I2C packet viewer for fast iteration, debugging, and feature validation before tapeout
Hardware/Firmware InterfacesI2C (Slave Protocol)Verilog RTLState MachinesDigital Design (SKY130)Testbench (cocotb)Python Tooling
View on GitHub
Water Reservoir Controller - Image 1

Water Reservoir Controller

Embedded controller for a pump + valve irrigation system (3 zones + inlet), built around an STM32 Nucleo. Implements a two-mode UX (SETUP over UART + RUN sequencing) and real-time control of motor speed + servo-based valve selection while continuously monitoring reservoir depth and reporting process telemetry.

Key Features

  • Real-time sequencing with a scaled-time wall clock driven by an MCU timer (24h compressed into minutes; ~300× faster than real time for demo runs)
  • Pump control via PWM to a brushed DC motor controller + RPM sensing through an interrupt interface for speed measurement/verification
  • Servo-driven valve selection to route flow to INLET or one of three irrigation zones, with RGB LED state indicating the active pipeline connection
  • Reservoir depth monitoring using an ultrasonic distance sensor; converts sensor readings into a 0–99% depth value and publishes it to both a dual 7-segment display and the UART terminal
  • Bi-directional UART terminal interface for SETUP inputs (pipeline order + motor PWM selection + wall-clock start/stop times) and RUN-mode status streaming (zone/inlet, %PWM, RPM, reservoir depth)
  • Integrated mixed-signal I/O: potentiometer analog input for manual RPM control in setup/testing, plus GPIO control for LEDs/display and push-button state transitions (SETUP → RUN)
Real-Time EmbeddedSTM32 (Nucleo)PWM Motor ControlServo ControlUART TelemetryInterrupts (RPM Sensing)Ultrasonic Level SensingProcess Sequencing/Bring-up
View on GitHub

CONTACT

Get In Touch

Interested in working together or have a project in mind? Feel free to reach out.