Author Topic: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator  (Read 156917 times)

0 Members and 1 Guest are viewing this topic.

Online eTobey

  • Super Contributor
  • ***
  • Posts: 1187
  • Country: de
  • Virtual Features for the SDS800XHD -> My website
    • Virtual feature script
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #425 on: October 04, 2024, 07:36:08 am »
What is "[15:]" for?
"Sometimes, after talking with a person, you want to pet a dog, wave at a monkey, and take off your hat to an elephant."(Maxim Gorki)

SDS800X HD issues/tips/workarounds
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #426 on: October 04, 2024, 11:36:31 am »
What is "[15:]" for?

It removes a header from the received message.  I took it from some code posted earlier in the thread.  It never comes into play though since the read call never returns.
 

Offline adeuring

  • Contributor
  • Posts: 27
  • Country: de
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #427 on: October 05, 2024, 11:24:46 am »
Here's the code:

import pyvisa
pyvisa.log_to_screen()
ADDR = "USB0::26198::2100::AWG1523500244::0::INSTR"
rm = pyvisa.ResourceManager()
sgen = rm.open_resource(ADDR)
sgen.write("*IDN?")
print(sgen.read())
sgen.write("Display:Data?")
disp = sgen.read_raw()[15:]  # <<< HANGS HERE


I think you forgot a colon at the start of the display command. Try

sgen.write(":Display:Data?")

 

Offline renaatd

  • Newbie
  • Posts: 4
  • Country: be
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #428 on: October 05, 2024, 04:03:12 pm »
Well, the UTG962 is rather strict on what it accepts. I'm using this to read the display, and it works:
self.inst.write(":DISP?")
data = self.inst.read_binary_values(
            datatype="B",
            is_big_endian=False,
            header_fmt="ieee",
            expect_termination=True,
)


Just tried with "Display:Data?" in combination with read_binary_values, and it returns some data, but different from ":DISP?". Also tried with ":Disp?" and that causes a timeout. So I guess it's better to stick with ":DISP?".
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #429 on: October 05, 2024, 05:04:14 pm »
I think you forgot a colon at the start of the display command. Try

sgen.write(":Display:Data?")

I tried and it made no difference, but thanks for the suggestion!
« Last Edit: October 05, 2024, 05:11:27 pm by aix »
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #430 on: October 05, 2024, 05:11:11 pm »
self.inst.write(":DISP?")
data = self.inst.read_binary_values(
            datatype="B",
            is_big_endian=False,
            header_fmt="ieee",
            expect_termination=True,
)


I just tried this exact code with my device and it also hangs on read.

I've now tried several versions of Linux on two hardware architectures (aarch64 and x86_64) and the behaviour is remarkably consistent across all the configurations.  I wonder if it has something to do with my device or with how I'm configuring pyvisa.

If you have a working setup, would you mind sharing the firmware version of your device and the output of pyvisa-info?  Thanks!
 

Online eTobey

  • Super Contributor
  • ***
  • Posts: 1187
  • Country: de
  • Virtual Features for the SDS800XHD -> My website
    • Virtual feature script
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #431 on: October 05, 2024, 08:52:57 pm »
Did you use letter case like it is written in the manual?
"Sometimes, after talking with a person, you want to pet a dog, wave at a monkey, and take off your hat to an elephant."(Maxim Gorki)

SDS800X HD issues/tips/workarounds
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #432 on: October 06, 2024, 04:44:10 am »
In a bit of a breakthrough, I've been able to get this working on a Windows machine, with NI-VISA.

This tells me that the instrument is fine and the code is fine, and suggests the issue is with my Linux setup (which is where I need to get it working.)

I don't suppose any of you are successfully using this instrument on Linux?  Shout if you do -- I'd love to compare notes.
 

Online eTobey

  • Super Contributor
  • ***
  • Posts: 1187
  • Country: de
  • Virtual Features for the SDS800XHD -> My website
    • Virtual feature script
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #433 on: October 06, 2024, 07:13:48 am »
Can us do it without pyvisa? See my website for my way using sockets without pyvisa.
"Sometimes, after talking with a person, you want to pet a dog, wave at a monkey, and take off your hat to an elephant."(Maxim Gorki)

SDS800X HD issues/tips/workarounds
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #434 on: October 06, 2024, 08:01:08 am »
Can us do it without pyvisa? See my website for my way using sockets without pyvisa.

The device does not have a network interface, only USB.  Hence no sockets.
 

Offline adeuring

  • Contributor
  • Posts: 27
  • Country: de
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #435 on: October 06, 2024, 02:55:25 pm »
ISTM that it is not a good idea to use the read_raw() method. I'd suggest to call read_bytes() instead. I don't have a UTG932/UTG963, so the following stuff is to a good part based on guesses.

My guesses are:

1. The UTG9x2 uses a simple USB/UART adapter, probably a CH340, not a USBTMC chip.
2. On Linux, you are using PyVisa together with the PyVisa-py backend.

I looked a bit into the source code of PyVisa and PyVisa-py, which turned out to become a sneak into a rabbit hole and I shyed away from following the whole call stack of read functions, beginning at MessageBasedResource.read_raw() (in the package PyVisa), via SerialSession.read() down to Session.read() (the two latter methods are defined in the package PyVisa-py).

SCPI is mostly a text / line based protocol, so it is quite easy for an SCPI library to detect the end of a message sent from an SCPI device by searching for the hex values 0x0A and 0x0D )lone feed / carriage return). When you are reading binary data (like the screenshot), you can't use this check, since the values 0x0A and 0x0D may appear in the binary data. Hence you need another way to figure out if/when the message received from an SCPI device is complete. If you only have the RX/TX lines of a serial interface (or a simple TCP socket...), and if you do not have (or use – see below) any prior information about the length of the data you expect, only one way is left to figure out if the SCPI device has sent all data: A timeout.

Now let's have a quick look at the source code of the method read_raw():
current Github status, i.e., commit 4849311) https://github.com/pyvisa/pyvisa/blob/48493113f2df2106ffc664ab89eb644ebf935354/pyvisa/resources/messagebased.py.

read_raw(self, size: Optional[int] = None) is defined in line 411. The parameter "size" (which even does not need to be specified) is _not_ the number of bytes to read but just the chunk size for read calls of the transport layer. The doc string of the method does not explain how/when the read_raw() call terminates.

Let's look a bit deeper:

read_raw() is basically a "wrapper" for the method _read_raw(), defined in line 430. This method calls self.visalib.read(self.session, size) in a loop; the loop terminates when self.visalib.read() returns a certain status. I don't know what this status is and how
Code: [Select]
visalib.read()
detects that a message is completed – I wasn't sure if I would find the way back if I would go down into this part of the rabbit hole, which is probably PyVisa-py in your case...

I guess that you can somewhere set a timeout value for the visalib.read() calls – but that's hidden somewhere quite deep in the rabbit hole ;)

On the other hand: The data that the UTG9x2 sends back for the ":DISP?" command contains enough information that you don't have to rely on the obviously fragile read_raw() call. The first 10 Bytes or so tell you all you need: The length of the following binary data. The first byte should always be the '#' sign; the second byte is the number of digits of the following length information as an ASCII digit; the next N bytes (N being given in the second byte) contain the length of the binary data, again as ASCII digits. So you could try something like this:

Code: [Select]
sgen.write(":DISP?")
l1 = sgen.read_bytes(2)
if l1[0] != b'#':
    raise RuntimeError(f'Unexpected response for :DISP? {l1!r}'
l2 = sgen.read_bytes(int(l1[1]))
bitmap = sgen.read_bytes(int(l2))

For debugging, add print(l1) and print(l2) to check if you got the ":DISP?" command right: As renaatd wrote in comment #428:

Quote
Just tried with "Display:Data?" in combination with read_binary_values, and it returns some data, but different from ":DISP?". Also tried with ":Disp?" and that causes a timeout. So I guess it's better to stick with ":DISP?".

So it makes sense to check if you get anything back for the command you sent to the device – it seems that these cheap SCPI devices often do not have the most robust SCPI parsers...

Final rant: It seems that you are not the only one who has problems using the read_raw() method, at least in the combination PyVisa and PyVisa-py. Have a look at https://github.com/pyvisa/pyvisa-py/issues?q=is%3Aopen+read_raw

A real highlight is this bug https://github.com/pyvisa/pyvisa-py/issues/101

Quote
Adding some diagnostics to TCPIPInstrSession.read(), this is what I see:

Code: [Select]
    wanted 4096 bytes, read 1152057 bytes
    want -1131577 more bytes
OK, this bug is a bit older – perhaps the maintainers just forgot to close it.

Having played a bit with PyVisa and PyVisa-py as well as NI-Visa as an electronics hobbyist (with professional software developer background), I came to the conclusions that it is seldom worth the effort to deal with all the Visa-related hassles. It can be easier to simply use a lower-level access to SCPI devices, be it plain TCP sockets for devices with an Ethernet interface, or a library like PySerial for the many devices with USB/UART adapters or real RS232 interfaces.

The situation may be different for people who are juggling with 10 or 20 SCPI devices in a professional application.
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #436 on: October 06, 2024, 03:10:55 pm »
Thanks for such a detailed look into this.  I'll need some time to process this and play a bit more, but in the meantime some observations:
  • :SYSTem:INfo? locks up in the same way as the screenshot command, even though its output is a single line of text terminated by a newline.  My hypothesis is that what makes it lock up is the fact that the output doesn't fit in a single USB packet.
  • I played with read(), read_raw(), read_binary_values() and query(). They all lock up in exactly the same way.
With regards to UART and Ethernet interfaces, the device sadly offers neither.  USBTMC is the only thing that's available.
« Last Edit: October 06, 2024, 03:13:39 pm by aix »
 

Offline renaatd

  • Newbie
  • Posts: 4
  • Country: be
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #437 on: October 06, 2024, 06:27:40 pm »


I just tried this exact code with my device and it also hangs on read.

I've now tried several versions of Linux on two hardware architectures (aarch64 and x86_64) and the behaviour is remarkably consistent across all the configurations.  I wonder if it has something to do with my device or with how I'm configuring pyvisa.

If you have a working setup, would you mind sharing the firmware version of your device and the output of pyvisa-info?  Thanks!

Just tested on x86_64, and it works here.

Device version (Utility | System | About):
Software verson 3.06
Hardware verison 1.01
FPGA verson 3.01

PyVisa: as installed via dpkg on Ubuntu 24.04:
$ pyvisa-info
Machine Details:
   Platform ID:    Linux-6.8.0-45-generic-x86_64-with-glibc2.39
   Processor:      x86_64

Python:
   Implementation: CPython
   Executable:     /usr/bin/python3
   Version:        3.12.3
   Compiler:       GCC 13.2.0
   Bits:           64bit
   Build:          Sep 11 2024 14:17:37 (#main)
   Unicode:        UCS4

PyVISA Version: 1.11.3

Backends:
   ivi:
      Version: 1.11.3 (bundled with PyVISA)
      Binary library: Not found
   py:
      Version: 0.5.1
      ASRL INSTR: Available via PySerial (3.5)
      USB INSTR: Available via PyUSB (1.2.1-2). Backend: libusb1
      USB RAW: Available via PyUSB (1.2.1-2). Backend: libusb1
      TCPIP INSTR: Available
      TCPIP SOCKET: Available
      GPIB INSTR:
         Please install linux-gpib (Linux) or gpib-ctypes (Windows, Linux) to use this resource type. Note that installing gpib-ctypes will give you access to a broader range of funcionality.
         No module named 'gpib'



 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #438 on: October 06, 2024, 06:53:17 pm »
Just tested on x86_64, and it works here.

Device version (Utility | System | About):
...

PyVisa: as installed via dpkg on Ubuntu 24.04:
...

Thank you, that's very helpful indeed.  Perhaps the most glaring difference is that I'm on much newer versions of pyvisa and pyvisa-py (both installed using pip).  I'll try the Ubuntu deb packages on my 24.04 box, to try and match this aspect of your config.  Thanks again.
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #439 on: October 07, 2024, 04:25:44 am »
Thanks again renaatd.

I've matched your config and everything now works (on a Raspberry Pi).  For posterity, here's a working requirements.txt:

pyvisa == 1.11.3
pyvisa-py == 0.5.1
pyusb == 1.2.1


If I turn on logging, I can see that I'm hitting https://github.com/pyvisa/pyvisa-py/issues/293, but that doesn't seem to cause any issues.

P.S. Upgrading to pyvisa-py 0.5.2 makes the warning go away without causing any ill effects.
« Last Edit: October 07, 2024, 04:30:20 am by aix »
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #440 on: October 07, 2024, 06:21:22 am »
tl;dr If you have an Ethernet-capable UNI-T AWG, I need your help - please see the bolded text towards the bottom. :)

Now that I have pyvisa working, I made a bit of progress on building an Ethernet to USBTMC bridge.

The UNI-T device manager can now discover the device over Ethernet:

2394299-0

Clicking buttons in the virtual UI also works as expected.

What doesn't work is getting screenshots from the device.  Here's where I'm at: the bridge receives Display:Data? from Device Manager, sends it to the device, successfully reads the bitmap and sends the bitmap back to Device Manager.  HOWEVER, Device Manager doesn't recognise it (fails quietly, doesn't display anything and doesn't write anything interesting to its log).

I think it's a data formatting issue.  Here's what I know so far:

In what I get from the device, there's an extra byte (0x01) before the bitmap.  See the hex dump at the bottom of this message.  Is this some header or a status byte I'm supposed to parse?  Anyway, if I drop this byte and display the image using feh, it looks fine.

The file size header field (0x0005fa00) is off: it only contains the size of the image data, whereas I think it's meant to contain the size of the entire file, i.e. including the header.  That said, I doubt it matters.

I think that UNI-T software wants to receive the bitmap in a different format than what I get from the device.  I tried various combinations of:

All to no avail.

I don't suppose one of you with an Ethernet-capable UNI-T AWG could do a bit of packet capture between Device Manager and device?  I'd be happy to help you operate Wireshark if that's not your thing.

$ xxd display_data_response.bin | head
00000000: 0142 4d00 fa05 0000 0000 0036 0000 0028  .BM........6...(
00000010: 0000 00e0 0100 0010 0100 0001 0018 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0002 0200 0000 0002 0200  ................
00000040: 3f3f 0c76 774c 9998 849f a184 9f9f 849f  ??.vwL..........
00000050: 9f84 9f9f 849f 9f84 9f9f 849f 9f84 9f9f  ................
00000060: 849f 9f84 9f9f 849f 9f84 9f9f 849f 9f84  ................
00000070: 9f9f 849f 9f84 9f9f 849f 9f84 9f9f 849f  ................
00000080: 9f84 9f9f 849f 9f84 9f9f 849f 9f84 9f9f  ................
00000090: 849f 9f84 9f9f 849f 9f84 9f9f 849f 9f84  ................
$ xxd display_data_response.bin | tail -n 4
0005fa00: 849d 9d84 9d9d 849d 9d84 9d9d 849d 9d84  ................
0005fa10: 9d9d 849d 9d84 9d9d 849d 9d84 9d9d 849f  ................
0005fa20: 9f84 9b9a 848b 8a80 6060 481d 1d04 0202  ........``H.....
0005fa30: 0002 0200 0202 00                        .......
« Last Edit: October 07, 2024, 06:31:00 am by aix »
 

Offline renaatd

  • Newbie
  • Posts: 4
  • Country: be
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #441 on: October 07, 2024, 06:15:05 pm »
tl;dr If you have an Ethernet-capable UNI-T AWG, I need your help - please see the bolded text towards the bottom. :)

My AWG is not ethernet-capable, so can't help with that. But just a small hint: the UNI-T device manager is written in C# or another .NET language, and is not obfuscated. It can be trivially decompiled with tools like ILSpy. That's how I got the details right for uploading waveforms.
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #442 on: October 08, 2024, 05:43:02 pm »
My AWG is not ethernet-capable, so can't help with that. But just a small hint: the UNI-T device manager is written in C# or another .NET language, and is not obfuscated. It can be trivially decompiled with tools like ILSpy. That's how I got the details right for uploading waveforms.

Yes, thanks for the suggestion.  I've looked the decompiled code and the decoding algorithm for :display:data? matches what my code produces.

I tried to step through both Device Manager and SCPI Control in a debugger to make sure I wasn't misreading the code.  In doing so I discovered that both of them segfault in the depths of VISA when trying to read the rather large response to :display:data? from a socket, i.e. even before reaching the decoding method.

I looked at buffer sizes and things like that but didn't see anything obvious.  I tried installing the latest version of NI VISA, but that didn't make a difference.

That's where I'm at.

A bit of a rabbit hole, this.
« Last Edit: October 08, 2024, 06:18:41 pm by aix »
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #443 on: October 09, 2024, 04:57:20 am »
To make sure I wasn't fat-fingering the response to :display:data?, I made it return a small BMP image.  That works fine in Device Manager and SCPI Control.  If I increase the size of the bitmap beyond a certain size, I get an AccessViolationException from native code (viRead in visa32.dll).  The args getting passed to viRead look plausible.

The loaded visa32.dll is version 24.5.0.49310

edit: looking at instruction pointer in the exception object, it's inside the CopyUpLargeMov variant of memcpy, at the rep movsb instruction.  Unfortunately, I'm not set up for mixed-mode debugging and can't really tell whether it's the source or the destination buffer that's messed up, and how exactly.  I don't have a stack trace for the unmanaged part either, just the entry point (visa32.viRead) and the crash site (memcpy).  Hard to tell what goes on in between.
« Last Edit: October 09, 2024, 05:46:19 am by aix »
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #444 on: October 09, 2024, 06:05:02 am »
Progress!

2396547-0

I hypothesised that perhaps it was the RPC fragment size that was the problem, and it was!  Instead of sending the entire bitmap as a single large fragment (and relying on TCP to chop it up into segments), I now break the bitmap into 1024-byte fragments at the RPC level.  This seems to have fixed the VISA buffer overrun.

Unfortunately, UNI-T Control Panel still doesn't fully work.  It no longer crashes, but now shows a blank display.  I guess that's the next battle...
« Last Edit: October 09, 2024, 06:21:16 am by aix »
 

Offline aix

  • Regular Contributor
  • *
  • Posts: 170
  • Country: gb
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #445 on: October 09, 2024, 06:48:30 am »
OK, I got the control panel working.  It turned out that SCPI Control and Control Panel expect differently-formatted responses from the device, and so it's impossible to make both work at the same time.  Here is what Control Panel expects, i.e. just the raw data exactly as the device returns it (SCPI Control wants an IEEE 488.2 Definite Length Arbitrary Block):


            this.dev.COMInterface.Query("Display:Data?", 512000, out array);
            int num = (int)array[0];
            this.vm.IsOpen_Mode = (num & 1) == 1;
            this.vm.IsOpen_CH2 = ((num >> 1) & 1) == 1;
            this.vm.IsOpen_CH1 = ((num >> 2) & 1) == 1;
            this.imageBuffer = new byte[array.Length - 1];
            Buffer.BlockCopy(array, 1, this.imageBuffer, 0, this.imageBuffer.Length);
            int tickCount = Environment.TickCount;
            for (int i = 54; i < this.imageBuffer.Length; i += 3)
            {
               byte b = (byte)((int)(this.imageBuffer[i + 2] & 192) | ((int)(this.imageBuffer[i + 2] & 12) << 2) | ((int)(this.imageBuffer & 1) << 2) | ((int)(this.imageBuffer[i + 1] & 1) << 3));
               this.imageBuffer = this.imageBuffer & 254;
               this.imageBuffer[i + 2] = this.imageBuffer[i + 1] & 254;
               this.imageBuffer[i + 1] = b;
            }
            Bitmap bitmap = new Bitmap(new MemoryStream(this.imageBuffer));
            bitmap.RotateFlip(RotateFlipType.RotateNoneFlipX);

It also explains the semantics of the mystery first byte.

Thought I'd document this here in case someone else falls down the same rabbit hole in the future.

Here is the device being controlled over LAN (with a few dozen lines of Python bridging VXI-11 to USBTMC on a Raspberry Pi):

2396583-0
« Last Edit: October 09, 2024, 06:58:34 am by aix »
 
The following users thanked this post: Mechatrommer

Offline xKertx

  • Regular Contributor
  • *
  • Posts: 50
  • Country: fi
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #446 on: October 10, 2024, 03:41:17 am »
I bought the UTG932E few days ago and while i was testing it out i noticed that when i turn on the output, first for about 200µs  waveform looks like a mess and after that it settles and looks okay.
Did i get a bad unit, or is this normal behavior for these cheap units?
I didn't see it happening in reviews.
 

Online eTobey

  • Super Contributor
  • ***
  • Posts: 1187
  • Country: de
  • Virtual Features for the SDS800XHD -> My website
    • Virtual feature script
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #447 on: October 10, 2024, 01:17:27 pm »
That looks indeed messy. I havent seen this with the few device i tested (270-350€). But they also had many issues. They went negative, when the limit was set for 0V! You have to live with those issues. But it might as well be a defect.
"Sometimes, after talking with a person, you want to pet a dog, wave at a monkey, and take off your hat to an elephant."(Maxim Gorki)

SDS800X HD issues/tips/workarounds
 

Online csuhi17

  • Frequent Contributor
  • **
  • Posts: 351
  • Country: hu
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #448 on: October 10, 2024, 02:06:31 pm »
That looks indeed messy. I havent seen this with the few device i tested (270-350€). But they also had many issues. They went negative, when the limit was set for 0V! You have to live with those issues. But it might as well be a defect.
He asked because he cannot decide whether the problem is with the zoyi-zt703 or the Uni-t signal generator.
The latest ZT-703 firmware contains a small bug in setting 250ns and below, the trigger is unstable.
+ there are also cases where the wave before the trigger is garbage in the memory.
I tested the zt703 I have with the example of xKertx, and the signal looks good to me, that wasn't there before the trigger.

If someone could check with a normal scope the case when the channel is activated, is it visible in the wave or is it just a bug in the scope.
single trigger, with the above settings, when the channel is activated.
« Last Edit: October 10, 2024, 02:08:42 pm by csuhi17 »
Fnirsi oscilloscope = waste&regret
 

Offline Aldo22

  • Super Contributor
  • ***
  • Posts: 1276
  • Country: ch
Re: UNI-T UTG932/UTG962 200MSa/s Function Arbitrary Waveform Generator
« Reply #449 on: October 10, 2024, 02:41:28 pm »
Did i get a bad unit, or is this normal behavior for these cheap units?
I don't think it has anything to do with cheap signal generators in general.
My $50 FY3224s has no problem with that (Attached image).
I think it's more likely that the scope is responsible.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf