A gate & CV sequencer that uses the binary representation of an 8-bit integer to determine the of/off pattern.
The module has 2 channels, A and B. Channel A is controlled by K1
and outputs on CV1-3
. Channel B is controlled
by K2
and outputs on CV4-6
.
Inspired by an Instagram post by Schreibmaschine describing an idea for a new module.
DIN
: an input clock/gate/trigger signal used to advance the sequencesAIN
: optional CV control for sequence A and/or B (see configuration, below)K1
: determines the value of sequence A: 0-255K2
: determines the value of sequence B: 0-255B1
: manually advance sequence AB2
: manually advance sequence BCV1
: trigger output of sequence ACV2
: gate output of sequence ACV3
: CV output of sequence ACV4
: trigger output of sequence BCV5
: gate output of sequence BCV6
: CV output of sequence B
The numbers 0-255 can be represented in binary in 8 bits:
0
:00000000
1
:00000001
2
:00000010
3
:00000011
- ...
253
:11111101
254
:11111110
255
:11111111
Let 0 <= n <= 255
be the value the user selects with the knob. Every time we receive a clock signal we rotate
the bits 1 place to the left, giving us n'
:
...
00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000
00000001
...
The "current bit` is the most-significant bit.
The trigger output will emit a trigger signal if the current 1s bit is 1, and no trigger if the current bit is 0. The duration of the trigger is the same as the incoming clock signal (or the duration of the button press).
The gate output will go high if the current bit is 1, and will go low if the current bit is 0.
The CV output set to MAX_OUTPUT_VOLTAGE * reverse(n') / 255
. The bits are reversed so as to prevent a situation
where the CV is always high when the active bit is also high; this forcibly de-couples the gate & CV outputs,
which can lead to more interesting interactions between them.
Let's assume sequence 83 is selected. 83 = 01010011
Step | Gate (High/Low) | Trigger (Y/N) | CV Out (10V max) |
---|---|---|---|
1 | Low | N | 7.921V |
2 | High | Y | 3.961V |
3 | Low | N | 6.980V |
4 | High | Y | 3.490V |
5 | Low | N | 6.745V |
6 | Low | N | 3.723V |
7 | High | Y | 1.686V |
8 | High | Y | 5.843V |
Time graph
Clock In
____ ____ ____ ____ ____ ____ ____ ____
| | | | | | | | | | | | | | |
|____| |____| |____| |____| |____| |____| |____| |____
. . . . . . .
Gate Out . . . . . . .
._________. ._________. . .____________________
| | | | . | .
_________| |_________| |___________________| .
. . . . . . .
Trigger Out . . . . . .
._ . ._ . . ._ ._
| | . | | . . | | | |
_________| |_________________| |___________________________| |_______| |________
. . . . . . .
CV Out (approx) . . . . . .
10V--- . . . . . . .
. . . . . . .
_________. . . . . . .
| ._________. ._________. . .
| | | | | . .__________
5V---- | | | | | . |
|_________| |_________| |_________. |
. . , . . | |
. . . . . |_________|
. . . . . . .
0V---- . . . . . . .
This program has the following configuration options:
USE_AIN_A
: iftrue
, channel A's value is determined byAIN
andk1
will act as an attenuator for the CV signal connected toAIN
USE_AIN_B
: iftrue
, channel B's value is determined byAIN
andk2
will act as an attenuator for the CV signal connected toAIN
USE_GRAY_ENCODING
: iftrue
, instead of traditional binary encoding, the pattern is encoded using gray encoding. This means that consecutive sequences will always differ by exactly 1 bit.
Decimal value | Traditional binary | Gray encoding |
---|---|---|
0 | 00000000 |
000000000 |
1 | 00000001 |
000000001 |
2 | 00000010 |
000000011 |
3 | 00000011 |
000000010 |
4 | 00000100 |
000000110 |
5 | 00000101 |
000000111 |
6 | 00000110 |
000000101 |
7 | 00000111 |
000000100 |
... | ... | ... |
To enable Gray encoding, create/edit /config/IttyBitty.json
to contain the following:
{
"USE_GRAY_ENCODING": true
}