diff --git a/fast-servo/pyfastservo/loopback.py b/fast-servo/pyfastservo/loopback.py index 13ee77b..ff0b685 100644 --- a/fast-servo/pyfastservo/loopback.py +++ b/fast-servo/pyfastservo/loopback.py @@ -1,48 +1,60 @@ import time from pyfastservo import adc, dac from pyfastservo.common import ( - ADC_CH1_HIGH_ADDR, - ADC_CH1_LOW_ADDR, - CH1_HIGH_WORD_ADDR, - CH1_LOW_WORD_ADDR, - read_from_memory, - write_to_memory + ADC_CH0_HIGH_ADDR, ADC_CH0_LOW_ADDR, + ADC_CH1_HIGH_ADDR, ADC_CH1_LOW_ADDR, + CH0_HIGH_WORD_ADDR, CH0_LOW_WORD_ADDR, + CH1_HIGH_WORD_ADDR, CH1_LOW_WORD_ADDR, + read_from_memory, write_to_memory ) -def read_adc(): - adc_value = adc.read_adc_channel(ADC_CH1_HIGH_ADDR, ADC_CH1_LOW_ADDR) - return adc_value +def read_adc(channel): + if channel == 0: + 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): - dac.set_dac_output(value) +def write_dac(channel, value): + dac.set_dac_output(value, channel) -def read_dac(): - high_word = read_from_memory(CH1_HIGH_WORD_ADDR, 1)[0] - low_word = read_from_memory(CH1_LOW_WORD_ADDR, 1)[0] +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] + low_word = read_from_memory(CH1_LOW_WORD_ADDR, 1)[0] + else: + raise ValueError("Invalid DAC channel") return (high_word << 8) | low_word -def perform_loopback_test(test_value): - print(f"Setting DAC output to {test_value}...") - write_dac(test_value) +def perform_loopback_test(channel, test_value): + print(f"\nTesting Channel {channel}") + 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 - print("Reading ADC value...") - adc_value = read_adc() - print(f"ADC readback: {adc_value}") + print(f"Reading ADC CH{channel} value...") + adc_value = read_adc(channel) + print(f"ADC CH{channel} readback: {adc_value}") - print("Reading DAC value...") - dac_value = read_dac() - print(f"DAC readback: {dac_value}") + print(f"Reading DAC CH{channel} value...") + dac_value = read_dac(channel) + print(f"DAC CH{channel} readback: {dac_value}") 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: - print("Loopback test FAILED!") + print(f"Loopback test for Channel {channel} FAILED!") print(f"Expected: {test_value}, ADC: {adc_value}, DAC: {dac_value}") def main(): - test_value = 0x2000 # Mid-range value (8192 in decimal) - perform_loopback_test(test_value) + test_value = 0x0FFF # Mid-range value (4095 in decimal) + + perform_loopback_test(0, test_value) + perform_loopback_test(1, test_value) if __name__ == "__main__": main() \ No newline at end of file