I have been waiting for a long time for a usable low-cost spectrum analyzer and it looks like that wait is over.

TinySA Spectrum Analyzer

I bought a TinySA spectrum analyzer for $55 from R&L Electronics (one of the official dealers). If you get one, try to use the official sites; there are lots of bad clones out there. The TinySA is, as the name implies, a tiny, battery-powered, touch-screen, 100kHz – 960MHz spectrum analyzer. I have been very pleasantly surprised by its performance.

It has its limitations, but it is the first usable low-cost SA I’ve found for looking at sub-GHz FM signals. There are plenty of low-cost toys out there (see my earlier post regarding the “Simple Spectrum Analyzer”) that claim to do spectrum analysis, but they have always had fatal flaws (inaccurate or horribly coarse resolution bandwidth). This one has quite good frequency and amplitude accuracy out of the box and a usable 3kHz RBW.

It has some limitations too (But for goodness sakes, we’re talking about a pocket-sized spectrum analyzer for $55!!!):

  • 960MHz max frequency
  • 3kHz resolution bandwidth (RBW)
  • Amplitude uncertainty seems to be around 2dB
  • Easily over-driven (claims +10dBm max input, but works much better below -10dBm)

Below are some pictures showing the SA in action, including both strengths and limitations.

For comparison, here is what the signal generator output looks like on a higher-end piece of test gear (Anritsu MS8609A):

Atmel ICE

product primary image

I used an Atmel ATTiny13A in a project; it only has 8 pins and all are in use. There isn’t much memory (program or data), so debugging can be a challenge…but fortunately, there’s Atmel-ICE to the rescue! The Atmel-ICE (see product page) is inexpensive and can be used to program and debug Atmel SAM (ARM) and AVR targets. To get real value out of it, you need to use it with Atmel Studio: their free IDE built on Visual Studio.

Connector weirdness:
The ICE connects to your PC with a micro-USB cable and to your target with a ribbon


cable (ATATMEL-ICE-CABLE). The cable has both a 10-pin 50-mil JTAG connector and a 6-pin 100-mil SPI ICSP/DW connector configured for the standard AVR ICSP pinout. The red wire on the cable denotes JTAG pin 1; when connecting to an AVR ICSP header the red wire connects to pin 3 (SCK). Strangely, the pin 1 indicator on the 6-pin plug does not denote pin 1 but actually connects to pin 5 (nReset). Anyway, you can trust that the 6-pin connector is correctly wired for the ICSP header (SPI/DW) even though the markings suggest otherwise. Assuming your ICSP header has pin 1 (MISO) in the top left, then the key bump on the plug and the red wire will be on the left side. For examples, see this picture showing the connection to an Uno or this closeup showing the connection to a Mega.

Unlike most of the ICSP programmers, the ICE does not supply power to the target; the power pin (2) is just used to detect the target voltage. The green LED near the edge ICE enclosure indicates target power. This is unfortunate as it makes it much less useful as a programmer, but it allows it to work with both 3v3 and 5V targets. (I would have preferred if they had added a target voltage switch and a 3v3 regulator)

You can use the ICE in two connection modes: ICSP (SPI) for flashing the target only or serial debugWIRE (which is where the really neat stuff happens). DebugWIRE is Atmel’s one-wire in-circuit debugging solution using only the reset pin! In this mode, you can connect to your target, set breakpoints, examine variables (sort of), step through code, and do real source-level debugging while still using all of the pins on your target. Kudos to Atmel…this is really slick…and it works! (Note: you have to set the debugWIRE enable fuse on the target – Atmel Studio will prompt you to do this). Don’t forget to clear that fuse when you’re done debugging!

Atmel studio works well; you add your files into the Solution Explorer, build, and start debugging! The only really annoying thing is that the debugger doesn’t let you examine variables that have been optimized away by the compiler (and you usually need to build with the code optimized because there is so little code space)…so if you want to examine variables, you need to make them global.

Some good references:

  1. http://www.crash-bang.com/debug-atmel-ice/
  2. https://wspublishing.net/avr-c/arduino-uno-atmel-ice-connection/
  3. https://wspublishing.net/avr-c/arduino-mega-atmel-ice-connection/

TPI-1001-B RF Signal Generator/Analyzer

An RF signal generator is an important part of my wireless workbench. In the lab, I use high end gear made by HP, Marconi, or Anritsu, but these are big expensive pieces of equipment with loud fans so I don’t want them at my desk. Enter the TPI-1001B RF signal generator/analyzer from RF-Consultant. This is a USB-powered signal generator that generates clean RF CW signals from 35MHz to 4.4GHz at up to +10dBm…and does it accurately! It even has an accurate power detector that can be used in conjunction with the generator to sweep filters and such (more below).

The TPI-1001-B generator/analyzer costs a good deal more (~$350) than the cheap RF signal generators on eBay. I assume it is based on the same Analog Devices ADF4351 synthesizer, but the price difference is fully justified. The cheap synthesizers are not calibrated for amplitude and many don’t use a good enough time-base to be accurate for frequency either. A signal generator without accurate frequency and amplitude is a toy, this is a tool.

Note: they offer a less expensive (~$275) version (TPI-1002-A) that has the same signal generator but does not include the analyzer (which I thought it was worth the extra $75). I might buy one of these later for another workstation.

The good news is that both the generator and the analyzer work extremely well. The software is straight-forward and easy to use; I love the frequency presets. The device is compact, silent, and performs admirably. I’ll share some pics below of the CW output including sweeps of a few filters. As promised, it stayed well within 1dB of the configured output setting across a wide range of frequencies and the frequency accuracy was impressive as well (the measurements below are from a spectrum analyzer with a rubidium standard).

The main difference between the TPI and a lab-grade generator is that it lacks output filtering to suppress harmonics (you’ll see that in the pics too), but that’s expected.

As it is, it replaces the lab gear for most of my needs, but here’s my wish list for future versions:

  • A set of switchable ceramic or SAW filters would add little cost and make their calibration process more complex, but it would make the generator able to fully replace lab-grade gear in many applications. Johanson makes great low cost SMT ceramic filters.
  • An internal FM modulation generator.

Below are some tests I ran with the generator into an Anritsu MS8609A transmitter analyzer. I did not compensate for cable loss, but it was a short, high-quality (low loss) cable and the results speak for themselves.

Signal generator configured for 915MHz at 0dBm.
915MHz harmonics – fundamental is 0dBm, 3rd is -10.8dBc, 5th is -23.11dBc
433MHz is also perfect for frequency and amplitude
433MHz signal and harmonics
3GHz signal at +10dBm
2.4GHz signal at -20dBm and harmonic
sweeping a 60MHz low-pass filter (microcircuit SLP-70+)
Sweeping a 2.2GHz-6GHz bandpass filter (high-pass for these purposes since only sweeps to 4.4GHz)


UPDATE: although I still like the uCurrent and CurrentRanger, there’s a new king of the hill for current measurement here: the JouleScope. I’ll leave this post up because the uCurrent and CurrentRanger are much less expensive than JouleScope, but if you want best-in-class current measurement for IoT devices, JouleScope is clearly the way to go; I’ll post a detailed review soon.

I’ve long relied on the uCurrent Gold to measure low currents (micro-amps, nano-amps) in the IoT devices I design, but it is no longer in production. So I recently purchased a CurrentRanger from Low Power Labs which offers the same ultra-low burden voltage measurement and adds several enhancements.

Current Ranger

Both devices use very low value current sense resistors to impose minimum burden voltage and use low noise, low offset gain stages to amplify the current into a proportional voltage that is presented on the output terminals and that you can measure with a multimeter. So, for example, if operating in the uA range, a 33uA current through the supply->load terminals will result in a 33mV output on the output terminals.

The CurrentRanger is improved over the uCurrent in several ways including:

  • Fast auto-ranging using an internal microcontroller allowing use of the device to monitor battery powered IoT devices which typically exhibit a very wide dynamic range of current consumption (often from nA or a few uA in sleep mode to hundreds of mA when transmitting).
  • An optional OLED display which provides a convenient way to monitor the current without having to connect a multimeter to the output terminals. (albeit limited by the ucontroller’s ADC input granularity and accuracy). This can save a lot of wiring clutter and bench space.
  • Powered by an internal rechargeable lithium polymer battery (that you must supply) which it can charge from the built-in micro-USB connector. This is handier than the coin cells that the uCurrent uses which tend to run out at inconvenient times and replacements aren’t always at hand. It can also be used with 3x AA batteries (you’ll need to supply the battery holder), but if so you must not have the batteries installed while the USB cable is connected (the USB connection powers the internal lithium battery charger which would damage AA cells).
  • Supports/suggests external data logging using a TTL serial interface or an optional HC-06 bluetooth module for electrically isolated data logging which also helps prevent cluttering your bench with more wires. The HC-06 is a class 2 bluetooth slave module that does transparent serial communications bridging. I’ll write another post regarding the HC-06 module, but you can see its datasheet here and buy them on amazon or AliExpress or eBay or a host of other sites (they are popular); there are also less expensive DX-BT18 modules (manual here) that claim to be compatible and supports BT4.2 including support for SPP and BLE. At least some versions are actually FCC certified (2ADMF-HC06 and 2AKS8DX-BT18)…I checked the FCC – which you should always do. There are many clones and compatible modules such as the JDY-08 (also here) and JDY-40 available for under $1 that are not FCC certified.

I tested the Current Ranger uA range with several precision resistors (100K, 470K, 1M) as fixed loads. The voltage output was spot on and the burden voltage was negligible. Compared with my much more expensive Advantest R6552 AC-powered bench meter, the Current Ranger offered slightly lower (better) burden voltage and slightly better accuracy. The only issue I noticed was that while the voltage output was spot-on, the OLED display read about 1uA too low across the uA range (i.e. it had a fixed offset, not a percentage error). This isn’t a big deal for me, but it’s worth noting. Overall I am quite pleased with the Current Ranger. The precision was excellent, it is well designed, very compact, and allows taking and logging current measurements across a wide dynamic consumption range, ideal for IoT devices.


Every now and then you need an electronic component and there just isn’t a good match available…necessity is the mother of invention so why not make your own? The problem was I had a very tight cost budget, very little PCB space, and was behind schedule…I needed a cheap, tiny solution FAST. Fortunately, I found the ATtiny which is an 8-bit AVR micro-controller available in packages as small as SOT23-6 package (about the size of the head of a pin) that costs $0.28 in small quantity and the more powerful ATTiny13A that costs $0.35 and is available in SOIC8 and DIP8.

I needed to generate a 5V PWM output to drive a MOSFET for programmable closed-loop control of the speed of two types of DC motors in a very tiny space. There aren’t that many *really* small micro-controllers in packages that are reasonable to prototype with (I hate prototyping with QFN and BGA packages). I considered a few including the Microchip PIC10F322 (also SOT23-6) and the STM8 series (supports the great STLink debug environment). I eventually counted out the PIC because the development environment was so unfriendly (I’m done with expensive proprietary compilers) and counted out the STM8 because even though I’m quite experienced with the STM32, getting the peripherals programmed properly can be complex and I needed a solution fast, so I chose the ATTiny.

I used avr-gcc as the C compiler which is fast, familiar, and generates tight code (you can’t go wrong with gcc). Microchip has breadboard-friendly DIP-8 versions of the ATtiny13A and the pin-compatible ATTiny25/45/85, so I could rapidly prototype a solution. The documentation is excellent, the peripheral set is rich and easy to use (unlike ST uCs which are incredibly flexible but accordingly complex). It was so easy that I was able to get the code fully functional in just a few hours having never use AVR processors before. I understand you can even use Arduino to program it (I didn’t).

Useful tools:

Some notes on flashing tools. The Atmel-ICE is an awesome debugger that uses only the RESET line to do all of its debugging! Unfortunately it doesn’t supply power so it’s a lousy tool for flashing the target. I haven’t found the perfect tool yet, but the TinyAVR and USBasp (see links above) work well. The main down-sides are that they don’t have enclosures and getting them set up can be annoying; you need to install Zadig and reconfigure them to use libusb-win32 (see instructions here)…after that, they work well.

It’s not going to replace the STM32 family for most of my applications, and the STM8 series is arguably better, but for those times I need a really cheap, really small solution, the ATtiny is a nice addition to the toolbox. You can even order them from Digikey with your software pre-installed for an additional ~$0.25/chip making them truly a custom hardware component!

Some useful links:

Mustool == Junk?

This is my second post about disappointing Mustool products (there won’t be a third).

I use stereo optical microscopes when doing surface-mount electronics (SMT) assembly and inspection. They work well, but are large and heavy. I decided to try one of the inexpensive “digital microscopes” that was reviewed well and looked like it had a large relief distance (the distance between the lens of the microscope and the item being viewed) which is important so you have room to work.  I ordered the Mustool G600 from Banggood.

Mustool G600

The good: the aluminum stand was easy to assemble and they even included the required Allen key.  The stand works well, adjusting the microscope height is smooth, and the relief is indeed quite good.  When I first turned it on, the buttons were a little unresponsive and it presented a menu that I couldn’t navigate, but after turning it off and back on, and adjusting the smooth focus knob, the microscope gave a clear, sharp picture.

Small bad: I didn’t realize how beneficial stereo is to SMT work.  With a mono image, even though it was sharp, I didn’t have any depth perception which made it hard to tell how high above the board my soldering iron and solder were.  It’s possible I’d get used to this but I’ll never know because…

Big bad: I played with the microscope for 5-10 minutes and then turned it off.  When I tried to turn it back on…nada: just a black screen.  I tried charging it, resetting it, pressing every button combo I could think of and it just remains unresponsive.  So it’s dead.

The worst: I received the package during the week and didn’t have time to play with it until the weekend which was past the Banggood 3-day warranty period – yes, you read that correctly: 3 days.  So any money I saved by purchasing on bangood is now easily offset by the $42 wasted on this piece of junk – not to mention the time and aggravation.

This is my second extremely disappointing mustool purchase; the first was their MT8205 scopemeter – which was also a complete waste and you can read about it in my blog. I will not purchase anything made by Mustool again; fool me twice…shame on me.

Until now, I’ve been a big advocate of banggood; they refunded my purchase price for the MT8205 – which reinforced my faith in them as a seller.  It’s a shame they are now carrying such junky products and chasing them with a ridiculous warranty.  I’m going to have to re-think purchasing from Banggood since the same products are usually available on amazon with reasonable warranty and return policies.

MT8205 review – piece of junk

I’m always looking for bargain test equipment, and sometimes I get burnt; hopefully this review saves you from wasting some time and money.

I bought the Mustool MT8205 from Banggood who advertise it as a “2 in 1 Digital Intelligent Handheld Storage Oscilloscope Multimeter AC/DC Current Voltage Resistance Frequency Diode Tester”; it sells for just under $50 shipped.  I love Banggood and have had lots of good experiences with them, but buyer beware: this product is a waste of money at any price.  (Update: Although this product is something to avoid, Banggood is wonderful and I highly recommend them.  They took this product back at their cost just because I was unhappy with it…now that’s great customer service!)

Mustool MT8205

While it looks good, feels solid, and comes with nice probes and case, it simply isn’t useful for making measurements as my tests below will show.

Let’s start with how it works as an oscilloscope since that’s the interesting feature of this device.  When I ordered it, the ad said 200ksps which would suggest it is useful to look at signals up to at least 20kHz…not great, but at good enough for looking at audio and PWM waveforms.  However, as the ad now says, the analog bandwidth is limited to 10kHz.  A 15kHz signal is severely distorted and it won’t even try 20kHz.  A 10kHz ramp looks just like a 10kHz sinewave.  See the pictures below where I feed it a 15kHz sinewave and a 20kHz sinewave from a Rigol signal generator showing that the bandwidth is indeed limited to 10kHz (i.e. useless).  There are other issues too: there is no trigger control, the signal is always AC-coupled (so you can’t measure anything DC), there are none of the controls you’d expect to find on an oscilloscope and it’s too slow for virtually anything these days.  The scope feature is a complete bust.

To add insult to injury, the multimeter functionality is useless too!  The readout is only 3 digits and even those aren’t accurate!  I hooked the meter up to a lab voltage standard and checked the output with a calibrated 7-digit HP bench meter.  The 10.0000V standard was dead on with the HP meter, but read 9.95v on the Mustool.  What’s worse, when I used it to measure 2.5v and then used it to measure 10v again, it took several (I’m talking 4-5) seconds for the readout to gradually climb to 9.95.  Useless.


  • Large/heavy/manual-ranging multimeter
  • Only 3 digits, only 2 of which are accurate (see 10vdc lab standard)
  • Incredibly slow: takes several seconds for voltage to read properly
  • Limited to 10kHz analog bandwidth
  • AC coupled only
  • Oscilloscope has no controls so not even useful as a teaching tool

10VDC from Lab Standard

15kHz sinewave

20kHz sinewave

Frequency Counters

Although less exotic than the SA and VNA tools I use during development, I find I make use of basic frequency counters pretty often (mainly to calibrate equipment).

A frequency counter does only one thing: measures the frequency of an RF signal.  What’s important for a good counter is frequency range, timebase accuracy, speed of measurement, and of course cost.  I try to only purchase counters with an OCXO frequency standard although a good TCXO is often sufficient.  An external reference input is very useful when you need very high precision so you can slave the counter to a higher accuracy lab frequency standard (OCXO, GPSDO, or Rubidium).

Having had quite a few counters, I’ve concluded that older HP/Agilent counters offer the best value, especially if you’re willing to spend $200-250 on eBay for one with their excellent OCXO timebase option (4).  If that price is too high, you can find lower priced counters, but I think it’s a mistake to buy one without at least a good TCXO and/or external reference input.

I have a couple of HP5385A counters that work to 1GHz; one has the TCXO timebase and is quite accurate; the other has the superior OCXO timebase.  I also have an HP 5386A with OCXO that is good to 3GHz.  For higher frequency measurements, I have an HP 5347A that integrates a power meter and frequency counter up to 20GHz, its maximum frequency resolution is 1Hz (plenty for higher frequency measurements); it only has a TCXO timebase so I almost always use it with an OCXO or rubidium lab standard; it is larger/heavier than the other counters, but it’s hard to get an affordable counter with that much bandwidth.

For counters that are no longer officially in calibration (per certificate), I use a Trimble Thunderbolt GPS-disciplined oscillator (GPSDO) to calibrate them annually.

Pocket Multimeter

During robotics season, I carry a multimeter in my backpack and as much as I love the UNI-T meters, weight and size start to matter when you carry something all the time so I wanted a smaller, lighter multimeter that still offered full functionality.  In my car, I keep an old Triplett 2030-C which has served me well over many years; the Aneng AN8203 is a knock-off that can be had for under $10 on AliExpress; both have frequency and duty cycle measurement (important for looking at PWM signals in robotics) along with the standard voltage/resistance/continuity and capacitance…but the Aneng has no current measurement where the Triplett does (however the scale isn’t useful for robotics).

Handheld O’Scope

Owon USB scopes are great and I carry one in my robotics bag, but they aren’t ideal for field use because they take too much time and space to setup (laptop, wires, …).  So I purchased a the low-cost JinHan handheld oscilloscope and so far, I’ve been pleasantly surprised.  I bought the JDS2023 on AliExpress for $113 shipped via DHL (quickly); it integrates a 200MS/s dual channel 20MHz digital o’scope with a 5MHz signal generator in a remarkably small, light package.  It has a bright, readable 3.2″ LCD color display and a reasonably intuitive UI (I never needed the manual) although the addition of even a single knob would make the UI better.  It offers all the basic scope functions including automatic frequency and p-p amplitude measurements.  The Auto button does its job well.

JINHAN JDS2023 20MHz 200MSa/s Handheld Oscilloscope with Signal Generator

The company makes several models with a variety of speeds and features such as the JDS2012A that integrate a scope and multimeter.  However, I prefer to keep carrying my UT136B meter which is smaller, easier, more functional (as a meter), and cheap enough that I won’t care when students lose or destroy it.  For advanced diagnostics or impromptu demonstrations, the JDS2023 will replace the Owon USB scope in my robotics bag

EEVBlog does a teardown of the JDS2012a.  The user manual is here.

The scope comes well packaged and includes a single 6100 (ostensibly 100MHz) scope probe, BNC to alligator-clips cable for the signal generator, USB cable, and separate battery charger.  It does not include the required 18650 lithium battery (probably due to air shipping restrictions) or a carrying case…but what do you expect for $113?  Power over the USB cable will run the scope.

I haven’t seen anything close to this level of functionality at this price.  If I need more, I’ll probably step up to the Owon HDS1021M-N or UNI-T UTD1025CL, but they are twice the price, considerably larger, and sans signal generator.

I tested it quickly using a lab-grade RF signal generator and confirmed the 20MHz bandwidth specification; it clearly shows at least 10 points per cycle of the sinewave (validating the 200MS/s specification) and there is no amplitude compression of the 0dBm signal (nominally 0.632vpp into a 50-ohm load – this is unloaded so it correctly shows 2x vpp); the analog front end 3dB compression point is somewhere north of 40MHz.

20MHz Sine Wave

5MHz Sine Wave