Some analog front end designs

Voltage Ranges

What are voltage ranges?

A voltage range refers to the minimum and maximum voltages that can be applied to the input of the oscilloscope without the signal being clipped. It can also be thought of as a sensitivity level.

Multiple voltage ranges are used to maximimize the vertical resolution of the oscilloscope. Scoppy supports up to 8 voltage ranges and they are numbered 0 to 7. A single range is selected at any one time. This will normally be the smallest range that will accomodate the signal being measured.

For example, if we have an analog front end with voltage ranges of 0-10V, 0-5V and 0-2V then when measuring a signal with a maximum amplitude of 1.5V we would select the 0-2V range. If measuring a signal with a maximum amplitude of 3.5V we would use the 0-5V range and when measuring a signal with a maximum amplitude of 7V we would use the 0-10V range.

Voltage ranges and the oscilloscope analog front end

To measure different voltage ranges (eg. -5V to +5V or 0V to 0.1V etc) than the default (0-3.3V) you will need to add additional circuitry in front of the Pico to attenuate/amplify the signal and/or provide an appropriate voltage offset so that the voltage at the ADC pins of the Pico is between 0 and ADC_VREF (by default ADC_VREF is 3.3V).

You will need to design your analog front-end so that it either:

  • allows selection of the voltage range by the user (eg. using a mechanical switch). The front end will also need to set the appropriate values at the voltage range pins of the Pico so that the firmware and app know which voltage range is currently selected
  • OR
  • reads the values of the voltage range pins and sets the range of the front-end accordingly (eg. via an analog switch such as a CD4052). The values of the voltage range pins will be set by the firmware according to the current Volts/Div setting in the app.

If using the latter method, you will need to configure the Auto Voltage Range Pins setting to the appropriate value (see below).

You can also specify a Vref value for each range. This will result in a (PWM) voltage being generated at the configured GPIO. The Vref GPIOs are configured via the Firmware GPIO Settings. The Vref can be used to provide an appropriate offset voltage used to ensure that the voltage at the Pico ADC is between 0 and 3.3V. Of course you will need to provide circuity to convert the PWM ‘voltage’ to DC (eg. a low pass filter).

Voltage Range Configuration


To store the voltage range configuration on the firmware, tap the connection badge at the bottom-left of the screen, then tap Connected device, Firmware settings, Channels and then the channel you wish to configure.You can enter up to 8 voltage ranges per channel. If using more than 4 voltage ranges you will need to enable the extra voltage range pin in the Firmware GPIO Settings.

For each range the following values can be configured:

Min. Voltage
The input voltage that will result in 0V being present at the ADC.

Max. Voltage
The input voltage that will result in ADC_VREF (3.3V by default) being present at the ADC.

Vref - 1X (V)
The Vref to be generated when the probe setting is set to 1X. This can be left blank.

Vref - 10X (V)
The Vref to be generated when the probe setting is set to 10X. This can be left blank.

When more than one voltage range has been configured, the currently selected voltage range will be displayed in the channel badge in the app.


The voltage range settings can also be stored in the app rather then the firmware. To do this, tap the Channel badge, then Settings and then Voltage Ranges.

When the app connects to a Scoppy device (eg. a Pico or Pico W), the device firmware will upload its voltage range settings (if any) to the app. This will overwrite the voltage range settings stored in the app and will result in any changes you have made to the voltage range settings in the app being lost.

Selecting the ‘Do not overwrite when device is connected’ checkbox will prevent the voltage range settings in the app being overwritten by the voltage range settings of the device firmware.

Please note that not all Scoppy firmware contains voltage range settings (eg. the default scoppy-pico firmware). Any firmware built for a specific analog front-end will most probably contain voltage range settings eg. firmware for FSCOPE-500K boards and the DSO-500K oscilloscope.

Voltage range GPIOs

You can configure up to 3 voltage range GPIOs per channel (for a maximum of 8 ranges). The voltage range GPIOs are used to either indicate to the firmware/app which range has been selected (eg. if the range is selected by a mechanical switch) or for the firmware/app to control which range is selected (eg. via a switch such as a CD4052).

In the former case, the GPIOs are configured by the firmware as inputs. In the latter they are configured as outputs.

Each voltage range GPIO corresponds to a bit in the voltage range ID (which is a value between 0 and 7). The voltage range GPIOs are configured via Firmware GPIO Settings. These voltage range GPIOs are unsurprisingly named Voltage range bit 0, 1 and 2.

The table below shows the default voltage range GPIO configuration and the voltage range ID that corresponds to the different logical level combinations at the pins.


  • bit 2 is disabled by default.
  • each voltage range GPIO that is configured as an input is pulled low. If you connect nothing to these pins then range 0 is selected.
GPIO 2 (CH1 bit 1) GPIO 3 (CH1 bit 0) CH 1 Voltage Range ID
GPIO 4 (CH2 bit 1) GPIO 5 (CH2 bit 0) Ch 2 Voltage Range

Auto Voltage Range Pins

This setting controls how many GPIOs are used as outputs. If used as an output the app/firmware controls the logic level at these pins and the front-end hardware should select the correct range (eg. via an analog switch/mux such as a CD4052). If set to 1 then the Bit 0 voltage range GPIO will be an output. If 2 then Bit 0 and Bit 1 GPIOs will be outputs. If 3 then all 3 voltage range GPIOs will be outputs.

We call this ‘Auto voltage range’ because the voltage range will change automatically as the user changes the Volts/div in the app. If using the Auto voltage range feature, the app will allow the current range to be selected manually by tapping the channel badge and then tapping Select voltage range.

If using the auto voltage range feature then the largest ranges should appear first in the configuration. eg. if you have ranges of 0-10V and 0-2V then the 0-10V range should be assigned to range ID 0 and the 0-2V range should be assigned to range ID 1.

Mixed auto and manual voltage range selection

An Auto voltage range pins setting of 1 or 2 allows some of the voltage range GPIOs to be controlled by the firmware/app (outputs) and some to be controlled by the front end hardware (inputs). This can be used to design a front end for example that has a mechanical switch on the input to select different attenuation levels - and an analog switch/mux that automatically changes the range within that attenuation level in response to the Volts/Div setting changing within the app.

Inverting Analog Front Ends

Scoppy supports inverting analog front ends ie. front ends that will result in 3.3V at the ADC at the minimum input voltage and 0V at the ADC at the maximum input voltage. Simply select the Inverting checkbox to enable this.

See Also

Documentation Index
Scoppy on GitHub
Using the App
Scoppy Forum & Support
FHDM Store