The Version A circuit laid out in Eagle CAD. Top of board view.
Back in October, I mentioned an open source keyer developed for the ATTINY 45 and requiring only a few components. The source code for the controller and an example schematic were uploaded to a repository. Subsequently, I decided to try my hand at producing a PC board. Rather than try some sort of printer-based method based on toner transfer, I wanted to try going a more professional route and having the PCB run off by a fab. Initially, I thought I’d have to go overseas and wait upwards of a month for my boards to come back, but I found a domestic fab that provides an amazing service for low volume prototype boards: OSH Park.
I had already laid the schematic out in Eagle CAD, which seems to be popular among hobbyists. Most of my components were available in off-the-shelf libraries, but I had to layout the piezo speaker as a custom part (although I started from another similar piezo speaker and just had to modify the dimensions). It took a while to get the hang of laying everything out on the PCB, laying down ground planes, routing the traces, and making the silk screen look nice, but after many hours with online tutorials, it all looked right. I ran some rules checks, and everything reasonable, as far as I could tell.
Next, I shopped around using the online check and quote tools available from a number of popular fab houses. To upload my design, in most cases, I had to send a zip file of the various Gerber layers — top copper, bottom copper, top silk, etc. But, for OSH Park, all I had to do was upload the Eagle board file itself. This makes a lot of sense, as the Gerbers are generated from that file, so all the information is already there in the board file.
The OSH Park site interprets the board file on the fly and provides a rendering of approximately what the board will look like when final. There are a number of options regarding cost, turn around, etc., but I opted to get three copies of my design for about ten dollars by agreeing to have my boards made as part of a larger run to take place in about two weeks from the date of submission. The way OSH Park makes prototype boards affordable is by merging multiple designs into one larger board and then cutting that board apart. Their cost is per square inch, and I had designed my board to be one by two inches — not bad considering that I used all through-hole components and did not go out of my way to pack them tight on the surface of the board. In fact, my design is a little generous in that I give a number of ground connection points, whereas only one is really necessary for the sake of wiring in external components.
The board as rendered immediately after upload at OSH Park.
From the time of submission until the envelope arrived, I was able to track progress of the order, so there was particular excitement on the day that I knew the package would be waiting in my mailbox. When I opened the padded shipping packet up, I found three little purple boards, just about identical to the rendering that was provided when I had uploaded the design.
The front of the board, with components added.
The back side of the board, before I started soldering.
The PC boards are excellent quality, with no alignment issues. The solder mask went where it was supposed to go, all the vias are functional, and the pads take solder well and have no tendency towards lifting. Components went onto the board without any fuss and when powered up, the board worked perfectly, the first time. Having verified that the design works, I’ve shared the board on the OSH Park website.
Now that this seems to be working, one option would be to run off more copies of the boards and do something with them — embedded keyers, stand alone kits, etc., but now that I’ve tried out designing a through hole board, I’m curious how much more compact the design would be with surface mount parts (and how much more difficult it would be to assemble).
My reviews are a little delayed this year (thanks, government shutdown for turning October and November into scheduling train wrecks) and I didn’t get to take every submission on a test drive, but the silver lining is that I can just fire off my comments without worrying about influencing anyone else’s reviews. My comments will be short, as I just jotted a few notes about each work, and now a few weeks after playing them, I tend to only remember the points that really struck me. I didn’t use my scoring rubric from previous years, but I had the same criteria in mind. I would usually rate games according to five categories on a first pass and then adjust the scores before voting based on gestalt after playing all of them. This year, I went with my initial gut rating and used the overall history of IF Comp as a baseline.
These reviews are in the random order of play, up to the point that I hit the November 15th voting deadline. Here’s the pseudo-obligatory line break for propriety and etiquette:
Continue reading IF Comp 2013
I was in Chile this week for a conference on clinical trials in Latin America. I delivered about five talks in three days, but also managed to carve out a few hours to meet with the Radio Club of Chile — more about that in a subsequent post. Today, I had a few hours free before the flight out and decided to explore the city a little before the taxi to the airport would arrive at the hotel.
I had charged the QRP gear during the conference, and I even had an external 2Ah lead acid battery. This time, TSA had decided that it was permitted to take it on the plane. Maybe it helped to label everything I was carrying as “sealed, unspillable, non-spillable, absorbed glass mat, lead-acid battery” and “not lithium”. I even went so far as to write “this is a wheelchair” on my bag, since I know that lead-acid batteries are explicitly permitted in the cabin when the are “part of a wheelchair.”
Ceci n’est pas une pipe.
I headed for the metro system and took the red line from Los Leones to Banqueda, which is just south of the furnicular that runs up the side of Santiago Hill to Santiago Municipal Park. The furnicular has a plaque that advertises that it is the same train that Pope John Paul II took to the top during his trip here. Well, if it’s good enough for the pope…
The furnicular ran smoothly, and we passed the zoological park on the way up. The top of the line is a plaza, which was full of bicyclers, who were taking advantage of the great Spring weather. I exercised some restraint and did not follow the signs pointing “this way to the virgin”, but continued along the trail, towards the antennas that run along the ridge. The biking trail run along the side of the mountain, and followed it for a bit, then turned towards higher ground on dirt trails. I walked to the very top and checked out the antennas, but decided I really didn’t want to pitch my wire antenna anywhere near them.
The huge antennas on top of the hill
I continued on a bit more to the East and found a nice place to plunk down on the side of a hill.
The furnicular parked at the top of the track.
I decided to go with a 15m antenna plus my SLT+ tuner. I pitched the wire into a tree and threw the counterpoise down the hill on the pine needles. I got everything else set up, turned on the radio, and didn’t hear much. The background was just not right. I tried tuning the antenna starting with the suggested inductor setting, but the little red light didn’t change at all. I gave the SLT+ a couple knocks to see if anything was loose, and heard an occasional burst of static.
Of course, I didn’t have tools with me. I almost threw some into the bag, but recalling previous run-ins with TSA, I decided against it. I was, however, able to rip the pocket clip off my pen and use that as a screw driver to open the SLT+. I had suspected that the toroids might have come loose, but when I opened it, I saw that I had already addressed that after the last incident — all were firmly anchored with hot glue. What had happened was that the red antenna banana terminal’s solder lug had rotated and was grounded. I twisted it around, and the noise level went up. As I tuned around, I started hearing signals.
But, my troubles with the SLT+ weren’t over. When I tried to run the antenna this time, the capacitor knob spun freely. If I recall, it had been attached to the underlying polyvaricon shaft with either glue or nail polish. I tried to turn the capacitor from the side using the jaws of an alligator clip, but found it very difficult to do so. I had little choice but to settle for the best match I could get using the inductors, although the loudest settings didn’t correspond well to the suggested settings. I decided to go by the SWR reading on the radio itself. My “feedline” was a piece of BNC-terminated coax only about a half meter long, so as long as the radio could tolerate the impedance mismatch, I figured I’d be okay. I did push the radio when it read “high vSWR”, but was willing to transmit with a few bars on the swr meter. Being less picky let me transmit on both 10m and 15m; it seemed to work on both. The moral of this story: always throw a leatherman into the checked baggage. It may get stolen, but most of the time it won’t.
The broken-off pocket clip from a ballpoint pen served [poorly] as a phillips head screwdriver.
I was extremely relieved when I heard PY1XM, Tom, come back to me on 10m. Up to that point, I thought that I might be skunked on this outing, with nothing to show for hauling my equipment half a world away and up a mountain. Tom was operating from Rio, which is about 3000 km from Santiago. Right after working him, I talked with Paulo, PR2W operating from Brasilia. Paulo gave me a 579, so I was glad that my signal was not entirely in the mud, although I’m sure his antenna did the heavy lifting.
The plaza overlooking downtown Santiago
While listening down the band, I heard an Italian station calling — he was pretty faint, so I though I would have no chance, but I could hear another station calling nearby. The more I spun the dial, the louder it became. It was slow but sure, and I had to hear it a few times because I was not familiar with the structure of the call sign: CD6792. After one exchange, I found out that it was Álvaro, a member of the Radio Club of Chile that I had met the previous day. ¡Fine business, Álvaro!
The view from my operating position on the side of a hill.
I had two more contacts: LU8WX in Argentina was rapid-firing DX contacts, and he got didn’t miss a beat in replying to my unusually long call. I also found that I could also get a reasonable match on 15m, so my final contact was with Rei, PY2VJ in Brazil.
So, five contacts isn’t anything to gloat about, but considering that Murphy accompanied me up the mountain, I was happy to have had even one. It seemed that conditions were getting better as the day went along, so propagation may also have played some role. I’ll note that the previous day, the K index had gone up to 4, and when I was operating it, it was declining, but still about 2.
A couple quick notes on ARRL CW Sweepstakes 2013 before the memories evaporate: I was keen to work this contest because although I’ve focused on and off on DX stations, I hadn’t worked all states by CW according to logbook of the world. Sure, I had, in fact, worked all states over the last couple years by CW, but for a number of states I have a QSL card rather than an entry in LOTW. I was concerned that we’d be moving this summer and I might not have a chance to get some of the less populated states into the record. I’m happy to report after the contest that CW contacts with all states are now documented in my LOTW account. I can now rest easy.
I don’t have a lot of experience in sweepstakes, and had to look up the exchange of serial number, precedence, my call, check value (the year I was licensed), and my state. My sent exchange was of the form “001 A AI4SV 84 VA”. It took quite a while to get used to sending that string, and more to get used to receiving it and getting it into N1MM.
I began at the starting time of the contest and was instantly barraged frantic 30+ wpm exchanges. Everyone was feeling the pressure at the start, and maybe this strategy pays off, but by the second day, the same stations had slowed way down. It’s not the end of the world to ask for fills and repeats, and in the worst case, you can always hear the station on their next reply and back-fill anything that you missed out on, but coming into the contest cold left me shaken up a bit. A few hours of contesting fixed that, and by the time I left to see “Gravity”, I had a flow going.
The next day, I was only on for a few hours in the middle of the day and a couple at the end. I made a dumb mistake in the last hour. Daylight savings time had changed in the US that weekend, and I hadn’t taken that into account — I thought the contest ended at 11 pm local time, but it ended at 10. I’d been working 40m and had just switched to 80m when the contest stopped, so I didn’t get to fully plunder the 80m crowd, and so came up short on some local areas, such as parts of New York and Massachusetts.
At the end of the event, here’s the breakdown of my score. I was a long way from a clean sweep, but I was very pleased to have worked Yukon Territory – I think that was a first for me.
This is how I looked this evening at 8 pm, at the conclusion of the CQ WW SSB contest. I didn’t work the whole contest in “iron butt” mode, but I my throat was sore and my ears were ringing at the end of the event anyhow — I think I’m out of practice (particularly on voice), as I’ve been more focused on projects than operating lately.
I started early on Saturday morning, rather than the night before and took a few breaks during the day. In the evening, I hung up the earphones around 7 pm and went out for dinner and to see the movie “Gravity”. I didn’t get back on the radio until Sunday morning around 11 am, but then worked more or less straight through to the end of the contest at 8 pm.
The notable feature of this year’s CQ WW SSB was the highly energized state of the ionosphere, with solar flux above 160 for the entire contest, and no solar events to spoil the fun. Ten meters was an endless ocean of signals, with stations dotting the landscape up to around 29.6 Mhz. The flip side of this was that atmospheric absorption and noise were elevated on the lower bands, but the trade off seemed very reasonable to me.
By category, I was a single operator, low power (95W), all band station. My ulterior motive during the contest was to find some new ones, so I was “assisted” in that I kept an eye occasionally on the DX cluster and checked my signal on the reverse beacon network. Most of the time, I cruised the bands, just listening for callers, though. As a “little gun”, I didn’t go a lot of calling myself.
The rig was the K3 and my antennas consisted of my attic antennas: a DX-CC covering 10, 15, 20, and 40m (shortened) and a fan dipole for the lower portion of 10m and 17m (the 17m portion wasn’t used). In addition, I had a chance to use the 80m vertical that I had recently modified. Unfortunately, both 40m and 80m were very noisy, both due to atmospheric noise and local QRM. I had anticipated that 80m would be my secret weapon for working the Caribbean an perhaps Europe, but not so much. The conditions were poor on 80m, and those stations were already doing good business on the upper bands.
The contest was enjoyable for the variety of stations worked, as well as the number: 254. I did log one entirely new DXCC entity: Trinidad and Tobago, and worked a number of countries for the first time on phone, including three consecutive voice contacts with Japan. My final score was 123,467 according to N1MM, which I suppose is good, since I didn’t really have a goal. After caressing the data, here is the list of countries worked: Aland Island, Alaska, Antigua & Barbuda, Argentina, Aruba, Austria, Barbados, Belgium, Bonaire, Brazil, Canada, Canary Islands, Cape Verde, Chile, Colombia, Costa Rica, Croatia, Curacao, Czech Republic, Denmark, Dominican Republic, Ecuador, England, Estonia, European Russia, France, French Guiana, Germany, Hawaii, Honduras, Hungary, Iceland, Ireland, Italy, Jamaica, Japan, Jersey, Latvia, Lithuania, Madeira Island, Martinique, Mexico, Morocco, Netherlands, Nicaragua, Norway, Poland, Portugal, Puerto Rico, Scotland, Serbia, Slovak Republic, Slovenia, Spain, St. Maarten, Saba, St. Eustatius, Sweden, Trinidad & Tobago, Tunisia, Turks & Caicos Islands, Ukraine, Uruguay, USA, Venezuela, Virgin Islands, Wales.
As usual, after the contest, I uploaded logs to Lord-Of-The-Web server, and of course, even one else did the same. I checked back and hour later, and my log had not been processed — it must take a lot of computing power to crunch and correlate that many records. Being the patient type, I checked back another 20 minutes later, and sure enough, I saw a familiar post-contest sight:
In addition to the CQ WW SSB, I shambled-on-out for the 2013 Zombie Shuffle on Friday night. I joined in late because of a Vienna Wireless meeting on Friday night, so I only caught about two hours, from ten to midnight. Twenty meters was dead by the time I got there, and 40 and 80 meters were really noisy. I had six tortured QSOs in all, but I’m glad I had a chance to take part in the QRP event.
As the days grow shorter with the approach of winter and activity shifts towards longer wavelengths, I took stock of my log and noticed that while I have racked up a reasonable number of contacts on 15, 20 and 40 meters, 80 meters lags far behind. I anticipate moving overseas in about six months, but before I go, I’d like to even up the score on 80 meters for this QTH.
My lack of contacts on 80m is a function of my antenna limitations — where I live, I can’t put a lot of metal in the sky. I have one outdoor antenna, a 43-foot vertical; the rest of my antennas are in my attic. My vertical antenna is, intentionally, not much to look at: a single, black wire that runs from the ground up into the top of a tree and is almost impossible to see from a few feet away. However, under the gravel of my backyard, there is a DX-Engineering radial plate. Eight radials spike out underground from that point under my property and into the adjoining forest. The antenna is fed by a coax line that runs underground from the house to that plate, where the center conductor feeds right into the antenna. The antenna was never very well tuned on any specific band, but it managed pretty well on 30 and 40 meters with either built-in or external tuners in the shack. With difficulty, it could tune 15 and 17 meters, and my LDG tuner could force it to work on 80 meters, but the amount of energy actually going out the antenna was pitifully small.
Winding the coil with the help of a vice, some PVC and a couple wood sticks.
So, I decided that for this winter, the vertical would become a dedicated 80m antenna. The attic antennas can handle the other bands. My first thought was to make an inverted L for 80m, but the far end would extend off my property and would increase visibility of the antenna, particularly in the winter when there are fewer leaves for cover. I decided to work with the vertical radiating wire that was already in position, but to interpose a loading coil at the base.
Pete, K6BFA, lent me his MFJ antenna analyzer, and I measured the impedance of the antenna at the point where I anticipated the matching coil would be located. I measured at 3.7 Mhz, a bit higher in frequency than where I intended to operate and the complex component of impedance measured 278j. Since the antenna is a shortened radiator, this would be capacitive reactance, so -278j. I calculated the inductive reactance needed to null it out as xL = Xc/2*pi*freq, or 11.9 uH.
I had made a coil form from Schedule 40 PVC labeled “one and a half” inches, but measured its outer diameter as 1.9 inches. I wanted to wind a coil big enough for the about 12 uH needed above, plus extra so I would have some for shunt inductance (which I guessed would be around 2-5 uH). I figured 18 uH would be enough to have room to spare. Using the formula of n-turns = sqrt(inductance((18 * coil diameter)(40 * coil length)))/coil diameter, all values in inches, I came up with a three inch long coil with about 28 turns. This fit nicely inside the box that I had, so I went with it. Note that the coil shown in the box in the picture was my first attempt, and the coil turned out to be too small. There is a learning curve for this sort of thing, you know.
The coil was mounted on nylon screws and coils were made rigid with epoxy. The coil wire itself was some 18 gauge hook up wire that turned out to be too large for my protoboard, so I am glad it found a good home in the matching coil. The top of the coil goes to the antenna. The coax comes in the side of the box, and initially, I probed the coil to find a good matching point tuning at 3.7Mhz, intentionally above the CW portion of the band, where I wanted to operate. I found the optimal spot to bring the complex portion of the impedance to zero, and then played with the ground lead, trying to find a point lower on the coil that would yield lowest SWR at 3.560 Mhz, the QRP CW watering hole frequency. After playing with the placement of these two leads for a while, I was satisfied with the resulting SWR curve, which is shown below.
I could have shifted the curve higher in frequency, but I really don’t operate much voice, so I made the decision to optimize the antenna for CW and digital mode transmission at the lower frequency end of the band.
Back in the shack, I verified that I got the same measurements and switched the antenna through to my K3. The rig read the antenna as SWR near 1:1, so I made a couple test transmissions and worked stations in Hungary, Italy and Jamaica. I then turned power to 5W and worked a station in NY. It’s anecdotal, but the antenna seemed to be working fine. After calling CQ at 5W, I checked the reverse beacon network and noted that I was greater than 10 dB above noise as reported by stations in W1, W2, W3, W4, W5 and W7, which seems much better than previously.
Making a loading coil for 43-foot vertical antennas (de AD5X)
Winding your own coils (de W3JIP)
Coil inductance calculator (imperial and metric)
While working on a new project, I had a choice of either plugging in the output of a free-standing CW keyer or embedding one into the project. I decided to go with the embedded keyer, but then had to either find or write one. K3NG has written a top-notch keyer based on the arduino platform. Its strengths are its modular design and extensive feature list; it can be compiled to run on a number of chips, with features only limited by the flash memory capacity of the targeted chip. However, it does have a certain minimal size, even when the number of features is stripped down to bare essentials. It would have been a reasonable choice if I could have used the same microcontroller for other functions, with a sizeable portion given over to the K3NG keyer, but in this case, I just want a dead-simple CW keyer.
I’ve used K1EL‘s K12 keyer in the past, as well as the N0XAS picokeyer, and this was more what I had in mind — a low power, small chip. After a quick search, I turned up the YACK (yet another CW keyer) project by Jan Lategahn, DK3LJ. He developed it for the ATtiny45, which has only 4k of flash and even less RAM and EEPROM storage. The project was not developed on the arduino platform, so the code has a much, much smaller footprint. Jan deposited the source code in a svn repository at Source Forge: http://sourceforge.net/projects/yack/. And, this isn’t a matter of trading off features, the YACK supports a number of keying modes, has many configurable features, a beacon mode and even does code practice. Pretty feature-rich, actually.
On that site, it is possible to download not only the source, but the compiled intel hex files for flash and eeprom. Naturally, I went for instant gratification, downloaded these, and flashed them onto the ATtiny using my arduino duemilanove as an in system programmer as previously (but this time, not having to mess with the fuse settings).
I stuck the programmed chip on a protoboard and tried it out. At first I wasn’t sure if it was working at all because it make no sound when powered up, but this was the way it was designed. Next, I tried closing the dit and dah paddles, and heard the expected tone on the piezo buzzer. Holding down either paddle resulted in tones of the correct duration, and holding both resulted in iambic mode B keying. So far, so good.
However, I could not get the keyer to work in command mode. Holding the command key just resulted in rapid clicking on the piezo, perhaps meaning that it was going into and coming out of command mode immediately since it sends an “e” when it exits command mode. Holding the button and closing one or the other paddles resulted in correct behavior: increasing or decreasing the sending speed.
I also noticed that a quick (less than a dit or dah length) tap on the paddles resulted in a shortened dit or dah being sent. This is not the expected behavior for keyers like this. Even if the paddle is released early, the generated tone should be of the correct length, one or three elements long.
Both these issues made the keyer unusable, but it seemed like at least the duration issue had been addressed in an earlier changelog entry, so I thought that perhaps the compiled file might not reflect the most recent and presumably most polished version of the project.
I recompiled the project from source (version 0.7) and noted that the resulting hex file was a bit different in size that the one I had previously used. I loaded both the flash and eep files onto the ATtiny and stuck it back in my prototyped keyer circuit. This time, it worked exactly as described in its documentation. Paddle clicks yielded dits and dahs of the right duration and the command button was fully functional. I ran through all the available commands, and each performed as advertised. I ran the keyer output to my FT817, which I had set to make a tone but not transmit when keyed. I had no problems using the keyer to send at various speeds. All good.
I made some minor tweaks to the code and revised the version to 0.75. This shouldn’t be taken as any sort of official version number, but I needed some way of setting this revision apart from DK3LJ’s original code. I didn’t fix any bugs or make any real improvements, I just optimized the configuration for my purposes. Mostly, this is a matter of taste, and of being used to certain conventions from other keyers. I left most of the user interface alone, though, since I thought Jan had made some very reasonable choices in how he set it up.
Here is a list of what I changed:
- Power up message: Now, when powered on, the keyer sends a “73″ to let you know that it is alive. This is tone-only, no keying. This provides a quick check that the battery is okay and that everything is hooked up right, which could be helpful to anyone building this circuit, or someone who is on their way out the door for field operation and wants to make sure their keyer is healthy.
- Positive Transmit keying default: In most cases, people will want to positively key their rigs, but the default formerly was that the transmit line would go low to key and remain pulled up to VCC otherwise. I flipped this around, which let me use a cheap NPN circuit with open collector to key.
- Side tone: For the project that I’m using, a 700Hz side tone is optimal — the keyer is followed by a filter with a 700Hz center frequency, so I changed it in the default settings. I actually prefer 800Hz, but the tone can be changed on the fly, so this isn’t really an issue.
- Keying mode: This is entirely personal preference – I made the default keying mode iambic A rather than B, because I think it is easier for someone accustomed to Iambic B to send A rather that the reverse. People who are used to iambic A are thrown by the “extra” character that B generates.
- Speed: I bumped the default speed to 15 wpm. Maybe 12 wpm is more inclusive, but 15 wpm works better. Also, anyone can increase or decrease the speed by holding the command button and pressing one paddle or the other. It is not necessary to send a character correctly to change the speed, so I think I haven’t really excluded slower operators.
- Exiting command mode sound: Previously, the keyer sent an “e” to indicate that someone intentionally exited command mode by tapping the command button a second time or that the command mode had timed out due to inactivity. I found the “e” a bit short and thought it could be missed. Also, at times I forgot I was in command mode, and whatever else I was doing, it just sounded like an extra dit got in there, without making much sense. I changed the exit sound to “sk”, similar to the picokeyer, because it has a more characteristic sound and would not be expected in the audio stream except at the end of a QSO, so it is more noticeable.
- Acknowledgment sound : After a valid command is given, the keyer used to acknowledge it with an “OK”. I changed this to “R” because it is shorter and “R” connotes “Roger, received.” This borrows a bit from the K1EL keyers. I only steal from the best.
After testing out my minor revision, I uploaded the project to a repository at google code. The project files include a schematic in Eagle format as well as a picture of the schematic as a *.png file. For those who would rather not compile from source, I’ve uploaded the compiled intel hex files on this server: main.hex and main.eep. I loaded the files into a stock ATtiny45, right out of the box. No need to mess with any of the fuses — the chip is factory configured to run on its internal 8Mhz clock, scaled to 1Mhz.
The last time I checked on mouser, these chips were a bit over a dollar each and the even more spacious ATtiny85s were a bit less — and that’s unit pricing — buy a bunch and the price falls off considerably. The rest of the components in the keyer are dirt cheap and easily substituted. Making a first-rate keyer these days is not an expensive proposition.
Arguably, the crossed bananas display (CBD) was not the next most needed accessory in my shack. I mean, who needs a crossed bananas display, anyhow? Nonetheless, I built one, and it seems to be working.
The CBD is a tuning aid for frequency-shift keyed modes. At one time, these displays were particularly in vogue among RTTY operators. The original version made use of an XY-mode analogue oscilloscope. The demodulated sound from the radio was filtered at the mark and space frequencies and each signal was then fed to either the X or Y input of the scope. Ideally, the tones would be sine waves, and when one tone would be sent, the other would be off. Each tone corresponds to a “banana” or oval on the XY display. The oval is horizontal for one tone and vertical for the other. When the radio is perfectly tuned, the two tones are located right on the two filter center frequencies. When a RTTY signal is sent, or even while it is idling, there is rapid alternation between the two tones, so the vertical and horizontal ovals appear so quickly that they appear to overlap, hence crossed bananas. When the radio is a bit off frequency, the phase relationship changes and the traced ovals rotate and distort. When only noise is present, the tracing is a random jumble. It’s easier to see this in action than to describe it, so I made a video of how it looks on an oscilloscope and how it looks on my newly minted digital CBD.
I got thinking about RTTY and some other similar modes after working on the PK232 mentioned in earlier posts. The PK232 has a little bar graph that indicates when a signal is centered such that the mark and space tones fall where they should, be it for RTTY, AMTOR, PACTOR I, etc. A lot of the circuitry in the PK232 is dedicated to producing and sensing these tones and telling them apart from noise. The bar graph tuning indicator is usable, but let’s face it, nowhere as cool looking as the old style crossed bananas displays on an oscilloscope.
My operating position is already cramped enough, though, without tossing an oscilloscope on the pile, plus I need my scope for bench work and don’t have an extra one that can just relax in a corner until it is needed for RTTY. No, what I needed was a small, modern version of the crossed bananas display. This sounded like a good arduino project. The limiting factors would be timing of the audio samples and speed of updating the display.
My first thought for the display was an LED matrix, preferably one with minimal translational overhead. If the microcontroller could drive it directly or through a shift registers, that seemed like it would be lightning fast, and indeed it probably would be. Unfortunately, to get reasonable resolution, I’d probably need a pretty big array. 8×8 is chunky, but we’re already talking 64 LEDs.
So, with some concern about the data transfer and display/buffer update speeds, I took a look at some LCD displays. I found the ST7735R display at Adafruit. It’s 1.8 inches diagonally, with square pixels arranged in a 128 x 160 array. The display comes on a breakout board that makes it easy to work with, taking care of voltage conversion and making it an SPI device. The display includes a video buffer and Adafruit provides a library that abstracts most of the lower level functions. Adafruit also provides a general graphics library that provided methods for most of the things I wanted to do like drawing a pixel, erasing a pixel, writing text, blanking the screen, etc.
The sound coming out of the PK232 turned out to be biased around 7.5V, with swings of +/- 1.25 and 1.5 volts depending on whether it was being driven by the ACC output of my Yaesu FT-817 or Kenwood TS-450, which must output different levels. Each tone was capacitively coupled to an op-amp channel set up as an inverted amplifier with variable gain. A ganged potentiometer sets the gain between unity and 2x. I used an MC33204PG quad op amp. Of the op-amps I had on hand, it was the best single voltage nearly rail-to-rail chip. I used the third section of the op amp configured as a voltage follower to set the bias voltage at 2.5V for the mark and space op amp sections, so only one out of the four op amp sections was left to twiddle its thumbs. With that bias and input range, the output of the op amp would stay in a reasonable range, nearly 0-5V, consistent with the requirements for analog input on the ATmega328.
In principle, the XY display plots a point defined by an X-input and Y-input at a single instant, so one concern I had was that there had to be minimal separation between the mark and space voltage reads. I minimized this interval by setting the ADC prescaler to 16, trading off some accuracy for faster acquisition time. Without this tweak, the display was distorted due to delay artifact in the phase relationship of the two inputs.
|Front and back view of the innards of the crossed-banana display
After displaying the self-congratulatory splash screen, the main activity is to read an XY pair, scale it, and plot it. Given the speed of this process, more than one pixel needs to be displayed at a time to create a reasonably bright display. The solution is to use a circular buffer and to draw one pixel, erase the next pixel in the queue, and crank the index forward by one. This only gets complicated if the size of the queue varies arbitrarily, which is exactly what happens if you twist the brightness potentiometer. The brightness pot is polled every now and then, and when its value changes enough, the size of the queue is modified up or down, resulting in more or less pixels displayed at any one time, and giving the impression of brighter or darker display. When this happens, the size of the queue changes, so there is some housekeeping to do to make sure that all the pixels are taken care of.
The design has one more control, but it’s inside the box in the finished project. The LCD display has a huge range of colors, but having a rainbow XY display was not appealing. I incorporated a dip-switch on the control board, with three bits dedicated to color selection and one to choosing black versus white background. I didn’t think color would be adjusted frequently, so I though it would be okay to leave this control off the front panel. I set my CBD to green dots on a black background, as close as I could get to the appearance of a classic oscilloscope.
|The aluminum box, before painting, decals, etc.
My metal working facilities are limited, so this project went into the same sort of enclosure as the NEScafe filter, a cast-aluminum bud box. I bought these in bulk to save shipping at one point, so I suppose we’ll be seeing more of them in future projects as well. At first, it seemed that this box was way too large for this project, but when I started thinking about all the items in the project (LCD panel, control board, two pots, two RCA jacks, a switch, power pole connectors), I became concerned that it all might not fit.
Since I don’t have the patience to send away to an offshore fab facility for a one-off PC board (and since it would likely take more more than one to get it right), I laid the project out on vector board, with some forethought to how it would mount in the bud box and where the screen, controls, and various connectors would emerge. To fit everything in, I had to pack components tightly and cut out two notches in the board to clear wiring runs. Once again, small nylon spacers from Ace Hardware were my friend, providing stand-offs for the screen and for the control board. A layer of clear plastic provides some protection for the glass LCD display. The plastic is pinned at four corners by the control board stand-off screws, but also held in place with some double-face tape.
|Contents stuffed into the box.
Since every project justifies one hardware purchase, my purchase for this project was a manual screw countersink from Carr-McMaster. It allowed me to use screws on the front panel, but have them flush with the surface of the panel.
The square window for the LCD was roughly cut out with a dremel rotary tool and then carefully finished with a flat file. The rest of the holes were made with a stepped drill bit, except the power pole hole on the back which I made by pin-holing the metal with a bunch of drill holes, widening with a nibbler, and finishing off with a small file.
I posted the code for this project, the schematic and picture of the vector board layout at https://code.google.com/p/crossed-bananas-display/.
I followed the instructions to set up a breadboard as a platform to burn bootloaders onto some factory-fresh ATmega328 chips, according to instructions. Specifically, I set up the breadboard with a 16Mhz crystal rather than using the chip’s onboard clock.
I uploaded the ArduinoISP sketch my Duemilanove, made all the right cross connections to the breadboard, changed the “programmer” setting from AVR-ISP mkII to “Arduino as ISP” and made sure that the target was still set to Duemilanove at 16Mhz. Then, I hit “burn bootloader”. There was a pause of a few seconds, followed by the following error message in the IDE:
I found some similar issues and suggestions on the forums, and it seems the problem is the autoreset on the Duemilanove. The solution: before trying to burn the bootloader, connect the Arduino’s reset to 5V through a 120 ohm resistor. Now, when you select “burn bootloader” lights immediately start flashing on the host arduino and after a few moments, the IDE displays a confirmatory message that the operation was successful. Now the target ATmega328 can be popped off the breadboard and another one can be burnt. After burning bootloaders onto as many chips as desired, the whole assembly can be taken down and the 120 ohm resistor removed from the host arduino board.
I am strongly in favor of having a standard connector for powering everything in the shack, not only for the sake of EMCOMM deployment, but also to avoid having a rat’s nest of proprietary connectors strewn behind the operating desk. Consequently, whenever I build something, I include power pole connectors (see, for example, the NESCAF filter project). The quick and dirty way is to poke a hole in the box and run a power cable out for some length and then crimp on the power pole shells. This works okay, but is not all that neat. What I’d really like to do is mount the connector right on the box. That way, any power pole patch cord could run between the device and a power distribution strip.
Unfortunately, there is no reasonable way to mount a single power pole connector on a panel. There is a nice snap-in connector for two pairs of power poles, but if you want just one pair, which surely must be the most common configuration, there is no ready-made piece that will snap into a hole.
The only option offered commercially is slightly insane: a pair of aluminum brackets that trap the connectors above and below. Each bracket is held in place by a single screw hole, which gives them some tendency to rotate on the screw, although the plastic shells themselves more or less wedge everything into position when both screws are tightened down. To make this solution work, a rectangular hole must be machined into the panel and then screw holes must be drilled at the right spot. Worst of all, these little clips sell for an insulting $2.49 per pair.
As mentioned in the user comments on the powerwerx website, it’s crazy that no one, much less the primary retailer, has offered a product to make this easier. The obvious product would inset the pair of connectors into a round holder, so that the pair could be installed and perhaps screwed into place by drilling one large hole for the assembly. If ever there were a product that needed 3D printing, it would be a panel mount adapter for power pole connectors.
Alas, having no 3D printer, nor for that matter any tools that were really appropriate for the job, I went the primitive route and made my own power pole brackets out of aluminum. I had recently built a couple projects in plastic Radio Shack project boxes that come with both an aluminum and plastic cover. I had opted to use the plastic cover, which left me with a spare aluminum one, which measured out as 19 gauge. I don’t have a sheer, and this is a bit much for my aviation snips, so I made some measurements, scratched out the lines with an awl, and traced over the lines with a cutting wheel mounted on a dremel. I didn’t cut all the way through, but scored the aluminum deeply enough that it snapped on the lines with a bend back and forth. I then went over the edges with a sanding wheel to take off the burrs and smoothen the corners.
Working from one of the real brackets, I measured the dimensions to the neared 64th of an inch. I’d prefer metric, but I have the impression that it was originally laid out in imperial units, so I stuck to those. Luckily, the two cut-outs for the power pole shells are 1/4″ each, which is exactly the size of my nibbler. Two nibbles were enough to make the cut-outs deep enough, and nicely square.
Finally, I drilled a hole for the mounting screw and made sure that the brackets would actually fit correctly over a pair of power pole plugs. The brackets are not as uniform as those rolling off an assembly line, but the price (and availability) are right. Since they are all a bit different, when making an actual project, I’d drill and file the rectangle for power pole pair and then fit the brackets around them into final position in order to mark the exact location of each drill hole.