Running list of projects
Temperature Sensor
I built a temperature sensor data logger using the ST Nucleo H755 and an MCP9808 temperature sensor, with the system posting real-time data to a web interface. The project was developed on a Raspberry Pi 5, which also hosted the web server using lighttpd. The Nucleo microcontroller reads the temperature data and sends it over a USB virtual comm port, while a Python script logs this data and stores it in an SQLite3 database. I set up a cron job to regularly fetch the data, making it available on the web for easy access and visualization.
Real Time Operating System
I created a real-time operating system for the ST Nucleo H755, utilizing its dual-core Cortex-M7 and Cortex-M4 architecture. I developed the project on a Raspberry Pi 5, building key components like a shell, context switcher, and scheduler to manage tasks efficiently. The system is designed for real-time responsiveness, optimizing the performance of both cores on the Nucleo board.
5 Stage Pipeline Processor
I designed a 5-stage pipeline processor using the RISC-V architecture and implemented it in System Verilog with Quartus. Additionally, I enhanced an existing VGA driver by incorporating logic into the processor. This modification enables the display of the current assembly instruction on the monitor, offering advanced debugging capabilities. The updated driver, now featuring this functionality, has been integrated for use in future classes.
C and Assembly
I developed multiple drivers in both C and Assembly to control various devices, including a stepper motor and an LCD. As an additional achievement for extra credit in the class, I expanded the functionality to incorporate a real-time clock. Using this clock, I was able to implement a watch on the display. I was also able to add support for a speaker to play songs with frequency accurate notes.
Pong
Within a three-person team, we designed and developed a pong-style game using System Verilog. The game incorporated controls based on two buttons and a switch on the board to manipulate the paddles. Our implementation involved increasing the ball’s speed over time until a goal was scored. Additionally, we introduced a one-player mode where the opposing paddle autonomously tracked the ball with an added delay.