Page 1 of 2

Synchronization of generate and acquire

Posted: Thu Jun 26, 2014 5:46 pm
by edgo
With reference to an earlier discussion back in the Community:

https://redpitaya.zendesk.com/hc/commun ... chitecture

Wijnand asked:
Q: I want to use generate and acquire in (motion) control applications but then with single ADC and DAC commands. Are generate and acquire build on single ADC/DAC commands?

Crt replied:
A: Generate and acquire utilites could be combined in one tool and it is also possible to synchronize the acquisition and data generation.

I'm hoping that Crt will see this and shed some light on the subject.

My question: how would we accomplish the synchronization of generate and acquire?

I've looked through the "FPGA memory map" document, and in the Oscilloscope section there is the offset/description of "0x4 / Trigger source" ... would we select a Trigger source setting here like "8-arbitrary wave generator application positive edge" when initializing our application? Any other insights into how to accomplish this?

Thanks,

Ed

Re: Synchronization of generate and acquire

Posted: Fri Jun 27, 2014 8:56 am
by Crt Valentincic
Exactly. Acquisition can be triggered by AWG module if you select it as a trigger source. Here is an example:

Code: Select all

// trigger source is AWG
monitor 0x40100004 0x8
// ARM trigger
monitor 0x40100000 0x1
// write pointer is running
redpitaya> monitor 0x40100018
0x0000049c
redpitaya> monitor 0x40100018
0x00002031
// trigger pointer is 0
redpitaya> monitor 0x4010001c
0x00000000
// AWG
monitor 0x40200000 0x21
// acq. was triggered - read trigger pointer
redpitaya> monitor 0x4010001c
0x0000386f
Registers are explained here: https://github.com/RedPitaya/RedPitaya/ ... t?raw=true

Re: Synchronization of generate and acquire

Posted: Fri Jun 27, 2014 10:13 pm
by edgo
Thanks, Črt! I'll work with this and see how it goes ... probably have more questions!

Ed

Re: Synchronization of generate and acquire

Posted: Wed Jul 02, 2014 2:59 pm
by srb53
Hi,
Should i use a similar method to read the ADC level after an external trigger? Also, can a delay between trigger and read be easily implemented?

Thanks

Re: Synchronization of generate and acquire

Posted: Wed Jul 02, 2014 10:09 pm
by edgo
Črt,

I've been able to hack the "monitor" code to run all of the commands you suggested at one time, from within one program.

But now, I don't seem to be able to acquire data using the trigger pointer read in the last step of your example.

Possibly I have a incorrect idea of how to accomplish this. But what I would like to do after getting the trigger pointer, is acquire X number of samples from ADC buffer, using the trigger pointer, i.e. always on the positive edge. Of course if trigger pointer is too close to end of 16384 buffer then I will not be able to get many data points.

After the last step "acq. was triggered - read trigger pointer" I have then initialized like the oscilloscope app with "rp_app_init()" and then called "rp_get_signals()". I don't get good data like ordinary "acquire" program usually returns.

Any suggestions you can add about the correct way to do this would be appreciated! I've been looking through the guts of the oscilloscope code to shed some light, also.

cheers,

Ed

Re: Synchronization of generate and acquire

Posted: Tue Jul 15, 2014 7:43 am
by Crt Valentincic
Once you "ARM" the acquisition module, the write pointer will start running around the circular 16k buffer, witting ADC samples into it's memory with sample freq. decimated by decimation factor. Write pointer position is then captured into trigger pointer register right at the moment when trigger arrives. After that user can read the complete circular buffer (starting from trigger pointer).
I have already started to update this part of documentation http://wiki.redpitaya.com/index.php?tit ... ifications and I hope that I will have time to complete it in the next few days.

Re: Synchronization of generate and acquire

Posted: Mon Jul 28, 2014 10:03 pm
by airizar
For true synchronization between generation and acquire you need to modify the FPGA design.
Writing from compiled code does not guarantee deterministic delays between generation and acquisition.
It is not difficult to modify the code. I've managed to do it by generating a trigger after certain amount of counts of a counter. The trigger I used is entering the scope via the external trigger ( I had to reroute one of the external digital outputs as the external trigger)

Regards

Andoni

Re: Synchronization of generate and acquire

Posted: Wed Jul 30, 2014 2:18 pm
by srb53
Hi,
Can someone please tell me what i'm doing wrong?

i'm connected to my Redpitaya via ethernet using putty.
i'm trying to measure the amplitude of a 50 µs pulse known to be ~900 mV at a rep rate of 0.1 Hz.
i use the following commands:

redpitaya> monitor 0x40100000 0x1 - Reset write state machine
redpitaya> monitor 0x40100004 0x6 - Set trigger to external, pos edge
redpitaya> monitor 0x40100014 0x1024 - Set decimation to sample every 8 µs
redpitaya> monitor 0x40100000 0x0 - Arm trigger
redpitaya> monitor 0x40110004 - Read the 4th sample within memory
0x0000008d - Value read from memory is inconsistent with trace on my oscilloscope

Any help would be appreciated.

Thanks

Steve

Re: Synchronization of generate and acquire

Posted: Mon Aug 18, 2014 12:56 pm
by Crt Valentincic
I would suggest that you first confirm that trigger successfully stopped the acquisition, by reading
trigger source register that should be in such case reset to zero.
Notice also that acquisition is started when trigger is ARMed and it stops once trigger arrives.
Last sample taken is located at the position where trigger stopped the acquisition (monitor 0x4010001c).
The acquired data is in ADC raw signed format (-8192 to 8191) that equals same voltage range as it is defined by gain setting.

Re: Synchronization of generate and acquire

Posted: Thu Aug 21, 2014 2:23 pm
by srb53
Hi Crt,

Thanks for your reply,

i still can't manage to get the correct level from a triggered event, is the sequence below correct?

redpitaya> monitor 0x40100000 0x1
redpitaya> monitor 0x40100014 0x1024
redpitaya> monitor 0x40100000 0x0
redpitaya> monitor 0x40100004 0x3
redpitaya> monitor 0x40100004
0x00000000

As you see, i reset the write state machine > set the decimation factor > arm the trigger > set the trigger to chA neg edge > check the trigger source has returned to zero.

If i then read the write pointer location:
redpitaya> monitor 0x4010001c
0x00002d94

Should i try to read the previous memory location? i.e. 0x40112d94. if this is all correct, i don't get the correct result. Any ideas?

Thanks

Steve