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.
In [1]:
from time import sleep
from pynq import Overlay
from pynq.iop import Pmod_ADC
ol = Overlay("base.bit")
ol.download()
adc_id = int(input("Type in the PMOD ID of the ADC (1 or 2): "))
adc = Pmod_ADC(adc_id)
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