Open Source Synth Update: A Firmware Revelation

My God, we’ve done it!

Will put together the final piece that allows us to finally put this project in to the sunset phase.

He confirmed by rolling back the compiler to GCC 4.3.3 (the original compiled version) we could get the unit to actually work as it is supposed to. Apparently, AVR-GCC is available usually through microchip or some various locations and older versions are not available readily. So Will ended up snooping He did it through this GitHub repository (https://github.com/smeshlink/Arduino-Plus/tree/master) a fork of the Arduino main line development from 2013 (11 years ago now!). That repo happened to upload the old AVR-GCC version and will pulled it down and started the compile.

Now, I was warned about this over by the original developer. See the post I read once or twice back when I had all those issues with what ended up being the AVR fuses…

Found wisdom of the comments

I suppose until you have gone down the rabbit hole you don’t really understand what not guaranteed to work really means.

I’ve yet to recompile on my end, but using Will’s compiled build removes all of the chaotic behavior the synthesizer was showing before. One of the points of code that is likely quite dependent on this compiler version is a snippet that occurs in the editor.cc file.

void Editor::OnProgrammerSwitch(const Event& event) {
uint8_t id = event.control_id - SWITCH_OSC_2_MINUS;
uint8_t parameter_index = pgm_read_byte(programmer_switch_mapping + id);
if (parameter_index != 0xff) {
int8_t increment = parameter_index & 0x80 ? -1 : 1;
parameter_index = parameter_index & 0x7f;

}

else {
OnLongClick();
}
};

Note that this function does a direct read of program memory via the pgm_read_byte() function. This function is used to directly read pgm memory. In this case, the code works to reading flash out into memory at a specific address as command. Now this could work but the method of using “programmer_switch_mapping + that index means at some point the compiler (no matter how good it is) is not aware of this memory location. The call in this case requires foreknowledge of where this given piece of information resides in active memory. The compiler is unable to check for any sort of error condition in the way it is written. For all it cares, the compiler is presented with a sum of two numbers before passing up to pgm_read_byte. No checks can be done on whether the memory is valid or not or if there is anything at the target address.

I can imagine something like this was done to same memory usage in a constrained design (to do: is there a linker output report?) if you aren’t going to use up these things as much in the code space. But again this is mere speculation. At least at the moment we have functioning products.

New PWBs and manufacturing errors

I received a new set of PWBS this week. I was excited to build and started soldering them up when I saw this

Note those cuts in the PWB

Traces broken in multiple sections of the board from what looks like a razor blade or something run across the board. Whats odd is its just one out of the group of boards so I didn’t lose my entire $230 on these from OSH park. I emailed them out and received a very quick response. They let me know this board should have been screened out of my order as a test sample and I’ve gotten the extra boards as a show of good faith.

I do like the aesthetic of the clear solder mask style, but with so much of the copper plane covering each side I think I’ve lost the cool factor that would have come with more black.

“It’s possible the fab was attempting to indicate an etching failure on that one copy. During AOI testing they’ll scratch the traces, which lets someone else down the line know to mark it with a big silver “X” so we can notice it and get a replacement started.

Onward to soldering up this round of boards and getting prototypes out to my friends. Will is still on the enclosure part then we can start packing this project up.

Roadmap

  • Build the remainder of analog and digital units
  • Send them to friends!
  • Design and fab cases for these synths
  • Create a lessons learned

Random Observations

Until this point my head was so deep in the design I never questioned the original name of this synth the Shruthi. I happened to mis type a google search and I learned that this is an accordion like drone instrument out of India. Some links below.

https://en.wikipedia.org/wiki/Shruti_box

Shruti Box 3 Octave 39 Keys C to C Brass Handle Large size Yellow Color | eBay

https://gcc.gnu.org/releases.html
I’m not quite sure about my AVR-GCC comments any more or even whether or not AVR-GCC is just standard GCC wrapped with some libraries. I have gotten turned around on this on. Something to report back on in another post.

Open Source Synth: State of the Project February 2024

Building The Source

It’s been a while since my last post, so I thought it prudent to provide a State of the Project update for the Shruthi Clone.

A major breakthrough came in understanding the firmware build chain. Until late last year, the build process yielded a loadable hex file that enabled some functions of the display and LEDs but didn’t result in a fully functional synthesizer.

I experimented with multiple ways to build a hex output, each with varying levels of success. Initially, I was convinced that we had to build in an old Ubuntu virtual machine with the exact GCC version to make everything work. However, after delving deeper into the makefiles sequence and rewriting portions (with the help of my brother Will), I finally managed to generate a load that produced audio and communicated via MIDI!

There are still issues in both the firmware and some of the hardware build (no design issues so far) that we are tracking over on GitHub.

Debugging noisy hardware through firmware understanding

Onto the hardware side of things. This design is susceptible to noise. This concept isn’t surprising in analog electronics, but coupled with firmware that was only “sort of” working, this caused a ton of head-scratching and soldering/desoldering before I discovered the real issue.

What brought the debugging process to a crawl was “noise” ( in truth it was signal bleed) from the analog pots (potentiometer encoders). These pots are on the digital board and are intended to control everything about the synthesizer’s oscillators, filters, sequencer, LFO, and everything else. For the majority of the time working with the first three prototypes, these were useless.

The synthesizers display indicated random settings (for instance, the analog filter cutoff) were constantly changing when none of the actual knobs were manipulated by hand. So, consulting back to the original design build instructions (Here), Pinchettes called this phenomenon “moved by a ghostly hand,” which I really love.

Now, onto the code. The source code includes a nice function here that caused a kind of feedback loop in our debugging efforts:

pots_multiplexor_address =0;
adc_warm_up_cycles_ = 8;
adc_hot_address_ = 0;
adc_resume_scan_to_ = 0;


void Ui::ScanPotentiometers() {
adc_.Wait();
uint8_t address = pots_multiplexer_address_;
uint8_t physical_address = address;
int16_t value = adc_.ReadOut();

*PortA::Mode::ptr() = 0xfe;
pots_multiplexer_address_ = (pots_multiplexer_address_ + 1) & 31;
if (adc_resume_scan_to_ == 0) {
adc_resume_scan_to_ = pots_multiplexer_address_ + 1;
pots_multiplexer_address_ = adc_hot_address_;
} else {
pots_multiplexer_address_ = adc_resume_scan_to_ - 1;
adc_resume_scan_to_ = 0;
}
/*-------
The ADC conversion is run on the particular Pot now that the mux is set up
--------------*/
int16_t previous_value = adc_values_[address];
int16_t delta = value - previous_value;
int16_t threshold = adc_thresholds_[address];
if (delta > threshold || delta < -threshold) {
adc_hot_address_ = physical_address;
adc_thresholds_[address] = kAdcThresholdUnlocked;
queue_.AddEvent(CONTROL_POT, address, value >> 3);
adc_values_[address] = value;
}
}

The code drives the rate at which the multiplexors on the boards are scanned at. Lets walk through it:

Case 1: adc_resume_scan_to == 0.
The adc hot address is loaded to the pots_multiplexor address and the conversion just proceeds
Case 2: adc_resume_scan_to =/ 0
The current value of the mux address is read again it appears and then the resume_scan is pushed back to 0.

Now working our way down, where does adc_hot_address_ get initalized? That is a copy of the inital pots_multiplexor_address that started the entire operation. There also are some “warm up” conversions to the pots which I presume are related to the settling time of the multiplexor before valid voltages are present. You can see the threshold here establishing the adding a new event and pushing the hot address now back to the physical address that started up the operation.

At a higher level, this means that when the firmware notes a change in the last Voltage read from a given potentiometer, the rate at which that signal will be sampled will go up. This means that a faulty pot that may not be emitting a DC level will get sampled much more.

This deep dive came after noting that I was observing the multiplexer rate changing based on the current positions of certain pots. A potentiometer would have signal bleed through when it was sampled and would show a what looked like a spike, which i presume was an effect from switching another pot to the problematic pot. The firmware (as noted above) was looking for changes that would exceed this adc threshold setting and once that happened a given mux setting would be sampled more often and the loop would continue. Apologies on the seemingly repetitive nature of this section, but the debugging indeed went in these circles for a while before I developed an idea of what was going on and then looking into the firmware.

Ultimately, the solution was to remove the problematic pot but not leave the signal floating (an open signal drove the same quick sampling behavior), but terminate the removed pots traces to ground. Once I understood this failure mode of the system, I could move further to review of how the actual analog section was working.

Analog Output Exploration

Once the two analog boards were generating some audio, I took some baseline scope shots of the analog output Voltage. Waveforms from the analog out at various synthesizer presets are captured below. Note the “hash” on these waveforms is the PWM (Pulse Width Modulated) signal present in the output. The theory is that once you run the audio through another system that signal should get wiped down. I’m debating whether I want some outboard filtering in addition at some point, but that would be a whole feature.

Basic

Basic Preset


Flobass Preset

Moonrise Preset


Virgin Preset

I am not sure if the outputs here match whats intended but Its definitely audio waveforms that make some sense with the patch names!

Building more Samples

Many of the related headaches that I encountered had to do with the build. It took a very long time to establish a baseline performance on either prototype, and the original digital control board is now all but useless. The two issues mentioned above were only possible to solve by building fresh digital and analog boards and comparing the differences between them. This classic “two prototype” issue always arises in hardware development. The more prototypes you develop the more you can compare their behavior instead of go right to theoretical failure modes. I spent a long time just with one build and that slowed me down a good deal.

Once I had a good grasp of how the firmware operates and how to successfully load working code, I went back and built another analog board to run two synths simultaneously. Even that alone has sped up my workflow and debugging. Ultimately, it revealed that my first build of the analog board had far more issues than I originally thought. As of today, we have two sets of hardware that perform (almost) the same.

Path forward

I have started tracking issues on GitHub here.

Next major step is to build at three more prototypes of the synth before I call it a day on this project and decide where it goes next. I have already noted that obsolete parts, like DIP ICs again, are cropping up on this design as I go back to Digikey. A decision will have to be made on how much I want to invest in this project long term, but I have at least three friends who need final products (or, at best, working prototypes).

I still haven’t gone into the enclosure design for the product, but that needs to be done before these last three are totally finished.

A third part will be reviewing pricing and cost of the whole project. This wasn’t done for free and I just want to review where the money went even on something as simple as a rebuild of an existing design.

This blog will continue to serve for these sorts of snapshot updates on the design, although I’m considering using the GitHub wiki to log the design changes or modifications for the future… who knows. What should appear on the blog is a summary and description of the price of all these parts, even with my steps/missteps along the way.

Thanks to my brother Will for the assistance on all of this. There’s no way I could have navigated the makefile and git conflicts as quickly without his help.

So Ive Debugged it!

***Originally written July 2023

After my last post on this project I thought I was losing my mind and all hope was lost. But now I have figured a fundamental boneheaded mistake out and am moving forward again!

There is life!

I had to address two conflicting theories to resolve this. First, I didn’t trust the custom makefile provided from the repository. I had visions of memory overruns and corruption of some level. I was also suspicions about ESD or mechanical damage of the hardware as I carted this thing back and forth from my lab and my home.

So I soldiered on. The next step I took was to install Microchip Studio and get back to basics. I developed a pure “Blinky” setup to vet the micro itself, without any of the complications of the end application. To be explicit, running Blinky means m to cycle on and off all of the digital output pins and probe them to get a baseline of life. This would remove my concerns about the custom makefile because i was just using the manufacturers IDE.

After toying with Microchip Studio for a while I found that I needed to manually run AVRDUDE to program the .hex file from the command line and hope this would give me the truth I was looking for. I wrote the program to continuously blink all the I/O lines so it would not really give me a blinking LED but it would allow me to probe for life and find any problematic pins. The ATMEGA is setup with various byte accessible ports of I/O (A,B,C,D) that i could write to with a single command.

After getting this new test build loaded I walked through the pins on the micro right at the device with the following results:

Micro PinGood?Function
PC7YesDisplay Pin 14 (LCD_DATA4)
PC6YesDisplay Pin 13 (LCD_DATA3)
PC5NoDisplay Pin 12 (LCD_DATA_2)
PC4NoDisplay Pin 11 (LCD_DATA_1)
PC3NoDisplay Pin 6( LCD_EN)
PC2NoDisplay pin 4 (LCD_RS)
PC1YesIC1 Pin 5 (SDA)
PC0YesIC1 Pin 6 (SCL)
PB7YesIO_SCK
PB6YesIO_MISO
PB5YesIO_MOSI
PB4YesCV2
PB3YesCV1
PB2YesENC_SW
PB1YesENC_A
PB0YesENC_B

So in my previous few days I was reviewing the differences between the ATMEGA644 as opposed to the newer variant ATMEGA644A. After a few hours of realizing the differences were minimal I threw up my hands in exhaustion. But something stuck in my head. Could the I/Os be used for muliple purposes? And how would JTAG work on this device.

In reviewing the table above I see the pins that don’t work (and coincidentally are connected to my display) are connected to the JTAG interface port. So how does the micro control these different pin modes??

Excerpt from ATMEGA644A datasheet

The answer is fuses!  I use AVRDUDE to check my high fuse status, and i see that is 0x99! After following the steps on this website.

https://www.instructables.com/How-to-change-fuse-bits-of-AVR-Atmega328p-8bit-mic/

So JTAG is sure enough enabled! I set that JTAGEN bit back to 1 and my clock wave is coming out the pins connected to the display.

I then proceed to load one of the builds of the the Shruthi source code I made a few months ago and I see activity on the display!!!!  WooHoo!

Next Steps

I’m going to setup MIDI stuff now to see what i can control.

A Few Observations

Now I want to reference a few things at this point. The firmware building guide is totally fine for the Shruthi project but it presumes that you have a strong handle on AVR development before starting this modification. So I’ll explain here the gaps

  1. Clearly pinchettes make and bake commands work
  2. You need the understanding of memory flash space versus eeprom space versus boot loader space
  3. You need an understanding of what the AVR fuses mean (here was my tripping point earlier).

Open Source Synth: Project Update

July 2023 Update (5ish months in)

This might be me right now.

Its hard to believe how much (or how little) can happen in five months. So I wanted to do an update on where I’ve gotten to on this Shruthi synthesizer project since February. At this point I expected to be wrapped and building units two and three, but things rarely go so close to plan.

So far this project has tackled:

  • PWB design
  • Analog electronic analysis
  • Source control and Git when working in an emulated version of Ubuntu
  • My very rusty soldering skills
  • Reading someone else’s micro controller code
  • Emulating old versions of Ubuntu to get GCC to compile correctly
  • Logistics on buying parts and when in 2023 you can and cant get them.
  • How to keep sane when you cant fit all of your equipment in your apartment. 
  • How to manage workflow going between a lab in your parents basement and your own place.
  • Time management around this hobby project, personal crises and relationships, and the day job.

But the biggest realization is running this sort of project for me is that I need a better system for this sort of work. That system should be easy to make a habit out of.

The plan was to make very clean summary blog posts of each phase as i went through the project. The second post on buying the components and the PWB has been in draft for quite some time now even though there are many words written.  There’s nothing that is inherently problematic about that post, its just that formalizing it and feeling “comfortable” releasing that article is entirely independent from where I’m at in the project today.

Today I’m looking at the two Highest bits of parallel data signals toggling to the OLED display and they are active and look to be reasonable transition times!

But when I inspect the front display there is no active OLED display activity…..

👎👎👎👎

I’ve built two prototypes (this one performing better than the first one I butchered with some trace destruction. So now I’m grappling with a few other ideas Id like to explore more as this project moves forward.

How to synchronize work across multiple computers

This has been easily the slowest process. I could have kept it basic and done a google drive of everything months ago but I insisted on using Git to its full intent and not what works for me. I’m glad for the experience but more calories have been spent in pulling my Digikey order googling the the same datasheet on multiple machines that I’d like to mention.

Other options are out there I’m sure and Git should work I think too but deciding on this is a task in itself that gets me away from the hardware.

How to prioritize work

I had an instinct this was going to happen but it was only magnified with personal issues with my family over the time I had to tend to. Quick takeaway is that this project needs space in my week without the consideration of what I’m going to do once I get there. Preparing for the next week may be a better matter of keeping documentation organized and available to jump in no matter what location

How to keep the right tools available

I bought quite a few things so far on this project that haven’t gone into the hardware. Flux, Solder Iron tips, a new drafting chair after my back was hurting, magnifier glasses. But I’ve also made the mistake of taking have soldered assemblies back to my apartment with my o scope and needing either a 9V adapter or a DMM i didn’t bring back. Maybe the solution here is to have a semi “mobile” lab setup if I’m going to do certain tasks in one place as opposed to another, and just pack it up each time.

How to get a more systematic hardware bring up plan.

On the last one I think I couldn’t have known that ahead of what I experienced.

How can this be so?  The display gets a clearly intentional signals from the micro (pins are wiggling correctly) but it does nothing to drive the display with anything meaningful. Could this be a pin assignment issue?

Parallel Data lines (DB7, DB6) From Micro To NHD-0216KZW-AG5

Schematics indicate the same pins are used to connect to this Display.  The other oddity is that the control pins look deliberately controlled. Pin 5 (R/W MPU Read/Write select signal, R/W=1: Read; R/W: =0: Write) stays Low. Pin 6 (E MPU Operation enable signal. Falling edge triggered) always high. Since I didn’t write this code I’m not sure how the firmware could screw this up in this partial manner. Could a transfer to the device really be occurring that would have some pins activate and others stay high???

Open Source Synth Build (Pt. 1 Hardware Design and Forking)

Forks and Branches

The starting point for the new Shruthi synth was to fork from Pichenettes Github.

https://github.com/pichenettes/shruthi-1

A fork is a personal copy of an existing Github project that the developer can do to with whatever you like. A developer can work on their own stuff in their protected bubble and then “push” back up the changes to the original project and thread if the original project wants to incorporate the forked features. A fork is in contrast to a branch, another agile software development term. A branch means a developer takes a copy a project (just like with a fork) with the goal of correcting one or more “issues” or “bugs” that the developer is interested in fixing. By creating the branch everyone on the project is aware of what the developer is trying to fix but they can go off their bubble with the intent that my changes will be compiled and tested solo. Then a kindly wizard associated in the project one day will allow me to “merge” those changes back in to the main Tree of the project.1

A good infograhic from theserverside.com

So merging gets complicated when we are dealing with files in different electronics CAD packages instead of lines of code. I will use transitioning development software platforms from Eagle (as I will discuss below) to KiCad as an example. If I compared the actual schematic design files on my local hard drive you would be left with a long list of changes of the bits and bytes that no human can use to track changes happened. The file extensions you save into are different the GUI interface is different, none of this can just transfer from one platform to another without a person in the loop. So for this project, I will create a branch and leave breadcrumbs in the Readme.txt file for those curious to work their way back.

After inspecting the original files in the shruthi/hardware_design/pcb folder, I discover these files were originally developed in Eagle 6. The PWB folder contains two types of files .sch and .brd. Currently Eagle is up to version 9.0 and no longer available without bundling together with some other AutoDesk features, which is exactly why the goal is to take these files out of something not exactly maintainable and to move it to Kicad.

Going back to the design folder and searching around this /pwb directory is what I am looking for. These are the schematic and Printed Wiring Board files for multiple designs in the project. 14 designed boards with schematic and PWB design files!

The Github Shruthi PWB directory

After converting all the schematic files over to inspect them, I found that the original Shruthi product concept isn’t to have fourteen PWB’s on one assembly, but to have the end user select analog boards and plug it into the digital control board, and if the musician wants they can swap between boards for different voices. From the archives, i can see there was an original control board (powered by a micro controller), but at some point the XT version of the Shruthi was released. This version exposed more encoder controls that were hidden behind menus and clicking buttons in lists within the original. For this project it means there may be more pots and buttons to solder, but more fun to mess with when it all works at the end.

I’m going to limit the scope here and after looking back at the build documentation I’m going to start working with two specific boards, the SMR4 mkII_V02. which is a four pole “Roland like” analog filter board, mark II being the second version of this and V02 being the second revision of the second generation.

With these two boards chosen the work begins. Kicad in theory supports Eagle file import but not from the old Eagle files used 12 years ago on the Shruthi2.. So to start, I have to open Eagle to get these Eagle 6 boards rolled up to the newest version and spent a few hours installing this Autodesk Eagle combination, opening the files and then saving them again to be current Eagle files. Once that was completed Kicad successfully recognized the files and could import them.

Kicad and PWB Updates

Kicad Up and Running with the Converted Board File

Now I would just congratulate myself and crack a beer in victory, but I didn’t realize the work had just begun. I had discovered one of the main components for the Analog section of the Synthesizer the LM13700 no longer existed in a PDIP package.

I figured I could solder surface mount (more on that later) and could easily swap out the SOIC version for the PDIP. So I set to work making a new footprint for the part and rewiring the schematic and PWB file to ensure my new part fit. It ended up fitting fine as it was smaller than before but because of the shrinking of the component other assumptions about signal and ground trace lengths had to change and i ended up rerouting more than i planned. I still maintained the two layer setup but much was streamlined and moved from the original SMR_mkII_V02 design to the new SMR_VJK3.

I was lead through the process by the very useful Kicad documentation as well as remembering my old scars using electronics design tools at my day job. Kicad by far was an easier flow than other packages Id used before.

Imported Original Analog Filter Board
Imported Original Schematic

Theory: Transconductance Amplifiers

Lets talk about the nitty gritty of the design. So the PWB is quite simple once I got my head around it. It is only a two layer board, with a handful of different through hole parts. Having been the “analog guy” for a few years now the Voltage to current mode transformation of the LM13700 was very interesting. Whats more is that it seems to be a common mode of operation with classic analog synthesizers. Control of the audio signal path is done via potentiometer DC setting the current through these trans conductance amplifiers. This is done both in the gain section of the design as well as the filter section. So the voltage is fixed but the resistance changes and that shifts the level. The diagram below shows an example circuit. So for the gain stage at least its quite obvious that your base current in the output is a function of the gain setting voltage. The current sources used in this application are actually exponential in relationship to the output signal.

LM13700 Example Circuit

And here it is in action within the LPF analog filter board in the Shruthi.

Note the Amplifier with the two large circles

So you can see there’s an off board potentiometer that controls the I_GAIN current and then gets buffered before being driving out the line level cable. I’d love to get deeper into how this is all working (and I Imagine I will in bring-up) but lets get back to the task at hand. The PWB update and removing the PDIP to get an SOIC into the design. Well whacking in the new pads was a piece of cake but since everything got smaller many small changes rippled through the rest of the board.

Back to Board updates

Larger pins mean larger and thicker traces, and once i shrink the pins the room you had is reduced. The thickness of the old device allowed of running voltage rails underneath the part, once i shrunk down to the SOIC i lost all room to do that trick and had to move the rails out from underneath. Now that the power was routed outside, I had to re route the signal traces under or around what Was already there. And finally I noticed a few things i didn’t like so I had to deal with those.

Original Layout of DIP LM13700N
New Layout of the Same Section.

Some other highlights. The DRC settings were set to roughly default but I did space the VDD and VSS on the LM13700’s to be further spaced apart than the older design. My Thought was that the pads also shrunk so any more copper wont move the needle very much. Although we will see in the testing where that ends up.

Overview of the New PWB design

You can take a look at the full design and Kicad files at the project directory for the project.

The next section will be about purchasing the parts for the build as well as an over view of the assembly. The final post will be about testing the end product and lessons learned.

Footnotes

  1. For more info on forking and how software folks attempt to describe this see https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow I decided to fork ultimately after realizing the original project isn’t really active and who knows how far I’ll muck up these original design files.
  2. Since the time I started this project is now at 7.02 and will probably be further along by the time I post https://www.kicad.org/blog/
  3. SOIC versus PDIP comparison of footprints.
  4. Pinchettes does a much better job than me at actually explaining the theory of the VCO/VCF/VCA. At this point im merely an observer until the day I have to debug the thing.

Open Source Synth Build (Introduction)

Project Goals

  • Learn to use Kicad
  • Work with a PWB fab again on a more complex board.
  • Use Github to successfully fork a project.
  • Have a new midi monosynth to play with!

Introduction

I’ve been thinking about a new hobby project for 2023. Last year I dove somewhat deep into USB drivers and proprietary Microchip libraries which had my head spinning when i just wanted a simple USB audio interface. So this year, I’m going to tackle something hardware only and use my oscillocope more than ever!

A few months back https://mutable-instruments.net/ announced that their synthesizer product line was shutting down.
Sad news, but fortunately for the engineers with too much time pinteretes has opened source’d many of his designs. Before starting my first job in 2012, I was really into synth kits and modified my monotron for midi control but never returned so this will be fun. Those kits were cheaply made for a reason and I didn’t really have the patience or spare resources to build a more proper synth. So I’m going to attempt to build the Shruthi!

Fully Assembled Shruthi XT (taken by pichenettes)


This blog will be broken up into a few blog entries with some major phases of the project (I will link to the posts as they go live):

Part 1 (link):

  • Porting from Eagle to Kicad
  • Rerouting the analog filter PWB due to some obsolete component packages
  • Using Git and Git hub to fork the original tree

Part 2:

  • Purchasing of all components, PWB Manufacture and full build (and Rebuild).

Part 3:

  • Testing the final product and lessons learned.

Life’s Work

David Milch

Published: September 13, 2022

Read: October 10, 2022

Life’s work was not the memoir of sex, drugs, and television production I was expecting. I was familiar with the author, the television show writer David Milch, creator of Deadwood (which I have watched and love) and NYPD Blue (which I have not seen). Life’s work is a book concerning a man who created some good television and had a more than average grasp of language and story telling. The memoir is not limited to behind the scenes Hollywood insights, but takes that base and layers on ideas of memory faith and trauma that go a bit beyond.

Beyond the accomplishments and trials of Milch’s professional life, this book is about aging, and difficulty recounting life while the one living is still around. At the time of writing, David Milch has been diagnosed with Alzheimer’s disease, and is living in an assisted care facility. Life’s Work was written with the assistance of journals throughout Milch’s life and his wife, friends and other family recollections to round out the tale. At my own middling age of 33, I haven’t been too closely acquainted with death or the loss of one’s mind. I have two living grandparents even though I’ve lost two already who i knew well.

David Milch was born in 1945. He describes his childhood and his relationship with his father. A doctor professionally and a non-professional gambler at the racetrack. The younger Milch admits this may have established the bedrock of what may be an obsessive or self hating cycle of excitement and failure repeated constantly that is much like wagering $50 on 8:1 odds at the track. His abuse at the hands of another adult during his time as a child. At some point whether spoken or unspoken, David is appointed within the Milch family to be the token fuck-up, even as he became a writer and grabbed success. His travels through college and beyond into writing for TV.

Milch is a religious man, he believes in Jesus Christ but infuses his faith in god with a few wry jokes. His belief in Jesus Christ emerges throughout the stories he has written over the years, and had the man himself featured in a particular Episode of NYPD Blue . Milch recounts that the impetus for the show that became Deadwood was a story involving St. Paul in Rome and his life of suffering and trying to do right by God. How Deadwood emerged was replacing the searching for God for searching for gold in the old west.

The last chapter somberly serves as I think a summation or perhaps an obituary, written by a man who knows his mind is fleeting, if not his life, and is scrambling to put it onto paper. I’ve never felt so moved by this book that should just be a “hey a fuckup went to Yale and made some tv” memoir.

Life’s Work left an impression on me. The impression given from a man who’s life is coming to an end, who sat with me for a while and made me realize that maybe in the grand scheme of the cosmos, someone born in 1945 may be closer to my age than I’d like to believe, and the time we have is indeed fleeting.

And hot damn the writing is fantastic.

Carrying the Fire

Michael Collins
Published: 1974
Read: 7/30/22

I just don’t know how long it takes, except that it had taken me thirty-five years to reach crew quarters at Merritt Island, Florida, and on July 17, 1966, I felt ready. I felt it had taken exactly the right amount of time.

Michael Collins, Carrying the Fire, 1977

Carrying the Fire is the story of Michael Collins, a man who went to the moon. A man who used a period of his life, to achieve this singular purpose above all else.

I started this book while on a plane ride to LAX to support the flight test of a customer that was in dire need of getting my flight test equipment to work inside their vehicle. Equipment that should work for them but in this case definitely did not. Reading Carrying the Fire on that plane, reminded me that I’m living with the descendants of everything NASA did technologically on Apollo. The current commercial space sector with SpaceX (documented in Liftoff) and Blue Origin as NASA prepares the return to the moon on the new Artemis missions. I’m also a bit embarrassed that I never dug into this period of rapid exploration and innovation and discovery until now.

The closest I’ve come to reading about astronauts is the Chuck Yeager book, Yeager in fifth grade. My dad (and dads everywhere who love airplanes) was wild about that book of faster than Mach 1 flight. For context Yegars time was happened in the late 40s and he brushed up against NASA in 62, according to Wikipedia. And speaking of other aviation icons the introduction to the book was originally written by Charles Lindbergh.

Returning to the book, Collins describes his life pre-1969, the life of a fighter pilot that changed into something entirely different by the end. It will become an astronaut’s life. Collins is a man who thrives off of going faster and doing things that will surely get him killed, two things that do not motivate me in the slightest. In truth, I get my heart racing and hair on end from nothing more than the stress of a presentation talk or design review. Although all events were documented in detail the book is written with very little discussion of why Collins continued to move in this direction. Was he detached from the situation or embraced it entirely? Any doubts or internal monologuing of this sort is kept out of Carrying the fire for the most part to keep with the momentum of his part in Apollo.

We found naïve people who sincerely believed that if an astronaut said it, it must be so, and shrewd people who enticed us into making pronouncements that could be used to reinforce their own parochial viewpoints.

Michael Collins, Carrying the Fire

Collins sketches out a meandering road to get to the NASA program. Never did it appear that Mike dreamed of being an astronaut (perhaps because the profession only existed five years before he did it) but he takes it as a matter of course that it was his chosen path. Perhaps that’s the military piece of this man. Grow up take orders push the limits but there are always orders and directions.

The detail on all the procedures and methods associated with the moon mission really got me. I also laugh because Seveneves proved to be as reliable as this book when referring to orbital mechanics, which I suppose is good on Stephenson. Of particular note is the construction of the space suit and the iterations to trade off safety and mobility which was extremely lacking.

I’ve never heard the Apollo story from front to back, so many events captured me the whole way through. Ten astronauts tragically died during the course of the mission. A few of them dying in airplane crashes before getting anywhere near the pad. Four dying because of the pure oxygen environment on the pad being ignited by some failure and the team at NASA speculating if they suffocated before they were burned. The entire logistics of setting positions related to the stars only being checked by a computer that could seemingly only run those computations.

If the pilot moves his hand an inch or two sideways, he instantaneously commands three thousand pounds per square inch of hydraulic pressure to actuate cylinders which deflect large ailerons into the speeding slipstream.

Michael Collins, Carrying the Fire, 1977

Collins also clearly is speaking to the reader from another era. He brings up that running every day is very beneficial in a way that your friend would when they have brought up drinking low grade snake venom helps their skin. He jokes about needing martinis and chasing women in a multiple sections of the book, and he was young to middle aged married man in the duration. Mostly the book is, a pilot and a military man (not to imply lack of education) telling his part in the exploration of a new frontier.

As Collins describes in words the vastness of space and the exiting of the atmosphere and all the views that did and did not get back to early on film I find myself looking up more often. And thinking on what a life is if not pushing to do something incredible and then surviving or not. This was a fantastic book I would recommend to anyone who has wanted to explore or do something with their lives that mattered and understood the sacrifices and time scale of accomplishing those things.

In my own view, the pendulum has swung; rockets are about as interesting as the powder which propels a bullet. To be fascinated by them is to prove McLuhan’s point that the medium is the message, or perhaps it is a more Freudian thing.

Michael Collins, Carrying the Fire

Random Observations

  • The history of aerospace companies in 1967 versus today. All predecessors of the current names. Although as with most things different men and different times. North American Rockwell, Lockheed, McDonnell, Grumman. I imagine the full names now but these were the complete names at the time
  • This book came on my radar from Penn Jillette, saying something like PSS 705
  • The descriptions of the capsules should be seen as well to understand the difference between the video we see now of the ISS versus what they had during the Apollo years.
  • Artemis mission
The Command Service Module Capsule
James Humphreys – SalopianJames, CC BY-SA 3.0 https://creativecommons.org/licenses/by-sa/3.0, via Wikimedia Commons

Termination Shock

Neal Stephenson
Published: 11/16/21
Read: 12/28/21

Termination Shock takes its time, and is quite meandering for a thriller. After 800 some pages, the book makes me feel like I only watched the Season 1 finale of the a new slow burn TV series.

Termination Shock is set in the near future, is centered around climate change, and one individuals efforts to do something about it himself. That man is TR Schmidt, and his plan is to launch rockets to blast sulfur dioxide in the air from his ranch in Texas. Oh and also to collect a cabal of people to back him in his play for spreading this radical geoengineering scheme across the globe. The characters being charmed by the renagade Texan include the Queen of the Netherlands, Venetian nobles (who are quite bitter about their city potentially being demolished), and the mayor of the City of London amongst others.

I find writing this synopsis now, that I’m still excited about Termination Shock and this premise even a month after I finished reading. The pieces are set for a massive adventure with high stakes and big reveals, double crosses and ramifications echoing across the globe. I will admit, part of the fun I expected and did get a good bit of were the classic Stephenson tropes. There are plenty of the “big ideas”, scientific theories, cultural observations, and inane trivia swirling around our main plot that can spawn many separate internet deep dives on their own (see my Random Observations). And this is the demise of the excitement as Termination Shock progresses. Ultimately, the backstory of how a certain character develops a personal vendetta against wild boar hunting is more exciting than the revelations of climate change and how to change it. What left me feeling unfulfilled was the entry trailer, how would the world would be impacted by attempting this geoengineering. There are hints but no substantial answers, which left me feeling I missed the unwritten second half. Even towards the close of the book, there’s a growing conflict between two characters on different factions (a Cowboy and Indian showdown) that seems to cram in some excitement but at the expense of the contrast to the other 90% of the events.

In reading a novel about climate change, I was also a tad bit confused about the weather in this near future earth and how bad things actually were. The very intriguing earthsuits, full body suits that cool body temperature through liquids and air circulation are introduced within the first couple of pages and maybe it was my sci-fi expectations, but they don’t even reappear in a major way until the very end of the book. It also appears that they simply aren’t necessary except for maybe certain parts of Texas at high sun as opposed to generally applied across the earth. Not to mention, I was longing for Chekov’s earthsuit twist that never seemed to arrive.  

A high note is that in comparison to the “seven eves” of Seveneves I did have a connection to these characters in for what little time I spent with them.  Much like the characters in Reamde, but they frankly didn’t get to do much before the whole thing was over besides worry about whether or not our main character TR Schmidt was actually trying to achieve what was laid out on the blurb in advance of reading.

The entirety of Termination Shock, the reader is within characters perspectives who are not at the seat of the action. This isn’t intuitively bad but overall gives the feeling that the book kind of didn’t have a climax. The action is driven by TR who is continuously out of the understanding of each of the characters we spend time with.  Not to mention the Chinese involvement which is continuously under explained, or the perspective of anyone in the US government who notices a huge set of rocket launches occurring in Texas to pump sulfur in the atmosphere.  Stephenson does make his jabs at the current government through this lens and mentions the decline of America once or twice here as well as the events of the January 6th capital riot. T.R. is the sole American but the extreme rugged individual, and he is more the agent of chaos than the main character.

Perhaps this is intentional, Stephenson alluding to the fact that changing the climate is precarious, difficult and perhaps hes hinting the plan may never work. Either way the ending simply is not the end.

“Don’t worry, in Season 2 the Queen of the Netherlands might actually get with the Comanche Ex military guy. The wild Texan might actually get assassinated by the Chinese. The Dutch diplomat might actually… do something? “

Random Observations

  • Stephenson’s bibliography on climate and geo engineering topics as well as other interesting things in the general history of the world is probably going to help my “To Read” list for the next 30 years.
  • The Line of Actual control plays into a big chunk of this book. I learned it is an Actual thing, and its fascinating.

Books That Jake Happened to have Read in 2021

The Shelf

2021, what a year, one of those years where I couldn’t tell you how much happened and everything it meant to me… So I wrote about what i read instead. I hope you will find my insights interesting or enraging and let me know about it.

Out of all I’ve tried to read, I have a few I’ve actually finished and have written a few words on. If you’re interested please leave me a comment or call me in the middle of the night and we can talk about how wrong I got the whole situation or what we both found funny. I hope you enjoy them at least a little bit and let me know if you’ve read any yourself. If you are tight on time check out the Once Upon a Time in Hollywood review, Here’s to 2022, and actually getting through my full reading list list this year. Click through to see my thoughts on each book, and thanks for reading.

A Little Hatred by Joe Abercrombie

Lincoln in the Bardo by George Saunders

The Three Body Problem by Cixin Liu

10th of December by George Saunders

This is possibly my favorite book (collection of short stories this year), but I haven’t been able to explain why quite yet.

Leadership in Turbulent Times by Doris Kearns Goodwin

Travels with Charley: In Search of America by John Steinbeck

Permanent Record by Edward Snowden

The Code Breaker by Walter Issacson

Circe by Madeline Miller

Devolution: A Firsthand Account of the Rainier Sasquatch Massacre

Once Upon a Time in Hollywood by Quentin Tarantino

Liftoff by Eric Berger

Seveneves by Neal Stephenson

Termination Shock by Neal Stephenson

Unfinished Books

So i do have to mention a few books i didn’t finish this year right here, (links for not finished books are to Amazon, links for books I’ve read go to the review):

The Switch by Elmore Leonard

Amazon Link

The Rise and the Fall of the Third Reich by William L. Shier

Amazon Link

Embedded Software Timing by Peter Gliwa

Amazon Link

(I know some might complain that this is an engineering reference book, just be happy i didn’t put cookbooks on this list.)

Four Thousand Weeks, Time Management for Mortals by Oliver Burkeman

Amazon Link

Stamped from the Beginning by Ibrham X. Kendi

Amazon Link

I’ve been about 80% done this one all year and gained a ton by reading it. but I started on this whole writing reviews kick and haven’t gone back to wrapping this one up.

A Thousand Small Sanities by Adam Gopnik

Amazon Link