An AVR based waveshaping/bitreduction pedal
C C++
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Documentation
Firmware
RenderedSchematicsAndPcbs
.gitattributes
.gitignore
BlueWaffleV1.9alpha.pdsprj
README.md

README.md

Blue Waffle

An AVR based waveshaping/bitreduction pedal - Alpha version

It may or may not work, but it simulates pretty nicely in Proteus.

Introduction

Waveshapers and bitcrushers are pretty much the simplest digital signal processors, but they are very usable and versatile. There is a strange lack of open-source digital pedals, althogh there certainly is interest for them in the pedal DIY community. This is a perfect starting point for cheap open-source DSP pedals.

Specs

BlueWaffle is a work-a-like of a commercial pedal, with the following features:

  • high-gain analog input preamp
  • AMZ Presence Control tone control, defeatable
  • 8bit signal processing
  • 245Hz - 62.5kHz continuously variable (256 steps) sampling rate
  • 252 waveforms represented by arrays
  • 1 - 8bit output bitrate -or-
  • bitmasking (bitwise and) with numbers 0-255
  • previous two features available pre- and post-waveshaping
  • buffered and filtered output
  • CV/exp pedal input for controlling any combination of bitmask/bitdepth and samplerate pots
  • 2*7seg displaying current waveform's number in hex

Implementation

Hardware

Blue Waffle is made with cheap through-hole components, which is kind of traditional for DIY guitar pedals. It consists of:

  • Atmel Atmega1284p microcontroller at the heart of it
  • Microchip MCP3001 8-bit ADC
  • R-2R resistor network based 8-bit DAC
  • several pots, an encoder, and a 2*7seg display
  • 78L05 voltage regulator, TLE2425 and TLE2426 precision voltage references and TLC2272 opamps

Software

Blue Waffle is written in C, intended for compilation with avr-gcc. Parts of the code are autogenerated from JSON files (the waveforms, in particular) by Python-based cog code generation utility. See Waveforms.c's comments for explanation.

MCP3001 communicates to the uC via SPI (without interrupts, busy-waiting). ADC conversions are clocked with Timer0 interrupts.

AVR's own ADC is clocked at 125KHz and used to sample potentiometers and CV input. Display and LEDs are multiplexed on the same 8 outputs, and are alternated on AVRADC interrupts, too.

Modes are implemented by a const struct array - based statemachine which is partially Python-generated.

Encoder and buttons are sampled continuously in the device's main loop.

There's a JS-based waveform generator included in the project - WaveformGenerator. You can use it to draw or make wavetables from functions by pasting arrays into a JSON file (See Waveforms.c's comments for explanation).

Help

It would really help me if someone could make a buy-list from some EU supplier, with the things listed in the schematic, BOM, and 'Buylist_Info.md' in the Documentation folder.

That way everyone could just all of the parts at once, myself included. I hate sourcing parts.

Licence

Original developer: Andrej Radovic (r.andrej@gmail.com)

The firmware is released under a GPL3.0 license.

The PCB layouts and schematics are released under a Creative Commons Attribution-ShareAlike 4.0 International 4.0 (CC-BY-SA-4.0) license.

Documentation, tools and simulations are released under a Creative Commons Attribution-ShareAlike 4.0 International (CC-BY-SA-4.0) license.

GPL3 logo CC-BY-SA4.0 logo