FV-1 Multi effect full forum project ready to go. (ShimmerVerb Also)

Started by Ice-9, September 08, 2013, 09:23:49 AM

Previous topic - Next topic

potul

There is no magic formula you can use for all cases. The issue is, you need a POT to control the mix, and the code is already using all available pots. You would need to sacrify some control, so it's not only adding some parameter tweaking, but you need to decide what control to sacrify and how.

A general structre for a DRY MIX coulde be:


START:

; Read in left
ldax ADCL
; DO YOUR STUFF HERE AND STORE RESULT TO REG1
wrax REG1,0


ldax ADCL ;Read dry signal
mulx POT0 ;multiply by POT0
rdax REG1,1.0 ;add WET signal
wrax DACL,0 ;write to DAC


POT0 controls the amount of DRY signal. In this case this is not a wet/dry control, but a DRY volume. WET is always at max. If  you need a WET/DRY pan it can easily be done as well.

Ice-9

As Potul said above, the problem you have with that program and many others is that they are written to use all 3 pots for effect parameters and wet only, the code is likely around 127 ticks long leaving no space to add any more code. So with this your only choice is to remove something from the code and alter the rest to add the dry signal.

I will have a look at this and see if I make a few edits so that it is will work with project pedal.

www.stanleyfx.co.uk

Sanity: doing the same thing over and over again and expecting the same result. Mick Taylor

Please at least have 1 forum post before sending me a PM demanding something.

MetalGuy

The main reason I'm asking all these questions is because I would like to make my own combination of effects that I would normally use or any combination that would like. It looks like adding a dedicated Mix control to the next revision would be a better idea.

Ice-9

Quote from: MetalGuy on April 13, 2018, 11:32:43 AM
The main reason I'm asking all these questions is because I would like to make my own combination of effects that I would normally use or any combination that would like. It looks like adding a dedicated Mix control to the next revision would be a better idea.

Yes adding a hardware dry/wet mix part to the circuit is the best way to do this without having to alter effects that are designed to have it that way,

Here is the code from the Hall 3k which I modified to work with the internal FV-1 dry mix, the pre delay is set at 100ms. You can open this and the original 3k hall reverb and compare the two to see how the dry has been added NOTE other alterations have been made but you can see the dry / wet mix changes easily.


;Hall Reverb Program
;from 3k Hall
;Mick Taylor 09/01/2013 Rev 1.

;pot0 = reverb level
;pot1 = reverb time
;pot2 = reverb damping


mem predel 3277 ;100ms

mem idel 8000 ;initial sound space 244ms
mem iap0 31
mem iap1 47
mem iap2 73
mem iap3 171
mem iap4 196
mem iap5 371
mem iap6 496 ;thickening all passes imbeded in intial delay

mem ap1 234 ;7.7ms
mem ap2 356 ;11.7ms
mem ap3 962 ;31.6ms
mem ap4 1263 ;reverb loop input all passes

mem lap1a 1921 ;63ms
mem lap1b 2645 ;86.7ms
mem d1 3534 ;115.8ms
mem lap2a 2294 ;75.2ms
mem lap2b 2767 ;90.7ms
mem d2 3745 ;loop constants 122.8ms

;write-first registers:

equ dry reg0
equ rev_in reg2
equ kirt reg3 ;coefficint to scale initial sound
equ krt reg4 ;coefficient to affect RT of loop
equ apout reg5 ;output of loop input all passes
equ kd reg6 ;damping coefficient (for shelving)
equ temp reg7 ;temp register for filter routines
equ gain reg8 ;adjust gain with RT
equ revout reg10


;read-first registers:

equ lf1 reg20 ;reverb loop filter 1
equ lf2 reg21 ;reverb loop filter 2
equ hf1 reg22 ;loop high pass 1 (fixed)
equ hf2 reg23 ;loop high pass 2 (fixed)
equ lfin1 reg24
equ lfin2 reg25 ;LPF for imbedding in intial delay
equ lf reg26 ;input low pass (shelving with kd)

;clear read-first registers, setup lfo:

skp run,endclr
wrax lf1,0
wrax lf2,0
wrax hf1,0
wrax hf2,0
wrax lfin1,0
wrax lfin2,0
wlds sin0,20,100
endclr:

;initial sound tap positions (30.5uS/location, 100=3.05mS):

equ ld1 2074 ;first tap, left
equ rd1 2174 ;first tap, right
equ ld2 3556 ;and so on...
equ rd2 3962
equ ld3 3345
equ rd3 3121
equ ld4 3656
equ rd4 3453
equ ld5 5121
equ rd5 5624
equ ld6 6579
equ rd6 7940

;prepare decay pot:

rdax pot1,0.97 ;get pot, limit to less than infinite
wrax krt,1 ;write loop decay time
sof 0.4,0.6 ;scale to 0.6 to 1.0
wrax kirt,0 ;write impulse filter gains
sof -1,0.99 ;scale to decrease gain with RT
wrax gain,0 ;write gain factor

;prepare damping pot:

rdax pot2,-1
wrax kd,0 ;increases shelf to -1 (infinite loss)

;prepare predelay time: Added to check if addr_ptr is beng lost

rdax 0.99,0.1 ;to 1/10th total delay (100ms) mem = 3277 locations 0.97 to ensure we can't flow past end
wrax addr_ptr,0 ;write to memory pointer

;-------------do inputs to predelay:-------------------

rdax adcl,0.5
rdax adcr,0.5 ;get inputs sum & divide by 2
wrax dry,1 ;22/11/2015 write dry input signal to dry register and keep in ACC:
mulx gain ;Acc=Acc*[reg] give greater gain to short RT See code above for adjusting this 23-11-2015(Steve)

;*********************100mS predelay routine added here
wra predel,0 ;25/11/2015 write gain adjusted dry to head of delay, clear ACC(Mick).
rmpa 1                           ; must use current [addr_ptr]: ACC=ACC+[addr_ptr]*k1  (k1=1 here)
wrax rev_in,0 ;22/11/2015 write gain adjusted dry input to reverb in register and clear ACC: Register 1

;read predelay and write initial response delay:

rdax rev_in,0.5
rda iap0#,0.5
wrap iap0,-0.5 ;complicate input to initial delay
wrax temp,1
rdfx lf,0.4
wrhx lf,-1
mulx kd
rdax temp,1 ;low pass fiter entire input
wra idel,0 ;write initial sound delay

;complicate initial sound:

rda idel+500,1
rda iap1#,0.5
wrap iap1,-0.5
wra idel+500,0

rda idel+1000,1
rda iap2#,0.5
wrap iap2,-0.5
wrax temp,1 ;save filter input
rdfx lfin1,0.2 ;0.2 = appx 1.2kHz
wrhx lfin1,-1 ;make HP filter
mulx kd
rdax temp,1
wra idel+1000,0

rda idel+1500,1
rda iap3#,0.5
wrap iap3,-0.5
wra idel+1500,0

rda idel+2000,1
rda iap4#,0.5
wrap iap4,-0.5
wra idel+2000,0

rda idel+2500,1
rda iap5#,0.5
wrap iap5,-0.5
wrax temp,1 ;save filter input
rdfx lfin2,0.3
wrhx lfin2,-1 ;make HP filter
mulx kd ;multiply by negative shelving coef
rdax temp,1 ;add back input (shelving LPF)
wra idel+2500,0

rda idel+3000,1
rda iap6#,0.5
wrap iap6,-0.5
wra idel+3000,0

;do reverb input all passes:

rda idel,0.9
rda ap1#,0.5
wrap ap1,-0.5
rda ap2#,0.5
wrap ap2,-0.5
rda ap3#,0.5
wrap ap3,-0.5
rda ap4#,0.5
wrap ap4,-0.5
wrax apout,0

;do reverb loop and sum all outputs:

rda d2#,1
mulx krt
rdax apout,1
rda lap1a#,0.5
wrap lap1a,-0.5
rda lap1b#,0.5
wrap lap1b,-0.5
wrax temp,1 ;save filter input
rdfx lf1,0.4
wrhx lf1,-1 ;make HP filter
mulx kd ;multiply by negative shelving coef
rdax temp,1 ;add back input (shelving LPF)
rdfx hf1,0.005
wrhx hf1,-0.5 ;roll out lows in loop
wra d1,0

rda d1#,1
mulx krt
rdax apout,1
rda lap2a#,0.5
wrap lap2a,-0.5
rda lap2b#,0.5
wrap lap2b,-0.5
wrax temp,1
rdfx lf2,0.4
wrhx lf2,-1
mulx kd
rdax temp,1
rdfx hf2,0.005
wrhx hf2,-0.5
wra d2,1.99
rda d1,1.99
mulx pot0
mulx pot0
wrax revout,0

;do delay smoothing:

cho rda,sin0,sin|reg|compc,d1+100
cho rda,sin0,sin,d1+101
wra d1+200,0

cho rda,sin0,cos|reg|compc,d1+100
cho rda,sin0,cos,d1+101
wra d1+200,0

;now combine to output

rdax dry,1
rdax revout,1
wrax dacl,0


www.stanleyfx.co.uk

Sanity: doing the same thing over and over again and expecting the same result. Mick Taylor

Please at least have 1 forum post before sending me a PM demanding something.

MetalGuy

Thanks for the example.
Initially I thought that mix in software was achieved in a different way but after your comments I realized that it has to be done via one of the pots.
Looking at the current version of the PCB it looks like it will be possible to add a mix pot (like a 9mm ALPHA for example) center to the 4 pots.

MetalGuy

Are there any alternative EPROM hex files that include a delay (up to 1 sec if possible) and/or a delay/reverb with delay mix and reverb level respectively or a library of spn files with the same parameter controls as those included in the current project hex file so one can build their own combination of effects?

potul

Nothing already available that I'm aware as an hex file.

But building a custom hex file is not complicated if you have the spn files. I have a good collection of files in my hard drive (including the ones in the hex of the project), because I built my pedal and haven't decided yet on what to put inside.

If you want I can help you here. If you tell me what effect you are interested in I can fine tune to code if needed and build the hex file.

PS: I don't remember what's the delay limit in the FV1, but I think it's not going up to 1s.


Ice-9

Quote from: MetalGuy on April 20, 2018, 05:25:16 AM
Are there any alternative EPROM hex files that include a delay (up to 1 sec if possible) and/or a delay/reverb with delay mix and reverb level respectively or a library of spn files with the same parameter controls as those included in the current project hex file so one can build their own combination of effects?

The Fv-1 can do up to 1second delay using its standard crystal, can you tell me in more detail what you want, maybe I or Potul can post some code that will do what you want but you nee to explain bit more detail of parameters and control.
www.stanleyfx.co.uk

Sanity: doing the same thing over and over again and expecting the same result. Mick Taylor

Please at least have 1 forum post before sending me a PM demanding something.

MetalGuy

I can build my own hex files with SpinAsm but since you're offering help I'm interested (without adding a separate Mix control for now) in having a regular Delay (Time/Repeat/Mix), Delay/Reverb (Time/Repeat/Rvb level) and maybe other types of delays that you would suggest. From the current list of effects I can part with the Wah, Phaser and Octaver (in that order).
Other than that it would be nice to have a library with effects that we can mix at will in a hex file.

Ice-9

Quote from: MetalGuy on April 20, 2018, 11:26:53 AM
I can build my own hex files with SpinAsm but since you're offering help I'm interested (without adding a separate Mix control for now) in having a regular Delay (Time/Repeat/Mix), Delay/Reverb (Time/Repeat/Rvb level) and maybe other types of delays that you would suggest. From the current list of effects I can part with the Wah, Phaser and Octaver (in that order).
Other than that it would be nice to have a library with effects that we can mix at will in a hex file.

Lol, I was only offering help if you couldn't do it yourself, I don't have a lot of time on my hands at the moments, so if you know what your doing then jus go ahead   8)
I will see if I can dig out a delay and a reverb/delay with the controls you suggest in the mean time.
www.stanleyfx.co.uk

Sanity: doing the same thing over and over again and expecting the same result. Mick Taylor

Please at least have 1 forum post before sending me a PM demanding something.

MetalGuy

I don't know if I downoladed an old revision of the PCB but it looks like one of the PIC programming pins was connected to the wrong connector pin.
I had some trouble programming the PIC12F615 (in circuit) which MPLAB was insisting was a 4.5-5.5V part and was giving me voltage error. The Pickit2 software also warned that the part may not erase and/or record properly but at the end it did the job (after connecting to pin 4 - MCLR).



Ice-9

The pins are correct and are not for programming the pic, it's a long thread but the reason for the pins under the pic are documented somewhere.

The pic chip is supposed to be programmed BEFORE soldering, where as the EEPROM can be programmed in circuit.
www.stanleyfx.co.uk

Sanity: doing the same thing over and over again and expecting the same result. Mick Taylor

Please at least have 1 forum post before sending me a PM demanding something.

potul

Quote from: MetalGuy on April 20, 2018, 11:26:53 AM
I can build my own hex files with SpinAsm but since you're offering help I'm interested (without adding a separate Mix control for now) in having a regular Delay (Time/Repeat/Mix), Delay/Reverb (Time/Repeat/Rvb level) and maybe other types of delays that you would suggest. From the current list of effects I can part with the Wah, Phaser and Octaver (in that order).
Other than that it would be nice to have a library with effects that we can mix at will in a hex file.

Here you have some patches from my repository...

Simple delay, taken from the spinsemi forum. Pots could be swapped if you don't like the layout, just change the POTx everywhere.
; Guitar Echo
; HK July 2009
; version 2.0
;
; mono in mono out
; pot0 = feedback amount (from no feedback = slap back to infinite feedback)
; pot1 = delay time (50 ms to 1 second with 32 kHz x-tal)
; pot2 = dry - wet mix
;
; only 20 thicks

;declare memory spaces:

mem   del   32767

;declare register equates:

equ   dout   reg0
equ   kfbk   reg1
equ        dry_in    reg2

;get feedback value from pot0:

wrax   kfbk,0
rdax   pot0,1
wrax   kfbk,0

;get address pointer from pot1:

rdax   pot1,1
and   %01111110_00000000_00000000   ;don't make jumps too small
sof   61/64,3/64         ;50 ms to 1 second
wrax   addr_ptr,0

;get output from delay:

rmpa   1
wrax   dout,0

;put input signals into delay, allowing for feedback:

rdax   dout,1
mulx   kfbk   
rdax   adcl,1
wrax      dry_in, 1
wra   del,0

; mix dry and wet using pot2

rdax   dout,1
rdax   dry_in,-1
mulx   pot2
rdax   dry_in,1

;form mono output:

wrax   dacl,0

;from http://www.spinsemi.com/forum/viewtopic.php?t=124


Another simple delay, made using SPINCAD:
; Pot 0: Delay time 50 msec - 950 msec
; Pot 1: Feedback level
; Pot 2: Delay level
; Left in, left out
;
; ----------------------------
;------ Input
;------ Pot 0
;------ Smoother
RDAX POT0,1.0000000000
RDFX REG0,0.0009173407
WRAX REG0,0.0000000000
;------ Feedback Output
;------ Pot 2
;------ Pot 1
;------ Mixer 2:1
RDAX ADCL,1.0000000000
WRAX REG2,0.0000000000
RDAX REG1,1.0000000000
MULX POT1
RDAX REG2,1.0000000000
WRAX REG2,0.0000000000
;------ LPF 1P
RDAX REG2,1.0000000000
RDFX REG4,0.3961005515
WRAX REG4,0.0000000000
;------ Scale/Offset
RDAX REG0,1.0000000000
SOF 0.9400000000,0.0600000000
WRAX REG5,0.0000000000
;------ Coarse Delay
RDAX REG4,1.0000000000
WRA 0,0.0
CLR
OR $007FFF00
MULX REG5
SOF 0.9749755859,0.0000305176
WRAX ADDR_PTR,0.0000000000
RMPA 1.0
WRAX REG6,0.0000000000
;------ Mixer 2:1
RDAX ADCL,1.0000000000
WRAX REG7,0.0000000000
RDAX REG6,1.0000000000
MULX POT2
RDAX REG7,1.0000000000
WRAX REG7,0.0000000000
;------ FB In 1
RDAX REG6,0.7600000000
WRAX REG1,0.0000000000
;------ Output
RDAX REG7,1.0000000000
WRAX DACL,0.0000000000


Delay+REverb taken from the 3K project. This one is stereo. It should be modified to work properly in the project:
;ECHO+REVERB.

;Pot0 = delay 100-500ms.
;Pot1 = repeat
;Pot2 = reverb (fixed parameters)

mem del 22938

mem ap1 123
mem ap2 245
mem ap3 625
mem ap4 856

mem lap1a 974
mem lap1b 1437
mem d1 1523

mem lap2a 1356
mem lap2b 1168
mem d2 1445

;write-first registers:

equ apout reg0
equ dout reg1
equ ef reg2

;read-first registers:

equ lf1 reg20
equ lf2 reg21
equ efil reg22

;constants:

equ krt 0.7
equ kshlf -0.5

;clear read-first registers and establish smoothing lFOs:

skp run,endclr
wrax lf1,0
wrax lf2,0
wrax efil,0
wlds sin0,25,100
wlds sin1,30,100
endclr:

;prepare delay control:

rdax pot0,1
and %01111110_00000000_00000000
sof 0.6,0.1 ;100 to 700mS
wrax addr_ptr,0

;write inputs to delay and involve feedback:

rdax efil,1 ;filtered echo out
mulx pot1 ;repeat control
rdax adcl,0.25
rdax adcr,0.25
wra del,1
mulx pot2 ;reverb control

;fall-through, do reverb:

rda ap1#,0.5
wrap ap1,-0.5
rda ap2#,0.5
wrap ap2,-0.5
rda ap3#,0.5
wrap ap3,-0.5
rda ap4#,0.5
wrap ap4,-0.5
wrax apout,0

rda d2#,krt
rdax apout,1
rda lap1a#,0.5
wrap lap1a,-0.5
rda lap1b#,0.5
wrap lap1b,-0.5
rdfx lf1,0.5
wrlx lf1,kshlf
wra d1,1.5
rdax dout,1
wrax dacl,0

rda d1#,krt
rdax apout,1
rda lap2a#,0.5
wrap lap2a,-0.5
rda lap2b#,0.5
wrap lap2b,-0.5
rdfx lf2,0.5
wrlx lf2,kshlf
wra d2,1.5
rdax dout,1
wrax dacr,0

;now get dout with address pointer:

rmpa 1
wrax dout,0

;develop filter coefficient, ef, from pot1:
;make such that ef=1 if pot is zero or max,
;but reduces to 0.5 at mid scale

rdax pot1,1
sof 1,-0.5 ;make go -.5 to +0.5
sof 1.2,0 ;make go -0.6 to +0.6
absa ;now +0.6, 0, +0.6
sof 1,0.4 ;now 1, 0.4, 1
wrax ef,0 ;write echo filter coefficient

;now filter dout into eout:

rdax dout,1
rdax efil,-1
mulx ef
rdax efil,1
wrax efil,0


;smooth reverb delays:

cho rda,sin0,sin|reg|compc,d1+100
cho rda,sin0,sin,d1+101
wra d1+200,0

cho rda,sin1,sin|reg|compc,d2+100
cho rda,sin1,sin,d2+101
wra d2+200,0




MetalGuy

Thanks for those FX! I'll add them to my collection.
I already checked the Spinsemi forum for free effects posted by forum memebers and copied whatever I was interested.
There's enough material top play with :)

MetalGuy

I've been checking the echotapper site and although I'm not very much into vintage I would like to have some of those by hand so the question is how to combine their effects (the text files which look like hex files but not quite) with existing spn files?

potul

Quote from: MetalGuy on May 03, 2018, 04:22:35 PM
(the text files which look like hex files but not quite)

I'm not familir with this... can you post an example?

MetalGuy

I think I've seen the Blue Nebula pedal mentioned somewhere by Mick.

https://echotapper.wordpress.com/membuilder-effect-files/

I used their Membuilder to combine 8 of them to be loaded to the EPROM (scroll down a little).

https://echotapper.wordpress.com/latest-updates-here/




potul

Quote from: MetalGuy on May 04, 2018, 09:01:31 AM
I think I've seen the Blue Nebula pedal mentioned somewhere by Mick.

https://echotapper.wordpress.com/membuilder-effect-files/

I used their Membuilder to combine 8 of them to be loaded to the EPROM (scroll down a little).

https://echotapper.wordpress.com/latest-updates-here/

I see.... I was not aware this tool was generating hex files. They definitively look like FV-1 hex files.
Did you try to upload the combined hex file into your FV-1?

The issues I can think of are the hardware differences between the Nebula and the FV-1 project.
-Depending on the gain of the circuit, you will have a weak/loud sound.
-Is the blue nebula using both inputs (L/R) or just one? (is is stereo?)
-does the nebula control mix via hardware or software?

Depending on this, the patches might work but not optimally.

Now, regarding how to combine... you can always combine hex files, they are standard "intel hex" files. The first 128 lines are the first patch, the following 128 the second one, etc... But you would need to write a small app, or an excel file to take care of the addresses and checksum.

https://es.wikipedia.org/wiki/Intel_HEX

MetalGuy

QuoteDid you try to upload the combined hex file into your FV-1?

Yes, it uploaded and worked successfully. What I can't figure out is how to combine several spn files with some of their effects files which look like hex files. I tried in SpinAsm to generate a hex file from a single spn file and combine it with Membuilder however it didn't work. 

Quote
But you would need to write a small app, or an excel file to take care of the addresses and checksum.

I don't think I'm competent enough to do that but if you provide an example I can give it a shot.


Ice-9

Quote from: MetalGuy on May 04, 2018, 09:01:31 AM
I think I've seen the Blue Nebula pedal mentioned somewhere by Mick.

https://echotapper.wordpress.com/membuilder-effect-files/

I used their Membuilder to combine 8 of them to be loaded to the EPROM (scroll down a little).

https://echotapper.wordpress.com/latest-updates-here/

Yes, if you visit my website you can download the Blue Nebula EEPROMS these will work in the FV-1 forum project PCB. Some of The Blue Nebula effects have been developed directly form Piet's etap2hw work. These are not available for commercial use.

http://www.stanleyaudio.com/bndownloads.html

The manual for using Membuilder is available from Philips echotapper blog.
www.stanleyfx.co.uk

Sanity: doing the same thing over and over again and expecting the same result. Mick Taylor

Please at least have 1 forum post before sending me a PM demanding something.