My Penrose build (Full kit with PCB v0.4) has an issue where it can't
seem to make up it's mind what value to quantize to and rapidly changes
between two (or sometimes more) values.
The module seems to work OK when the 'IN' voltage is less than approx
2.5 Volts. It quantizes fine and outputs a single gate on each change.
However, after approx 2.5 Volts or more, Penrose can't quite decide what
quantized value to output and quickly changes between selected notes
before finally locking to one value. Viewing the 'GATE' while this
occurs shows it jumping up and down rapidly a few times before finally
outputing a steady gate. (It's behavior looks similar to "switch bounce").
It seems the higher the 'IN' voltage the worse it gets and at times it
won't lock to a fixed quantized value at all. I can even get Penrose in
this state using a steady DC voltage in (like from an Intellijel Triatt
or circuit Abbey Invy).
I have tried updating the firmware (v1.2) but the issue remains.
Any ideas on what and how to fix this issue?
Steve
Comments
Quote from that thread:
"anyone up for beta testing a bugfix update for the Penrose quantizer?
In the continuous mode the CV in was too sensitive, so with a CV exactly between 2 notes the quantizer could not decide on a note and rapidly toggles between 2 active steps.. It also could lead to slewed transitions between notes. I added a hysteresis to the CV input processing that should fix this"
As mentioned before, I have tried updating to v1.2 firmware but the issue remains.
Also, there doesn't seem to be any code revisions on Github so I can't see what was changed.
Steve
The other solution is to just use the trigger input (which is sort of like a sample and hold) and it will never jump around like that.
Perhaps a better hysteresis is needed.
In "quantizer.c"
line 118 (github line number) change the variable lastInput type from uint8_t to uint16_t. Also, change the magic number 2 on line 128 to a 3.
So, original code on line 118 in "quantizer.c" is: change to:
Original code on line 128 is:
change to:
Or leave as '2' and make "greater than" only like this:
Changing lastInput type from uint8_t to uint16_t stops implicit cast in abs() function on line 128.
Modifying magic number just smooths detection of a new value to quantize a bit more.
Attached is a zipped .wav with the above changes.
Standard disclaimer: Try at your own risk.
Steve