Page 1 of 1

Drawing Scope on Eve2-50G

Posted: Tue Sep 03, 2019 8:38 pm
by ChrisBack
Dear sir,
i woudl like to draw a scope on the screen and display an incoming value continuously. Normally the old point or line should still be displayed after swapping the display list but it disappears. When i store the old value into an array and display all the values in a for loop before i swap the display it slows down the display.
My hardware:
-Arduino Uno
-EVE2-Shield
-EVE2-50G-BLM-TPC

thank you for any help
cheers,
Chris

Re: Drawing Scope on Eve2-50G

Posted: Wed Sep 04, 2019 11:25 am
by Daniel Divino
Hi Chris,

Are you looking to create somthing similar to an oscilloscope screen, or an ECG meter?

Cheers,
Daniel

Re: Drawing Scope on Eve2-50G

Posted: Wed Sep 04, 2019 3:10 pm
by ChrisBack
Hi Daniel,
I would like to build something like an oscilloscope screen but just the value which will be drawn on the screen as a line.
My problem is that the old line disappears and when is store the value into an array and draw it with a for loop the display drawing speed goes down
after a couple of lines.

Thank you.
Chris

Re: Drawing Scope on Eve2-50G

Posted: Thu Sep 05, 2019 11:13 am
by Daniel Divino
Hi Chris,

Take a look at the Signals example that FTDI posted on their site. The Signals demo uses stored data to recreate sine, triangle, and ECG heartbeat waveforms on screen. You may be able to modify one of the waveform functions that they use for your own application. It isn't quite the same as taking in new data every second, but at the very least it should demonstrate how you can update the screen with new data without old data disappearing.

https://www.ftdichip.com/Support/Softwa ... #Example13

I have attached the Signals example, modified to work with our hardware (EVE2 and Scoodo shield) using the EVE2 library. This should help you get started. Note that you will need an SD card to run this project. Simply copy over the Cap_Cal.bin from the "Images for SD card folder" file to the root directory of your SD card, and you should be on your way.

The demo is currently configured to run on a Capacitive touch 5 inch EVE2.

Cheers,
Daniel

Re: Drawing Scope on Eve2-50G

Posted: Thu Sep 05, 2019 3:41 pm
by ChrisBack
Hey Daniel,
Thank a lot this will let me out.
I tried this example before but i could not bring it into function. Now i will look for the differences in our codes.

Thank you again for the superb support.

Cheers,
Chris

Re: Drawing Scope on Eve2-50G

Posted: Sat Nov 23, 2019 3:36 am
by Rudolph
Without even looking at the example, the easy way to do this is with a LINE_STRIP primitive.
Just loop thru an array and use the counter for X and the array value for Y in the VERTEX2F() commands.
The way VERTEX2F() works though with 15 bits for X and Y, it comes with a cost, this requires a little time to compute, nothing serious but definately something to keep in mind, expecially on 8 bit controllers, the X value needs to be shifted into position, the compiler can not just copy the value.

#define VERTEX2F(x,y) ((1UL<<30)|(((x)&32767UL)<<15)|(((y)&32767UL)<<0))

EVE_cmd_dl(VERTEX2F(xcounter+xoffset, myarray[ycounter]+yoffset));

One way to optimise this would be to not use the VERTEX2F() macro.

EVE_cmd_dl( (1UL<<30) | (((xcounter+yoffset)&0x3ff) << 16) | ((myarray[ycounter]+yoffset) & 0x7ff) );

The result is that the LSB of X is always 0 so the result is to plot on only every second pixel.
But in return the whole shift operation for X is optimised by the compiler with a simple copy operation.

One step further is to pre-compute an array of VERTEX2F() 32 bit values for all the X coordinates and add the Y value.

EVE_cmd_dl(vertex2f_x_array[xcounter] | ((myarray[ycounter]+yoffset) & 0x7ff) );

And of course not calculating the final values for Y on the spot but when adding the values to the array helps.

EVE_cmd_dl(vertex2f_x_array[xcounter] | myarray[ycounter] );

No, I did not just try all of this and measured what difference it actually makes.
I did encounter this to be an issue when I implemented an "animated" scope like display with 64 points a good while back
on an AVR.