Close
0%
0%

Haasoscope Pro

A 2 GHz oscilloscope for everyone

Similar projects worth following
Haasoscope Pro is a full redesign of the original Haasoscope, a successful Crowd Supply campaign from 2018, which was the first open hardware real-time USB oscilloscope. The new Pro version increases the bandwidth from 60 MHz to a whopping 2 GHz, the resolution from 8 to 12 bits, and the sample rate from 125 MS/s to an impressive 3.2 GS/s. It’s the first open-source, open-hardware, affordable, high-bandwidth, real-time sampling oscilloscope. And just like with the original Haasoscope, you can flexibly combine and sync multiple Haasoscope Pros to interleave ADCs for a sample rate of 6.4 GS/s, or for additional channels. To unlock the full bandwidth of the Haasoscope Pro, this project also includes an inexpensive 2 GHz bandwidth active probe. Unlike professional models which sell for top dollar, Haasoscope Pro is designed to be affordable, made with standard PCBs, off-the-shelf components, and an open-source design.

Features & Specifications

Haasoscope Pro:

  • 2 analog input channels
  • 50 Ohm (<1 pF) or 1 MOhm (10 pF) input impedance
  • 2 GHz analog bandwidth at 50 Ohm, 500 MHz at 1 MOhm
  • 3.2 GS/s for 1 channel or 1.6 GS/s for 2 channels, doubled to 6.4 GS/s with two synced Haasoscope Pro's
  • 12 bits of real-time vertical resolution per sample
  • Up to 40k samples per trigger, with adjustable trigger time offset
  • 100 ps/div to 24 hour/div, for 10 div
  • Max analog input of +-5V (50 Ohm) or +-3V (1 MOhm), +-50V or +-30V with x10 probe
  • Sensitivity of 1.6 V/div down to 8 mV/div, for 10 div, in x1 mode
  • Programmable AC or DC input coupling
  • Programmable DC offsets per channel
  • External trigger in and aux trigger out
  • Multiple Haasoscope Pros can be connected for more channels or to oversample at 6.4 GS/s, with synchronized timing and triggers
  • Standard set of triggers (rising / falling edge, time over threshold, etc.), customizable in firmware
  • Qt-based python software interface for Windows/Mac/Linux
  • Standard set of signal measurements in software
  • 5 V 1.5 A USB Type-C powered (or using 12 V 1 A 2.1 mm barrel connector)
  • Aluminum case with quiet 40 mm internal fan
  • 220 x 165 x 35 mm (8.66 x 6.5 x 1.38 in), 0.9 kg (1.98 lbs)

Active Probe:

  • DC - 2 GHz analog bandwidth
  • Flat response from DC -1 GHz within 0.3 dB
  • 1 MOhm input resistance
  • 1.1 pF input capacitance
  • 100 Ohm minimum impedance, near 1.6 GHz
  • x10 probe attenuation, input voltage range +-30V
  • 50 Ohm SMA output, 1m cable
  • 12 V power at ~80 mA, via 2.1 mm barrel connector, or 5V 200 mA USB using included cable

  • Moving to github discussions only

    haas11/01/2025 at 17:48 0 comments

    Now that the project has grown, I'm posting future updates mainly in the GitHub Discussions area. Follow along there! 

  • Color-graded waveform display

    haas10/27/2025 at 13:46 0 comments

    I had some fun adding this heatmap display over the weekend:

    HaasoscopePro_2025-10-27_09-33-38

    It's in the "main" branch now if you want to try it out. It'll also be in the next release, v31.08-beta. Just turn up the persist setting, and you'll see it.

    Basically, each time a trace is taken for a channel, it gets added to that channel's 2D histogram of x,y positions where traces have been. After 100 traces, the older traces start being subtracted each time a new trace is added, so the histogram stays recent. Traces are also subtracted after they "expire" after a timeout, set by the persist box setting. Then the 2D histogram is used to make a heatmap, smoothed by a Gaussian kernel, to draw behind the waveform.

    I think it looks great, and it's surprisingly fast to draw! (I get about 20 Hz on my old Windows machine.)

  • New Software v31.07-beta3, and a Video

    haas10/24/2025 at 19:45 0 comments

    Check out the new YouTube video demonstrating all the latest features since version v29.20!

    These are just the changes since v31.05:

    • New pulse width measurement, calculated as width of 50% max-min crossing nearest to trigger position
    • Zoom window (in View menu), lets you see a zoomed in view of the main plot via draggable ROI
    • Fix trigger position when depth is changed
    • Don't disable trig stabilizers at downsample>0
    • Don't disable extra trig stabilizer at downsample>0
    • Updated pulse stabilizer min calculation (delta -> 0)
    • Fix to math calculations: now done on non-upsampled data, gets the FFT of math channels right when channel is upsampled
    • Reference waveforms line width same as original line, fix math channel line width changes, FFT line color changes
    • When changing the line color, also change the peak detect line color
    • Draw the peak detect lines, and all the persist lines, in the zoom plot
    • Clear persist lines when loading from settings with no persist
    • GUI: Fix line color change bug, channel 1 visibility bug, adjust size, checks for newer release upon startup
    • Measurement System: 3 decimal precision, improved formatting, speed ups, fix gain bug
    • Reference Lines: Dynamic color tracking, transparency support
    • Two-Channel Mode: Fixed resampling settings for channel 1 when zoomed
    • Trigger System: Auto-reset on depth change, cursor position management
    • Oversampling: External trigger mode for board+1, delay offset reset on disable
    • Settings: Fixed loading errors
    • XY plot: does two-channel mode right
    • Math: low, high, band, notch, time shift filters with adjustable parameters

  • Software Release 31.05

    haas10/21/2025 at 21:56 0 comments

    https://github.com/drandyhaas/HaasoscopePro/releases

    Tons and tons of progress on the software since release 31.01:

    1. XY Mode Window
      - Added dedicated XY mode window
      - Pops up to the left of the main window with bottom edges aligned
      - Can use any available channels or math channels for X and Y
    2. Multiple Dummy Board Support
      - Can now configure and run multiple dummy boards alongside real boards
      - Dummy boards labeled with "(D)" suffix in GUI
      - GUI configuration dialog with per-board settings for dummy boards
    3. Per-Channel Resampling
      - Each channel can have independent resampling (sin x / x) settings
    4. Peak Lines
      - Each channel gets its own max/min peak lines
      - Peak lines width now updates with global line width setting
      - Fixed x-axis stability using fixed reference x-axis... prevents jitter from trigger stabilization
    5. Pulse Stabilizer Feature
      - New stabilization mode using edge midpoint instead of threshold crossing
      - Better for pulse/digital signals... uses trigger delta to find edge min/max
      - Each board can have independent pulse stabilizer settings
    6. Trigger Stabilizer Tuning
      - Reset corrections when resetting time axis (fixes stability / jitter bug)
    7. Persistence features:
      - Per-channel persistence control
    8. Line width now default to 2 pixels
    9. Improved line colors
    10. History window feature to view and replay past 100 events with save/load capability
    11. Triangular arrow markers at ends of cursor lines and trigger lines
    12. Clickable labels for trigger position and threshold to reset values
    13. Improved trigger position reset when zoomed
      - Centers view on trigger position
    14. Trigger GUI improvements
      - Full range trigger position slider when zoomed
      - Fixed trigger stabilizer for two-channel and interleaved modes
      - Trigger lines and triangles hidden until PLL calibration completes

  • Release 31.01 - quieter fan and more software features

    haas10/13/2025 at 03:34 0 comments

    https://github.com/drandyhaas/HaasoscopePro/releases

    Summary of Changes Since 30.10

    • Can give each channel a custom name, reminding you of what that channel is showing
    • Channel names are also optionally be shown on the plot as a legend
    • Implemented fan PWM control with temperature-based speeds
    • Fan speeds adjust at 30°C, 40°C, and 50°C thresholds
    • Custom math operations support: can define your own operations as math expressions and apply them to data
    • Reference lines for math channels
    • Time skew per (real) channel adjustment
    • Enhanced board setup error handling and thread cleanup
    • Better error handling for USB communication failures due to power drops
    • Skip bad boards and handle old bytes
    • Firmware update/verify progress bars

  • Release 30.10 - yet more features

    haas10/11/2025 at 16:12 0 comments

    All builds updated to python 3.14. 

    https://github.com/drandyhaas/HaasoscopePro/releases

    Binaries may work on other flavors too, but these were built on:   

    • Windows Intel 11 Pro 22H2   
    • Mac M3 Sequoia 15.6.1  
    • Linux Intel Ubuntu 25.04 (coming soon)

    Summary of Changes Since 29.33

    • Firmware v30 Support: Updated to support firmware version 30 with new trigger capabilities
    • Added trigger delay and holdoff functionality (v30+)
    • Trigger time-over-threshold (ToT) must stay above contiguously
    • Trigger delta, ToT, and holdoff now per-board
    • Trigger time and delay shown via View → Trigger info
    • Single trigger mode list dropdown box
    • Added duty cycle measurement
    • Added period measurement
    • Peak detection feature (View... Peak detect)
    • Frequency calculations corrected for resample factor
    • Added "smooth" math operation
    • FFT can now be performed on math channels
    • Hardware thread per board for better parallelization
    • Per-board ADC and board temperatures
    • Multi-board oversampling GUI handling
    • Track firmware version per board
    • USB optimization and device reopening logic
    • GUI optimizations for plotting
    • Profiling improvements
    • Give up calibration after 50 bad events
    • Abort calibration if no edges detected
    • Continue drawing after calibration fails
    • Extra trigger stabilizer improvements (widened window, limited drift, use best self-triggering board)
    • Skip next event after oversampling changes
    • 50Ω scale correct at startup
    • Persist average option now a menu item
    • Better tooltips showing time for ToT, delay, and holdoff

    • More new software features since version 29.32

      haas10/07/2025 at 11:25 0 comments

      It's been a busy few days of work on the software, and there's already some significant new features to debut, again in the v29_cleanup branch.

      • I added a new Rise/Fall Time measurement algorithm, based on edge detection. The previous algorithm, which remains as an option, performs a fit to a rising edge shape with 3 pieces - a bottom, a slope, and a top. But it requires a solid bottom and top area in order to fit the slope correctly. This fails for fast signals that are constantly changing, like a 1 GHz sine wave. The new algorithm only fits the edge, which is first found by an algorithm that looks for places where the signal crosses the trigger threshold near the trigger time. With either algorithm, the edge or the original piecewise fit, the resulting fit results can be shown on the signal so you have confidence in what the fit represents. The edge method is now the default, but you can switch in the Measurements menu.
      • There's a new Settings Management System that lets you save and then load all the settings and view options currently set on the GUI. It's in the File menu, of course. So once you have your waveforms being displayed and measured the way you want, you can save the settings and get back to that same state at a later time, even after restarting the program or on a different computer or Haasoscope Pro.
      • There are now Math Channels, which are virtual waveforms calculated from operations on either one or two data channels. For instance, Ch 0 - Ch 1, for a differential measurement. You can also use virtual math channels themselves as inputs to other math channels, to build up more complicated operations. Reference waveforms from channels that have been taken can also be used as inputs. This is all done in the new window from View... Math channels. They can also be used for measurements - just select the math channel in the math channels window, click the "Use for measurements" checkbox, and then add the measurement via the Measurements menu.
      • Several improvements have been made to the Measurements System. Each measurement is now possible to show on a per-channel basis, e.g. Rms for Ch 1, Mean for Ch 0, Risetime for Ch 1, etc. The measurements can then be removed by clicking an "X" next to each measurement, or removed en masse by the Remove all measurements for this channel, or Remove all measurements, menu items. Measurements can also be for math channel results, e.g. Rms for Math 2, etc.
      • A new Cursor System has been added, letting you show and measure positions and delta positions on the screen manually, with a new Cursors menu. As you drag the cursor lines, they show the time and voltage info on the plot (both in divisions and in voltage for the currently selected channel). The time info can also be switched from absolute to relative to the trigger time. And dragging cursors horizontally can be made to snap to the currently selected channel's waveform vertically, if enabled in the cursors menu. The current trigger threshold is also shown in a separate display on the bottom of the plot, both in divisions and in absolute voltage for the currently selected channel, if enabled in the view menu.
      • Reference Waveform functionality has been expanded, letting you show or hide reference waveforms per channel, or clear all. These can be saved to a file, and then loaded back in a later session as well. (This is a separate file from the scope settings save/load file, and just stores the reference waveforms.)

      This all brings us up to v29.33!

    • New features and v29_cleanup​ software

      haas10/02/2025 at 18:29 0 comments

      I've been hard at work on the software side lately still.

      In v29, the "stable" branch, I added quite a few things, based on user feedback and my own experience:

        - Power checking and sanity features: If you plug in the unit wrong, like via a low-power USB port on your old computer, it shouldn't "freak out". It should graceful report that it doesn't have enough power, and then tell you to fix the issue and restart. Now, the software will check various functionality for sanity upon startup:

      • Can we read back the chip ID's from the ADC, amplifiers, etc.?
      • Can we lock the PLL and FPGA clocks?
      • Can we calibrate the PLL and get a clean data stream from the ADC with no errors?

      And if things go wrong while the board is running, like you remove the external power, or make the USB cable flakey, it should detect those errors and deal gracefully. Now:

      • The PLL is attempted to be reset on bad clock/strobe detection from the ADC to FPGA
      • Data checksum errors will throw an error and prevent further data taking

      Plus, if any of these checks fail, the Update firmware menu item will be disabled, so you won't risk bricking your board!

        - Some people (well, one actually) had an issue where the DPI settings for different displays would confuse Qt5 and the GUI would look weird. This is a known issue and has a known workaround, which has now been implemented. 

        - The voltage scale did not correctly account for 50 Ohm input impedance, which is basically 1/2 that of 1M Ohm impedance, given that we start with 50 Ohm termination on the board. Now it's right.

        - A low pass filter option is available now, so you can apply 20 MHz (or 1, 5, 10, 100 MHz, whatever) to your signal. This is done in software, but it's amazingly fast. (Just one line of scipy code too!)

      There's also a new "v29_cleanup" branch where all of the new work is now going. There's been lots of improvements there (but this is not as well-tested as v29, so beware of extra possible bugs). It started out with a MAJOR code refactoring, a serious cleanup and modularization of the main GUI class, which was doing WAY too much. There's now a separated FFT window, SCPI socket for ngscopeclient, data processor, plot manager, etc. This has allowed me to greatly increase the maintainability and understandability of the code and to make it much easier and faster to add new features. Here are some of the them:

        - There's now an XY plot mode, where you plot channel 1 vs channel 0. You have to be in "two channels" mode on the currently selected board for the XY mode option to be active in the View menu.

        - Reference waveforms have been added, letting you save a frozen trace, for each channel independently, overlaid with the current waveform.

        - Massive FFT improvements have been made. You can now have multiple channels on the FFT plot, scaled appropriately to compare signals. There's a peak hold line showing the peaks (which can be reset), and those peaks are labeled with their frequencies.

        - For oversampling with two boards, there's now an edge-based autocalibration, which also averages over multiple events (100 by default) for great accuracy on the timing corrections. There's also automatic DC offset and amplitude corrections for oversampling on the slave board. In fact, if the menu option "Auto oversample alignment and interleave" is checked (which it is by default), all you have to do to oversample and interleave the samples for two units is press the "Oversampling" checkbox on the channel. All calibrations are automatically performed and the samples are interleaved, giving you one magical channel with twice the sample rate!

        - There's now a measurement table for Mean, RMS, Risetime, etc., with units, and rolling Avg and  RMS columns. Plus you can click on a measurement to bring up a little measurements histogram window, to see how the last 100 measurements were distributed.

        - Two-channel...

      Read more »

    • v29 firmware and software

      haas09/13/2025 at 02:27 0 comments

      Yet some more software (and minor firmware) improvements!

      See the videos in my YouTube playlist to see demos.

      You'll need to either do "git checkout v29" or download the zip file of that branch.

      • Persistence of traces can now be shown, which then fade out after an adjustable amount of time.
      • You can also now do "File... Take screenshot" to save a picture of the screen. This also works in the fft window.
      • You can go to "View... log scale" in the fft plot window now to switch to log y scale.
      • Firmware will automatically reload from flash after a firmware upgrade, so you won't need to manually power cycle in the future.
      • Support for v0.1 of ngscopeclient - the first official release!
      • Axis on the right showing voltage scale for the currently selected channel
      • 200 mV/div (instead of the whacky 160 mV/div scale)
      • Show sample rate in status bar
      • Tooltips when hovering over menu items and controls
      • Arrow keys for offset (up/down) and timescale (left/right) and zoom (shift + up/down)
      • Can drag vertical trigger time line when zoomed in
      • Persist average line, taking average of up to 16 waveforms
      • Extra trigger stabilizer that runs on upsampled data (in Advanced menu, on by default)

    • v28 firmware and software

      haas09/08/2025 at 10:47 0 comments

      Haasoscope Pro's have been out in the wild for a few weeks now, and they seem to be working well!

      Based on user feedback so far, I've already made some significant improvements to the firmware and software. Since a firmware update is required, I haven't put the changes into the default (main) git branch. You'll need to either do "git checkout v28fixtrigger" or download the zip file of that branch. Once you have this new software, it should complain that you are running v28 software, but have v27 firmware on your Haasoscope Pro. See my video on how to update the firmware - basically just go to File... Update firmware... and then wait a couple minutes for the new firmware to be uploaded and verified (don't interrupt the upload in any way though, or you'll "brick" the unit, requiring a manual firmware restore), then power cycle the unit and restart the software. Here's the main improvements:

       - The edge trigger, which runs in the firmware and decides when to freeze the data taking for readout, is now stable at high frequencies (50+ MHz). Previously, there was an error of up to 3 samples (almost a ns) that could occur if a second edge fired while the current data frame of 40 samples (12.5 ns) was being triggered on. This led to jitter for high frequency signals.

       - A software trigger edge position stabilizer has been added. Even with the new v28 firmware edge trigger, there is a remaining error of up to 1 sample (312.5 ps), which is unavoidable since it depends on when the sample happens to occur, relative to when the waveform crosses the trigger threshold. Now, for each waveform being drawn, the software shifts the samples by a small amount to (approximately) correct for this. I'm very proud of the algorithm: first we see which two samples go from below to above the trigger threshold, then fit a line between those two samples and see when in time that line crosses the trigger threshold, then shift the samples so that point occurs at the requested trigger time. It's optional (see Advanced menu), but on by default, since it has almost no effect on drawing speed. With it on (and the new firmware trigger), the waveforms are incredibly stable - maybe ~10 ps of trigger jitter!

       - Plot lines can be made 3 pixels wide, instead of just 1 pixel wide. This is optional, and off by default (see the View options area), since it slows down drawing a bit.

       - Upsampling (4x) is on by default now (see Readout options area). It slows down drawing a bit, but really makes waveforms look nicer, especially at small timescales.

       - When measuring the risetime (or falltime) of signals, dotted lines are drawn showing the range of data being used to fit the risetime, and the slope of the risetime. This makes you more confident that risetime is being measured correctly. It's optional, but on by default when measuring risetime.

      Here a pic of what a waveform looks like now, including risetime fit lines:

    View all 22 project logs

    Enjoy this project?

    Share

    Discussions

    James Newton wrote 10/11/2025 at 19:28 point

    i'm not sure how you get 2GHz, if the ADC is 3.2GS/s? Doesn't Mr. Nyquist want a word with you?

      Are you sure? yes | no

    haas wrote 10/11/2025 at 20:44 point

    Indeed. You need two of the scopes, combined in oversampling mode, to get 6.4 GSps to really take advantage of the full bandwidth. With just one scope there's an anti-alias filter by default (can be disabled) that limits it to 1.4 Ghz. Please see the CrowdSupply page, or info here on Hackaday, for more info!

      Are you sure? yes | no

    Intector wrote 09/10/2025 at 20:41 point

    This is by far the most interesting projects I cam across since a long time, absolute incredible.

      Are you sure? yes | no

    haas wrote 02/26/2025 at 01:26 point

    Project is now live!

    https://www.crowdsupply.com/andy-haas/haasoscope-pro

      Are you sure? yes | no

    haas wrote 02/19/2025 at 13:35 point

    Catch the YouTube Livestream with CrowdSupply next week... 

    https://www.youtube.com/live/iFVRcHPmOKk?si=uV00BP1ANXJQ_4-S

      Are you sure? yes | no

    dsl wrote 02/21/2025 at 20:14 point

    okay, noted :)

      Are you sure? yes | no

    Jesse Farrell wrote 12/01/2024 at 18:47 point

    This project is awesome! Thanks for documenting and posting logs. Fingers crossed we'll be getting some front end design logs ;)

      Are you sure? yes | no

    haas wrote 12/01/2024 at 19:53 point

    Thanks! I was literally working on that next... 

      Are you sure? yes | no

    haas wrote 12/01/2024 at 13:45 point

    As for KiCAD, I'm in the process of making the switch. I actually did try importing this project's eagle files into KiCAD (the latest version) and it went fine. Try it!

      Are you sure? yes | no

    dsl wrote 11/30/2024 at 21:54 point

    This is one of the most (or, perhaps, the most) excited open hardware project I've seen over long time. I've spent sometime looking for a 1 GHz bandwidth MSO, but its cost is hardly justifiable for a tinkerer (PicoScope 6000E Series, for example). I'd be glad to support it on crowdsupply.

      Are you sure? yes | no

    haas wrote 11/30/2024 at 23:28 point

    Thank you! I'm glad you share my excitement about it. 

      Are you sure? yes | no

    dsl wrote 12/01/2024 at 12:08 point

    The only wish of mine would be to have it as a KiCAD project instead of Eagle.

      Are you sure? yes | no

    Does this project spark your interest?

    Become a member to follow this project and never miss any updates