For the waveform to be displayed, we collect multiple points in each period. However, according to the Nyquist theorem, the sample rate only has to be $2\times$ the frequency of the signal.
The following block of code is just an example. For the Pmod ADC, the minimum delay between two samples is around $0.3\,$ms (corresponding to a sampling period of $3\,$kHz). So the maximum frequency of the input signal can be $1.5\,$kHz.
For the interface ID used in the following example, if the Pmod ADC is connected to interface PMODA, type in PMODA
; if the Pmod ADC is connected to interface PMODB, type in PMODB
.
For the WaveForms configuration, this example uses the following parameters:
Wavegen Parameters | Configuration |
---|---|
Type | Sine |
Amplitude | 1V |
Offset | 1V |
Symmetry | 50% |
Phase | 0 |
Channel 0 (V1) on Pmod ADC is connected to port W1 on Digilent Analog Discovery 2.
In [1]:
from time import sleep
from pynq import Overlay
from pynq.iop import Pmod_ADC
from pynq.iop import PMODA
from pynq.iop import PMODB
ol = Overlay("base.bit")
ol.download()
if_id = input("Type in the interface ID used (PMODA or PMODB): ")
if if_id.upper()=='PMODA':
adc = Pmod_ADC(PMODA)
else:
adc = Pmod_ADC(PMODB)
freq = int(input("Type in the frequency/Hz of the waveform: "))
period = 1/freq
log_interval_us = 0
# Assume Channel 0 is connected to the waveform generator
adc.start_log(1,0,0,log_interval_us)
sleep(3*period)
log = adc.get_log()
# Draw the figure
%matplotlib inline
import matplotlib.pyplot as plt
plt.plot(range(len(log)), log, 'ro')
plt.title('PMOD ADC Waveform')
plt.axis([0, len(log), min(log), max(log)])
plt.show()
adc.reset()
del adc,ol