News:

SMF for DIYStompboxes.com!

Main Menu

Tap Tempo LFO with PIC 16F684

Started by ElectricDruid, May 13, 2009, 05:22:13 AM

Previous topic - Next topic

Bunyaman

Thanks Mike! This is what I need:)

Bunyaman

Men, does anyone tried to use this LFO with others effects(not tremolo)? I would like to use this in MXR phase 90. Is it possible? I don`t understand how to connect LFO to JFET pins(Gate, Source)

ElectricDruid

Quote from: Bunyaman on May 22, 2012, 06:33:52 PM
Men, does anyone tried to use this LFO with others effects(not tremolo)? I would like to use this in MXR phase 90. Is it possible? I don`t understand how to connect LFO to JFET pins(Gate, Source)

You need to use a PWM filter like in the datasheet to turn the LFO's output (a PWM pulse train) back into an analog LFO signal. At the bare minimum, this can be a passive RC filter. There's a design for this minimal filter in the LoopEnv datasheet on my website:

http://www.electricdruid.net/datasheets/LOOPENV1Datasheet.pdf

Once you've filtered the PWM signal, it's the same as any other LFO. From the minimal filter, you'll get a signal from 0V to 5V.

The nice thing about the Tap Tremolo circuit is that the vactrol's LDR response is so slow that no further filtering is required. This simplifies the circuit, which is part of what makes it appealing to do.

HTH,
Tom



Hoffmann

Hi!
I want to make a DIY pwm phaser (something similar to ASMOP phaser). Does someone have 39kHz (9-bit) asm (or hex) version of Electrodruids taplfo?

Yonatan

This project looks way cool.  Can anyone tell me if buying a pre-programmed TAPLFO chip is equivalent to taking the HEX code from the Synth DIY site and flashing it to a bare PIC?  I'm NOT trying to save money, as I'm sure that buying a pre-programmed chip is cheaper than buying a PIC programmer :),  it just looks like a really interesting learning project.

slacker

Yes, buying the TAPLFO chip gives you the same thing as downloading the code and flashing your own.

midwayfair

Do the voltage dividers for the pin controls simply provide a ratio, or is their value important? For instance, could I use a 100K or the depth and have it function similarly?

I'm considering using dual concentric pots to simplify the control panel in something, but I have ONE control in the pedal I'm making that isn't 10K. Most inconvenient!
My band, Midway Fair: www.midwayfair.org. Myself's music and things I make: www.jonpattonmusic.com. DIY pedal demos: www.youtube.com/jonspatton. PCBs of my Bearhug Compressor and Cardinal Harmonic Tremolo are available from http://www.1776effects.com!

ElectricDruid

Quote from: midwayfair on March 12, 2013, 08:52:35 AM
Do the voltage dividers for the pin controls simply provide a ratio, or is their value important? For instance, could I use a 100K or the depth and have it function similarly?

I'm considering using dual concentric pots to simplify the control panel in something, but I have ONE control in the pedal I'm making that isn't 10K. Most inconvenient!

They simply provide a ratio. I've used 100K pots, 47K pots, and 10K pots without incident. Since the voltage is being fed to a ADC and charges a small cap in the ADC, you're not supposed to use high impedance outputs (the cap will take too long to charge, affecting the measured voltage) - so perhaps 1M pots wouldn't be a great idea.

T.

Mbas974

ElectricDruid, this project is amazing !!

Is there a way to buy this chip in Europe (otherwise I'll go with smallbear) ?

Also, one thing I like to have implemented on a tremolo pedal, using this concept, is the make PWM duty cycle variable with a Pot
http://arduino.cc/en/Tutorial/PWM

Thanks for your replay.




Brian_L

Quote from: jakefuzz on December 07, 2010, 10:27:21 PM
got it to finally work correctly using the following code! after a week of testing everything  :D

IncrementPhaseClock:


   btfsc   PHASE_HI, 7         ;Checking to see if the wave is onto the second half
   goto   skipper            ;if it is not then skip the increment section
   btfsc   OLD_COUNT, 0      ;if it is then check to see if there was a change from first to second half
   incf   PHASE3_COUNT, f      ;if there is a change increment the counter
   
   skipper:

   btfsc   PHASE_HI, 7         ;check the wave if it is the second half
   bsf      OLD_COUNT, 0      ;if it is set OLD_COUNT bit zero high
   btfss   PHASE_HI, 7         ;check the wave if it is the first half
   bcf      OLD_COUNT, 0      ;if it is set OLD_COUNT   bit zero low
   
   movfw   PHASE3_COUNT      
   subwf   MULTIPLIER, w      ;check if the cycle counter has reached the multiplier value
   btfsc   ZEROBIT            ;it has
   bsf      CLOCK_OUT         ;so turn on the clock
   btfsc   ZEROBIT            
   clrf   PHASE3_COUNT      ;also clear the counter to start over at this point
   
   btfss   PHASE_HI, 7         ;the wave is back to the first half so clear the clock
   bcf      CLOCK_OUT         ;this will make less than 50% duty cycle clock pulses, but it is the leading edge that counts (literally!)
   
   movfw   PHASE3_COUNT      
   addlw   D'127'            ;this section checks to see if the cycle counter has become larger than the multiplier
   movwf   BRAIN            ;this case will happen if the multiplier cv is rapidly changed
   movfw   MULTIPLIER         ;if it is larger then the counter needs to be reset
   subwf   BRAIN, f         ;if the counter isnt reset the counter will count to 255 until it resets itself
   btfsc   BRAIN, 7         ;which for out purposes (instant multiplier response) is not good
   clrf   PHASE3_COUNT


I think the multiplier change, reset section can be made better, but it all works! yay. now to make the triangle and sine waves start low b/c my clock invert function isn't going to work with a non 50% duty cycle clock. Thanks for all the help guys!

I hate to bump such an old thread, but this is exactly what I'm trying to do. I need the clock out to be pre multiplier, so I can sync 2 chips and set the multiplier independently. I tried using this code but I then don't get anything out of the clock pin at all. Any suggestions of what else I may need to change or add to get this code to work?
Thanks.