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.
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.
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.
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.
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.
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...
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.
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.
Added timing debugs to main loop to determine system loading. Seems stable and consistent. Average 1330 uS, Low 500 uS, High 1750 uS.
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.
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
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.
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.
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.
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.
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.
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.
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.