ULTRA-PK keyer now w/ 8 memories, v2.2

VERSION 2.2  of ULTRA-PK PicoKeyer firmware released!
Upgrade your Ultra-PK keyer to have 8 message memories and added Bank/BK menu to choose bank 1 or 2 (4 message memories each bank)
added rescan of input “P” paddle, “K” key
Version 2.2 Chip is now available on Hamgadgets.com.
Simply remove battery from UPK, carefully remove and replace chip with new version 2.2. Replace battery.
Pay attention to chip “notch” location when inserting into socket

Radiodan acquires Hamgadgets!

Radiodan W7RF of RADIODAN.com has acquired HAMGADGETS from Dale N0XAS.
Dale has decided to move on to other things in his life. We wish Dale well with his new found time!
Radiodan will continue to sell BOTH kits and built units of all the wonderful products Dale has designed.

Using the ID-O-Matic with HTs

I received an email the other day with a question that’s been asked several times before:

I’m wanting to put together an emergency field repeater using four Baofeng UV-5Rs.

Yeah, you and a lot of other people. Those are some pretty cheap little HTs, and people seem to like them.  Problem is, you can’t really make a “real” repeater since they lack any sort of COR or COS (carrier operated relay or carrier operated squelch) indication.  So, setting them up as a classic repeater using the ID-O-Matic as a controller isn’t going to be an easy job.

But…  for temporary field use, a simple timed ID may be all you need.  In a case like that, it’s pretty easy.  All you need is to connect the ID-O-Matic’s PTT and audio to the transmitting rig, in parallel with the other source.  You can let VOX do the work in your “temporary field repeater” setup, and just use the ID-O-Matic to provide Morse or voice ID every ten minutes or so.  It’s maybe not as elegant a solution, but it’s cheap and easily transported compared to using more capable mobile rigs that may have a COR/COS signal available.

The Rockmite is here!

I’ve added the Rockmite II kit from QRPme to the catalog.  I have a small stock of kits ready to ship immediately, along with an even smaller number of hard-to-get cabinets.  I have kits in 80, 40, 30 and 20 meter flavors.  Great for saving on shipping if you’re ordering a Rockmite along with some fine HamGadgets kits!

Recovering from short ID-O-Matic delays

The other day an ID-O-Matic user emailed me.  He’d set up a beacon message and wanted it to repeat continuously, without a delay in between.  Now, you can certainly set the beacon delay time shorter than the time it takes to send the message — which does exactly what you want it to do, sends the beacon message continuously.

The challenge is then how to get into the setup menu!  You can hit that ENTER key on the keyboard until your finger falls off, it seems to be ignored while the message is being played.  Well, it all comes down to patience.  The ID-O-Matic will buffer any keystrokes it sees from the USB interface while sending an ID or beacon message.  It checks the buffer at the end of the message and if it sees a carriage return, enters the menu.  Of course if it sees another one it will immediately exit the menu.

So here’s the trick.  If you have set a very short repeat delay on your ID-O-Matic and can’t seem to get into the setup menu to change it, there’s an easy way to do it.  Connect the USB interface, start your terminal program and hit the ENTER key one time.  Then wait until the menu appears.  Easy.

Oh, and don’t go for coffee while you’re waiting.  The setup menu has a five-minute timeout, after which it will go back to operating normally.

DTMF Control for the ID-O-Matic

It’s no secret that I have been wanting to add DTMF remote control to the ID-O-Matic for quite some time.  Writing the firmware to ad that functionality while not breaking anything else has dragged out far longer than I wanted.  With the added demands of my full time job and other things, it’s really unlikely that I will have the time I need to finish that project any time soon.

Storing Morse code in memory

When you’re playing with Morse code and microcontrollers like the PIC (my personal favorite), you need a way to store the Morse characters in a way that makes sense.  Since devices like these have very limited program memory and even less RAM, the efficient use of memory is a big concern.  Your PC may not care if you use an extra few kilobytes here and there, but a PIC or other embedded controller will quickly run out of memory if you’re not very conservative in your use of memory.

I’ve seen quite a number of different ways in which people store Morse code characters in memory.  Some make more sense than others.  One that I saw works well when only a very limited number of symbols need to be stored – just letters and numbers without punctuation.  A single byte was used for each character, laid out like this:

Bits 7, 6, 5:  Number of elements (dots and dashes) in the character
Bits 4, 3, 2, 1, 0:  The elements themselves; 1=dash, 0=dot

Do you see a problem here?  Even though you can define a character with up to seven elements, you’re limited to storing only up to 5-element characters.  So, no comma, period, question mark, SK, and so on.  While it may work for some applications, it won’t work for most.  It’s efficient (using only one byte per symbol) but relatively ineffective since it doesn’t cover all of the symbols — including some that are very commonly used.  (I did see a workaround to allow six-element symbols, but it would require some additional code.)  Another method I have seen overcomes this by using a two-dimensional array to store the length of each symbol and its elements in separate bytes.  It’s effective, but very inefficient in that it uses twice the number of bytes needed.

Part of the difficulty is that Morse code symbols (characters) are variable in length.  Unlike ASCII characters, for example, which are all eight bits long, Morse characters are not all the same length.  They range from one to six elements (dots and dashes) long.   In fact, make that seven if you want to include the obscure “SX” prosign for the dollar sign ($), which I’ve never actually heard of being used, but Wikipedia says it exists.  So we really need to know two things about a Morse symbol: it’s length, and its actual sequence of dots and dashes.  We need to have at least six or possibly seven bits to store all of the letters, numbers, punctuation, prosigns and non-English characters.

The method that I use is very simple and allows for all Morse symbols.  The eight-dit “error” symbol does require slightly special handling, but it’s a special case in itself so that turns out not to be a problem.  In my method, anywhere from one to seven bits are used for the dots and dashes, with one extra bit indicating the end of the character.  Here’s how it works.  As with some other methods, dots are represented with a 0 and dashes with a 1.  Elements within a character are stored “backwards”, with the first dot or dash in the least-significant bit (LSB) and moving to the left from there.  A trailing 1 bit is added to signify the end of the character.  Confused yet?  Let me try to clarify.  Let’s take the example of recording characters sent with a paddle…  for example, to store a message in a keyer’s memory.

Start by initializing a variable to binary 0.  Now, as dots and dashes are received, they are right-shifted in from the most-significant bit (MSB).  Let’s say we are storing a Morse “L” (._..).  Here’s how that progresses:

0000 0000 Nothing received yet
0000 0000 Dit (zero shifted in from left)
1000 0000 Dah (one shifted in from right)
0100 0000 Dit (zero shifted in from right)
0010 0000 Dit (zero shifted in from right)

So now we have hex 20 stored. We also know that we’ve received four bits.  We just need to get that into a usable form.  So, let’s use another variable byte, initialized to 1 (0000 0001),  We’ll then left-shift the four bits back OUT of the first variable and into the second, like this:  Variable 2  <—  Variable 1

Variable 2 Variable 1 Count
0000 0001 0010 0000 0
0000 0010 0100 0000  <-0 1
0000 0100 1000 0000  <-0 2
0000 1001 0000 0000  <-0 3
0001 0010 0000 0000  <-0 4

This shifting of the bits is a crucial step (and of course there are other ways to do it).  Now we have the character stored in Variable 2 in a very easy to use format.  It involves a little extra code to when when the dots and dashes are received, but pays off when they’re stored and sent.  The Morse code “L” is stored as binary 0001 0010, or hex 12.  To send it as Morse code, we simply right-shift the byte, reading 0’s and 1’s out of the LSB and sending either a dot for 0 or a dash for 1.  Before each shift we test to see if the byte is equal to 1 — if it is, we’re done sending.

If you need to store and send the “error” symbol (……..), you’ll need to add code to detect when the byte is equal to 0 and respond appropriately.  In practice, I have yet to discover a case where I need or want to store and play back that particular symbol.  If it’s detected as an input while recording (easy to do — length is 8, byte is zero), it means the user wants to back up to the beginning of the last word and re-send it.  The symbol itself never gets stored, only detected and acted upon.

This method of storing Morse symbols is both efficient and effective.  All Morse code symbols can be stored, and all take up exactly one byte of storage.  There is only one special case (the error symbol) that needs to be addressed and it’s a symbol that you will likely never want to store anyway.

I really wish I could take credit for thinking of this.  it’s simple, elegant, and it’s worked perfectly for every Morse code application I have had for over ten years now.  I am, however, pretty sure I got the idea from reading something back in 2002 or 2003 when I was working on the original PicoKeyer.  It’s been a lot of years, and I cannot recall where I saw it or who did it…  but to whoever it was, thanks.

 

A new kit! Mini Keying Adapter

Following up to the last post on keying low-cost transmitters, I have worked up a new kit.  It’s small, it’s cheap and it does the job…  keys a Pixie or similar transmitter that needs more current than a typical electronic keyer can handle.  The Mini-KA is a little 1.5″ square board with only a few parts, and is priced accordingly.  I have a limited number in stock — if they sell well, I’ll do a larger run of kits.

As a second use, this kit would be dandy for switching power to a DC cooling fan under control of an ID-O-Matic III or IV.  It’s good for a couple of amps, and is easily driven with any open-collector or open-drain output — like that from a keyer or the ID-O-Matic.

Keying the Pixie and its Chinese clones

I’ve had a couple of emails from people trying to use a PicoKeyer to key one fo the cheap Pixie-clone type QRP transceivers being sold by various Chinese vendors on eBay.  These are dead simple little transmitters, and should be easy to key — right?

Well, kind of.  That circuit was designed to work with a straight key or a bug, and it works great with a straight key or a bug.  However, if you look at the design, the entire final PA collector current (well, actually the emitter current) is switched by the key.  This is typically half an amp to an amp or so.  There’s no problem doing this with a straight key, but the output transistors on the PicoKeyer and most other electronic keyers are simply not up to the task.  The 2N7000, for instance, is rated at 200 mA absolute max.

So what to do if you want to use a paddle with one of these?  Well, there are a couple of routes you can take.  One is to add a UKA-3+ with the heavy duty relay option.  It could be argued that it’s a little overkill for a sub-$10 transceiver, and I’d certainly agree with that.  Fortunately, there is a simpler and much cheaper solution.  You’ll need to break out the soldering iron and a little perf board, though — at least until I get a kit together!

MOSFETs are cheap, and can easily handle the current requirements of most QRP transmitters.  You just need to rig up a circuit that will take the ON/OFF keyed output of the PicoKeyer and use it to turn a larger MOSFET on and off.  The whole arrangement can cost less than a buck if you shop around.  Here’s an example:

MOSFET_switchQ1 is normally held in the ON state by pull-up resistor R1.  This hold Q2 in the OFF state by pulling Q2’s gate near ground.  When the input is grounded, Q1 turns off; R2 pulls the gate of Q2 high and Q2 conducts, keying the transmitter.  In logic terms it’s an inverter followed by an inverter-buffer.

If there’s sufficient interest I will put out a kit for this — a nice PCB with a terminal block to make it easy to connect to your keyer and rig.  It won’t fit inside the PicoKeyer enclosure, though.  There’s not a lot of room there.  Oh, and if you’re tempted to swap out the PicoKeyer’s 2N7000s for a couple of AOI514 or similar MOSFETs, it probably won’t work well.  The PicoKeyer can only supply about 2.9-3 Volts to the gate, which is probably not enough to get the larger MOSFET to conduct a useful amount of current.

Ultra PicoKeyer V2.0 Released, Now Available in Germany

I have released firmware version 2.0 for the Ultra PicoKeyer.  New features include QRSS mode, and two new, 63-character MYCALL memories.  These can be recorded through the setup menu and used in a message with the /Y and /Y2 message commands.  MYCALL1 can also be sent with a button combination.  The astute ham will notice that this effectively gives you five messages that you can send with the press of a button (or two, in the case of MYCALL1).

QRSS mode lets you set the speed in a message to any QRSS speed mode, from 1 to 255 seconds per dot.

I also “relaxed” the paddle timing when recording a message, just a bit.  By far the most common problem people have had with the Picokeyer series has been recording messages.  The keyer was a little bit strict about dot/dash timing.  It’s always been very easy (trivially easy, in fact) to record a message.  The rule is simple: If the keyer sees no paddle pressed for more than one dot length after a dot or dash is finished, it assumes you’re starting a new character.  All you need to do is let the keyer do the work of spacing dots and dashes for you.  But, old habits die hard.  For the guys who have been in the habit of trying to manually space their dots and dashes, it could be a little challenging.  I altered the timing a little bit to allow the op to be a little slower on the paddle, and so far the results have been positive — not a single support email since the new firmware started shipping about a month ago.

If you’re in Europe, you can save some shipping time by ordering from the Funkamateur online shop (www.box73.de).  They are out of stock on the PicoKeyer-Plus (as we all are) but have Ultra Picokeyer kits.