ZEIT 02-00 Development Diary

June 6th 2022 : Tied Notes

One of the glaring omissions from Version 01-00 of ZEIT's original feature set was the lack of any support for TIED notes. At the time, I didn't think that they were an important inclusion so I left them out. User feedback over the years has strongly suggested that they should have been included so I set about adding the facility to the new version of the software last week.

The solution I came up with was, by my own admission, BAD.

To TIE a note, the user had to press two buttons, the start note and the end note. To undo the TIE, you just press either of the buttons. Sounds great, right?

In practice, no. You have to use two hands to accomplish a task that is, essentially, a single-handed operation. In addition, I found that I couldn't TIE step sixteen and step one - the algorithm just wouldn't allow it - so you couldn't bridge the end of one sequence with the start of another. Worse still, trying to add the whole scheme into the switch handler screwed up the auto-repeat function.

Is there a better solution?

Turns out that there is. Just use the Gate Length facility.

Go to the Gate Length page, select the note you want to TIE and change its length to 100%. At the moment, the range available on the Gate Length parameter is between 5% and 95% of the available on-time i.e. between 10 and 365 clock ticks. However, if you make the available range 100% then this essentially tells the sequencer to treat the next note in the sequence as a TIED note.

Suppose that the sequence direction is forwards and we set the Gate Length for Step one to 100%. If Step Two isn't skipped then the length of Step One becomes 100% plus whatever Gate Length we've already applied to Step Two. Just remember that Step Two won't sound. It's treated as a rest.

This is a much improved method. The technique also works if we're dealing with any of the other available directions, and across the last step in a sequence. It's also significantly easier to implement for the developer (me!).

It's important to remember that I'm not just re-creating the original ZEIT, warts 'n' all. We're also developing and improving on the original concept, as well as fixing some of fairly obvious mistakes.

Next up, the Swing function.

May 30th 2022 : An overdue update

The last two weeks have been spent deep-diving bugs in the user interface. The menu manager and data dictionary sections are working well although stitching this lot together with the output driver is a challenge. This version of the ZEIT system is a total re-write of the existing software and owes a lot more to our earlier prototype instruments such as Haydn and Zyra. Getting the LEDs to update properly has been less than thrilling but we're close.

Other issues :

  • 1. A major fault in the Arduino IDE stopped me uploading software to the sequencer for a day. Fixed by installing a new (and somewhat beta) version of the IDE.
  • 2. Those wretched Roland Boutique instruments, bought some time ago to assist with the development process, finally pissed me off for the last time. They apparently don't respond to MIDI CC messages and I spent far too long trying to figure out why my MIDI CC driver didn't work when I knew it did. Although this issue was fixed by Roland in a later software upgrade, my instruments are from the second wave of Boutique synths so I figured they were immune. This issue really should have been sorted out by the time of release. Anyway, I've had it with them. They've been replaced with a couple of older modules, which worked perfectly even though they're thirty five years old plus I'm working on my own sound modules anyway. So screw those bloody Boutiques.
  • 3. Infrastructure - the studio has been reconfigured. It's more comfortable to work in and there aren't as many areas where a small boy can hide. Work continues of the assembly room. I still share space with a bicycle, a telescope and a lawn mower but it's better than the cramped back bedroom.
  • 4. Yes, I have a helper these days.

Yes, I'm well behind schedule but still making good progress. The ZEIT software isn't our only project at the moment so I have to partition my time carefully. It's running concurrently with the modular synth project and our other high-end products. More on those later.



April 20th 2022 : Update

We passed a major milestone this morning - the menu items are (pretty much) complete. It's taken several months to get this far, largely because the process of integrating the front panel LEDs with the menu software was not at all easy. I take some comfort in the fact that it took two years to get this far with version 01-00.

This is the end result and it's important. I'm using around 72% of the available RAM, which is mildly problematic because the Arduino environment starts to complain if you go above 75%. I'll need to address this issue before too long. The most likely cause is the plethora of debugging messages and they tend to eat RAM.

However, the line above carries the most significant figure. Thus far, the entire sequencer code - all one hundred thousandm lines of it, including all of the input processing, the memory management, the menus and the output driver - compiles down to just 15% of the available FLASH memory.

Why is this important? The first version of ZEIT was constantly pushing at roughly 97% to 98% of the available code space. There just wasn't enough room in the chip to squeeze any more program in and I waged a constant battle with the old non-optimised compiler trying to write code that was short, concise and manageable. So, we're getting there.

I'm still focussed on putting some boards out into the beta-testing community before the end of April. As stated, the software won't be 100% functional but it will get the users sequencing again.



March 31st 2022 : Update

As you may know from our parent page, Freya Hughes arrived on the morning of 6th March 2022, not long after I'd posted the previous update. Mother and baby are doing fabulously.

I had to take a couple of weeks away from the project to help out. I've been able to dip in and out of the software every now and again, mostly to solve some major issues with the Data Dictionary which is cross-connected with various look-up tables. Those issues have all been sorted and so are no longer a major blockage to development. I've also embarked into a very necessary software review, largely to ensure that the code I've written is sufficiently robust to survive beta testing.

The major win this week has been the Encoder response, which has annoyed and frustrated me since the project's inception. Whatever tweeks I applied meant that the encoder was either dull and unresponsive or jittered like crazy, which is obviously unacceptable. The encoder is filtered in hardware by an MC14490 hex debounce chip but, even with that in place, the output was never properly stable without additional software filtering.

Thinking the problem through in the wee hours and then comparing those results against the actual software... Err... I found a bug, a bug that's been in the system for nearly twenty years.

There. Fixed it.

Back to work.

I'm now confident that we can try putting some boards out into the beta-testing community before the end of April, just to see if they'll fly. The software won't be 100% functional but it will get the users sequencing again.



March 5th 2022 : Update

We're still making slow but positive progress. I had to take two weeks away from the project to focus on other aspects of the business, namely restarting our modular synthesiser build programme and designing some new test equipment to reduce the time taken to prototype new instruments. And, of course, we have to make sure we're up to date with the UK Government's Making Tax Digital programme. Can't avoid that.

As many of you will know, I also host a small radio show, Bridges, which is dedicated to electronic and alternative music and airs twice a week on Radio Northumberland. Recently, the chance to interview my hereos Tangerine Dream appeared on the RADAR so, yeah, I jumped. That interview airs tonight and I'm kinda proud of that.

All of these distractions are/were essential if we are to continue with our future plans for the re-development of the resurrected ZEIT so whilst I wasn't developing software, I consider it time well spent.

Anyway, I'm still plugging away at the user interface, mostly adding connections from the front panel controls to the backroom MIDI functions. The keyboard interface including Step Time Input and real-time transpose now work. Endstops now work as this did in the first incarnation - that was a struggle as the edit mechanism is completely different. Adding the LFOs was a challenge but they're making the right noises again.



February 7th 2022 : Update

Getting closer and closer...

Most of the front panel controls now work as they should. Refresh also works.

I'll post a video in a couple of days once I get the last few bits tidied up.









January 28th 2022 : Update

Good progress. Not perfect but good. In other words, I've managed to stick at this project despite attempts by various other parties to drag me away to other worthy but ultimately pointless projects.

The sequencer is now polyphonic i.e. it plays more than one channel at a time. The Sequence Manager, LFO, Force-to-Scale and MIDI Effects modules have all been ported and are running smoothly. The Rack Mount unit now supports the same clock multiples as the Desktop unit i.e. 1/3 and 3x. (They're just not accessible as buttons on the front panel but they're available.)

The Force-to-Scale module had to be substantially re-written to make it work the way it was originally intended. If you're playing, say, a major scale and you transpose up from C up to to D, then the new notes are now in the key of D major. There's also a new note-seeking mode, which either goes to the note above or the note below. Subtle but effective.

The Effects has also been substantially re-written and is now multi-channel. In other words, repeated notes can appear on any MIDI channel instead of just one. In effect, this means that each track has its own MIDI Effects unit.

Surprises : I had a couple of breakthrough moments over Christmas, of which I will say nothing at this point but...

I have a picture of where this project needs to go in the short term. Certain modules i.e. the composer, the morpher etc, won't appear in ZEIT 0200. I'll add these further down the line. Whilst I am not keen to release incomplete code, I do not want to spend the next year or so working towards a perfect release. Releases will, instead, be incremental.

Workshop Move

Add to all of this, I was encouraged to move the workshop out of our spare bedroom and down to the garage area over the Christmas break. The garage is better suited to electronics assembly and prototyping because it has a good fire door and proper ventilation. Jules was sick of the stink from the hot air guns and the noise of the CNC machine, and because I had a habit of building and programming stuff when I should have been sleeping.

At the moment, the lighting is inadaquete and needs improving. The floor needs covering to keep some of the heat in and the walls need either painting or dry-wall. Slow but steady...

So... onwards and upwards...

Bridges on Radio Northumberland

P.S. If you didn't already know it, I host a radio show, Bridges, dedicated to electronic and alternative music on Radio Northumberland. The show is broadcast on Saturdays at 1900 hours and Thursdays at 2200 hours UK Time. You can find playlists here.

December 17th 2021 : Update

At first sight, the sequencer does not appear to have changed much in the last couple of weeks. However, there have been some major changes under the hood.

Click the image on the left to load a quick demo video.

ZEIT is no longer running off the crude demo software but is, instead, running off major re-writes of the Output Driver, the hardware interface and the Menu Manager. The timing is now pin sharp. The encoders work properly. The pots work very well with no visible jitter in weeks - that's a major win. Most of the lower half of the machine, the Sequence Select, Sequence Enable and Transport boards, all work.

I plan on rebuilding the machine over the Christmas break. Two of the pot boards have the wrong colour LEDs - they were from another project - and the several of the pots themselves feel like crap. I'll swap those out. I also discovered that a couple of boards have dead LEDs. They need sorting too. I'll also fit the missing VFD / Encoder support board which went missing during the stocktake.

Happy Yuletide bunny.

06-Dec-21

Basic Note Editor with text conversion to human-readable values added. Display current sequence number (top right) and current step number (bottom right). Improved Menu Manager installed. Improved Data Dictionary access installed.

Happy bunny.

04-Dec-21

ZEIT's VFD driver installed. It worked first time. No messing about.

This is an important milestone. In the original system, the display was on the same bus and used the same family of control lines as the i/o boards and the external memory. This design feature meant that if you wanted to paint a message on the display then you had to wait until the CPU had finished dealing with those subsystems, resulting in a bottleneck of nightmarish proportions.

The new design puts the display on its own bus and uses a different set of control lines. You can be writing a message to the display, writing to the LEDs and loading in a new sequence at the same time.

02-Dec-21

Back on ZEIT after the joys of Storm Arwen and the workshop rebuild.

Workshop : I've had to move all of the workshop kit out of my nice, cosy little workroom and into the freezing cold garage because "that reflow oven is too dangerous, the CNC makes too much dust and the hot air gun just stinks... "

So, that's me told. Aside from the bone-numbing cold, the workstop is quite comfortable, so long as you don't mind sharing the space with various bicycles, a telescope, the lawn mower and a 1920 Estie pedal organ. Oh, and the spiders. Yeah, lots of spiders.

ZEIT : The Data Dictionary, ZEIT's database for the front panel controls, data fields, presentation parameters etc is working. I've changed the format so that it's more efficient but, sadly, no longer compatible with the Haydn and Zyra Step Sequencers. I'll recompile their sources over the next couple of days to make sure they still work.

Next step, the Presentation Manager, which ties in directly to the Data Dictionary.

Probably going to take a day or so out to swap the current low quality potentiometers for something better. The old pots feel like crap.

26-Nov-21

Reformatted the development diary to make it more readable. Added video detailing latest software build. Added a couple of images.

Uploaded latest Gantt chart to show progress. Red shows modules already finished, tested and in place. Orange shows modules/milestones in progess. Blue is not yet started.

Working on sequencer menus...

25-Nov-21

Latest software build, showing front panel control of note pitch and velocity, root note and sequence length. Sequencer is driving a Roland Boutique JU-06.

22-Nov-21

Added the play facility so I can start and stop the sequencer, set pitches and velocities, change root notes, make rests and change the sequence length. Should aid in testing and demonstrating the instrument ahead of the major build which starts as soon as the workshop conversion has passed the first hurdle.

Major work on instrument database begins.

19-Nov-21

Added timing debugs to main loop to determine system loading. Seems stable and consistent. Average 1330 uS, Low 500 uS, High 1750 uS.

18-Nov-21

Left system on soak overnight. Not a single ghost reading from the potentiometers. Job done.

Added the switch handler. Limited to just 4 switches. Any more and they are ignored. This is temporary whilst I debug the system.

Tweak the timeout factor to improve the auto-repeat response.

Added beginnings of the Output Driver, basically to catch Switch Events whilst building the Data Dictionary. Working.

17-Nov-21

Fixed the solder bridge on the development CPU, got the system working as it should and then moved everything over to the main Rack Chassis. Checked build logs and this CPU was bought sourced from who are provided with a bare board and add the edge connectors according to customer order. Contacted their QA department. The guilty party has since left the company. (Yes, heard that one before...)

Excessive encoder events followed - hadn't plugged in the encoder board. Sorted.

Increased the number of boards from three to twenty - skipping board three which doesn't exist - and added the filtering to the last six (which are potentiometer boards). Got that working.

Added the switch event handler. Works but needs hysteresis to stop multiple events.

Reduced the interprocess gap from 10ms to just 1ms to improve the response of the pots. This makes the switch problem worse but I can add a workaround for that today.

Plugged a JU-06 into the MIDI Out port to see if MIDI still works. It does.

Left the system on soak test overnight.

16-Nov-21

Migrated over to the digitalWriteFast() library. Normally, we would just write directly to the ports at the machine level but this library is almost as fast and a damned sight easier to read.

15-Nov-21

Got the updated analogue filtering module ported across and installed. Instead of the n-channel alpha smoothing originally in place, this version uses a four-point rolling average filter with speeded-up mathematics to improve jitter discrimination. Works well.

14-Nov-21

Spent a small amount of time, 30 minutes or so, hunting for a bug in the paddle board decoding software. Couldn’t find anything. Checked cables. Checked my board. Eventually, checked the microprocessor and... oh... Here’s solder bridge... Problem solved.

Found the missing ZEIT encoder board - down the back of the computer.

Encoder now works. Tied it to Timer Three in the mainline code for the moment. This will need tweaking to get the best response.

Paddleboard reads are working. Got to sort out the filtering arrays.

Can’t find the VFD. Thought about plugging in an LCD. If that works then we don’t need to worry since it’s the same interface only slower… If there’s no VFD, I’ll jump directly to Part Two.

No, don’t plug in an LCD in case you blow the bloody thing up. The ZEIT connections are different.

Find the VFD.

11-Nov-21

Got paddle boards working but there’s something up with the board selection logic. Needs to have switch 8 selected to make it work. Suspect a line isn’t being pulled high when it should be. Probably something on the CPU board.

10-Nov-21

Ported Analog sampling module and SD Card handler over from Haydn Development System. Started re-building the ZEIT software. Gave up trying to use the new Arduino whizz-bang MIDI library because it breaks up the debug Serial port. Use my own handler, like the one in the original ZEIT, because it worked. MIDI In and Out working nicely, driving the EX5.

09-Nov-21

Completed work on third batch of Eurorack modules. Time to shift focus back to other projects...

ZEIT, Haydn, Echo, Zip all require attention.

ZEIT first... Ported Analog sampling module and SD Card handler over from Haydn Development System. Started re-building the ZEIT software for the new Arduino IDE.