We have both software and firmware, each running on different devices and each with their own purpose. The software lives on the RaspberryPi development board and controls the entirety of the system. The RaspberryPi is meant to replace a full laptop and is the only user-facing portion of our system. The firmware lives on the STM32 microcontroller which lives on our custom PCB. Its only job is to run the CCD and communicate the data back to the RaspberryPi.