DSO203 GCC APP - Community Edition (2.51+SmTech1.8+Fixes)

New update. Also included is a “user guide”. See “UserGuide.rtf” included with source code.

Note that this is a bit of a work in progress, but is mostly complete. I’m posting what I have so far

in hopes it will be of help to someone. For the time being it’s in RTF format (disable word wrap

so text formats correctly).


-Added LOG amplitude scaling option to FFT display. Use left toggle in Ch D menu in notification

area: LOG>AUTO>0db>+6db>…>+42db

-Changed FFT buffers to 32 bit. Allows proper dynamic range so LOG display works correctly, gain is

increased to +42db (+48 with log scale). Changed windowing from Hamming to Hann for better

compatibility with the increased dynamic range.

-Updated internal generator output to produce high quality waveforms using up to 720 sample points

(gradually reducing at the highest frequencies to remain within DAC capabilities: 5khz range

samples @ 360, 10khz @ 180 and 20khz @ 72)

-Added continuously variable frequency control for generator output: While in OUTPUT menu and freq

range item blinking, press left toggle center button to access frequency display in notification

area. Output frequency can be finely adjusted up or down with left toggle. Eg: if set to 100hz range,

frequency can be shifted from 50Hz to 200hz in steps of approx +/- 0.7% (0.7Hz). Note that at the

higher frequency ranges, highest frequency available will be limited and range step size increased

due to internal DAC sampling rate and clock divider limitations.

-Added frequency scaling and seconds ticks to spectrograph display.

-Program will now only save BMP screenshots in 64K colors if spectrograph or map mode is

displayed, otherwise will save in 16 color mode so files are not unnecessarily large. Either

type will load for viewing.

-Changed voltmeters from reading 0.XXX KV to XXX V when reading over 100 volts on X10 ranges

-Added ability to shift the ADC operating “window” to compensate for hardware issues. See

“README.TXT” latest changelog for more info on this.

-Fixed %Duty meter item (was not working at all in V3.2)

-Fixed a bug where, if not triggered in normal modes, certain items on the display would not

be updated or would show incorrectly when changing settings until the device triggered again.

-More code compacting to keep program within 2 program slots + misc minor bug fixes.

Frequency spectrum in log mode of 1Khz wave

sampled at 720 points from internal generator.

Frequency scale for spectrograph


As per Jerson’s suggestion I updated the archive I just posted with added beeps for the

push button functions.

In addition to the first short beep when you first push a button, the instant after holding the

button down that it enters the “long press” mode a somewhat longer beep is heard. Releasing

the button anytime after the beginning of this second beep, but before a third short beep

indicating the “hold” mode is engaging, assures that you will enter the long press mode.

I find that identifying button hold times this way greatly improves operation.

Thanks to Jerson for the suggestion…

Hello Wildcat

Just a small suggestion. Can you implement a beep when a button reaches Long press and another beep when it reaches HOLD? That will make it easy to release when you intend to long press and not hold.

Very nice work



Thank you.

I like the idea of a beep when reaching long press. I find myself often not holding down long enough and

wind up with the wrong function. This way you would just wait for the beep, I like it.

Not sure how useful a beep when reaching hold would be though, because by then the hold function would pop up

anyways, it doesn’t wait until you release the button, the instant it times out the function engages.

The way I implement this in my embedded systems code is like this. I do not know how easy it will be to adapt it to the DSO

By this way, suppose the user wants to LONG press the button, s/he waits till the second beep and lets go. Since the timer is < level3 time, FuncLevel2 executes. Function only executes on releasing the button.

</s> On Keypress start background seconds timer with value 0 while (Keypressed) { if (timer == Level1) Beep(); if (timer == Level2) Beep(); if (timer == Level3) Beep(); } if (timer < Level2) FuncLevel1(); // execute function at level1 depth else { if (timer < Level3) FuncLevel2(); // function at level2 depth else FuncLevel3(); // function at level3 depth } <e>

Updated the archive I just posted with the mod. Thanks for the suggestion.

Thanks Wildcat

it makes operation so much better.



Hello and Greetings from Germany

So, i have also this little nice Device. I bought this last Week. Now i read the most of Statements and Fixes but…im not sure how i can modifiy my DSO203. I have:

HW_Version:V2.72,SYS-Vers. 1.60 , DSO APP (PLUS A1) V1.10 , DFU V3.13C

I want to test the System from Wildcat, but im a absolute Beginner…a elektronix technican but in Robotix. With this little Device i have zero experience!

Who can help me, step by step, what i must do that i can try the new System from Wildcat…or other!?

Sorry …i learn fast…promised… :lol:

Greetings klaus

Greetings Ponti

Welcome here.

It is very easy to upgrade your device to run Wildcat version of the firmware.

  1. Download the archive from this thread.

  2. Extract the .HEX files somewhere you can find them

  3. Connect the DSO to your PC via USB.

  4. Press and hold the first button of DSO and switch on the DSO. You will see a different screen on the DSO. A new drive will appear on your Windows machine.

  5. Now, you can copy any one of the HEX files to the DSO drive on your machine(remember which HEX you copied). The PC will beep to indicate USB disconnect and again USB connect.

  6. Turn off the DSO and you may disconnect USB now.

  7. Press button on DSO as per hex file number you loaded. If you loaded app2.hex, you press button 2 and power on the DSO and so on. For App1.hex, you should not press button 1 as it will bring you back to step 4.

  8. Voila, new firmware is running.

    Good luck

Hello Jerson

Thank u…i will tryit…i hope not that i destroy the devices… :wink:

I have the 8MB Version…its that a Problem??

Question: when the Test its not good, or i want the original firmware…can i restore the original Firmware later or not?



First note that there are 4 app slots on the device but most of the scope apps take up 2 of these. When the device starts without any button presses then it loads the app in slot1 but in reality that is slot1 + 2.

If you load wildcat hex for slot 1 then it overwrites the default app and also uses slot 1+2. If you load it in slot 2 then it will use slot 2+3, and will also have overwritten half of the scope app (1+2) which will therefore no longer work. If you load it in slot 3 then it uses slot3+4. So the sensible choices are either to load it in slot 1 and use it as a replacement for the default app, or to load it in slot 3 and leave slot1+2 alone as the standard app. It is significantly better than the standard app so you will want is as the default start up from slot 1 even if you start off trying it in slot 3.

If you overwrite the stock app in slot 1 and you want to restore it then you use exactly the same procedure, but you will need the hex file for this which is available on-line, so you may want to get that first.

Hello bobtidey

thanks for ur explanations!!

Thats are good news for me, particularly the things with the Slots…ok, i will remember later. I found the original SYS and APP from my Devices. But also a newer one, SYS V1.61 and APP V1.11. Its this also OK ? u know it what its better as the SYS V1.160 an APP V1.10 ?

When i change the sys or/and APP, must i calibrate the device again, or one time its enough??

a other question: i found : PA1_110. PA3_110 and PA1_111, PA3_111 and …FPGA´s and also AP1_100… whats this? How i can use this Files?

I think for the beginning its better, i load all Files for Trying in Slot 3+4. Then i can tryit and the original Firmware its not broken. Later i can also load the system what i want to use in Slot 1+2…right!? The firmware from wildcat33, must i load all 3 files or only one?

Ok, i think i have enough Information for trying. Thank u!!


There are basically 4 types of files used here. APP, SYS, FPGA and DFU

Starting at the end, DFU is a fundamental boot/loader. It goes into a fixed piece of memory and is used to start the device on power up and provide the firmware uploading ‘disk’ when you power up with 1st button pressed. You should NEVER need to load this and is about the only way you can ‘brick’ the device as without it you can’t load software easily anymore. It is possible to recover from this but it means opening up and attaching special serial connections.

The FPGA is the logic array instructions that control the interface to the actual scope part and control the ADC and FIFO buffer the data. These instructions are held in the CPU firmware memory and downloaded to the array. Again you should not need to update this. Some people have done customised versions for special purposes like logic analysers. It is also loaded not via HEX but using a 2 file technique.

SYS files are like the BIOS / Kernel of the device. They provide a fixed set of access functions / utilities for accessing the hardware, displays, storage etc. There are some small differences between the hardware versions of the device, notably in the 2MB/8MB storage area and the SYS version is specific to that, and it is primarily in those storage functions tat the SYS files differ. There is a APP called ALTERBIOS that patches the SYS to fix some bugs and add extra capability.

APPS are what go into the normal APP slots 1-4. There is also some hidden memory both ROM and RAM that some APPS exploit.

So the summary is that most of the time you should only be interested in loading APP hex files. Occasionally there may be a need to update the SYS, FPGA very rarely, and DFU ‘never’.

Loading an APP is just 1 HEX file. If it uses more than 1 slot then it contains all the data. So when you see multiple HEX files for an APP thta is because it has been linked for the different slots that it could be loaded into. An APP labelled with a 1 will normally go into slot 1 and whatever subsequent slots it needs.

Calibration method tends to be APP specific and so does need to be redone when loading a new APP.

THANK U for u´r Help!!! Now i understand.

Greetings Klaus


Learning how to use an oscilloscope with my DS203 purchase and have a lot to learn. Looks like some great work, so THANK YOU!.

I have some questions, but before I ask I wanted to go through your UserGuide.rtf. However, no matter what program I use to load it, the formatting is making it impossible to follow.

Would it be possible for you to convert the UserGuide to a .pdf file so the proper formatting is retained?

Thanks Again.

Thank You Good Sir!

Here’s an update (V3.4) that fixes a few issues with the previous version.

Some may be interested in a version developed for one of my devices. (V4.0) Adds a number of new generator functions I needed to have as well as serial decoding.

V3.4 update:

-Fixed triggering issue in SINGLE mode in 2mS, 1mS and 500uS timebases (& possibly others) where the device

would trigger twice if data captured would exceed length of the buffer, making it impossible to see the start of the

captured waveform.

-Fixed triggering issue after changing from AUTO to NORMAL modes at 500uS timebases and slower, where the

device would have to trigger more than one time before displaying a waveform.

-Fixed a bug where meter readings were inaccurate or could change while in NORMAL mode with display frozen with

the latest waveform while not triggered, also causing subsequently triggered readings to be incorrect until

a sufficient number of samples were collected.

-Modifications to level and edge triggering in the two fastest sweep ranges, improves signal acquisition for random/slow/

intermittent signals. Some devices that have shown varying abilities in this respect should improve with this.

Note that “Waiting for reset” notification after pausing in the very slowest timebases was removed to make room in ROM

so program would still fit in 2 slots. Program is functionally the same as V3.3 otherwise.

V4.0: Adds advanced generator functions and serial decoding + other misc mods. Note this version uses 3 slots. A

functionally identical 4 slot version using different compiler optimizations is also included, provides from

10% to 75% increase in frame rate, depending on functions used. Included user guide has been updated to

explain how to use.

-SWEEP FUNCTION, for all internally generated wave types. Sweeps each frequency range with an adjustable rate of

from 1/second to 1000/second with space between sweeps to allow scope synchronization.

-TONE BURSTS, for all internally generated wave types with repetition rates of 1/second to 1000/second and adjustable

burst length.

-PRECISION PULSE GENERATOR, positive or negative pulses with adjustable pulse length in 13nS increments

(at 2K/Sec and faster, gradually increasing to 33uS increments at 1/sec) and repetition rate continuously adjustable

from 1/second to >1Mhz. Repetition rate can be changed independently of pulse length. Display in notification shows

exact pulse duration.

-WHITE NOISE GENERATOR, with adjustable bandwidth from 1Hz to 1MHz. Below 1Khz, noise is filtered by X100

oversampling, below 50Khz by X10 oversampling, 50Khz and over raw digital data with no filtering. Dynamic seeding

is used to eliminate or at least minimize “repetition” patterns.

-ARBITRARY WAVEFORM GENERATOR: will generate any waveform using from 2 to 720 12bit samples at

continuously adjustable frequencies of 1/2 hz up to >500Khz, depending of sample number. Reads imported CSV file

with a one wave sequence of 12bit numbers (0 to 4095) to define waveform.

-“GEN” triggering mode, optimizes triggering parameters to synchronize hard to stabilize sweeps and tone bursts.

-“DETECTOR” mode for analog channels, changes display to a filtered amplitude response. Use with sweep generator

to produce frequency response curves. In this mode the program can automatically adjust sweep speed and

time base so all frequency ranges can be quickly scanned by changing generator frequency range. Cursor restrict

mode can be used to sample frequency at one point, and will extrapolate a frequency scale at bottom of screen.

-Analog waveform frequencies extended to 200Khz, albeit with reduced sample count/quality.

-SERIAL DECODE: Displays up to 96 chars/bytes in ASCII and HEX from RS232/TTL uart.

-FFT “window” now shifts along with XPOS in large buffer mode rather than always just reading beginning of buffer.

-Visual indicator added along with beep signaling long press engagement (display brightness flashes). Useful in noisy

environments when rather faint beeper can’t be heard.

2.5-10Khz Frequency response of loudspeaker. Fast sweeps minimize

exciting room resonances, allowing reasonably accurate results.

Tone burst response a loudspeaker.

Quick scan to identify notch filter.

Expanded scan provides better resolution and proper depth of notch.

RS232/TTL serial decoding.

Arbitrary waveform generator.

Thank you Wildcat to continue to support this little device ! :slight_smile:

Awesome! Thank you Wildcat!

Will this work with hardware version 2.52?

Thank you for making this a truly useful device.