Posts Tagged Tools
I was able to succeed in building Swift and Foundation for Ubuntu on ARMv7. This includes the Beagle Bone/Board, the Raspberry Pi, Tegra TK1, Cubox, and so much more…
This is more-or-less alpha-level at this point, but you should be able to compile and run basic swift programs that use the standard library, Glibc, or Foundation. Keep in mind that, even for x86_64, Foundation is far from complete.
To install, you can either un-tar in your root directory (which will install into /usr) or, create a new directory in /opt (for example /opt/apple, or /opt/swift) and update your paths. If you choose to install into /usr you’re running a much greater risk to your system, and you had better be willing to re-install if from scratch!! 🙂
Once it’s installed, give swiftc a try:
wdillon@arm:~$ cat hello.swift print("Hello world!") wdillon@arm:~$ swiftc hello.swift wdillon@arm:~$ ./hello Hello world! wdillon@arm:~$ uname -a Linux arm 4.1.12-ti-r29 #1 SMP PREEMPT Tue Nov 10 00:38:08 UTC 2015 armv7l armv7l armv7l GNU/Linux wdillon@arm:~$
If you want to contribute to the effort, there are still a few tests that fail in stdlib that could be addressed, the swift package manager still doesn’t work, lldb doesn’t work, Foundation isn’t finished, and it would probably be pretty great to have swift wrappers for GPIO pins and peripherals (such as SPI, I2C, etc.)
For my birthday, my entire family chipped-in and gave me most of the money to buy a (relatively) cheap laser cutter directly from China. I had seen several Hack-a-day articles about these machines, and I’ve got experience with 3D printers, so I thought it was something that I could handle. Boy, did I have a lot to learn.
To begin with, I looked around on eBay and Alibaba. I noticed that 90% of the ~$1000 units are almost identical. There are occasional small differences such as pointing laser, whether it has a spring loaded “work clamp,” whether it has a raising-lowering bed, etc. I found one that claimed to have a larger bed than any other that I’d seen (mistake #1). I don’t know why I accepted that a machine that looked like every other machine out there would have magically increased the work size, but I did, and it doesn’t.
Because I was mentally set on this machine, I was willing to accept the shenanigans of the seller (mistake #2). The trouble began when their “free shipping to the USA” became $200. I thought “That’s kinda annoying, but not the end of the world.” The shipping charge was on par with other vendors. The next problem became that the $200 shipping was by boat, and F.O.B. (Mistake #3). Alibaba doesn’t support shipping by boat, and at this point the vendor and I agreed to leave the relative safety of Alibaba (Mistake #4). I requested a refund of my Escrow and it was granted.
A quick note about how Alibaba works, for the uninitiated. Alibaba is a marketplace, like eBay. Unlike eBay, however, Alibaba provides some additional protections to the buyer, and less so, the seller. When you purchase something from a vendor and make a payment you pay Alibaba directly, and that money is put into an Escrow account for the transaction. At this point, the Seller is assured that the money is there and they are guaranteed payment if they hold up their end of the deal. The seller, then, ships the product with an Alibaba approved carrier (like DHL, EMS, etc.). When the buyer receives the product and decides that it was accurately represented and meets expectation the seller is paid and the escrow is closed.
If you decide to leave Alibaba, it’s the wild, wild … east? The vendor really wanted to be paid by a wire transfer, which is the system that you see in spy movies. Bank account number, routing number, etc. The thing about a wire transfer is that there are NO protections. That money is gone, forever. If the vendor is feeling generous they may give it back if there’s a problem, but there are no systems in place for you to dispute it. There was no way I was going to go for that. I got them to agree to accept PayPal, which for all their faults does provide some buyer protections. Paypal makes their money by levying a surcharge on business transactions; the only way I got the vendor to agree to this was by paying the surcharge myself. In my mind, it was a worthwhile investment in insurance.
Ok, at this point I’ve paid the vendor and they’ve sent me vague information about when the ship will be leaving the Qingdao port. Then, one day I get an email from them about filing an ISF (10+2) form. I had no idea what this was, and I literally called the Port of Portland to ask them. They basically laughed at me. Apparently, the ISF is a form for a system that was introduced after the Sept. 11 collective mindless panic. Someone had the thought along the lines of “zomg, someone could put a bomb in a shipping container and blow up an entire city!” So, of course the government intervened and invented yet another complicated, expensive, process that can only really be done by a customs broker.
Now I need to find a customs broker. Off to Google… Whelp, no one has a ratings site for customs brokers. All my usual methods for deciding on a service provider fail. I find myself at the port of portland website and staring at a list of what seems like a hundred brokers. I literally choose one at random (mistake #5). I call their number and someone assures me that I’ve got plenty of time to file (Did I mention that you have to file the form three days before the ship leaves the last foreign port, and that failure to comply can be a $5000 fine?). I never hear from him again. Two days later I get a call at 3:00am from China. They’re calling to yell at me about the fact that my form hasn’t been filed and that I needed to do it right now. I calmly (lucky for them, my 1-year old wasn’t woken) explain to them that no one is awake or willing to take my calls at 3:00am. I’m not happy. The next morning I googled for “Customs broker portland oregon.” I choose the first link. My thinking is that google’s magic algorithms must know something more than random guessing. The new company is fast, responsive, and mostly a pleasure to work with.
Importing something substantial (I’m not sure what makes something substantial, but stay with me) is an expensive affair. The ISF form costs $35 to file. Great. Wait, I also have to become a customer of the brokerage company, $50. I need to have an ISF bond, $100. Don’t forget the customs bond premium, $45. Someone needs to enter the customs yard, $125. I haven’t even mentioned duty yet (this is what most people think of when importing), $26.50. By the way, any device that “emits radiation” has to be FDA accepted (they mean all radiation. Yes, I know that LEDs emit radiation, so do radios, you get my point), that’s another $35. So far were looking at about $400 in addition to my $200 shipping. Awesome.
You can see in the image above that the boat is going to Long Beach, California. Cool. I don’t live in California. The whole time I’ve been talking to them I’ve said Port of Portland perhaps a dozen times. I’m panicking a little. About two days before the boat is set to arrive in Long Beach, I get a call from a company at the Port of Long Beach. They were wondering when I would pay their fees. What? I wasn’t aware I had contracted with anyone at the Port of Long Beach. They had asked me about who my customs broker was. It seemed like this was the kind of thing that they could bill my customs broker for, and I had them do that. These guys charged another $160 of fees, including my favorite, the “Clean truck fee.”
Now, at this time (October 2014, and persisting now, into January 2015) there is a major bottleneck at the Port of Long Beach. My delivery was delayed a bit over a week because of this.
I was curious how I could get a shipment delivered to Long Beach, and have it go through customs in Portland. Apparently, it’s possible to move merchandise across the country that has not gone through customs. It just has to go to customs before it goes to the customer. That seems strange to me.
Anyway, the truck eventually got my package to Portland, and I drove up one day to get it (I had 2 days before I’d start getting charged warehouse fees). They put it on a forklift and surprisingly gracefully placed it in the back of my 4-runner.
All told, the cost for the machine was $700 + $200 shipping + $667 in customs fees. I feel a bit nauseous typing that out. Even more so when I add them and have to say that it was $1567 in total. Though, when I remember how much a decent laptop costs, I feel a little better. 🙂
The rest of my laser-cutter adventures were documented in video. Please enjoy the YouTube playlist below:
I recently gave a talk about 3D printing to the Academy of Lifelong Learning . It went really well, other than that I had a head cold. I thought I’d share my slides, and provide some links to supporting and bonus material.
The slides for the talk are shared using iCloud, and should work with any recent browser. The link is RIGHT HERE.
Following are a set of relevant and interesting links about 3D printing. Several of these topics came up in the Q&A.
Koenigsegg 3D printed production parts:
Koenigsegg 3D printed turbocharger (menioned in the first video):
Rockets, Jets and NASA:
Casts for broken bones:
Leaders of the 3D printing revolution:
More information about Kinematics
There are many, many more examples of the usage of 3D printing. Leave examples that you’ve found, or think are interesting in the comments!
I recently got a pair of the Nuand BladeRF SDR transceivers, and I’ve got about a days worth of experience with them. Of course, first thing’s first, I had to print the BladeRF Coaster by Piranha32. This is especially so because there are a few large tantalum-looking capacitors on the bottom. Before I had this printed, I used some small machine screws with bolts and made a quick set of standoffs. The package came with a nice blue USB3 cable and a pair of SMA jumpers; I assume these would go to their transverter, which I don’t have, but they’re nice to have anyway. There aren’t any instructions in the box, but for a product like this the assumption is that the user knows what they’re getting and how to use it. This is a reasonable assumption, and I had no problem finding all the relevant documentation.
I’m an ardent mac user, and this sometimes poses a problem while using specialized hardware and applications. It wasn’t until the last few months that the recent versions of GNURadio worked through MacPorts. Luckily it does now, as does all the BladeRF software. Going from nothing to a working software environment took minutes. One thing that you have to make sure and do it download the most recent FPGA code, as you’ll have to re-load it every time you boot the BladeRF.
All software defined radios have an Achilles’ heel. If the DC offset of the I and Q baseband signals isn’t minimized a constant “tone” at zero Hz will be up-converted to whatever frequency the final spectrum is. Also, if the relative magnitude and phase of I and Q aren’t matched (and precisely 90 degrees) there will be a image of the desired signal mirrored across the up-converter frequency. The BladeRF wiki has a short article that shows how to measure the correction factors to use to minimize these effects. This article documents my attempt of deriving the correction factors for one of the two boards.
To start, I tuned the board to 450MHz. Then, I decided that a 100KHz sine would be appropriate as a baseband tone. What happens is that, in software, the 100KHz tone is generated, then it is up-converted to 450.1MHz. The spectrum below is the result of that test without any corrections applied. The spur resulting from the DC error is about 25dB down from the desired carrier, and the image is closer to 35dB down. It’s not really that great.
Playing around with the values according to the instructions, I was able to improve these results quite a bit. The DC error is now 58dB down from the carrier (ignore the marker table) and the image is almost 63dB down. This is pretty respectable. Now, there is another troubling question. What’s up with the spikes in the phase noise?
I asked on the #bladerf room on freenode, and they agree that it’s not normal. The spikes are exactly 7.8 KHz apart, so I would start looking for things that happen at that frequency. I wish I had measured how distant the largest one was from the carrier and zero. That could have been good to know.
Oh, wait, I did :). The main tone is 63KHz away from the main carrier and 37KHz away from zero. There was some speculation that it could be artifacts from the quantization of the software-generated sine wave or that the tuning algorithm could be at fault. For fun, I ran the same test without generating any sine wave at all, so all you’re seeing is a large zero tone from a constant DC offset. I do think that the quantization explanation makes sense because that would manifest as phase noise, and the spikes are centered about the modulated tone, rather than the zero-spur.
The same artifacts should still appear there if there was any kind of a problem with the power supplies of the board, for example. It seems very clean, and I’m happy with the phase noise performance of the board. You’re probably seeing the phase noise of the rigol in this plot rather than the BladeRF.
In all, so far, I’m very happy this these. I’m very excited about their potential.
It has been a while since I played with the Sky65116 amplifier boards that I built and wrote about. Since getting my own spectrum analyzer, I’m now able to make much better absolute measurements. The DSA-815-TG analyzer is specified as having 1dB of uncertainly across the span, and the SA that I have at work is essentially uncalibrated.
Not only do I now know that the absolute power out of the video transmitter at the fundamental frequency is about 5.5dBm, I can also see the first and second harmonics. I don’t know why I didn’t see them with the other analyzer, but they are disturbingly large. I believe the FCC requirement is that these harmonics should be more than 40dB below the fundamental. By this criterion, the transmitter should not even be sold in the US.
The SKY65116 amplifier has close to 36dB of gain, and a 1dB compression point of 32.5dB. The 1dB compression point is specified as the output power level at which the gain is reduced by 1dB. The easiest way to show this is with the graph from the Sky65116 data sheet, shown below. You can see that as the output power begins to approach 32dB gain drops quickly. The goal is to not force the amplifier to operate in this region. If you do, you’re likely introduce harmonic distortion and other nasty nonlinear effects (i.e. intermodulation products).
So, knowing that the output is +5.5dBm, and we want about +30dBm out of an amplifier with a gain of 36dB, we need to introduce 11.5dB of attenuation (30dBm – 36dB – 5.5dBm = -11.5dB) between the transmitter and the amplifier, at a minimum. It’s easy to make 14dB attenuators with standard value resistors (4×150 ohm and 1×120). I’ve been playing around with QUCS a lot lately, so I’ve provided a model for the attenuator. It’s just about the most boring S-parameter model you’ll ever see… Perfectly flat response at -14dB, but that’s what we’re after.
A while back, I had a bunch of these simple 5-pole filter PCBs made up. I just left them blank until I needed them, and I made two of them into 14dB attenuators using the circuit above. I had two extra poles, so I filled one with a 0 ohm resistor and the other with a 1uF DC-blocking capacitor. The capacitor reduces the low frequency performance, but only less than about 1.5MHz. It’s worthy the trade-off in my mind.
I went ahead and covered one of the attenuators with copper sheet just to make it more of a completed package. I’m sure I’ll need to use it many times in the future. I left the other open so I could unsolder it and make it something else if needed. An interesting thing happened when I installed the cover. The small ripple in the attenuation (around 500 MHz, see below) occurred only after I installed the cover. I assume this is due to parasitic capacitance between the components and the copper covering. It’s still only about 1dB of ripple, so I’m satisfied with it.
Anyway, back to the amplifier. I’ve now got about -8.5dBm going into the amp ( +5.5dBm – 14dB), so with its 36dB of gain, I should expect to see +27.5dBm out of the amp. That’s getting very close to the maximum input power on my SA (+30dBm). It’s always better to be safe with these things, so I used the other 14dB attenuator between the amp and the SA. Now, I should expect to see +13.5dBm on the input. I maxed-out the input attenuation on the analyzer (another 30dB) and gave it a shot. Note that the internal attenuation is calibrated out of what’s shown on the display, and I told the SA about the other 14dB of attenuation, so the power values shown on the display are referencing the amplifier’s output.
In the above image, you can see that we’re getting 27.5dBm out of the amplifier! I love it when a plan comes together! This is the value I calculated, right on the nose. I promise that I didn’t work the math backward! 🙂 Again, it’s so painfully obvious that the transmitter is AM, rather than the VSB signal that it should be.
Now, just for fun, let’s dive back into the video signal coming out of the transmitter. In the image above, I’ve put some markers on the various carriers present in the signal. The luma carrier is in the center at 433.85MHz, which is where we expect it to be. Marker 2 is at 437.45MHz, which is 3.6 (let’s call it 3.57) MHz away, matching exactly where the chroma carrier is supposed to be. There’s no audio carrier, which isn’t a surprise because there’s no audio, though I wouldn’t be surprised to see the carrier. Marker 3 is 19 MHz away; I have no idea what this is or why it’s there. It’s not supposed to be. Same with marker 4. Oh, well… that’s what you get with a shitty transmitter.
Now, what about those pesky harmonics? The Sky65116 is a 390-500 MHz amplifier, so my hope is that the reduced gain by the first harmonic will attenuate the harmonics enough to bring them into compliance. The graph above is the gain v. frequency graph from the data sheet. It’s neither encouraging nor discouraging. It’s difficult to infer what’s going to happen at 800 MHz when the graph stops at 500 MHz. In the image below, it appears that I lucked out. The first harmonic is 42dB down from the fundamental. If I were selling a product, there’s no way I would send this out for compliance testing. It would just be too risky, I’m not that confident in my measurements. By my math, it would cost less than $2 in parts (single unit quantities) to make a decent low pass filter. That’s the right thing to do. When I modeled it (in QUCS, again), I calculated that the harmonics would be within compliance even without the rolloff of the amplifier. With the rolloff, the harmonics would be well below the noise floor.
I’ve had a ton of fun redoing this experiment with my new spectrum analyzer. I’m going to write lots more about the analyzer in the future, and I’m really looking forward to it. Coming soon is an exploration of the skyworks low noise amplifiers. Between these two products, I expect to have a solid video link over 1000 feet or so.