Homefront

This is not going to be a particularly pleasant post to compose, but I feel that I owe it to those of you who I interact with regularly to give you some kind of status update. Pardon the light use of uncouth colloquialisms.

As of right now, I am not able to publicly be specific about certain aspects of this situation, as it involves someone other than myself. There may be a time when I am able to share more of the story. Maybe not. I'm not trying to be coy in order to build mystery for sympathy points. There are plenty of terrible people on the Internet, and I want to have a firm grasp on the situation and have my emotions in check before I decide when or if to give specifics on a public blog.

Our household has been hit with some really big, life-altering news. Our family is still intact, no one has passed away, but things are going to be different from now on. It's not catastrophic, but it does alter our course going forward fairly dramatically. No one has wronged us; it's just one of those things that the universe dumps in your lap.

Allow me to rewind a bit. Things were already on shaky ground here over the last month or so between a combination of being a lousy friend to people who I care about and having what felt like a lot of my support system outside of my family seemingly blow up. Momentum on the OpenBeacon 2 project was building up to a good tempo, and then hit the brick wall.

On top of that, I was getting to the point where I could not countenance the absolute torrent of bullshit on what used to be one of my favorite hangouts on the 'net: Twitter. The SNR in my timeline had taken a huge plunge over the last few months, and I had noticed that many of my favorite accounts had gone fully or mostly quiescent. It was getting to the point where I was getting outraged nearly daily it seemed, yet I kept coming back for more hateclicks. It dawned on me that this is not a healthy behavior. (Now I really understand why online journalism is in a race to the bottom with their constant shitposting.) As I've said before, my emotional intelligence may not be great, but even this fool got it after being bludgeoned enough times.

I removed all of my Twitter apps, closed all pages, and disabled all notifications. Done. Haven't looked at it for weeks now. There's a good chance that some of you have tried to contact me there and have heard no reply. I apologize for that. I just can't let myself get sucked back into that miasma right now. If I haven't already alienated most or all of my online friends, I can still be reached via the usual email.

Allow me to say that it has been pleasant to claw-back all of that wasted time from the social media timesuck. I've been able to spend more time reading novels, working, and pursuing educational goals. I'm not going to delete my Twitter account as I want to keep it as an archive, but between my feelings about the medium and the above-mentioned situation, I don't foresee myself actively participating in it any time soon.

To bring it back to where things currently stand, priorities by necessity are going to undergo a large reshuffling. I don't know exactly what the extent will be yet, but I should have a handle on things in a month or two. This includes Etherkit. I'm not sure what form the business will take in the near future, but it will have to change or die. I've got some decent work for Etherkit in the pipeline mostly done; it would be a shame to have to put things to bed before it fully came to fruition. I'll be putting out feelers for assistance and guidance. For now, I'll still continue to sell the Si5351A Breakout Board.

It's one of those times when you have to reassess a hell of a lot of things in your life. I'm laying low because I don't want to make further missteps. I hope that those who know me forgive me for going radio silent lately. I'm having one of those uber-introvert moments where I really need some time to gather my energy before reengaging. I imagine I'll ease myself back into some more blogging on the nominal topic soon enough; the volume of output depending on how things shake out in the priorities department.

Be excellent to each other.

Low Carb Cream Cheese Pancakes

I know this departs from the usual fare, and I have no idea if this will interest any of my readers, but I figure at the very least it will be a good reference for me in the future. I'm living the low carbohydrate lifestyle and while I get along pretty well without having to resort to some of the bizarre low carb versions of normally carb-laden recipes, sometimes I still get the occasional craving for old comfort foods.

Frankly, quite a few of the low carb copycat recipes just aren't that good, and I don't usually make them a second time after my first try. However, I tried this low carb cream cheese pancake recipe and it was one of the few that I liked at least as much as the original, if not better (by the way, that linked site has lots of good low carb recipes). The taste was great; more egg-like than a typical pancake (it's probably more akin to a crepe to be honest). There were, however, a few issues with the recipe. The pancakes were extremely thin and flimsy, and hard to keep intact while cooking. Also, even though the pancakes were quite filling, I wished they had a bit more volume, perhaps just for the psychological effect.

After a bit of experimentation, I believe I have stumbled upon a nice variation of the above recipe. The addition of a bit of baking powder fluffs up the pancakes a bit to add that volume. I also tried a bit of xanthan gum powder (not something many people have sitting in their kitchen cabinet, but useful) to help thicken the batter for cooking, and it seems to have helped a fair bit in that regard. When I cook a batch, I get many fewer torn pancakes than I did with the original recipe. They are still a bit fragile, but not nearly as much as the unmodified version.

So here's my version of low carb cream cheese pancakes:

6 large eggs
6 oz cream cheese (room temperature)
4 packets stevia
1/4 tsp cinnamon
1/4 tsp baking powder
1/8 tsp xanthan gum (optional)

Set the cream cheese out at room temperature a few hours before cooking so that it is soft at the time of preparation.

Place all of the ingredients into a blender and blend on the highest speed for 2 minutes. Let the batter rest for at least 5 minutes before cooking.

Cook in an oiled skillet or griddle at medium-low heat. Pour enough batter to make 6 inch to 8 inch diameter pancakes. Flip carefully when the first side is cooked.

Serve with butter and sugar-free syrup.

Approx. 6 grams of carbohydrates for the entire batch.

Here are a few tips for cooking these pancakes. It's important to use a nicely prepared non-stick cooking surface, as these pancakes are a bit fragile. I use a well-seasoned cast iron skillet, although I imagine other types of non-stick pans would work as well. I prefer cast iron, for its heat storage properties and because I can use my favorite weapon of choice, instead of a plastic spatula.

The key is to keep the heat nice and low so that the pancakes can cook slowly. Let most of the cooking be done on the first side so that the pancake will stay intact when you flip it. It will probably take a few tries to get it right, so don't be surprised if your first few pancakes get mangled.

IMG_20160312_190547

 

Even if you aren't eating low carb, if you would like a more savory breakfast pancake, give this one a try. It's a hell of a lot healthier than pancakes composed of white flour and sugary syrup!

More Strange Attractors

As I mentioned toward the end of my post on the Python/GTK+ implementation of the Lorenz attractor, I ultimately wanted to add some of the other strange attractors to my program in order to make it a bit more interesting. So I did just that. It also gave me a good excuse to learn a bit more about how to use and layout widgets in a GTK+ application.

In addition to the Lorenz attractor, the program now will generate the Rössler Attractor and a plot of the behavior of Chua's Circuit. The Rössler Attractor is another well-known system in the world of chaos theory, which you can learn more about by following the above link. Since I'm only plotting a 2D section of each attractor, I have to decide which view to display. In the case of the Rössler, I thought that the X-Y view was better than the X-Z view.

More interesting to me is the simulation of Chua's Circuit, as this is based on an actual analog circuit you can build. The circuit is a chaotic oscillator that consists of the usual L-C elements (and a resistor plus limiting diodes) along with a nonlinear negative resistance circuit element. The negative resistance element is usually implemented with an active device such as an op-amp, although it has been reported that a memristor can also serve this function. The simulation is a system of three ordinary differential equations, much like the Lorenz or Rössler systems, but with a function in the first ODE to represent the behavior of the nonlinear negative resistance element. You can see in the code listing below that this was easy to implement in Python with a lambda function. It's cool to see the pattern drawn on a display, but I think it would be much better to have an actual circuit render it on an analog oscilloscope. One day, I hope to do that, but in the mean time, enjoy these videos of the behavior of such a circuit.

As far as my additions to the Python code, I created a GTK DrawingArea for each attractor, then added them to a Stack, which allows them to be switched with the StackSwitcher widget at the bottom of the screen. For clarity, I also added a legend to each DrawingArea to display which axes are being rendered for each attractor, as the Rössler has a different view from the other two. This code is a bit longer than the initial iteration, but much of it is similar, since the calculation and plotting of each system is nearly the same (yes, I could have factored the code quite a bit, but this is just for fun). Another fun time with code was had!

New Monday

It's hard for me to believe, but it has been more than 30 years since the release of Blue Monday by New Order. I always loved that song as a kid, and it still holds up quite well in my opinion. (In related news, holy crap, I'm getting old). Here, from the mysterious Orkestra Obsolete, via BBC is a retro-future rendition of the electropop classic, featuring all manner of unique instruments available from the 1930s, including the theremin. Some boatanchor electronics goodness in this video, and the music is entertaining as well. I quite enjoyed it.

Lorenz Attractor in Python

Back in the day, when I was a budding nerd in the late 80s/early 90s, I spent a lot of my free time down at the local public library looking for any books I could find regarding certain topics which captured my interest: programming, astronomy, electronics, radio, mathematics (especially the recreational mathematics books), and other topics in the realm of science.

One of my fondest recollections of that time was how accessible that home investigations into some of these topics became due to the advent of the personal computer. Of course, in those times, not every household had some kind of computing device like they do today, but PCs were affordable enough that even a lower middle class house like ours could scrape together enough for a computer with a bit of work.

We also didn't have widespread household Internet, so your options for getting new programs to play with were limited to the relatively expensive services like Compuserve, trying to find warez on bulletin board systems, checking out books and magazines with program listings from the public library, or perhaps if you were lucky, being able to check out a stack of 3.5 in floppies from the library (how were they able to do that with commercial software?). Of course, given the previously mentioned socio-economic status, I was mostly limited to the public library option. Although perhaps some day I'll tell the tale of how I talked my parents into letting me get Compuserve, and then proceeding to rack up a huge access bill on my parents' credit. Oops.

Of particular interest to me was the relatively new field of chaos theory and fractals. These studies were conceived a bit earlier than this time period, but were popularized in the public eye during this time. I got hooked in by the photos published in the groundbreaking books The Fractal Geometry of NatureChaos: Making a New Science, and The Beauty of Fractals. There were also plenty of articles in publications like Scientific American and the books of authors like Clifford Pickover. The wonderful thing about these resources is that many of them not only showed you the pretty photos of fractals and chaotic systems, but actually described and illustrated the algorithms behind them, which allowed you to code your own implementations at home.

During my early work in trying to recreate these forms in my own computer, I had an Atari 800XL with a dodgy floppy disk drive, which made any kind of coding a bit of an adventure as it seemed like my mass storage old successfully worked about half of the time (on a side note, who remembers the even earlier days, where you would type in a machine language monitor program in BASIC, and then transcribe strings of ML from a listing in a magazine in order to get a new program...good times). Things really got serious when we ended up acquiring a Tandy 1000 (I believe the RL version, but I'm not 100% certain about that). Once we had that in the house, I spent many late weekend nights trying to write code to reproduce the fascinating patterns found in the pages of those books. You know you're a true nerd when you get such an electric thrill from finally mastering the code to generate a Sierpinski triangle or Barnsley fern in glorious CGA on your own monitor.

So what's the point of this overwrought bout of nostalgia? Well, I was recently pining for the old days when you could just sit down at the PC and implement a chaos system in one quick setting with minimal fuss. Compiled languages with arcane GUI frameworks were right out. Fortunately, we are blessed with quite a few good replacements for the old BASIC environment. My favorite is Python, and since I use Linux Mint as my primary desktop OS, the GTK+ 3 libraries for Python are already included by default, so it's quite easy to get a rudimentary 2D graphics system up and running quickly.

For my first chaos system coding challenge, I decided to go with the great-granddaddy of chaos: the Lorenz attractor. It's an easy system to compute, and it's quite obvious if you get the implementation right or wrong. Once I got the hang of the GTK+ 3 library interface, it didn't take that long to bang out an implementation of the Lorenz attractor in relatively few lines of Python. The simplicity is satisfying, and reminds me of the fabled old days of coding.

There's the code if any of you would like to play around with it. It should be fairly easy to replicate if you are using any of the Debian-derived Linux distributions, and probably only marginally more difficult with other Linux distros. I have no idea what it would take to get running on Windows, so good luck if that's your OS of choice.

Now I have a framework to build off if I get a further itch for similar experiments. I'm already working on an extension to this code that will render other attractors. It would be fun to find a 3D rendering library that would be easy to use so that I could plot in three dimensions, but that's not hugely critical to me. This is just an exercise to have some fun, capture a bit of that nostalgia, and distract myself a bit during downtime. Hopefully a few of you kindred souls will have derived some enjoyment from this trip down memory lane.

Long Time, No See

I know. I was just starting to get some momentum posting to the blog on a semi-regular basis, and then — the drop off.

I am sorry about that. The Si5351A Breakout Board campaign consumed almost all of my work time. Given the limited amount of actual work time that I have, something had to give. So unfortunately it was blogging.

There's also a bit more unfortunate news, as well as good news. The bad news is that I don't foresee having the time to post as many posts as I would like, so for now, content will slow a bit. The good news is that is because I will be focusing my blogging efforts into the brand new Etherkit App Notes site at appnotes.etherkit.com. I'm going to be working hard to supply fun DIY projects that you can build using Etherkit products, starting with the Si5351A Breakout Board, and involving other Etherkit products as they come online.

In the meantime, it's been very heartening to see all of the neat ways in which people have been incorporating the Si5351A Breakout Board into their own projects. For example, here's a wonderful blog post and video from Mike N2HTT about how he constructed a multi-band VFO using the board and a 128x64 OLED display. I also received this link from Milan about how he use the board to clock his DVB-T dongle for SDR reception. It allowed him much greater frequency accuracy, as well as a way to slightly shift the ref osc frequency in order to see which signals are external and which are internally generated. All very neat stuff!

I won't let this blog completely fade, but I will be putting most of my effort in to Etherkit-related work, so that's where you'll need to look to find most of my new content. Thanks for reading!

The Si5351A Breakout Board Campaign is Here!

I'm pleased to announce that I've opened up the Etherkit Si5351A Breakout Board campaign for contributions! Please stop by our Indiegogo page to get much more information on what we are offering, and how you can help to support us even if you don't plan on purchasing a kit. We did a soft launch yesterday afternoon on Twitter and had a phenomenal response! We hit our initial goal of $500 of funding within about 6 hours of my initial Twitter post indicating that the campaign was open. With any luck, we should be able to hit the stretch goal by the time that the 30 day campaign has elapsed.

I would like to sincerely thank everyone who stepped up early to back our campaign and those who took the time to retweet, blog, and post about our campaign to listservs and other influential media people. I am utterly humbled by the level of support out there.

Update: As of 1600 UTC 12 Jan 2015, we have made the front page of Indiegogo as a trending campaign! Thank you to everyone who has supported us!

Indiegogo: Global Crowdfunding Engine to Fundraise Online - Mozilla Firefox_041

Update: As of 1830 UTC 12 Jan 2015, we hit the stretch goal. Less than 24 hours after launching the campaign. We are doing better than I expected! Time for me to get coding soon. 🙂

Si5351A Breakout Board | Indiegogo - Mozilla Firefox_043

Si5351A with TCXO Update

Just a few days ago, I finally received some of the TCXO parts that I've been planning on using with the Si5351A Breakout Board. I had no problem using one on the remaining prototype circuit board that I have, and at first glance it appeared quite stable and also very close to the nominal frequency (my correction factor for this one was only 8 Hz at 10 MHz).

Direct comparisons are always the best way to do things, so I ran the Si5351 with TCXO through my thermal chamber at the same profile that I did in the last test in my initial blog post. Rather than write a whole new blog post, I updated the original post to keep that data together, which will be handy for future reference. Go forth and look at the update at the bottom of the original post. Thanks!

Wideband Transmission #6

Happy New Year 2015!

2014 was a bit of a mixed bag here. It's been a transition year for Etherkit, as I reorganize and reorient the business for a renewed push to get the CC1 and other new products to market. I believe that good things are beginning to happen there.

On a personal level, my two boys have been doing fantastic. Noah started preschool and is really enjoying it. Eli is at a bit of a difficult age (the Terrible Twos) and is between baby and little kid, but he's got an amazing personality and is growing up so quickly. Jennifer and I celebrated five years of marriage and 11 years since our first date! Things haven't been perfect in the extended parts of our families, but at least in our household we've all been pretty healthy and have been able to enjoy many blessings.

Si5351A Breakout Board Campaign

There have been a fair number of neat projects I've seen using the Si5351A Breakout Board that I posted on OSHPark, along with my Si5351 Arduino library, which is absolutely wonderful. However, I realize that it's a pain to order PCBs and all of the parts separately, and that a kit or a finished board would be ideal.

I've decided to try something new in order to bring the Si5351A Breakout Board kit to market: we're going to try crowdfunding the first batch of kits. I'm going to set a modest goal to trigger the funding, but all orders will be welcome over the goal amount. In fact, I intend to set a stretch goal at some higher funding level to devote a certain number of hours to improving the Si5351 Arduino library, including:

  • Add tuning from 8 kHz to 1 MHz
  • Add tuning from 150 MHz to 160 MHz
  • Fix the bug that does not allow output over 125 MHz
  • Implement access to the phase register
  • Implement sub-Hz tuning for modes like WSPR
  • Other bug fixes

I also intend on lowering the BOM cost by removing the broadband output transformers, and offering multiple variants of the kit, including the option to add SMA connectors and a TCXO. I'm composing the campaign on Indiegogo right now, and I'm shooting for a launch in about 10 days. I'm hoping to gain experience with this campaign with the goal of using it to fund CC1 kitting later in the year.

Why am I telling you this now? Because I would like to let those of you are are interested in purchasing one (or otherwise interested in supporing Etherkit) get advance notice so that you can order on the first day that the campaign goes live. This will help to give the campaign more momentum and perhaps help to spread the word further. I will be sure to make a blog post here when the campaign goes live and tweet about it as well, so keep an eye on those channels if this is something that intrigues you.

Simple WSPR Transceiver using Si5351A

I came across this simple WSPR transceiver from KC3XM driven by one of my Si5351A Breakout Boards via @wm6h and Dangerous Prototypes. The WSPR transmitter is simply a BS170 driven by one of the Si5351 outputs, which is buffered by a logic gate and keyed by a standard PNP keying switch. Control of the Si5351 and keying of the transmitter is performed by a plain vanilla Arduino Uno (the code has been posted to GitHub).

This looked so simple to build that I had to give it a try. I quickly built up the transmitter portion, tacked on a 10 meter LPF (the original version is for 30 meters), modified the code for my callsign and grid, and changed the Si5351 output frequency to the 10 meter band. The transmitter put out nearly exactly 1 watt of RF (with only about 1.2 watts of DC input total) into 50 ohms and ran quite cool. Hooked up to my Moxon, it had no problem generating spots when pointed east and started on an even minute so as to properly synchronize. Fun stuff!

Generating PSK with an Arduino

If you haven't been following the blog of KO7M, you should be. Jeff has been doing a lot of experimentation with with NB6M and other home experimenters in Washington state, especially with stuff like the Minima and using microcontrollers in ham radio projects.

Lately, Jeff has been working on getting an Arduino to output PSK audio. He has a series of recent posts about it, but these two are probably the most important. The character timing is not quite right yet, but the basics of how to generate PSK via PWM audio signals are here. Good stuff!

Si5351 and Raspberry Pi

Another really great homebrewer blog is M0XPD's Shack Nasties (oh you Brits and your silly names) blog. Paul has been doing a lot of work with the Si5351 as well, and his latest post about the Si5351 is details of how he interfaced it with the Raspberry Pi. Excellent information to have, as the RPi is of course much more powerful than your garden variety Arduino.

Si5351A Investigations Part 8

In looking through the analytics here on the blog, I noticed a search term that has been regularly coming up near the top: Si5351 crosstalk. Realizing that I haven't yet presented data on this, it seemed like a good time to knock this one out, since it isn't that difficult of a measurement to make.

It appeared to be a wise idea to choose output frequencies that were non-harmonically related, so I decided on the following outputs:

  • CLK0: 22.444555 MHz
  • CLK1: 10.140123 MHz
  • CLK2: 57.456789 MHz

Each output was set to the maximum 8 mA current and each one was locked to PLLA, which was set at 900 MHz.

The measurement procedure was simple. I connected the spectrum analyzer to each output sequentially. The unused outputs were terminated in 50 Ω. For each measurement, I used a delta marker to measure the difference in amplitude between the desired signal from that output and the frequencies of the other two outputs.

Without further ado, allow me to present the spectrum analyzer plots.

Output port: CLK0 Crosstalk signal: CLK1
Output port: CLK0
Crosstalk signal: CLK1
Output port: CLK0 Crosstalk signal: CLK2
Output port: CLK0
Crosstalk signal: CLK2
Output port: CLK1 Crosstalk signal: CLK0
Output port: CLK1
Crosstalk signal: CLK0
Output port: CLK1 Crosstalk signal: CLK2
Output port: CLK1
Crosstalk signal: CLK2
Output port: CLK2 Crosstalk signal: CLK0
Output port: CLK2
Crosstalk signal: CLK0
Output port: CLK2 Crosstalk signal: CLK1
Output port: CLK2
Crosstalk signal: CLK1

I thought that perhaps these measurements would be a best-case scenario, and that leaving the unused output ports unterminated might produce even worse performance, but it turns out I was wrong. Below are the same measurements, but with an open circuit on the unused ports.

Output port: CLK0 Crosstalk signal: CLK1
Output port: CLK0
Crosstalk signal: CLK1
Output port: CLK0 Crosstalk signal: CLK2
Output port: CLK0
Crosstalk signal: CLK2
Output port: CLK2 Crosstalk signal: CLK0
Output port: CLK2
Crosstalk signal: CLK0
Output port: CLK1 Crosstalk signal: CLK2
Output port: CLK1
Crosstalk signal: CLK2
Output port: CLK2 Crosstalk signal: CLK0
Output port: CLK2
Crosstalk signal: CLK0
Output port: CLK2 Crosstalk signal: CLK1
Output port: CLK2
Crosstalk signal: CLK1

I'm not quite sure what to make of that. In practice, I haven't seen any problems in my receivers so far that I can trace back to crosstalk from adjacent channels. Of course, this probably won't do in a higher-performing receiver, but if you wanted to use the Si5351 in such a receiver perhaps you could find a way to put two or more on an I2C bus at the same time, then use only one output from each. My advice would be to turn off any channels you are not currently using, just to keep the other outputs clean.

I have no doubt that this data will be more ammunition for those who are convinced that the Si5351 is a terrible LO. I stand where I always have: this is an excellent IC for the price and you are hard pressed to find such capability and stability for such a low price anywhere else. If, knowing its limitations, the Si5351 meets your needs, then excellent! If not, that's fine too. Neither I, nor anyone else I have heard, has suggested that the Si5351 is a panacea or a substitute for a better oscillator such as the Si570. It's another tool to be put into our toolbox in the quest to stay relevant with the march of technology.

Quite a bit of work has been done in quantifying the performance of the Si5351 for amateur radio use, within the limitations of our modest home labs. Something that you don't see done with a lot of other new components these days. Have I made mistakes or overlooked some things? Almost certainly. I'm still learning how to apply a strict measurement discipline over all of my serious building activities, so this is a learning process for me as well. If you have some constructive criticism of any of my measurements or feel that I have neglected things, I absolutely welcome an email or comment on the blog. Let's try to hold ourselves to high standards as home experimenters without being unduly negative, as many of us continue in the journey of RF experimentation.