WELCOME to the D-Lev Thread!
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 ILYA, livio, and pitts8rh) who have helped to move this project along.
The vast majority of the pictures I've posted in this thread reside in this TW photo album:
http://www.thereminworld.com/album/digital-theremin-stuff/15140
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.
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.