temps_utile / 6 x clock generator [build thread etc]

From circuitbending to homebrew stompboxes & synths, keep the DIY spirit alive!

Moderators: luketeaford, lisa, Kent, Joe.

Post Reply
User avatar
Sandrine
Super Deluxe Wiggler
Posts: 2277
Joined: Tue Jun 09, 2015 10:28 pm
Location: BC Canada
Contact:

Post by Sandrine » Sun Jul 26, 2015 2:16 pm

mxmxmx C'est bon que tu as utilize le nom d'origin francais, bien fait, mais une question:

Are the clocks sync'ed/syncable together and if so in what fashion?

Is the a manual?

Yay OLEDs!

User avatar
mxmxmx
Super Deluxe Wiggler
Posts: 2243
Joined: Thu May 31, 2012 1:54 am
Location: berlin

Post by mxmxmx » Sun Jul 26, 2015 3:48 pm

Sandrine wrote:mxmxmx C'est bon que tu as utilize le nom d'origin francais, bien fait
yeah, sorry, i'm kind of bad with names... it sounded better than the english or german equivalents though; here's an explanation : https://github.com/mxmxmx/temps_utile-/wiki ... which is also where the manual is.

and here's a crap video where you can't see much (... ipad 1), so i lost interest. but you get the idea.
[video][/video]

in this case, clock output #2 (LFSR mode) triggers one voice, #6 in LOGIC mode (channel 2 XOR channel 3) triggers another, with channel 3 in EUCLIDIAN mode. #5, also in LOGIC mode (channel 1 OR channel 3), triggers the ASR (the thing on the left). #4 doubles up as a 12 bit DAC, this goes into the ASR, too; here, the DAC simply tracks the state of the outputs (channel 1 = MSB, channel 6 = LSB). one of the ASR outputs modulates clock channel 2 (LFSR, tap position).
Are the clocks sync'ed/syncable together and if so in what fashion?
yep, they're synced in that there's one main clock and all the outputs derive from that, much like any 'clock distributor' module only with a few more modes (division, random, lfsr, euclidian, logic). it's pretty basic: an interrupt happens, the outputs are updated, the next state is calculated; the display is updated, the thing waits for an interrupt. so it can't be clocked too fast (as in kHz), but that's not the point of it.
Yay OLEDs!
!

flts
Super Deluxe Wiggler
Posts: 2984
Joined: Tue Mar 04, 2008 7:01 am

Post by flts » Tue Nov 17, 2015 10:30 am

Finally building my Temps-Utile (yellow PCB). Question to mxmxmx in particular:

It's almost done, but I seem to be missing a 79L05 - either I don't have any around and didn't order them with rest of the parts, or I have them and they're just lost somewhere in the bins. My local stores are failing me, so it's either 1h+ trip for one component, hoping a friend has one, throwing the PCB to "will finish once I order the last part online and it arrives" bin or trying to be clever.

So. Can I kludge a full size 7905 on the backside (minding pinout and if I can fit one), or is there some kind of minimum current limit or similar that makes sure it won't work instead of 79L05? As far as I can understand they're basically the same circuit in different package, but just wanted to make sure.

Or if I can't fit one, what about substituting with a negative L-series regulator with a slightly higher voltage and pretrimming accordingly? As there's no schematic (?) I'm not 100% sure what that regulator is doing but based on quick look at the PCB it looks like it might be only used together with the trimmer for setting an offset for the CV inputs...?

Btw. The BOM in the Wiki seems to be missing a couple of extra 100K resistors (I counted more than 10, there's already 8 under the Teensy), and one 6K8 that are on the board. Also, I thought there were only 4x 330nF capacitors (one has a bigger footprint and says 0.33 instead of 330nF) and couldn't find a place for 1uF unlike in the BOM? Not sure if these are "hidden" somewhere in plain sight or just left out from the board revision. Looks like there's a newer (or older?) "blue board" BOM in the wiki as well but I have one of the yellow ones.
Warm thank you to everyone for the past 10 years. I'm not active here anymore for personal reasons, so for those I've had the pleasure of dealing with please send an e-mail instead of PM if you wish to get in touch.

User avatar
mxmxmx
Super Deluxe Wiggler
Posts: 2243
Joined: Thu May 31, 2012 1:54 am
Location: berlin

Post by mxmxmx » Tue Nov 17, 2015 11:18 am

ups, yeah, the BOM has a few errors. sorry, my bad. (and thanks for pointing it out). just use the 1uF where it says 0.33. (the "blue" one is newer, basically the same thing but not using any of the funny SMD pins on the belly of the teensy.)

about the 79L05: the input circuit is here (scroll down to "CV inputs"). so yes, it's for offsetting the CV (to 1.65V); if you have any, preferably i'd suggest using a LM4040 + resistor instead *. either sot-23 or TO-92 will work, and basically any value: 3v3, 5v, 10v, even 2v5 (you might need adjust the 49k9 resistor). ie *like so:

Image

but if you can fit it, the 7905 should be fine. most parameters have only 32 steps or so, so noise etc isn't terribly important in any case.

flts
Super Deluxe Wiggler
Posts: 2984
Joined: Tue Mar 04, 2008 7:01 am

Post by flts » Tue Nov 17, 2015 11:28 am

^- Great, thanks!

I think I _should_ have spare LM4040s of more than one value. Edit: Found a spare LM4040DIZ-5.0 in TO92! Now I'll just have to figure out which way the pins should be connected when replacing the 79L05. Clip NC leg off, anode (-) to common / GND pad, cathode (+) to output pad, and a resistor between input and output? Or anode and cathode in reverse?

How about the extra resistor - what does it do / between which pins should it go / how do I pick a sensible value for it? Not really familiar with LM4040 at all yet, I've just been using them in some DIY kits as instructed so far. Based on datasheet it looks like it sets an operating current for the shunt reg, but I'm not sure how it should be calculated in this circuit.

I'll replace the 0.33uF with 1uF in the spot with the bigger footprint.
Last edited by flts on Tue Nov 17, 2015 12:03 pm, edited 1 time in total.
Warm thank you to everyone for the past 10 years. I'm not active here anymore for personal reasons, so for those I've had the pleasure of dealing with please send an e-mail instead of PM if you wish to get in touch.

User avatar
mxmxmx
Super Deluxe Wiggler
Posts: 2243
Joined: Thu May 31, 2012 1:54 am
Location: berlin

Post by mxmxmx » Tue Nov 17, 2015 12:00 pm

don't worry about the 1uF cap, .33uF should do.

and yep, it should be doable, but you can't solder it straight onto the TO-92 footprint. since we need a negative reference voltage, the cathode (pin 1) should go to the ground pin, pin 2 (anode) to the pad/trace connected to the trimpot ( = Vout pin); then solder the resistor across the remaining pad (Vin/middle pin) and the anode/Vout. ignore pin 3, it's NC.

as for the resistor, the formula given is R = Vs-Vr / Il-Iq. Vs = -12V; Vr depends on your reference. Il is the load current, Iq the current through the diode, which should be ~ 50 uA < Iq < 15mA. so if you have, say, a LM4040-10, a 510R resistor or so would be fine.

flts
Super Deluxe Wiggler
Posts: 2984
Joined: Tue Mar 04, 2008 7:01 am

Post by flts » Tue Nov 17, 2015 12:10 pm

mxmxmx wrote:and yep, it should be doable, but you can't solder it straight onto the TO-92 footprint. since we need a negative reference voltage, the cathode (pin 1) should go to the ground pin, pin 2 (anode) to the pad/trace connected to the trimpot ( = Vout pin); then solder the resistor across the remaining pad (Vin/middle pin) and the anode/Vout. ignore pin 3, it's NC.
Thanks - makes sense, I got it the other way round when looking at the datasheet but I forgot it's a negative reference voltage.
as for the resistor, the formula given is R = Vs-Vr / Il-Iq. Vs = -12V; Vr depends on your reference. Il is the load current, Iq the current through the diode, which should be ~ 50 uA < Iq < 15mA. so if you have, say, a LM4040-10, a 510R resistor or so would be fine.
How would I calculate / know the load current in this case? I have a LM4040-5 around. Something like 1.8K resistor for Vr = -5V?
Last edited by flts on Tue Nov 17, 2015 12:51 pm, edited 3 times in total.
Warm thank you to everyone for the past 10 years. I'm not active here anymore for personal reasons, so for those I've had the pleasure of dealing with please send an e-mail instead of PM if you wish to get in touch.

User avatar
Altitude909
Super Deluxe Wiggler
Posts: 3481
Joined: Wed Aug 24, 2011 5:13 pm
Location: Meesheegan

Post by Altitude909 » Tue Nov 17, 2015 12:33 pm

Got an extra OLED for O_C so I guess this is next since a clock module is sorely needed in my setup. Anyone need boards? I'll have 2 spares..

User avatar
mxmxmx
Super Deluxe Wiggler
Posts: 2243
Joined: Thu May 31, 2012 1:54 am
Location: berlin

Post by mxmxmx » Tue Nov 17, 2015 12:57 pm

flts wrote: How would I calculate / know the load current in this case? I have a LM4040-5 so would roughly the half (220R) do?
guestimation ... it'll not be much, ~ 1mA (there's the four 49k9 resistors in parallel + trimpot in series going into the op amps). you'll need to double or triple the resistor though ((12-5)/220 = 31mA). if you have a spare 1k2 or 1k8?

flts
Super Deluxe Wiggler
Posts: 2984
Joined: Tue Mar 04, 2008 7:01 am

Post by flts » Tue Nov 17, 2015 1:00 pm

^- Sorry, I was editing my previous reply as I recalculated and realized I did it wrong. So yep, have a 1.8K, just soldered it in :)
Warm thank you to everyone for the past 10 years. I'm not active here anymore for personal reasons, so for those I've had the pleasure of dealing with please send an e-mail instead of PM if you wish to get in touch.

flts
Super Deluxe Wiggler
Posts: 2984
Joined: Tue Mar 04, 2008 7:01 am

Post by flts » Tue Nov 17, 2015 1:52 pm

Getting errors about multiple declarations while compiling. Arduino 1.6.6, Teensyduino 1.26, latest code from temps_utile- repository. Wonder what's wrong? The IDE gives error highlights in strange rows that seem to not be actually related to the issues.

/Users/vae/Documents/tmp/temps_utile/clocks.ino: In function 'void clocks_restore_channel(params*, const channel_settings*)':
/Users/vae/Documents/tmp/temps_utile/clocks.ino:130:93: error: 'void clocks_restore_channel(params*, const channel_settings*)' was declared 'extern' and later 'static' [-fpermissive]
static void clocks_restore_channel(struct params* p, const struct channel_settings* settings) {
^
/Users/vae/Documents/tmp/temps_utile/temps_utile.ino:120:6: error: previous declaration of 'void clocks_restore_channel(params*, const channel_settings*)' [-fpermissive]
volatile uint8_t _adc;
^
/Users/vae/Documents/tmp/temps_utile/clocks.ino: In function 'void clocks_store_channel(const params*, channel_settings*)':
/Users/vae/Documents/tmp/temps_utile/clocks.ino:138:91: error: 'void clocks_store_channel(const params*, channel_settings*)' was declared 'extern' and later 'static' [-fpermissive]
static void clocks_store_channel(const struct params* p, struct channel_settings* settings) {
^
/Users/vae/Documents/tmp/temps_utile/temps_utile.ino:121:6: error: previous declaration of 'void clocks_store_channel(const params*, channel_settings*)' [-fpermissive]
void adc_timerCallback() {
^
Warm thank you to everyone for the past 10 years. I'm not active here anymore for personal reasons, so for those I've had the pleasure of dealing with please send an e-mail instead of PM if you wish to get in touch.

flts
Super Deluxe Wiggler
Posts: 2984
Joined: Tue Mar 04, 2008 7:01 am

Post by flts » Tue Nov 17, 2015 2:10 pm

FWIW works fine with Arduino 1.6.5 so probably 1.6.6 breaks something in linking or similar.
Warm thank you to everyone for the past 10 years. I'm not active here anymore for personal reasons, so for those I've had the pleasure of dealing with please send an e-mail instead of PM if you wish to get in touch.

User avatar
mxmxmx
Super Deluxe Wiggler
Posts: 2243
Joined: Thu May 31, 2012 1:54 am
Location: berlin

Post by mxmxmx » Tue Nov 17, 2015 3:17 pm

flts wrote:FWIW works fine with Arduino 1.6.5 so probably 1.6.6 breaks something in linking or similar.
ok, sorry for the hassle. their constant IDE updating makes things something of a moving target ...

can't really tell what's going on with 1.6.6. the error certainly is a bit weird ( ... /temps_utile.ino:120:6: error: previous declaration of 'void clocks_restore_channel ) . there's no mention of clocks_restore_channel etc near line 120 or 121

User avatar
pld
Ultra Wiggler
Posts: 988
Joined: Thu Mar 05, 2015 5:15 am
Location: Germany
Contact:

Post by pld » Tue Nov 17, 2015 4:03 pm

Yeah, 1.6.6 seems to have changed a bunch of settings/warnings. I'll give it a look...

flts
Super Deluxe Wiggler
Posts: 2984
Joined: Tue Mar 04, 2008 7:01 am

Post by flts » Tue Nov 17, 2015 4:09 pm

I'd gladly help as well but living with configuration, linker, environment etc. issues at work 5 days a week makes me a bit hesitant to do that on free time. I tried throwing around ifdefs and other brute force stuff like that for a while before I gave up and tried an older version of Arduino, hope it's a simple fix.

Got firmware uploaded in mine (did that before cutting traces etc.) and Teensy in place, and sawed a 14HP panel - drilling and panel component fitting time tomorrow I guess!
Warm thank you to everyone for the past 10 years. I'm not active here anymore for personal reasons, so for those I've had the pleasure of dealing with please send an e-mail instead of PM if you wish to get in touch.

User avatar
pld
Ultra Wiggler
Posts: 988
Joined: Thu Mar 05, 2015 5:15 am
Location: Germany
Contact:

Post by pld » Tue Nov 17, 2015 5:15 pm

I can compile it on 1.6.6 with this fix but didn't try it with 1.6.5 or on hardware :) Arduino IDE collects/mangles the source files before they hit gcc, I guess that's why the error output doesn't always correspond well, but I've never really looked into it.

User avatar
mxmxmx
Super Deluxe Wiggler
Posts: 2243
Joined: Thu May 31, 2012 1:54 am
Location: berlin

Post by mxmxmx » Wed Nov 18, 2015 4:18 am

compiles fine with 1.6.5, but i didn't try either -- any reason you declared them static?

btw @altitude909, if you haven't ordered yet, i still have plenty of said 'blue' pcbs (= temps_utile_rev_gerbers.zip); same thing, just touched up a few things:

Image

flts
Super Deluxe Wiggler
Posts: 2984
Joined: Tue Mar 04, 2008 7:01 am

Post by flts » Wed Nov 18, 2015 4:31 am

I guess it doesn't make much sense to declare out-of-class functions static as they aren't going to be per-object and their visibility is global anyway...? So can't see why it wouldn't work.
Warm thank you to everyone for the past 10 years. I'm not active here anymore for personal reasons, so for those I've had the pleasure of dealing with please send an e-mail instead of PM if you wish to get in touch.

User avatar
pld
Ultra Wiggler
Posts: 988
Joined: Thu Mar 05, 2015 5:15 am
Location: Germany
Contact:

Post by pld » Wed Nov 18, 2015 5:31 am

They're static mostly out of habit I guess...

static in that case means "not global, used only in this source file", or correctly something like "only visible within this translation unit", so it's a hint to the linker as well as other programmers. "static" isn't compatible with the "extern" storage class, which their compiler process seems to be trying :hmm:

tl;dr: pld == nerd, .ino != .c/.cpp :)

flts
Super Deluxe Wiggler
Posts: 2984
Joined: Tue Mar 04, 2008 7:01 am

Post by flts » Wed Nov 18, 2015 6:47 am

pld wrote:static in that case means "not global, used only in this source file", or correctly something like "only visible within this translation unit", so it's a hint to the linker as well as other programmers. "static" isn't compatible with the "extern" storage class, which their compiler process seems to be trying :hmm:

tl;dr: pld == nerd, .ino != .c/.cpp :)
Yep, seems like Arduino sketches aren't considered compilation / translation units in the same way as C/C++ source files... That, or the postprocessor does weird things to the code.
Warm thank you to everyone for the past 10 years. I'm not active here anymore for personal reasons, so for those I've had the pleasure of dealing with please send an e-mail instead of PM if you wish to get in touch.

sammy123
Super Deluxe Wiggler
Posts: 1216
Joined: Sun Mar 24, 2013 12:36 pm

Post by sammy123 » Wed Nov 18, 2015 3:23 pm

Max I'd like to grab a board.

Have you thought about a random clock mode?

User avatar
mxmxmx
Super Deluxe Wiggler
Posts: 2243
Joined: Thu May 31, 2012 1:54 am
Location: berlin

Post by mxmxmx » Wed Nov 18, 2015 5:08 pm

sammy123 wrote:Max I'd like to grab a board.

Have you thought about a random clock mode?
sure.

... and there's two random modes already. one is plain 'random' (with threshold); the other some sort of linear feedback shift register, which can be fairly irregular, depending on length and tap positions. (the one obvious thing still missing is clock multiplication ... )

flts
Super Deluxe Wiggler
Posts: 2984
Joined: Tue Mar 04, 2008 7:01 am

Post by flts » Wed Nov 18, 2015 5:09 pm

Finally finished mine and as far as I can see everything works fine except

1) The encoders I used (Alps EC11 clones from eBay) work in reverse
2) The two tact buttons do nothing

Issue 1 can fix by tweaking firmware. The second issue is a tougher one.

I've used the recommended tact switches and made sure they're soldered OK, but nothing happens in UI when I press them. Any ideas where to start troubleshooting? If nothing else, I'll try to trace the PCB a bit tomorrow and see if there's something missing or wrong.

Edit: obviously I can't test all channels as the channel selection isn't working, but at least it eats external clock and spits out whatever is configured on channel 1 so I assume it's working otherwise :)
Last edited by flts on Wed Nov 18, 2015 5:30 pm, edited 1 time in total.
Warm thank you to everyone for the past 10 years. I'm not active here anymore for personal reasons, so for those I've had the pleasure of dealing with please send an e-mail instead of PM if you wish to get in touch.

User avatar
mxmxmx
Super Deluxe Wiggler
Posts: 2243
Joined: Thu May 31, 2012 1:54 am
Location: berlin

Post by mxmxmx » Wed Nov 18, 2015 5:30 pm

re 2), so that's the two multimec switches, right? they should increment (top) or decrement (bottom) the channel that's being edited. long pressing the top one should take you to the CV menu, long pressing the lower one will just display the screen saver and frequency (if clocked externally)

the pins in question are GPIO 4 and 5, they should read 3v3 normally, and go low when pressing the buttons. there's just the two pull up resistors (the two right by the upper switch) and two caps involved, so there's all that much that could go wrong. weird though that it's both of them?

flts
Super Deluxe Wiggler
Posts: 2984
Joined: Tue Mar 04, 2008 7:01 am

Post by flts » Wed Nov 18, 2015 5:51 pm

mxmxmx wrote:re 2), so that's the two multimec switches, right? they should increment (top) or decrement (bottom) the channel that's being edited. long pressing the top one should take you to the CV menu, long pressing the lower one will just display the screen saver and frequency (if clocked externally)
Yup, the Multimec ones specified in BOM (5GTH935). Measured that both make contact between upper and lower pin pairs when you press them. Tried pressing quickly, long press, etc., in both the trigger display screen and settings menu, they just do nothing at all.
the pins in question are GPIO 4 and 5, they should read 3v3 normally, and go low when pressing the buttons. there's just the two pull up resistors (the two right by the upper switch) and two caps involved, so there's all that much that could go wrong. weird though that it's both of them?
Yeah, looks like neither of them works. Looked at underside of the board again - looks like the switch pins are all soldered OK, and the resistors + caps are in place. The caps (legend "0.1") should be 100n, right? And resistors 500R / 510R?

Otherwise I guess I'll have to start probing tomorrow.
Warm thank you to everyone for the past 10 years. I'm not active here anymore for personal reasons, so for those I've had the pleasure of dealing with please send an e-mail instead of PM if you wish to get in touch.

Post Reply

Return to “Music Tech DIY”