Tuesday, December 19, 2023

DSP-G1: ARM based 4 Voice Synth on an 8 pin DIP

 Readers: If you want to build the project featured in today's post, please go to PCBWAY's Community pages--a gerber ready to download and/or fabricate as well as KiCAD files, PDFs, a BOM, links to Github etc. are here. A quick sound demo of the finished project is here.

Also please visit PCBWAY's site using the link here--it will help this blog immensely. Thanks.

======

A colleague from my geeky audio meetup group sent me a link to the DSPG1 and I thought--$20USD and some jellybean parts gets you an entire 4 voice synthesizer?

The DSP-G1 from Synthetic Sound Labs--datasheet is here


Cool!!

Let's motorize this pursuit....in this post I lay out and populate a DSP-G1 based single-board synthesizer and get it up and running.

ABOUT THE DSP-G1

This is an older IC--a decade old post about the DSPG1 is here.

It's apparently based on an NXP LPC 81x MCU--an ARM Cortex M0+ inside an 8 pin DIP MCU.

I've heard about synths created with Arduino and the Mozzi library--I figured this was the same idea but with a different MCU and proprietary firmware.

MIDI and OPTOS

The DSPG1 has no analog CV in; everything is controlled by MIDI.

In the years I've been pondering audioDiWHY hard to believe this was my first MIDI project. 

Yep. 

I knew very little about MIDI other than: Roland, Obeheim and Sequential invented it, it's 8 bit, it's pretty slow, and it's been around forever. 

Wikipedia knows more, go here.  

A good Hackaday article about how incoming MIDI can be opto-coupled, to eliminate ground loops and other gremlins, is here

I hate ground loops and thus incorporated optocoupled MIDI into the DSPG1's PCB.

I didn't read the Hackaday document carefully enough and consequently Revision 1 came back from PCBWAY and it didn't work (at all).  

After some head scratching it turned out the Optocoupler IC I incorporated in Revision 1 of the PCB was too slow. 

It turns out: six pin optocoupler IC designs are not created equal--not even close. You have to choose the right opto IC to get the desired results--and in my case, if the DSP-G1 couldn't see a decent MIDI signal containing appropriate continous controller values it made no sound at all.


Live and learn?  I should have picked an optocoupler that had a rise time in the 3uS (microsecond--a millionth of a second). Otherwise, no dice. The speed of an optocoupler can be found in the opto's datasheet:

Datasheet for Vishay CNY17.  This coupler should work....but, not the one I used....


Rev 1 of the board. looks OK??


Um...nope. I had to kludge a PC900 optocoupler in place of the 4n25 opto IC. The PC900 had different power requirements and a different pinout. The resulting module "worked" but was unreliable.


The devil in the details: the MIDI spec wants rise times less than 2uS.  The MIDI rise time for a 4n25 opto on my bench was about 45uS! No wonder REV1 didn't work pre-kludge.

I redesigned a REV2 board to accomodate faster opto IC's: PC900 (got some NOS from Ebay)  PC900V (got some cheapees from China) and H11L1M (got some from Tayda); all had the same pinout and roughly the same ready-for-Midi performance. 

In revision 2, all three six pin optos worked and I got sound out of the module.

Subcircuit for the MIDI optocoupler IC's used in REV2 of the board. Hint: with MIDI sending current to  pin 1, put your oscilloscope probe on pin 4. If you don't see <= 3us rise and fall times you have a problem.


 Build photos:

New boards from this blog's friendly sponsor, PCBWAY. You can help out this blog by checking 'em out.

Rev 2 Board is a mix of through hole and 1206 SMD.  For some DIY applications--for example, when swapping parts as I hone in on a sound I like--SMD seems easier than through-hole; heat up the part and it comes right off; clean up the pads and drop in a different component.

Rev2 uses surface mount 10uF caps. First time I've incorporated those. Thanks to Elton from Otter Mods for showing me how to incorporate them into Euro SKIFF designs.


The toggle switch in the center is for power-cycling, necessary to fix stuck notes.

Dumb, dumb! Rev 2 still isn't quite right, it incorporated a switched TRS mono jack for MIDI. I needed a true stereo jack. I ordered the right part from Tayda ("A6685")....this mistake is corrected on the gerber and KICAD files I uploaded to the PCBWAY community site.


Testing and recording the DSPG1 module in with a TipTop Happy Ending power; MIDI CC is provided by Reaktor. Still need to design the front panel...maybe later.


TRS MIDI 

At its physical level, MIDI forms a current loop; if you are using a 180 degree 5 pin DIN jack, pin 4 is "source" for the loop, while pin 5 is "sink". 

This is ideal for driving an LED in an opto-isolator. 

However, MIDI DIN jacks take up a lot of space; in the world of Eurorack space is the thing we never seem to have enough of.  Thus, a lot of Euro designs use TRS 3.5" jacks instead of DIN.    

Let's motorize that pursuit as well:

Bench notes: MIDI DIN to TRS Type A MIDI

I built my own TRS A male to female cable--easy--I got some TRS male to male 3.5mm jumper cables and cut one end off, then soldered it to a DIN5 female using the pinout above.

A good page for different wiring configurations for DIN, TS and TRS MIDI is here. A more in-depth view of the whole enchilada is here.

USING THE DSP-G1

There may be an existing public source MIDI Continuous controller generator for the DSPG1 online but I couldn't find it. 

Therefore I conjured a Reaktor 5 ensemble to generate the MIDI CC's:

Get the DSPG1 ensemble from Github, here.

The ensemble was then opened as a VST plug-in Ableton, using 3 Ableton tracks. 

The Ableton configuration ended up being harder to set up than anticipated.

The leftmost track contained the Reaktor DSPG1 ensemble in a VST (Reaktor VSTs--even if they are MIDI only--can only exist in Ableton audio tracks); a second MIDI track merged note on-offs from a Roland A series controller into the MIDI stream. This allowed me to play notes and adjust sounds at the same time. 

A third MIDI track sent the CC's from track 1 to my studio's MIDI controller, an iConnectivity Mio.


I had to carefully dial in the Ableton configuration above, otherwise I could send Midi note-ons and CV's and whatnot directly to my studio's master bus out, creating potentially eardrum- and speaker-destroying thumps and bumps. If you try something like this at home, be careful!

With everything set up I could make some interesting sounds with the DSPG1, a super-short/super-quick demo recording is on Soundcloud here.  

If I get more time I will expand on this.... everything you hear is all DSP-G1; only plugins used were EQ and reverb.

I created a Reaktor 5 ensemble to generate the CC's (get that from Github, here) but Max for Live or any decent MIDI controller that can generate 19 independent, simultaneous CC values should work.

The filter is 24db, it sounds a bit crunchy but not bad. 

The DCO detune gave me a nice, sort of late Juno-ish sound.  

The paraphonic nature--one VCF and VCA for everything--didn't bother me as much as I thought it would.  

The DSPG1 does not support MIDI portamento, transpose, velocity, or sustain CC's--it does not have memory slots to store your favorite sounds--what you see in the data sheet its what you get. But again, what do you want for $20?

The only issue I had, and it might be my MIDI rig, is stuck notes every now and then. The DSPG1 does not support MIDI CC123 or CC120 "all notes off"....power cycling silenced stuck notes, but I had to dial in my sound again.

So what's next?  Not sure. The DSPG1 is now 10 or so years old, maybe older; I can't find any DSPG1's for sale as I am writing this post. When they are back in stock I might create a front panel for the PCB. 

In the meantime, it's been a good learning experience, especially on the MIDI side of things.

Many thanks to Synthetic Sound Labs' Doug Slocum for invaluable assistance with this post.

Thursday, December 7, 2023

Son of Warm Floater: Intro to FreeCad 7

 Readers: If you want to build the power expander featured in this post, please go to PCBWAY's Community pages--a gerber ready to download and/or fabricate as well as KiCAD files, stl for 3D printing, FreeCAD files, and so on, are here

Also please visit PCBWAY's site using the link here--it will help this blog. Thanks.

======

I had so much fun getting started Kicad, why stop there? I needed to replace Fusion 360 whose license fee will go up by  >700% in a few years--same as Eagle's--with something more affordable.

After looking around I chose FreeCad, a popular open source choice for 3D modeling. 


As my first FreeCAD project I created a tray for an improved "Warm Floater" (initial post here). The Warm Floater is a small PCB allowing 3 Euro modules to be powered by a single 16 conductor ribbon.  

The update employs box headers in an effort to make it nearly impossible to orient the power cables incorrectly.  

The "tray" for this PCB insures its contacts can't short against a conductive surface.

The tray had to be 3D printed, so, this became the origin story for my first 3D printed item using FreeCad.

How did it go? 

FreeCad is not an intuitive program; you won't be able to use without study and practice.  

But after a few evenings I got it working--fortunately there are almost endless youtube tutorial videos about FreeCad. The tutorial videos got me out of jams. 

And I need to remember: FreeCAD is free. No whining!

FREECAD WORKFLOW

I downloaded FreeCAD for Windows (here) and opened the program.
 
The first concept I had to understand was a FreeCAD "workbench". For designing 3D parts like what's in today's post the workbench of choice was "Part Design", chosen from a drop down in the main menu.

If I didn't choose this workbench, the steps below, their icons, their dialogs, and so on, didn't behave as expected or weren't visible at all.



Once i selected Part Design, I had to "create a body" and "create a sketch" (links were on the left side of the screen).  

I clicked on the XY-plane to anchor my sketch to it.  

Clicking OK, the workspace dropdown automatically changed to "Sketcher":



Using the 2D tools, I was ready to draw something in 2D; I created the outer rectangle of my tray.

2D sketch tools. The rectangle and circle are obvious; I have no idea what the hell some of the others do.

Once I had my rectangle, I had to constrain it. I was unfamiliar with "constraining" my sketches, which meant, locking down its 2D proportions

A good video about how sketch constraints work is here

This constraining idea made sense, I didn't want dimensions drifting all over, but at times, when attempting to create complex 2D shapes, my sketches looked constrained but I still got at least one "DOF" ("degree of freedom"--as in the online dating world, DOF is not always wanted) and found I was "under constrained" which in terms of coffee dates: about right.

Doh!! Dof?? Still one DoF!
 

Constraining the shapes for my simple tray was easy enough however. Once constraints were set, I clicked on CLOSE which closed the sketch and brought me back to the "part design" workbench.  A handy "sketch tools" dialog appeared, with choices like "pad" (which meant, extrude) "hole" (which allowed for tapered screwholes) and so on, but if I clicked anywhere else in FreeCAD this dialog went away and didn't readily come back....



....fortunately the same actions were found as icons along the top menu:



If I clicked on the Arrow with the ? then hovered, the system told me what each icon did; if I just hovered, no, that didn't happen.  

The next thing I needed to do to my 2D shape was "pad" it (extrude it upward in the positive Z access).  OK, I padded to 3mm.

Next I had to "pocket" my design, "Pocket" is another FreeCAD term that was new to me...FreeCAD has a lot of terms I have not heard before; whatever.

Things got tricky. 

To create the tray I had to create a second sketch inside the first sketch. 

This wasn't how I assumed you'd do this, why not have a command "make a lip" or whatever, but, nope. Every shape/cut/extrusion/screw hole in FreeCAD needed its own 2D sketch.  

I thought I could create this inner sketch by clicking the sketch icon in the main menu and creating another rectangle--but--nope. 

The 2nd sketch appeared to be hidden by the first. Drat!

I couldn't see this second sketch until I viewed the part from the bottom....that's where sketch 2 was created, BELOW the original one (not what I would have expected, nor what I wanted).  

What I need to do instead was choose the topmost plane of sketch 1 by single clicking it.  

This "surface selection" (my term) only worked for creating additional sketches when the plane was the only thing colored:

Very important to make sure the surface I wanted my new sketch to sit on was colored, as you see here.  Otherwise the new 2D sketch didn't appear in a useful manner.

Now if I created a new sketch its Z origin sat on the green plane. Ah, that's what I wanted!

I created the inner sketch then constrained it to be exactly 1mm inside the first (is there another command "make the new sketch 1mm in every direction smaller than the one I just drew"? There must be....)

Finally clicked on a line of the inner sketch and clicked on the "pocket" icon. I chose a "dimension" pocket which was the default.

I entered 1mm and it worked.

Next, I needed 2 holes in the bottom of the tray.

When I tried adding the 2 holes to my first sketch I discovered once again--everything in FreeCAD with different Z extrusions had to be its own sketch and must sit on the correct plane.

I created a 3rd sketch, again choosing the surface I wanted the new sketches to sit on.  

This third sketch consisted of two constrained 3mm circles that would form the holes used to mount the PCB to the tray using nylon screws and nuts. 

Following the process above I "pocketed" the circles to push them though the inner tray (Sketch 2). 

I found no other way to do this, and this seemed like a whole lot of steps, that had to be done in exactly the right order, to make an extremely simple 3D shape.  

But, it was done.

An Aside: VIEWING THINGS IN FREECAD

To view or hide planes, you have to select the plane, right click, and say "toggle visibility". See the video here.

To zoom in or out use the mouse wheel.  Arrow keys move the imagine L/R or Up/Down.

To move around in 3D, hold the Shift key down along with the right mouse button. Click on an element in your part.  Now move the mouse. You knew this right? 

Probably not. Fortunately, I could change to different settings for rotating in 3D with my mouse (good video for setting up FreeCAD is here)--the "TinkerCad" choice is in the bottom right of the screen. Tinkercad allows 3D rotation using just the right mouse button. Better!




One more tidbit, you use "draft" workbench to create text. See the video here.

ASIDE: EXPORTING 3D MODELS TO KICAD

You need to install a 3rd party tool for this: "KiCad StepUp".  Video on how to do this is here.  Name of the tool is "Kicad StepUp.  Once this tool is installed, I selected the body of my model and chose the KiCadStepUp workbench.  It threw an error "Requests not found" but we can ignore that.  

Then I clicked on the KSU export to Kicad button and used all the defaults. It told me where it saved my exported files (".wrl" and ".step" files) which I renamed and moved.  

The 3D image can now be imported into Kicad. Open Kicad, and using Kicad's Footprint editor go to file > footprint properties > 3D model tab.
 

Update: FreeCAD allows exporting to WRL without a 3rd party tool. Select the entire 3D model; file > export. In Kicad: footprint editor; open a footprint; file > footprint properties > 3D tab.

TURNING THE DESIGN INTO TRAYS

With my tray finally done I printed one of these out on my 3D printer--which worked!--but needed more of them.  


So....With my tray STL file in hand, I whipped up a simple PCB uploaded both to PCBWAY, yes they do 3D printing, and wham, it was back. The 3D print jobs looked great. I am not saying this just because they're my sponsor, really, the quality of the print was top notch. 


Let's build!





3mm nylon screws and nuts fastens the PCB to the tray


This got mounted in my bench rack, now I can put more modules with low current draw in there....much needed improvement.

I figure I will get better at Freecad over time....this still feels very new to me. 

See ya next time. 



JTAG to SWD Converter

Readers: If you'd like to build the project featured in today's post, please go to PCBWAY's Community pages--gerber file, KiCAD ...