WELCOME to the D-Lev Thread! - www.d-lev.com
This thread has been going for years(!) now and the sheer length and rambliness can be a major turn-off for anyone trying to come up to speed with this project. It's really two large-ish projects in one thread: HIVE, my register/stack hybrid 8 thread barrel processor; and D-Lev, my digital FPGA based Theremin. I think the thread is worth reading just for Fred Mundel's (RIP) insights and general good nature. If it weren't for his freely given and detailed technical advice, I'm not sure I could have gotten this far. So this thread is dedicated to him, and to many others here (particularly pitts8rh, Mr_Dham, ILYA, Buggins, and livio) who have helped to move this project along.
The vast majority of the pictures I've posted in this thread reside in these TW photo albums:
http://www.thereminworld.com/album/digital-theremin-stuff/15140
http://www.thereminworld.com/album/digital-theremin-stuff-2/16747
http://www.thereminworld.com/album/digital-theremin-stuff-3/17070
http://www.thereminworld.com/album/d-lev-kit-pix/17422
http://www.thereminworld.com/album/analog-theremin-stuff/15600
The vast majority of the code, spreadsheets, audio files, etc. that I reference in this thread reside in this MediaFire folder:
http://www.mediafire.com/folder/w36b3brqyg2g3/theremin
The following is a list of links into the thread for the points I consider to be the most pertinent. The relevant post number in brackets is the link, followed by a short description. Some folks have deleted their posts, which will scramble the consecutive post numbering, but probably won't scramble the links. You can contact me, Eric Wallin, here in the thread, or via the TW PM system, or via email at tammie_eric@verizon.net. If you find yourself in the northern NJ area please consider dropping by for a chat and some show-and-tell. Cheers!
Year 1: Pitch only FPGA prototype, Hive musings.
[0005] - First VIDEO of pitch only / square wave.
[0016] - First AFE schematic.
[0018] - First Verilog code.
[0047] - Good Dattorro papers.
[0060] - HIVE processor twinkle in my eye.
[0131] - First LED tuner thoughts.
[0216] - Inductor SRF.
[0257] - New FPGA, Hive 32 bit multiplier thoughts.
[0266] - Hive 8 thread thoughts & Hive named.
Year 2: Solenoids, tuners, analog oscillators, mixing, plate antennas.
[0296] - Hive takes first baby steps.
[0302] - Trivial splines (fun, but unused).
[0310] - My solenoid coil winder & first coil with PIX.
[0327] - More coils.
[0336] - First Excel Hive Sim.
[0398] - More or less how my digital oscillators work.
[0408] - "Tankless" analog oscillator.
[0410] - Early proposed form of LED tuner.
[0427] - First opencores.org post for Hive.
[0428] - Bourns 6310 tempco test.
[0435] - Heterodyning for digital.
[0453] - Linearization via offset heterodyning & period measurement.
[0457] - Livio shows up for the first time with many fantastic oscillator, C sensing, and inductor ideas.
[0463] - Using Adobe Audition spectral frequency view to check for sticky operating points with PIX.
[0470] - Proposed block diagram (never fully implemented).
[0495] - XOR vs. DFF mixing.
[0515] - Begins a discussion of Theremin RF radiation.
[0540] - The tempting AM band.
[0560] - Active shielding.
[0573] - Interfering Theremins.
[0596] - Livio's Theremino PIX - with plate antennas!
[0599] - Multi-page discussion of Llivio's oscillator.
[0686] - Mains hum.
[0707] - Clapp oscillator.
[0719] - SS capacitance sensor noodling.
[0724] - Interference experiment.
[0735] - More XOR vs. DFF digital heterodyning discussion.
Year 3: Hand/antenna C measured and simulated, the Invariant, math package.
[0765] - Hive interrupt mechanism improvements.
[0794] - Switch to SystemVerilog.
[0802] - More ill-fated heterodyning & period measurement scheming.
[0811] - I start figuring out CIC filters.
[0821] - The optical SPDIF => analog RCA box I'm currently using.
[0855] - MASH DACs.
[0863] - The LED "tuner" note configuration.
[0879] - SPDIF testing.
[0883] - Early tuner PIX & VIDEO.
[0896] - Measuring the Theremini's abysmal gestural bandwidth (1.6 Hz!) with PIX.
[0909] - First thoughts / sims on CIC for operating point decimation.
[0937] - I stumble across THE INVARIANT (all non-EQ analog Theremins have the same sensitivity).
[0941] - Real C data from real antennas (for real men) with PIX.
[0957] - Early control box proposed layout.
[0970] - More tuner layout.
[0987] - More solenoid winding.
[0991] - CRC32 mania.
[1000] - Whereupon I abandon heterodyning and commit to direct measurement & plate antennas.
[1003] - The ill-fated shield drive C sensor (don't do this!).
[1006] - Plate linearity.
[1016] - FastCap simulations of "virtual Clara" and various antenna geometries.
[1017] - HW / SW oscillator (works but don't use).
[1018] - Chamberlin State Variable Filter (SVF).
[1025] - Empty Prototype with PIX.
[1026] - SIN2 in software.
[1030] - EXP2 floating point in software.
[1033] - List of design points, sim of oscillator.
[1034] - Etherwave antenna C response.
[1046] - Caution: Denorms
[1055] - COS2 float in software.
Year 4: HAL, interfaces, NCO as part of CIC, parsing, CIC as hum filter.
[1056] - HAL : Hive Assembly Language.
[1062] - SPI master.
[1070] - Parsing assembly.
[1073] - Early Command Line Parser.
[1075] - Numerically controlled periodic delay (NCPD).
[1080] - LFSR noise & logical differentiation.
[1083] - Rotary Encoders.
[1085] - The TLC5986 LED driver IC.
[1087] - Driving Miss TLC5986.
[1089] - Driving Miss LCD.
[1096] - LCD nuances not in *any* datasheet.
[1100] - LED tuner wired up with PIX.
[1104] - SPDIF / EEPROM board wired up.
[1111] - AFE board wired up.
[1114] - Measuring LC phase gain.
[1123] - Fortuitous tank drive buffer behavior with PIX.
[1129] - Purely hardware NCO.
[1130] - Pitch side construction details & PIX.
[1131] - Whereupon I give up on a 2 axis left hand controller.
[1135] - Volume side construction details & PIX.
[1142] - HAL parsing.
[1155] - Hardware handshakes.
[1157] - Examining noise at the antenna with PIX.
[1163] - Whereupon I finally see the PLL NCO as part of a CIC.
[1166] - The CIC as an extremely effective mains filter with PIX.
[1167] - Distributed HW/SW PLL/CIC data conversion & acquisition.
[1174] - DDR to increase resolution.
[1177] - Wiring up the remaining, with PIX.
Year 5: Hive sim re-write, functional prototype.
[1220] - Floating point ADD in software.
[1228] - Limiting processor hardware shifts.
[1229] - Hive finally gets byte access!
[1234] - HAL pointers.
[1241] - The new Hive Simulator.
[1253] - HAL gets a #include system!
[1255] - HAL gets a scoping system!
[1261] - Linearization by working the LC equation backwards fails.
[1262] - LINEARITY SOLVED!
[1270] - First pitch only VIDEO of the prototype making noise.
[1297] - Internal pitch & volume axis values scaling.
[1303] - Squared parameters everywhere.
[1308] - 12 VIDEOS of the early prototype.
[1337] - Early glottal source.
[1356] - Another early glottal source.
[1370] - Pitch correction.
[1372] - LED display updated with VIDEO.
[1373] - Internal pitch numbers.
[1379] - SPI EEPROM upgrade.
[1382] - A super efficient binary to BCD algorithm.
[1391] - Early pitch correction.
[1393] - First cut at volume processing.
[1396] - Volume side velocity VIDEOS.
[1403] - Better velocity detection.
[1425] - Final pitch correction.
[1428] - Clara Rockmore isolated Theremin sounds.
[1437] - Open back speaker baffle simulator.
[1438] - Axis modulation.
[1443] - Volume axis knee.
[1448] - Presets & Menus so far with VIDEO.
Year 6: Focus on synthesis, prototype documentation.
[1479] - Encoder debounce required.
[1481] - Final axis processing.
[1494] - Final reduced aliasing oscillator, patent US4249447.
[1512] - Final (?) axis modulation.
[1534] - Volume axis velocity processing.
[1538] - Hive gets single cycle limit / saturation logic!
[1558] - Thoughts on pitch sensitivity and playing technique.
[1564] - Noise generation how-to.
[1573] - Non-harmonic resonator.
[1575] - All-pass filters / resonators.
[1584] - More on all-pass resonators, violin & cello synthesis.
[1586] - Non-harmonic resonator implementation.
[1598] - PROTOTYPE: Parts List.
[1602] - PROTOTYPE: Tools List.
[1605] - PROTOTYPE: Pitch & Volume Antennas, AFE Board Schematic with PIX.
[1610] - PROTOTYPE: LED tuner with PIX.
[1613] - PROTOTYPE: SPI EEPROM, TOSLINK TX with PIX.
[1615] - PROTOTYPE: Rotary Encoders.
[1616] - PROTOTYPE: FPGA & LCD.
[1621] - PROTOTYPE: Fashion Shots (PIX).
[1625] - PROTOTYPE: Operating Frequencies.
[1634] - PROTOTYPE: Rotary Encoder hookup.
[1635] - LC Tank Q Limitations.
[1641] - Noise generation fixed.
[1642] - Axis processing update.
[1652] - D-Lev gets it's name.
[1662] - Parameter type system overhaul.
[1674] - Early pitch correction with VIDEO.
[1676] - Encoder debouncing RC.
[1678] - LED Tuner and the rational behind it with VIDEO.
[1683] - More volume side tinkering.
[1706] - FPGA pump instructions.
[1709] - EEPROM pump instructions.
[1712] - Roger describes the VoiceLive pitch correction in depth with PIX.
[1716] - Pitch correction implemented more like the VoiceLive.
[1717] - An explanation of the volume knee.
[1721] - Removal of all CIC filtering, replacement with conventional low-pass and notch filters.
[1730] - Loudness compensation series of posts.
[1734] - LED Tuner serialized.
[1747] - The ill-fated AFE2 (don't do this!).
[1754] - Axis tracking low-pass filter.
[1756] - Pitch antenna homologation.
[1760] - AFE3.
[1762] - DPLL pseudo-random noise dither replaced with 48kHz triangle wave dither.
[1763] - Spreading the LED Tuner spectra.
[1764] - Study of axis operating point vs. grounding.
[1773] - Prototype dimensions.
[1777] - More envelope generator tinkering.
[1778] - Oscillator refinements.
[1783] - Triple oscillator.
[1784] - D-Lev tour initial sketch (horizontal).
[1787] - Pitch & volume axis mod, acal, preset storing.
Year 7: Refinements, presets, cabinetry.
[1789] - 1st order bass & treble controls.
[1790] - Grey noise filter.
[1791] - 2nd order bass & treble controls.
[1807] - More axis modulation.
[1808] - D-Lev tour mock-ups with PIX.
[1811] - Continuum type initial pitch correction implemented.
[1812] - Axis decimation inventory.
[1815] - Inharmonic resonator overhaul to produce pseudo-stereo.
[1822] - Secondary SPDIF added.
[1831] - Moved oscillator and filter ranges from [C0:C8] to [A0:A8].
[1832] - Inharmonic resonator modes update.
[1835] - Building a better volume control: offset EXP2 replaces most power-type knob scaling.
[1836] - Inharmonic resonator improvements.
[1838] - First and second order filter compensation for [A0:A8].
[1840] - D-Lev tour sketch (vertical).
[1857] - Noise PWM.
[1914] - Librarian taking shape.
[1928] - Ergonomic explorations.
[1932] - Antenna geometries.
[1941] - My playlist.
[1944] - More librarian progress.
[1948] - Keyboard (aside).
[1960] - 4th order filtering.
[1968] - Debouncing.
[1974] - Contrast filters.
[1989] - Linearity discussion.
[1992] - Preset space.
[2000] - "Transformers" enclosure concept.
[2010] - Heterodyning musings.
[2020] - Axis filtering.
[2021] - More axis filtering.
[2033] - The value of a real-time tuner.
[2036] - Heterodyning period measurement.
[2039] - Enclosure ideas.
[2040] - Scope "heterodyning" experiment.
[2046] - ACAL.
[2050] - Linearity knob tests & data.
[2053] - 1,000,000 views!
[2062] - D-Lev web site established.
[2078] - 3D printing advice from Roger.
[2083] - P2 : My second prototype.
[2089] - PVmod changes.
[2093] - Pitch correction.
[2106] - Hammond organ synthesis.
[2112] - Triple oscillator FM (PM).
Year 8: 3D printing, patch creation, pitch correction.
[2115] - Oscillator knob scaling.
[2119] - Triple oscillator changes.
[2120] - Noise PWM discussion.
[2130] - Gerd's amazing TW archiver.
[2167] - 3D printed knobs.
[2246] - Cello patch.
[2251] - Violin patch.
[2254] - Viola patch.
[2259] - Flute patch.
[2275] - Another cabinet idea.
[2283] - Advice to the Theremin designer.
[2300] - Integrated plates & coils.
[2307] - Live editing via the librarian.
[2356] - More resonator work.
[2394] - "Meowing" root cause.
[2413] - P3 : My third prototype.
[2436] - Q.
[2437] - HV probe (DIY).
[2445] - Knob based on a wire nut.
[2446] - Big bell patch.
[2447] - Musical saw patch.
[2458] - Potential P4 musings.
[2462] - Velocity detection.
[2468] - Encoder conditioning.
[2470] - Curve math.
[2472] - Pitch correction breakthrough.
[2477] - LCD backlight dimmer.
[2496] - RC hand model.
[2515] - Vincent assists with MIDI design.
[2530] - 25LC1024 undocumented details.
Year 9: Clarabox kit, videos.
[2542] - Learning KiCAD.
[2548] - Drop knob.
[2565] - Clara presets.
[2576] - Kit offering.
[2582] - Coil & AFE 3D printed box.
[2597] - Tiny tuner.
[2610] - User manual start.
[2616] - Patsy patch.
[2631] - First kit PWB build.
[2636] - Coils in the kit.
[2645] - Bollamin build.
[2665] - DPLL sim in LTSpice.
[2679] - Hum / tracking filter overhaul.
[2692] - Sculpture mode.
[2698] - Plates vs. Rods.
[2714] - Logo plate.
[2715] - Field setup.
[2729] - D-Lev World Industries factory tour.
[2747] - Crappy Bourns encoders.
[2762] - 2,000,000 views!
[2768] - Drop knob.
[2770] - Tenor patch based on Patsy.
[2774] - Organ patch.
[2780] - tVox samples & patches.
[2802] - Good encoders vs. Bourns.
[2809] - Encoder multiplexing.
[2814] - Encoder analog filtering.
[2818] - Kit offering #2.
[2829] - Analog style non-linearity.
[2844] - Octave bank knob.
[2849] - Absorptive all-pass reverberator.
Year 10: Clarabox kit enhancements.
[2862] - I/O keystone plate.
[2865] - Grid antenna testing.
Original First Post To This Thread:
Is anyone here interested in my FPGA based Theremin design?
I've been beavering away on this project for more than three months and it's finally bearing solid fruit. It's an extension of various projects and investigations I've worked on in the past: capacitance sensing, digital phase locked loops, averaging to trade response time for reduced noise and increased precision, etc.
The Analog Front End (AFE) is simple enough that anyone with basic electronic skills could build it. In fact mine is currently on a small plastic breadboard mounted in an alumimum project box. The LC resonance point is around 700kHz with drive and quadrature maintained by the FPGA. Antenna construction incorporates the "linearizing" coil within, and is quite a bit better IMO than the various "plumbing" solutions on professinal Theremin products. As for the digital circuitry in the FPGA: The pitch section is working almost as well as I could hope - it is smooth, responsive, reasonably stable, and surprisingly linear without correction (except for right at the antenna where it becomes a bit crampt - still thinking about this but it's less urgent than I initially thought it would be). It "sees me" out to more than a meter, and I'm getting around 10 octaves out of it with 8 of them fairly linear. I also have the LED "tuner" section up and running (though without the full complement of LEDs) - quite fun to see it work, it's also quite responsive, and after using it for an hour or so it strikes me as an essential element for the Theremin.
The FPGA demo board I'm using is an old Xilinx Spartan 3 model and I think this is where most will run into trouble. I'll need to segue over to board with more availability if this project gets to the commercial stage. I've been avoiding hardware multipliers in hopes of targeting something small and inexpensive like the Lattice MachXO for which inexpensive demo boards exist.
There is of course quite a bit more work to be done:
- Timbres other than the current simple square wave output.
- Left hand control over volume and perhaps one or more other parameters.
- Ergonomics and user interface.
- Prototype on stand with built-in amp(s) and speaker(s).
Famous last words as you never know when a design will blow up in your face, but with the AFE, pitch, and LED tuner sections operating on my bench I feel I'm over the major hump of this feasibility study.