I have created a digital loop pedal. The pedal itself is based upon the PIC16F877 microcontroller, and is complete with 256kb of RAM for storing sound. The unit achieves true bypass with the help of a relay, and runs on a standard 9V power supply.
If you want to build a pedal like this, be warned- it is a daunting task. The complexity of this project reached the upper limit of what my brain can autoroute on a prototyping board, and was very frustrating many times when it didn't work as planned.
In the end however, I learned a lot. I think this is a great project to try, but only try if you are really dedicated. For those interested, I would suggest you design your own, using mine as a template to know what works and what doesn't, rather than copying directly- though if you wish to copy, you are more than welcome.
Step 2: Materials
- PIC16F877a with 20MHz oscillator
- 23k256 RAM operating at 20MHz, interfaced via three-wire SPI
- A standard 9V single throw relay (though I recommend double throw, they are more useful)
- IRFD120 N-channel MOSFET for powering the relay
- LM358 operational amplifier
- 1 Mohm trim pot (for mixing ADC and unprocessed guitar when the pedal is not in "kill" mode)
- a bunch of 10k and 20k ohm resistors for the DAC
- 4 switches
- Aluminum enclosure
- Two LEDs
- 3 10k potentiometers
- lots and lots of stranded-core wire
- Guitar audio jacks
- Barrel plug socket for DC adapter
Resistances and capacitances are generally labeled on the schematic in the next step.
Step 3: Schematic, explanations
When the circuit is powered off, the relay is disengaged, and the guitar signal comes directly through the pedal, truly bypassed.
When the circuit is powered on, the relay remains disengaged and the signal is nearly fully bypassed, with most of the signal coming directly to the output, but some part of it is amplified through the op-amp (with gain set by the "gain" knob) and sent to the PIC for ADC processing.
When the system goes into "record" mode, the ADC values are transmitted to the 23k256 for temporary storage using the "continuous write" mode, overwriting previous data if there is any there.
When the system switches back into playback mode, the relay is engaged. Audio from the guitar gets transmitted through the amplifier if the "byp/kill" switch is in "byp" mode, otherwise it is silenced. Data is rapidly read from the 23k256 and outputted to the DAC. The resulting signal needs no amplification and is directly mixed through the trim potentiometer to the output of the pedal.
The values of the potentiometers are read continuously by ADC channels on the PIC.
Step 4: Code, explanations
This pedal has two recording modes and two playback modes.
In this mode, a guitarist will hit the foot-switch to begin recording, play a riff, then hit the switch again to stop playback. In this way, a guitarist can define the length of a recording during the recording process, allowing for live/dynamic loop playback.
In this mode, the guitarist defines the recording length via a knob. When ready, the foot-switch is pressed to initiate recording, which continues until the time defined by the knob is elapsed. This mode is mostly targeted at extremely short recording lengths, which can make crazy alien or robot sounds.
In bypassed mode, the guitarist can play along with his own recording. When a recording is playing back, the live guitar signal is mixed in with the recorded one, which allows for interesting dynamic playing.
In "kill" mode, the signal from the guitar is killed and not mixed into the output, which allows the guitarist to adjust the pitch shift or do whatever else without worrying about their guitar making noise during playback.
Step 5: Key Insights
When to use proto-board and when to use PCB:
This schematic was the upper limit of complexity I am personally capable of autorouting with my brain while soldering. When circuits get complicated enough to require multiple pages of schematics, pages of diagrams, and ages of experimentation, it's probably worth it to create a PCB.
The smartest idea would have been to design a PCB and then use surface mount components. The DIP ICs with sockets barely fit inside the container- I had to dremel parts of the aluminum case away to fit all the components! Needless to say it was a tight squeeze.
Digital to Analog Converters:
I discovered that building your own DAC can work well, even with as few as 8 bits. Initially I bought a DAC IC, but it needed complicated biasing circuits, so I built one with a bunch of resistors, following the model shown here. Individual results may vary, but I played reasonably high quality sound from my iPod through it, and it fared well. Not the highest quality audio you've ever heard, but it represents the sound in a listenable manner.
RAM is a very good way of storing and retrieving random access data quickly. I bought 23k256 20MHz SPI-interfaced RAM, totaling 256kb, which is 32kB. This ram runs off of 3V, so I ran all digital logic at 3V. Unfortunately, my PIC could only be programmed at 5V, which resulted in the accidental destruction of a few RAM chips. Good thing they are cheap!
Always buy double-throw relays. When you need to solve a problem with a circuit, a lot of times it can be done if you have a double throw relay!
I had a lot of problems with my amplification circuitry. In the end, put capacitors everywhere you can anywhere you are biasing things, and separate biased supplies if you want to reduce interference between different signals being amplified separately.
COLD SOLDER JOINTS:
When you get an untrustworthy-looking solder joint during soldering, be sure to REHEAT the joint! A lot of times, if you don't do that, you can get a "cold solder joint", which can behave as an open circuit even if it passes cursory visual inspection! This has caused me problems with two different projects now, and it is an unspeakable evil that should be avoided at all costs!
Step 6: Improvements
- Simple software-only modifications could make the pedal create a "delay" or "echo" effect
- Expression pedal substitution for the shift knob (already planned)
- Low pass filters on the output of the DAC
Any suggested improvements would be more than welcome!