LabVIEW Course: ILV3

advertisement
LabVIEW Course: ILV3
Data Acquisition Fundamentals1
Introduction
In this lab, you will learn about the basics of data acquisition. First, you
will configure your data acquisition hardware in Measurement &
Automation Explorer. Then, you will examine the data acquisition VI`s in
LabVIEW. Finally, you will develop analog input applications.
Objective

Learn the uses of Measurement & Automation Explorer.

Learn about single-point acquisition, continuous acquisition, buffered
acquisition, compare the advantages and disadvantages of these
methods and find some of their limitations.

This course starts with some theory on the way measurement and
automation is implemented in LabVIEW. The Measurement &
Automation Explorer (MAX) is software that allows you to (i) set the
parameters for data acquisition, and (ii) test the available hardware.

The section “Organization of data acquisition VIs” lists the various
types of Vis that can be used for data acquisition.

The experimental exercises are divided in parts 1-5. Part 1 uses the
MAX software to present a quick exploration of the capabilities of the
I/O card and test the hardware. Part 2 demonstrates the simplest form
of data acquisition, being the AI sample channel VI, which samples
one data point at a time. It also shows the reverse process, being the
digital-to-analog conversion with the AO update channel VI, and
stimulates you to find some real-time limitations of LabVIEW. Part 3
discusses the use of buffered data acquisition to read a whole block of
consecutive and properly-timed data points. This type of data
acquisition circumvents (most of) the timing limitations mentioned in
part 2. Part 4 and 5 discuss the use of continous data acquisition, which
combines the “best of both world” (at least for fast signals) as it is
based on the continuous acquisition of (properly-timed) blocks of data
points.
Contents
This is a adaptation of the original course material “Data Acquisition Fundamentals” by Sarah Finney,
Arizona State University
1
1
Report
Within one week after you did the experiment (and preferably even on the
same day) you should hand in:


Answers to the following questions:
1.
Explain in your own words the advantages and disadvantages of the
three types of data acquisition introduced in parts 2-4.
2.
Explain in your own words the action of the four AI VI’s that are
generally needed for proper sampling, and that are shown among
others in the VI’s in parts 3 and 4.
The final operational VI’s that you wrote for parts 2-5, being
Voltmeter2, Buffered Acquisition, Continuous Acquire,
Acquire with triggering. If you also did the optional exercises in
part 5, please mention it and hand in this VI as well. This effort is
certainly appreciated and will affect your rating; the optional exercises in
part 5 give you a nice feeling for the many capabilities of LabVIEW.
2
Theory
Measurement & Automation Explorer
Introduction
Measurement & Automation Explorer, or MAX, is a software interface
that gives you access to all National Instruments DAQ, GPIB, IMAQ,
IVI, Motion, VISA, and VXI devices connected to your system. The
shortcut to MAX is placed on the desktop during installation of NIDAQ. MAX is used primarily to configure and test National
Instruments hardware, but it offers other functionality, such as
checking to see if you have the latest version of NI-DAQ installed. The
functionality of MAX is divided into five categories:
• Data Neighborhood
• Devices and Interfaces
• Scales
• Software
• IVI Drivers
Data Neighborhood
Data Neighborhood contains the virtual channels. The Data
Neighborhood category shows you the currently configured virtual
channels and provides utilities for testing and reconfiguring those
virtual channels. Data
Neighborhood also provides access to the DAQ Channel Wizard,
which allows you to create new virtual channels.
DAQ Channel Wizard
The DAQ Channel Wizard is a software interface that lets you
create new virtual channels. A virtual channel is a shortcut to a
configured channel in the system. You can set up the configuration
information for the channel and give the channel a descriptive
name at the same time. Later, you can use the descriptive name to
access that channel and its configuration information in LabVIEW.
You can give the channel a description, decide what type of
transducer the channel will use, set the range (determines gain),
choose the grounding mode, assign custom scaling for the virtual
channel, and give the channel a descriptive name to replace the
channel number all at the same time.
For example, if channel 0 is connected to a temperature sensor, you
could create a virtual channel for channel 0 and call it Temperature
3
Sensor. You can create virtual channels for analog input, analog
output, and digital I/O. In this case, referring to a channel by a
name (Temperature Sensor) instead of a number (0) helps you
remember what the channel does.
Devices and Interfaces
Devices and Interfaces display the currently installed and detected
National Instruments hardware. Devices and Interfaces also include
utilities for configuring and testing devices. The two utilities that are
specific to DAQ devices are Properties and Test Panels.
Properties
Properties is a utility for configuring DAQ devices. When you
launch the Properties utility, a dialog box appears with the
following tabs that you can use to configure the DAQ devices.
• System—the System tab allows you to change the device
number, and it provides two buttons for testing the DAQ device.
The first button is the Test Resources button. After you have
installed the DAQ device, right-click Devices and Interfaces.
Select Properties and right-click Test Resources. This button
performs a basic test of the system resources assigned to the
device. The system resources tested are the base I/O address, the
interrupt request (IRQ), and the direct memory access (DMA).
– Base I/O Address—A DAQ device communicates with a
computer primarily through its registers. NI-DAQ writes to
configuration registers on the device to configure the device,
and reads data registers on the device to obtain the device status
or a signal measurement. The base I/O address setting
determines where in the computer’s I/O space the device
registers reside.
– Interrupt Request (IRQ)—another way the DAQ device
communicates with the computer is through processor
interrupts, which give the processor the ability to respond
quickly to its peripherals. In the case of a DAQ device, it is not
efficient for the processor to continually check if data is ready
to be read from the device. A DAQ device can use an interrupt
that signals the processor that it has data waiting to be read.
Each interrupt request has a number assigned to it.
– Direct Memory Access (DMA)—the third way the DAQ
device can communicate with the computer is through direct
memory access (DMA). DMA is a data transfer method in
which data is transferred directly from the peripheral to
computer memory, bypassing the processor. DMA is usually
required to achieve maximum data transfer speed, making it
useful for high-speed DAQ devices. DAQ devices that use the
PCI bus have their own onboard DMA channels, and the PCI
bus handles the sharing of that DMA.
4
• AI. The AI tab allows you to configure the default Polarity/Range
for the ADC and the default mode for grounding the DAQ device.
The default is applied only if the settings aren’t changed in
LabVIEW.
• AO. The AO tab configures the default polarity of the analog
output signal, and allows you to specify if you are using an external
voltage reference for the DAC.
• Accessory. The Accessory tab specifies any accessories you are
using with the DAQ device such as the TBX-68 (terminal block
with built-in cold-junction compensation). If NI-DAQ does not
need to know about the accessory, it will not be on the list. In that
case, choose None.
• OPC. The OPC tab allows you to set the AI recalibration period
if you are using the NI-DAQ OPC server. The use of the NI-DAQ
OPC Server is beyond the scope of this lab.
• Remote Access. The use of Remote Access is also beyond the
scope of this lab.
Test Panels
After the device passes the basic resource test and you configured
the System, AI, AO, Accessory, OPC and Remote Access tabs,
return to the System tab and click the Test Panels button. The Test
Panel is a utility for testing the analog input, analog output, digital
I/O, and counter functionality of the DAQ device. The Test Panel
is useful for troubleshooting because it allows you to test the
functionality of the device directly from NI-DAQ. If the device
does not work in the Test Panel, it will not work in LabVIEW. If
you ever have unexplainable trouble with data acquisition in a
LabVIEW program, use the Test Resources button and the Test
Panels button to make sure the device is working properly.
Scales
Scales shows you all the currently configured custom scales and
provides utilities for testing and reconfiguring those custom scales.
Scales also provides access to the DAQ Custom Scales Wizard, which
allows you to create new custom scales.
DAQ Custom Scales Wizard
The DAQ Custom Scales Wizard is a utility that creates custom
scales you can use to determine scaling information for existing
virtual channels. Each custom scale can have its own name and
description to help you identify it.
5
A custom scale can be one of three types: linear, polynomial, or
table.
• Linear—A scale that uses the formula y = mx + b.
• Polynomial—A scale that uses the formula
y = a0 + (a1 * x) + (a2 * x2) + … + (an* xn).
• Table—a scale in which you enter the raw value and the
corresponding scaled value in a table format.
Software
Software shows all the currently installed National Instruments
software.
The icon for each software package is also a shortcut that you can use
to launch the software. The Software category also includes a Software
Update Agent. The purpose of the Software Update Agent is to check
if the National Instruments software is the latest version. If the
software isn’t the latest version, the Software Update Agent opens the
Web page on ni.com to download the latest version of the software.
Software Architecture for Windows
The main component of NI-DAQ, the nidaq32.dll, makes function
calls directly to a DAQ device. The function that the nidaq32.dll
performs depends on where you access it from. Both MAX and
LabVIEW can talk to NI-DAQ. MAX is used primarily for
configuring and testing the DAQ device. MAX not only helps
configure devices, but it also tells you what devices are present in
the system. To do this, MAX must communicate with the Windows
Device Manager and the Windows Registry.
Organization of Data Acquisition VI`s
Most of the Data Acquisition VI`s located on the Functions»NI
Measurements»Data Acquisition palette are grouped in the following
levels according to their functionality:
• Easy VI`s
• Intermediate VI`s
• Utility VI`s
• Advanced VI`s
6
Easy VI`s
Easy VI`s perform simple DAQ operations and typically reside in the
first row of VI`s in a palette. You can run these VI`s from the front
panel or use them as subVI`s in basic applications
You need only one Easy VI to perform each basic DAQ operation.
Unlike Intermediate and Advanced VI`s, Easy VI`s automatically alert
you to errors with a dialog box that allows you to stop the execution of
the VI or to ignore the error.
Intermediate VI`s
Intermediate VI`s have more hardware functionality and efficiency in
developing applications than Easy VI`s. Use Intermediate VI`s in most
applications. Intermediate VI`s give you more control over error
handling than Easy VI`s. With each VI, you can check for errors or
pass the error cluster to other VI`s.
Utility VI`s
Utility VI`s are also intermediate-level VI`s and thus have more
hardware functionality and efficiency in developing an application than
Easy VI`s. Utility VI`s consist of convenient groupings of Intermediate
VI`s. They are for situations where you need more functionality
control than the Easy I/O VI`s provide but want to limit the number of
VI`s you call.
Advanced VI`s
Advanced VI`s are the lowest-level interface to the DAQ driver. Very
few applications require the use of Advanced VI`s. Advanced VI`s
return the greatest amount of status information from the DAQ driver.
Use Advanced VI`s when Easy or Intermediate VI`s do not have the
inputs necessary to control an uncommon DAQ function.
7
Part 1. Measurement & Automation Explorer (MAX)
In Part 1, you will become familiar with the installation and
configuration of a data acquisition device. This exercise also gives a
detailed tour of MAX.
1. Connect the a sine wave with frequency of 1 Hz and an amplitude of
1.00 V from the Tabor function generator to the AI0 on the Connexion
Box and the SYNC OUT TTL to from the Tabor to AI1.
2. Launch MAX by double-clicking the icon on the Windows desktop.
3. Double-click first the Devices and Interfaces category and doubleclick next on Traditional NI-DAQ Devices. MAX searches for
installed hardware and lists the National Instruments devices found. A
device number in parentheses is assigned to each device in the system.
The LabVIEW DAQ VI`s use this number to specify which device the
VI`s address. If the device is not listed, go to View»Refresh.
4. Right-click the DAQ device folder for the specific device and select
Properties. A configuration dialog box appears.
The Configuration dialog box contains several tabs. The System tab
allows you to change the device number of the DAQ device. It also
reports the system resources assigned to the device through the
Windows Registry. The system resources shown in the Configuration
dialog box include the following items:
• Input/Output Range (Base I/O Address)—The DAQ device
communicates with the computer primarily through its registers.
The base I/O address setting determines where in the computer
I/O space the device registers reside.
• Interrupt Request (IRQ)—an interrupt gives the processor the
ability to respond quickly to its peripherals. Think of a processor
interrupt as a doorbell. If you did not have a doorbell, you would have
to go to the door periodically to see if anyone were there. With a
doorbell, you need to go to the door only when the doorbell rings, and
you are confident that someone is there waiting. Likewise, a DAQ
device uses an interrupt as a doorbell to tell the processor that it has
data waiting to be read. Every device that uses processor interrupts
must be assigned a different interrupt level, or the devices can conflict
with each other.
• Direct Memory Access (DMA)—DMA is a data transfer method in
which data is transferred directly from the peripheral to computer
memory, bypassing the processor. DMA is usually required to achieve
maximum data transfer speed, making it useful for high-speed DAQ
devices. DAQ devices that use the PCI bus have their own onboard
DMA channels, and the PCI bus handles the sharing of that DMA.
8
DAQ devices that use the AT/ISA bus must assign themselves a DMA
channel from the computer.
5. Click the AI tab. This tab allows you to set the default polarity/range
and grounding mode used for analog input signals. These default
values (Polarity/Range: -10V - +10V and Mode: Differential) are
used by NI-DAQ as long as other settings do not override them.
6. Click the AO tab. This tab allows you to set the default analog
output polarity (Bipolar).
7. Click the Accessory tab to specify any accessories that are attached
to the DAQ device.
Devices on the Accessory list usually provide some form of signal
conditioning for signals, or they increase the number of channels you
can measure. If an accessory does not change the way signals are
measured, it does not appear on the Accessory list.
8. Click the OPC tab. The OPC tab allows you to set the recalibration
period when using an OPC server. The use of an OPC server is beyond
the scope of this lab.
9. Complete the following steps to verify the DAQ system is set up
correctly.
a. Click the System tab.
b. Click Test Resources. This action tests the system resources
assigned to the device.
c. Click OK.
10. On the System tab, click Run Test Panels. The following front
panel appears. The Analog Input tab allows you to read the analog
input channels. You should see the sine wave from the function
generator which is connected to Channel 0.
In the lower left corner of the test panel, you can see the following
three options for Data Mode.
• Strip Chart: continuously displays data, scrolling as new data is
acquired.
• One Shot: displays only one screen of data.
• Continuous: continuously displays a screen of data at a time
One Shot and Continuous Data Modes allow you to adjust the
sample rate. The higher the sample rate, the more accurately the
graph displays the waveform.
Tryout these different possibilities for reproducing the input signal.
Change the frequency of the signal to 500 Hz and the OUTPUT to
TRIANGLE. Change the settings on the Test Panel so that you get a
smooth display of the signal.
.
9
11. On the Analog Input test panel, change the channel to 1 and
observe the signal. What will you see if you change the channel to 2?
12. Click the Analog Output tab. In this dialog box, you can set up a
DC voltage or sine wave on one of the analog output channels of the
DAQ device. Complete the following steps to output a sine wave on
channel 0.
a. Connect the AO0 connector on the Connector Box with
Channel 1 of the Oscilloscope
b. Enter 1.0 V for the Sine Wave Amplitude and click Start
Sine Generator
c. Measure the frequency of the sine wave on the oscilloscope.
13. Click the Counter I/O tab. Complete the following steps to verify
counter/timer operation, do the following:
a. Change the Counter Mode to Simple Event Counting. The
counter is now set up to count the pulses of a 100 kHz onboard
signal.
b. Click Start. The Counter Value should increment rapidly.
c. Click Reset to stop the counter test.
14. To increase the rate of the pulses, change the Event Source to
Internal 20 MHz Clock and click Start. Notice how much faster the
Counter Value increases. It increments faster because the pulses being
counted now occur at 20 MHz, instead of 100 kHz. Click Reset to stop
the counter.
15. Click the Digital I/O tab. This tab gives you access to the eight
digital lines on the device and allows you to set each line as an input or
output line.
16. Close the test panel and exit MAX.
10
Part 2. Voltmeter VI
Complete the following steps to build a VI that measures a low
frequency voltage from the Tabor function generator. Connect the
OUT on the Tabor function generator with AI0 on the Connector
Box. Set the frequency of the Tabor to a value of 50 mHz and the
amplitude to a value of 2.0 V.
1. Open a blank VI and build the following front panel.
Configure the meter scale for -2.0 to 2.0, using mouse and keyboard.
You might need to enlarge the meter to display the scale.
2. Build the following block diagram.
AI Sample Channel VI (Functions»NI Measurements»Data
Acquisition»Analog Input palette)—Reads an analog input channel
and returns the voltage.
Choose the Connect Wire tool on the Tools Palette. Right Click on
the AI Sample Channel VI and look under Select Type. This shows
that the output of the VI can have two different data types: single-point
waveform ( array of DBL) and scaled value ( DBL), whereas the
automatic setting of course lets LabVIEW choose by itself. VIs that
works with more than one data type are set to be polymorphic.
Wait Until Next ms Multiple function (Functions»Time & Dialog
palette)—Causes the loop to execute every 100 ms.
11
Important: if you want to know more about a function, use Show
Context Help (Ctrl-H). More detailed information can be found in
VI, Function, & How-To Help…(Ctrl-?) and Search the
LabVIEW Bookshelf… of the Help menu
3. Save the VI as Voltmeter.vi.
4. Display the front panel and run the VI. The meter displays now the
slowly varying voltage output of the function generator. If an error
occurs, the Easy I/O VI`s display a dialog box showing the error code
and a description of the error.
5. Change the Block Diagram in the following way:
(i) Include an analog output of the sampled signal to DAC0. Use the
AO Update channel.vi (third item in top row of palet Functions»NI
Measurements»Data Acquisition»Analog output). Under point 6,
the analog output of DAC0 will be displayed on the oscilloscope
together with the original signal.
(ii) Change the variable that specifies the wait period (and that was 100
ms in the previous exercise) from a constant into a control. This will
bring it to the front panel and allows for easy adjustment.
(iii) Add a switch or button to the front panel that allows you to switch
the (wire connection to the) voltmeter ON/OFF. A convenient way to
do this is by placing a case structure around the voltmeter.
6. Save the VI as Voltmeter2.vi.
7. Connect both the original signal, which serves as input for ADC0,
and the sampled output of DAC0 to the two oscilloscope channels. Run
the VI and have some fun by modifying the settings for (i) Tabor
frequency and amplitude, (ii) wait time = 1/sampling rate.
8. After the first "quick-and-dirty" tests under point 7 we will now
perform a more systematic investigation of the timing limits of the
single-point I/O VIs that we have employed. Observe the oscilloscope
traces (preferably in the trigger mode) and determine the timing
limitation of the VI, by determining (within a factor of two) the
minimum wait time for which the VI still runs properly and the
maximum wait time for which real-time operation is frustrated.
Describe your findings, both qualitative and quantitative, under two
conditions: (i) voltmeter ON, (ii) voltmeter OFF.
9. From the large timing differences observed under point 8 we note
that it takes LabVIEW considerable time to display something like a
simple voltmeter. In the current VI, which is based on single-point
input and output, this is a serious limitation for any real-time operation
much faster than say 100 ms per sample point. Fortunately, there are
good alternatives for faster acquisition. Two tricks are use: (i) the data
flow is buffered on the I/O card, and (ii) the timing is regulated on the
I/O card. These alternative types of data acquisition will be discussed
in parts 3-5.
12
Part 3. Buffered Acquisition VI
With a buffered acquisition, LabVIEW tells the DAQ device how
many points to acquire and at what rate to acquire them. Timing then
becomes the responsibility of the DAQ device. In a buffered
acquisition, the DAQ device controls all aspects of the acquisition. In
contrast, with a software-timed acquisition, the computer is solely
responsible for managing the acquisition, which can be problematic if
the computer suddenly cannot give priority to the data acquisition
process.
1. Open a new VI and build the following front panel.
You can create most of the front panel controls shown above from the
block diagram by right-clicking the appropiate terminals of the DAQ
VI`s and selecting Create Controls.
In this exercise, you acquire data from the Tabor function generator.
The output OUT must be connected to AI0 on the Connector Box and
the output SYNC OUT to the AI1. Set up the function generator with
a frequency of 50 Hz and amplitude of 3.0 V. The purpose of the VI is
to display the data on a Waveform Graph. Set the Scan Rate to 20000
and Buffer Size to 1000. Set the DAQ Channel Name control to 0 and
the Device to the proper device number for your DAQ device (1).
2. Build the following block diagram.
13
The AI Config, AI Start, AI Read and AI Clear VI`s can be found in
the Functions»NI Measurements»Data Acquisition»Analog Input
palette. The simple error handler.vi is located in
Functions»Time&Dialog palette.
3. Save the VI as Buffered Acquisition.vi.
4. Use the Help functions to investigate the different sub-VI`s used in
this VI so that you know their function and application. Study this
carefully, as your report should include a personal discussion on the
function of these subVIs.
5. From the front panel, run the VI. You should see a sine wave plotted
on the waveform graph.
6. Set the channel string control input to 0, 1 and run the VI again.
What do you observe?
7. Return to a single channel measurement. Run the VI again and test
the effect of (i) the settings of buffer size and scan rate, (ii) the
frequency of Tabor function generator, which we will change manually
for convenience. Also change the layout of the waveform graph by
rightclicking the logo in the upperrighthand corner and selecting one of
the options under common plots.
8. Close the VI.
14
Part 4. Continuous Acquire VI
Complete the following steps to build a VI that performs a continuous
acquisition operation and plots the most recently acquired data on a
graph.
1. Open a new VI and build the following front panel.
a. In this exercise, you acquire the data again from the Tabor
function generator. The output OUT must be connected to AI0 on
the Connector Box and the output SYNC OUT to the AI1. Set up
the function generator with a frequency of 20 Hz and amplitude of
2.0 V.
b. The purpose of the VI is to display the data on a Waveform
Graph. Set the Scan Rate to 1000 and Buffer Size to 500.
c. The # of Scans to Read must have the value of 200.
d. Set the DAQ Channel Name control to 0 and the Device to the
proper device number for your DAQ device (1).
2. Build the following block diagram.
15
The numeric constant of 0 you wired to the number of scans to
acquire input of AI Start enables a continuous or circular DAQ. Data
fill a buffer of fixed size in memory and then, on reaching the end of
the buffer, overwrite values from the beginning of the buffer.
3. Save the VI as Continuous Acquire.vi.
4. Display the Front Panel. Run the VI and monitor the data plotted on
the graph. Change the # Scans to Read to 50. On the Waveform
Graph the maximum time is now 0.05 s which is also the period of
Tabor frequency. However the image of the graph is not stationary. In
order to see a stationary image, one has to adjust the Tabor frequency.
Is the adjusted frequency higher or lower then 20 Hz? Try this out and
explain your observations!
5. Change the Scan Backlog Indicator on the Front Panel to a
Horizontal Fill Slide Indicator. Run the VI and monitor Scan
Backlog as you decrease the scan rate or the number of scans to
read at a time until you get the error code - 10846. The LabVIEW
Help explains describes the problem and the function of the scan
backlog as follows:
Scan backlog is the amount of data remaining in the buffer after this
VI completes. If scan backlog increases steadily, you are not reading
data fast enough to keep up with the acquisition, and your newly
acquired data may overwrite unread data and give you an overwrite
error. To correct, decrease the scan rate, increase the number of scans
to read, read the scans more often, or increase the buffer size.
6. Close the VI.
16
Part 5. Continuous Acquire with Triggering VI
To obtain a stationary image of the Waveform Graph, it is necessary to
trigger the incoming signal. In this VI the Continuous Acquire VI of
the previous part is modified in such a way that the signal is software
triggered using the AI Read DAQ VI.
1. Open the Continuous Acquire VI of Part 4. Use the same settings
of the controls as in Part 4. Set the Channel String Control input to 0,
1
2. Change the Front Panel in the way as shown below.
In order to add the Triggering Controls to the Front Panel, you have to
use the Cluster Control which can be found on the Controls»Array &
Cluster palette. The Triggering Controls must be placed in the Cluster
area in the same order as described under Conditional Retrieval
Specification in the Help menu belonging to the AI Read VI. All
these Controls must also have the correct specification as described in
the above mentioned Help topic.
You can find extensive information about the use of Clusters in
Chapter 10 of the LabVIEW Users Manual which can be found under
Help menu» Search the LabVIEW Bookshelf ….
3. Add a While Loop with the Stop terminal to the Block Diagram.
Connect the Triggering Cluster terminal to the Conditional Retrieval
input of the AI Read VI. See the following Block Diagram.
17
3. Save the VI as Continuous Acquire with Triggering.vi.
4. Run the VI and try out the different Triggering Controls and observe
their function closely. Do this with the help of the Conditional
Retrieval Specification in the Help menu of the AI Read VI.
5. (Optional) Change the VI so that it can be used as an ordinary
Oscilloscope with at least the following controls:

A Boolean Triggering Slope control (+ or -)

A Continuous Trigger Level control

A Boolean control in order to choose between triggering
with Channel 0 and Channel 1.

A Timebase Knob to setup the timebase of the Waveform
Graph between a maximum of 100 ms and a minimum of 10
ms. The Waveform Graph must always be built up with 200
points.

A Volt/Div Knob to setup the Volt Scale (0.1 V/Div to 1
V/Div).

Everything else that comes in your mind to expand and
improve the working of this Oscilloscope.
18
Download