1
0
Fork 0

add both channels in loopback

This commit is contained in:
Florian Agbuya 2024-08-22 16:27:15 +08:00
parent 125611f51e
commit 15b8b3fa6a
1 changed files with 39 additions and 27 deletions

View File

@ -1,48 +1,60 @@
import time import time
from pyfastservo import adc, dac from pyfastservo import adc, dac
from pyfastservo.common import ( from pyfastservo.common import (
ADC_CH1_HIGH_ADDR, ADC_CH0_HIGH_ADDR, ADC_CH0_LOW_ADDR,
ADC_CH1_LOW_ADDR, ADC_CH1_HIGH_ADDR, ADC_CH1_LOW_ADDR,
CH1_HIGH_WORD_ADDR, CH0_HIGH_WORD_ADDR, CH0_LOW_WORD_ADDR,
CH1_LOW_WORD_ADDR, CH1_HIGH_WORD_ADDR, CH1_LOW_WORD_ADDR,
read_from_memory, read_from_memory, write_to_memory
write_to_memory
) )
def read_adc(): def read_adc(channel):
adc_value = adc.read_adc_channel(ADC_CH1_HIGH_ADDR, ADC_CH1_LOW_ADDR) if channel == 0:
return adc_value return adc.read_adc_channel(ADC_CH0_HIGH_ADDR, ADC_CH0_LOW_ADDR)
elif channel == 1:
return adc.read_adc_channel(ADC_CH1_HIGH_ADDR, ADC_CH1_LOW_ADDR)
else:
raise ValueError("Invalid ADC channel")
def write_dac(value): def write_dac(channel, value):
dac.set_dac_output(value) dac.set_dac_output(value, channel)
def read_dac(): def read_dac(channel):
if channel == 0:
high_word = read_from_memory(CH0_HIGH_WORD_ADDR, 1)[0]
low_word = read_from_memory(CH0_LOW_WORD_ADDR, 1)[0]
elif channel == 1:
high_word = read_from_memory(CH1_HIGH_WORD_ADDR, 1)[0] high_word = read_from_memory(CH1_HIGH_WORD_ADDR, 1)[0]
low_word = read_from_memory(CH1_LOW_WORD_ADDR, 1)[0] low_word = read_from_memory(CH1_LOW_WORD_ADDR, 1)[0]
else:
raise ValueError("Invalid DAC channel")
return (high_word << 8) | low_word return (high_word << 8) | low_word
def perform_loopback_test(test_value): def perform_loopback_test(channel, test_value):
print(f"Setting DAC output to {test_value}...") print(f"\nTesting Channel {channel}")
write_dac(test_value) print(f"Setting DAC CH{channel} output to {test_value}...")
write_dac(channel, test_value)
time.sleep(0.1) # Allow time for the signal to stabilize time.sleep(0.1) # Allow time for the signal to stabilize
print("Reading ADC value...") print(f"Reading ADC CH{channel} value...")
adc_value = read_adc() adc_value = read_adc(channel)
print(f"ADC readback: {adc_value}") print(f"ADC CH{channel} readback: {adc_value}")
print("Reading DAC value...") print(f"Reading DAC CH{channel} value...")
dac_value = read_dac() dac_value = read_dac(channel)
print(f"DAC readback: {dac_value}") print(f"DAC CH{channel} readback: {dac_value}")
if abs(test_value - adc_value) <= 2 and abs(test_value - dac_value) <= 2: if abs(test_value - adc_value) <= 2 and abs(test_value - dac_value) <= 2:
print("Loopback test PASSED!") print(f"Loopback test for Channel {channel} PASSED!")
else: else:
print("Loopback test FAILED!") print(f"Loopback test for Channel {channel} FAILED!")
print(f"Expected: {test_value}, ADC: {adc_value}, DAC: {dac_value}") print(f"Expected: {test_value}, ADC: {adc_value}, DAC: {dac_value}")
def main(): def main():
test_value = 0x2000 # Mid-range value (8192 in decimal) test_value = 0x0FFF # Mid-range value (4095 in decimal)
perform_loopback_test(test_value)
perform_loopback_test(0, test_value)
perform_loopback_test(1, test_value)
if __name__ == "__main__": if __name__ == "__main__":
main() main()