Analog Discovery Pro ADP5470 Thoughts

Today I had an experience which puts another reason in the Cons list (arguments against) of USB instruments.

I’m trying to measure the current an SD card takes when it’s writing. I’m doing this with a Saleae and Joulescope. I started running into issues because the Saleae was running out of bandwidth. Turns out that the USB hubs I was using were all USB 3.0+, but for some bizarre reason, the USB tree is entirely USB 2.0. I’m hunting down driver issues and whatnot, but it’s a pain and I’m not making progress on what I should be doing.

The gist of it is that if my other instruments were also USB based, it would just exacerbate the problem. Also, that even if the device itself claims a certain spec, it could be dramatically affected by external factors that are harder to isolate and debug.

1 Like

Already happy that I followed the suggestions here! The new standalone scope is really nice!

1 Like

What did you go for?

Pretty close the the lists above! Thanks for the advice

I’m feeling outclassed with my ancient Keithley 195A (but it was only a couple hundred bucks, as I recall). Warning, gear with non-backlit LCD displays, like that HP 5384A frequency counter, can be hard to read in normal lighting. Although it seems very clear in the picture, I have to keep a flash light handy to read it normally.

I have an AD2, but I blew out channels 0 and 1 a couple years ago. I also have a Saleae 16 pro on permanent loan from an old client. Honestly, I’m underwhelmed with the logic analyzer features of both softwares. The Saleae is somewhat better, but still missing the most basic of triggering features.

Definitely agreed that triggering would be a great feature.

What are some features you think would be useful in the Logic Analyzer software?

I know the Saleae has some relatively easy Python scripting available for expandability. I’m trying to write an I2C Analyzer for Saleae that actually does more than just spit out the byte data.

Well, as an EE, I tend to think of triggering from an oscilloscope point of view. The most basic abilities like normal / auto modes seem to be completely foreign concept to these tools. Single shot mode is covered, but often that’s not enough.

I don’t see why these features are so hard to implement, because you can see requests on the forums going back for years.

I will agree, the ability to script with a language like Python can be very powerful. But that’s more of a specialty approach for post processing or say extremely complex searches — I’m not even sure you could perform triggering operations yourself.

Saleae has a recent thing where you can kind of simulate a Normal trigger mode if you search for a match to a certain packet first byte. It’s useful, but doesn’t go far enough (say 5th packet byte, etc) and seems like a kludge just to get triggering.

This, 100%. I bought an inexpensive Chinese 16-channel USB logic analyzer and its UI is wonderful, but the lack of triggering options is just baffling. As a result I almost always use my Tek ‘scope with UART and I2C protocol modules, which offer many many triggering options.

@rclott - So, Trigger means different things to different people. Historically, oscilloscopes required a trigger for normal operation. Analog scopes used triggering to align multiple traces of (semi-) periodic signals on the CRT. Without triggering, you would just see faint, unaligned gobbly-guck of traces. Digital scopes only stored a fixed sample window with long gaps between windows, so a trigger was necessary to get the real data you cared about.

Some modern instruments like the Saleae Logic and Joulescope capture ALL the data with no missing samples, at least until your computer runs out of RAM / HDD / SSD. The notion of triggering, at least in the historical oscilloscope context of being fundamental to operation, is meaningless for this class of instruments. The question remains as to what Trigger means when it is not required for normal operation.

When a Joulescope customer requests “triggering” functionality, I ask them to clarify. Everyone means “detect an event”, but what to do with that varies wildly. Here is my current list of what triggering means to Joulescope customers:

  1. Detect an event and capture a short window. Display only this window of data, discarding all other data. Do this once & stop, or repeat every time the event occurs. For the latter, optionally display a heat map (digital phosphor for those of us of a certain age) of the average traces. This is the historical oscilloscope trigger operation.
  2. Detect an event and highlight this for me.
  3. Detect an event and signal external equipment to do something.
  4. Detect an event and start/stop recording to disk.
  5. Detect an event and start/stop capturing live streaming data.
  6. Detect an event and start/stop recording statistics.
  7. Detect an event and perform some arbitrary action for my test setup.
  8. Detect an event and run my custom analysis on that data (usually delimited by another event or from the start of the capture).
  9. Detect an event and disconnect power to the DUT.

The Joulescope UI does not do (1) today. We have considered adding a totally different widget with pure oscilloscope functionality, but it really hasn’t been a priority. I am much more inclined to integrate with Sigrok or ngscopeclient.

The Trigger widget in the Joulescope UI allows you to do 2 - 6. For 7 & 8, we recommend using the Joulescope Python API, but you could create a UI plugin. I only heard about (9) once, and I decided to lump it with (7) even though it is a Joulescope action.

The simplest events (which are supported by the Joulescope UI) include:

  1. A sample-by-sample threshold
  2. A signal from an external piece of equipment.

Some people want very complicated event detection with state machines to filter out all but that rare thing they care about. In my career, I used some expensive equipment to find extremely rare events like this. I can confidently say that recording all the data and post-processing is a better option when feasible. You never quite know if your trigger is right, so being able to look back at all the data gives much higher confidence. With a Joulescope and a 16 TB HDD (~$250 USD as of 2025-09), you can capture full-rate data for 2 weeks. Now, instead of triggering, you need search, which is another feature entirely.

The Joulescope UI currently delegates search to human eyes. Our present way for data analysis, including search, is through Python. You can use Python to create a “{filename}.anno.jls” file to add dual markers in regions of interest, which the UI will automatically load and display. We have a relatively small group of advanced Joulescope users that have automated their data analysis like this.

The common ground on “Trigger” is that it means “find what I care about” and “do something”. The “what I care about” and “do something” vary wildly from person to person.

As you can see, discussions of Trigger trigger me :wink:

2 Likes

This is what I usually want. Capturing a vast amount of data that I have to scroll through post-capture isn’t useful when want to watch a periodic data stream in real time.

With Joulescope it’s never been a big issue for me, but a logic analyzer is a different story. So annoying to have to manually re-arm the trigger after every capture.

1 Like

I understand, and I’ve been there. If you are dealing with digital signals not wiggling as expected, then a logic analyzer is still the tool. Often times, capturing an event once is enough for this electrical layer.

If you are interested in data from firmware, not actually the electrical signals, you really want all the events. Fortunately, we have more and more ways to get that data without resorting to a logic analyzer. Here are some that I know of:

I have my own (not yet open source) solution that integrates with Tracy.

FWIW, I did sell the Joulescope UI a bit short. It can detect an event, add a single marker, continue for an arbitrary duration, then stop sample buffer, so it can do the single event version of (1).

I’m also an EE, and I’m mixed on the triggering need. I’m with @mliberty on the idea that if I’m able to stream all the data from an instrument until my very large buffer fills up, then I don’t really need something akin to triggering. I regularly use my Saleae and Joulescope in this mode, where I just let it capture, fiddle around with my circuit, then come back around and analyze what I want to analyze.

The Saleae’s analyzers (I2C, SPI, UART, CAN, etc.) are usually more than enough for me to quickly find the event I’m looking for, and zoom in. (Sorry Matt, I haven’t really used the Joulescope “in anger” yet.)

This might be the same thing or might be totally different, but thinking of a LA in normal mode might be something like: Look for a pattern, then update the display when the pattern happens with info from the pattern. For example, look for an I2C start condition + I2C address 0x54 + write bit + second byte = 0x00, then capture third byte. This example would be a basic digi-pot value update. So you could keep on screen an updating value of that digi-pot. (Coincidentally, this is the I2C Analyzer plugin I’m working on)

1 Like

Pattern (or digital) triggering is available on several scopes and logic/protocol analyzers, and is quite popular among failure analysts.

I wholeheartedly agree with all the methods raised above, and those are very powerful tools and essential in many circumstances. When you need it, you really need it.

But for my use, most of the time a simple trigger mode as I’ve described is more than enough for my needs. It’s like a multichannel waveform digitizing system that stores the digital data to a disk file could be very helpful, but very inconvenient when all you need is an oscilloscope.

1 Like

Usually not. If TX is spitting out a packet every ms or every second, I want to see that packet coming out in real time, refreshed every time TX falls or a preamble is detected or an I2C START code is detected or whatever framing I select, and I want to see the response to it on RX, all while the system is chugging away. Or maybe I want to trigger on an RX response to see what’s triggering it. Yes, I suppose could see the same things by capturing a ton of data and scrolling through it, but watching in real time feels much more natural to me, and I can just leave it running indefinitely and look at it whenever I need to. Maybe I’m just an old-school ‘scope jockey like @rclott

1 Like

I have been working on Joulescopes for 8 years now. Other than UI controls from human-selected widgets, everything happens much faster than human time. Moving up the stack (electrical signals → protocol analyzer → log/trace/printf → pubsub) has been critical for making sense of what happens.

While I do remember the days of manually watching an oscilloscope trigger every few seconds/minutes, that has not been recently. The irony is that a lot of Joulescope customers have devices that wake every second/minute/hour/day, capture some data, and transmit it. These are human-scale time events. While a lot of customers are happy capturing all the data, they also don’t have much choice.

I still want to add a “show me all the windows of activity” mode to the Joulescope UI, which has a lot of similarities to oscilloscope mode (1). Perhaps I can get a two for one :wink: Thanks for the feedback!

In the meantime, we have lots of measurement options. I have amassed a reasonably large collection of T&M equipment, and I definitely have my go-tos for different types of tasks. In the end, it’s finding what works for you. Right tool for the right job!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.