This project is still a WIP. Code is being ported over from the microcontroller version in this repository. Also, please look at the project board for a more accurate day-to-day view of current issues and features being worked on.
A custom bluetooth speaker project conceived from an FFT mini-project. This MCU version serves as a test bed for the FPGA version.
- Overview
- Feature List
- Future Changes and Additions
- Issues
- List of Components and Tools
- Derived Sources
- Schematic Diagram
- References
This project began as a venture in understanding and implementing Discrete Fast Fourier Transforms (DFFTs) in FPGAs. The ultimate objective is to create a custom Verilog-based IP where the DFFT is computed using dedicated hardware, allowing me to sample at an extremely high count.
This repository contains elements of what is in this microcontroller version repository.
- Real-Time Audio Visualization with Adjustable Frequency Range and Number of Columns
- Single SSD1306 Display
- Audio Signal Input via 3.5mm Jack
Please look at the project board for a more accurate day-to-day view of current issues and features being worked on.
Please look at the project board for a more accurate day-to-day view of current issues and features being worked on.
- Diligent Arty S7-50 Spartan-7 FPGA Development Board
- SSD1306 128x64 I2C 0.96" OLED Display
- SparkFun TRRS 3.5mm Jack Breakout
- Breadboard
- 3x 5.1 KOhm In-Line Resistors
- 2x 100 KOhm In-Line Resistors (for audio signal voltage divider)
- 4x 10 KOhm In-Line Resistors (for pulldown purposes with the buttons)
- 2x 100 nF Capacitors
- Vivado 2020.02
- Xilinx Vitis 2020.02
- Libraries
- arduinoFFT
- Adafruit_GFX_Microblaze - A port of the Arduino library over to the Xilinx Microblaze soft processor implemented on the FPGA. By jmwilson.
- Adafruit_SSD1306_Microblaze - A fork of my own adapted from jmwilson's repository of the same name. I needed to add I2C support.
I initially started this project off with the code and hardware components/config from this repository. There is also an Arduino Project Hub writeup.
I then proceeded to heavily modify the project. I subdivided the code into logical functions and made the FFT visualizer much more parameterizable (adjusting the number of columns samples, etc.). Instead of using a MAX7219-driven 32x8 LED matrix, I used a 128x64 SSD1306 OLED display (I2C version). The code has also been ported over to the Arduino MKR Zero which uses an entirely different microcontroller. This provides far more power and memory to support the higher resolution display and faster FFT calculation with more samples.
As the project's hardware configuration is still in flux with many components to be added, there is no diagram here. However, it should be sufficient to follow the schematic shown on shajeebtm's project page. Just replace the Arduino Nano for the Arty S7-50's I/O on the "Arduino Uno" portion of the shield and substitute the SSD1306 for the MAX7219 on the I2C bus. Refer to the comments in the code to figure out which pins the I/O has been likewise re-mapped to.
As the Arty S7-50 is all 3.3V logic, connect the wire which links 5V to the display mode button to the MKR Zero's 3.3V power pin instead.
- Arduino 32 Band Audio Spectrum Visualizer / Analyzer - shajeebtm
- SSD1306 OLED Display
- Device Communication Protocols
- Understanding Fast Fourier Transforms
- Digital Audio
- Signal Propagation - Setup and Hold Time
Last Updated: 2021.07.05 11:58 PST