1
0
Fork 0

Compare commits

..

4 Commits

Author SHA1 Message Date
Florian Agbuya 232c9e3bb3 loopback read CH1 2024-08-21 14:29:08 +08:00
Florian Agbuya e1ee2f53cb add adc channel check after test mode 2024-08-21 13:44:20 +08:00
Florian Agbuya 1b673a1adb switch dac output sequence 2024-08-20 13:54:07 +08:00
Florian Agbuya 3629c9c831 test nixbld 2024-08-20 10:03:30 +08:00
3 changed files with 37 additions and 47 deletions

View File

@ -1,60 +1,48 @@
import time import time
from pyfastservo import adc, dac from pyfastservo import adc, dac
from pyfastservo.common import ( from pyfastservo.common import (
ADC_CH0_HIGH_ADDR, ADC_CH0_LOW_ADDR, ADC_CH1_HIGH_ADDR,
ADC_CH1_HIGH_ADDR, ADC_CH1_LOW_ADDR, ADC_CH1_LOW_ADDR,
CH0_HIGH_WORD_ADDR, CH0_LOW_WORD_ADDR, CH1_HIGH_WORD_ADDR,
CH1_HIGH_WORD_ADDR, CH1_LOW_WORD_ADDR, CH1_LOW_WORD_ADDR,
read_from_memory, write_to_memory read_from_memory,
write_to_memory
) )
def read_adc(channel): def read_adc():
if channel == 0: adc_value = adc.read_adc_channel(ADC_CH1_HIGH_ADDR, ADC_CH1_LOW_ADDR)
return adc.read_adc_channel(ADC_CH0_HIGH_ADDR, ADC_CH0_LOW_ADDR) return adc_value
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(channel, value): def write_dac(value):
dac.set_dac_output(value, channel) dac.set_dac_output(value)
def read_dac(channel): def read_dac():
if channel == 0: high_word = read_from_memory(CH1_HIGH_WORD_ADDR, 1)[0]
high_word = read_from_memory(CH0_HIGH_WORD_ADDR, 1)[0] low_word = read_from_memory(CH1_LOW_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 return (high_word << 8) | low_word
def perform_loopback_test(channel, test_value): def perform_loopback_test(test_value):
print(f"\nTesting Channel {channel}") print(f"Setting DAC output to {test_value}...")
print(f"Setting DAC CH{channel} output to {test_value}...") write_dac(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(f"Reading ADC CH{channel} value...") print("Reading ADC value...")
adc_value = read_adc(channel) adc_value = read_adc()
print(f"ADC CH{channel} readback: {adc_value}") print(f"ADC readback: {adc_value}")
print(f"Reading DAC CH{channel} value...") print("Reading DAC value...")
dac_value = read_dac(channel) dac_value = read_dac()
print(f"DAC CH{channel} readback: {dac_value}") print(f"DAC 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(f"Loopback test for Channel {channel} PASSED!") print("Loopback test PASSED!")
else: else:
print(f"Loopback test for Channel {channel} FAILED!") print("Loopback test 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 = 0x0FFF # Mid-range value (4095 in decimal) test_value = 0x2000 # Mid-range value (8192 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()

View File

@ -18,11 +18,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1723938990, "lastModified": 1719838683,
"narHash": "sha256-9tUadhnZQbWIiYVXH8ncfGXGvkNq3Hag4RCBEMUk7MI=", "narHash": "sha256-Zw9rQjHz1ilNIimEXFeVa1ERNRBF8DoXDhLAZq5B4pE=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c42fcfbdfeae23e68fc520f9182dde9f38ad1890", "rev": "d032c1a6dfad4eedec7e35e91986becc699d7d69",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -64,11 +64,11 @@
"src-migen": { "src-migen": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1721561053, "lastModified": 1715484909,
"narHash": "sha256-z3LRhNmKZrjr6rFD0yxtccSa/SWvFIYmb+G/D5d2Jd8=", "narHash": "sha256-4DCHBUBfc/VA+7NW2Hr0+JP4NnKPru2uVJyZjCCk0Ws=",
"owner": "m-labs", "owner": "m-labs",
"repo": "migen", "repo": "migen",
"rev": "9279e8623f8433bc4f23ac51e5e2331bfe544417", "rev": "4790bb577681a8c3a8d226bc196a4e5deb39e4df",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@ -1,5 +1,5 @@
diff --git a/base.nix b/base.nix diff --git a/base.nix b/base.nix
index 7eaee32..9aa338e 100644 index 7eaee32..3ade454 100644
--- a/base.nix --- a/base.nix
+++ b/base.nix +++ b/base.nix
@@ -27,6 +27,11 @@ with lib; @@ -27,6 +27,11 @@ with lib;
@ -14,7 +14,7 @@ index 7eaee32..9aa338e 100644
not-os.simpleStaticIp = mkOption { not-os.simpleStaticIp = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
@@ -84,17 +89,25 @@ with lib; @@ -84,17 +89,27 @@ with lib;
}; };
environment.etc = { environment.etc = {
"nix/nix.conf".source = pkgs.runCommand "nix.conf" {} '' "nix/nix.conf".source = pkgs.runCommand "nix.conf" {} ''
@ -31,6 +31,8 @@ index 7eaee32..9aa338e 100644
+ extra-sandbox-paths = /bin/sh=${pkgs.runtimeShell} $(echo $extraPaths) + extra-sandbox-paths = /bin/sh=${pkgs.runtimeShell} $(echo $extraPaths)
+ max-jobs = auto + max-jobs = auto
+ sandbox = true + sandbox = true
+ substituters = https://cache.armv7l.xyz
+ trusted-public-keys = cache.armv7l.xyz-1:kBY/eGnBAYiqYfg0fy0inWhshUo+pGFM3Pj7kIkmlBk=
+ trusted-users = root + trusted-users = root
EOF EOF
''; '';