
This all put me in mind of drum machines, which were criticised for sounding lifeless and artificial BECAUSE THEY WERE TOO PRECISE. Real drummers don’t play everything exactly on the beat – rather their timing may be slightly late or early, making the rhythm sound subtly different. Some of this timing error is accidental – but some of it is a point of style, deliberately changing the “feel” or “groove” of a rhythm.
I decided that’s what was needed to give my keyer some groove – to make it funky! I needed to add in some random timing errors, to make it sound more like my straight key. That way, it doesn’t sound so grating on my ear. More importantly, I’m sure more people would answer a more natural-sounding CQ as opposed to a dry, machine-generated call (I know I certainly would).
Trouble is, it takes some effort to generate random timing effects inside a rule-based, deterministic system like a PIC – it’s counter-cultural!
Fortunately, I had already written a pseudo-random noise generator in PIC assembler, that I could “cut-and-paste” directly into the keyer code. The code implemented a Linear Feedback Shift Register to generate a pseudo-random sequence, and I used the bottom few bits of this as an additive component of (one of) my loop counters (perhaps I should say one of Ed’s timers – as that segment of the code was modified from the original work from Ed Skelton EI9GQ). In other words, I made a “funky timer”.
In my keyer, all aspects of the timing of a morse code sequence are influenced in the same way by this timer – dot and dash length, inter-element gap, inter-character gap, inter-word gap etc. Here’s the new “Funky Timer” routine…

The code generates a “maximum length sequence” for a 15 bit shift register (I “threw away” the last bit of the 16 I’m actually using to simplify the feedback logic). Assuming the timer routine is called at 8 Hz (enough for pretty fast CW) that is still over an hour before the sequence repeats. Most of my QSOs are shorter than that!
Whilst I'd got the "random element" in the keyer, I decided to randomly change the message, as well as its timing. I added a random addition prosign "CQ" amidst the sequence of "cq"s and I added an alternative ending of "AR k" to replace the "pse k" (there's something false about a machine saying 'please').
So – how does it sound? I like the effect – but I’ll leave it for you to judge…
Here’s the original strict-tempo “no errors” CQ call…