Compare commits
432 commits
v1.5.0-alp
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6a7b985fa9 | ||
|
|
7bdbcde9be | ||
|
|
fbef4b364f | ||
|
|
da1228c9b1 | ||
|
|
3aac724298 | ||
|
|
0f9510e7a0 | ||
|
|
65bc247a65 | ||
|
|
d0c8a1ae8e | ||
|
|
9923038d6c | ||
|
|
72d547eb08 | ||
|
|
d853571aea | ||
|
|
64791e6d4e | ||
|
|
b6718c57b2 | ||
|
|
87ab2fccca | ||
|
|
56dbec82d4 | ||
|
|
bbd1bce0b8 | ||
|
|
937b002dfb | ||
|
|
d77215aecb | ||
|
|
7acb847a2b | ||
|
|
92088ec646 | ||
|
|
be123420db | ||
|
|
273dfa8037 | ||
|
|
6e2079fcfb | ||
|
|
ed699cfd6a | ||
|
|
f51c6a0bce | ||
|
|
5d00d4786b | ||
|
|
3e327e7e6b | ||
|
|
b2fd49d800 | ||
|
|
f327a4b4a0 | ||
|
|
5947584e63 | ||
|
|
3071d8de72 | ||
|
|
d882bca547 | ||
|
|
f0c7f289cb | ||
|
|
8b44421ea3 | ||
|
|
66d5bdd91b | ||
|
|
10ba138104 | ||
|
|
2f018e3867 | ||
|
|
68e8d29e0c | ||
|
|
1b3c1c4b3b | ||
|
|
38b4a6ba39 | ||
|
|
abe2aefcf9 | ||
|
|
3483b7baec | ||
|
|
1a21a49dfd | ||
|
|
8f689637ff | ||
|
|
67cffbb69e | ||
|
|
2f256117db | ||
|
|
8e917faed4 | ||
|
|
c1705290ff | ||
|
|
ceaf412c2a | ||
|
|
514fcd180c | ||
|
|
b3eb1735cc | ||
|
|
3330cee2ba | ||
|
|
d8f042dcaa | ||
|
|
d615089afe | ||
|
|
d6020a6a26 | ||
|
|
a2b3146f1c | ||
|
|
b5da8015b5 | ||
|
|
162309e54a | ||
|
|
fde6707c9c | ||
|
|
8a56b36166 | ||
|
|
c808c6d4e4 | ||
|
|
8a172d7f40 | ||
|
|
0cdc4b138a | ||
|
|
6b81b307b7 | ||
|
|
69bb1e493e | ||
|
|
8a5d56ee39 | ||
|
|
199bb7bbd7 | ||
|
|
b3b3fa7718 | ||
|
|
4f63a28b61 | ||
|
|
8a30f95aa7 | ||
|
|
5827f2b927 | ||
|
|
47db70a12e | ||
|
|
0818cda62e | ||
|
|
51c9ef2795 | ||
|
|
b8600be086 | ||
|
|
798ffc4867 | ||
|
|
b1c4c4ffad | ||
|
|
a28dd50e36 | ||
|
|
c296111bcc | ||
|
|
57615f1b39 | ||
|
|
345ab827c0 | ||
|
|
8d219c0523 | ||
|
|
1fb1c85208 | ||
|
|
91e4a87dc0 | ||
|
|
eb3098a2ad | ||
|
|
5ea02a71fe | ||
|
|
c96101960f | ||
|
|
a39b9465a6 | ||
|
|
99d34a39ce | ||
|
|
7370fda2c7 | ||
|
|
b133728f1d | ||
|
|
224b2abc5c | ||
|
|
cbd7d7149c | ||
|
|
cef3b7483d | ||
|
|
05d6112605 | ||
|
|
2d5609b1c5 | ||
|
|
8c3b76e2d0 | ||
|
|
7eaa72529a | ||
|
|
1405d0a599 | ||
|
|
9da7edc31f | ||
|
|
86fbe929d4 | ||
|
|
28150307ca | ||
|
|
d3610011e6 | ||
|
|
a4c1cd5274 | ||
|
|
af26764539 | ||
|
|
b9523b4864 | ||
|
|
72e2a331da | ||
|
|
b6f26eb6dc | ||
|
|
9660b4e58b | ||
|
|
e131c4c996 | ||
|
|
54eb6c8cd3 | ||
|
|
1fa3516612 | ||
|
|
269c7b9859 | ||
|
|
0966466686 | ||
|
|
3c7534a35c | ||
|
|
e47ca98b95 | ||
|
|
fa9e90df24 | ||
|
|
2b9b623dd0 | ||
|
|
351b040237 | ||
|
|
d722f62947 | ||
|
|
705661e322 | ||
|
|
8962cab40c | ||
|
|
3f64653ed3 | ||
|
|
3e0f3df48c | ||
|
|
0205ab494d | ||
|
|
77a3fc5039 | ||
|
|
15db0236a8 | ||
|
|
c56fdf0ce5 | ||
|
|
d4df1c1b22 | ||
|
|
ef8cdeccd7 | ||
|
|
50bde261af | ||
|
|
523946447a | ||
|
|
ab9605cb85 | ||
|
|
185f8a9e16 | ||
|
|
cd83921f49 | ||
|
|
ca25969574 | ||
|
|
733d0ffbf4 | ||
|
|
b77ba278de | ||
|
|
8df7d1b7be | ||
|
|
a4faeb28b0 | ||
|
|
24314e2361 | ||
|
|
a2abc0c2af | ||
|
|
70ac53aa75 | ||
|
|
acb79fa3bc | ||
|
|
4725942727 | ||
|
|
e8482783f7 | ||
|
|
f2b01f71c4 | ||
|
|
a5b9195ac9 | ||
|
|
8be82589c5 | ||
|
|
199975bdd0 | ||
|
|
6ea8869f7f | ||
|
|
0b8e1a7b50 | ||
|
|
9e33a294cd | ||
|
|
b95e966041 | ||
|
|
82e215881a | ||
|
|
57e6812cf8 | ||
|
|
e2bbd6fad3 | ||
|
|
0cc4470cbf | ||
|
|
4dc75c13c5 | ||
|
|
48cc3891cd | ||
|
|
67a186be4f | ||
|
|
69b2fac95f | ||
|
|
64a7ddc455 | ||
|
|
fc717a8f88 | ||
|
|
6d6ffc60ea | ||
|
|
74858c1098 | ||
|
|
2c639d8080 | ||
|
|
392cb6dc3f | ||
|
|
f9d1b0de42 | ||
|
|
5fd77343ac | ||
|
|
b9e4117db1 | ||
|
|
009de1af17 | ||
|
|
b09ea7da44 | ||
|
|
f2df7ad3f0 | ||
|
|
2d0c857a12 | ||
|
|
6a1f6a35b6 | ||
|
|
5f2788467b | ||
|
|
4dea10552c | ||
|
|
8b021cf5d1 | ||
|
|
b4a22176a4 | ||
|
|
2fbfb96dda | ||
|
|
253e2d3517 | ||
|
|
ee1adc0f85 | ||
|
|
45a30a4159 | ||
|
|
6ca54547bb | ||
|
|
2ba954537b | ||
|
|
aeea13347e | ||
|
|
b2d07d532d | ||
|
|
61db859c3d | ||
|
|
fe08937bb7 | ||
|
|
e1168f2a32 | ||
|
|
792a6a4974 | ||
|
|
5ae57bfa9a | ||
|
|
37c1064881 | ||
|
|
1edaceec4b | ||
|
|
cdef035e74 | ||
|
|
5692356e90 | ||
|
|
77efc4d924 | ||
|
|
2a3343d464 | ||
|
|
dbc99c011d | ||
|
|
a6c70e0bfa | ||
|
|
77cd3a9d4b | ||
|
|
0fc6c912fc | ||
|
|
c5d045364c | ||
|
|
2b521c4aaa | ||
|
|
b09f409509 | ||
|
|
6cc83a1aba | ||
|
|
70c44d006d | ||
|
|
f897d98ab0 | ||
|
|
e3b4972025 | ||
|
|
792f678b99 | ||
|
|
a202a10507 | ||
|
|
2963e8b3d5 | ||
|
|
c1d1bc7aed | ||
|
|
15024eb91e | ||
|
|
41033fdecd | ||
|
|
106832624a | ||
|
|
95e59769fd | ||
|
|
3f6dad5b92 | ||
|
|
994b536bc6 | ||
|
|
cdfe95af17 | ||
|
|
3be48bddeb | ||
|
|
645821a9bd | ||
|
|
5e75802bf4 | ||
|
|
73ba0f9692 | ||
|
|
626d4110e2 | ||
|
|
bd781764fb | ||
|
|
de3f3c092a | ||
|
|
5d3ce139b4 | ||
|
|
bb66883de2 | ||
|
|
124feb5b6b | ||
|
|
f2ac39238c | ||
|
|
a77d675a39 | ||
|
|
d99dab35aa | ||
|
|
73a2a64158 | ||
|
|
677415bee8 | ||
|
|
7dd2c0501e | ||
|
|
69f255d181 | ||
|
|
a62f9a77f1 | ||
|
|
2d319bcc76 | ||
|
|
087bd8e4f1 | ||
|
|
b26dc41907 | ||
|
|
6a65966846 | ||
|
|
a7aae7e8c6 | ||
|
|
e93e364079 | ||
|
|
b7c2bf7cdd | ||
|
|
358872904e | ||
|
|
a247d304f1 | ||
|
|
5ce832b7ec | ||
|
|
54149bfcb2 | ||
|
|
83e948803c | ||
|
|
a3223aa08c | ||
|
|
38da235175 | ||
|
|
5fee8ee974 | ||
|
|
21eb612601 | ||
|
|
ef5f9c1ab5 | ||
|
|
542b07f52c | ||
|
|
993957d4d2 | ||
|
|
4aa1564de0 | ||
|
|
82dc84be8a | ||
|
|
0afcbaac5d | ||
|
|
5136418e26 | ||
|
|
15d893d3cc | ||
|
|
2bbb8792d8 | ||
|
|
8c44a8de2d | ||
|
|
56de3dca11 | ||
|
|
3bc9070eea | ||
|
|
8a900600f5 | ||
|
|
ec4828d4c4 | ||
|
|
ee16dbc070 | ||
|
|
ee8188775a | ||
|
|
c8efeea9b3 | ||
|
|
8c1d2d1f06 | ||
|
|
10e31356df | ||
|
|
3c567704ad | ||
|
|
4fcd1abf85 | ||
|
|
186d94fa94 | ||
|
|
67ce6718fe | ||
|
|
99d4d089b9 | ||
|
|
054e7ed995 | ||
|
|
ed0b968752 | ||
|
|
07c2b8961e | ||
|
|
11612e44d5 | ||
|
|
772ef44d49 | ||
|
|
4c0d18b5f4 | ||
|
|
79290d0f36 | ||
|
|
503d689d51 | ||
|
|
ccb71f9650 | ||
|
|
59f3057dd9 | ||
|
|
5a78091f2b | ||
|
|
70a0079f92 | ||
|
|
69fe833715 | ||
|
|
8a6bff5248 | ||
|
|
1c09b8e1cb | ||
|
|
6901278185 | ||
|
|
853cf310c9 | ||
|
|
175cade3da | ||
|
|
d0620287a2 | ||
|
|
94482fe151 | ||
|
|
a697f65de6 | ||
|
|
0ba1493d19 | ||
|
|
7370ed7f17 | ||
|
|
8962965883 | ||
|
|
727040c132 | ||
|
|
1aaba21723 | ||
|
|
5f022c42b6 | ||
|
|
b729600cd8 | ||
|
|
50dd9e6002 | ||
|
|
f422ef1274 | ||
|
|
b0e44b9fcf | ||
|
|
c18845fce5 | ||
|
|
ac2d532b0c | ||
|
|
f84a0f7c1a | ||
|
|
1c1ef29e7b | ||
|
|
84953d23d1 | ||
|
|
3f39a736e0 | ||
|
|
76448e64ee | ||
|
|
daf7218cfd | ||
|
|
714953f8aa | ||
|
|
8b17a445c7 | ||
|
|
7a561224e2 | ||
|
|
7a75a3cfbe | ||
|
|
e12cc850db | ||
|
|
f0d0f3bde2 | ||
|
|
f4b8a0b3ad | ||
|
|
7ebb1ea0c0 | ||
|
|
9eb2a913b7 | ||
|
|
2111f5844a | ||
|
|
4dd477f604 | ||
|
|
54de9fd6b0 | ||
|
|
f6ff4727c8 | ||
|
|
5e46055d3c | ||
|
|
87c1f4d576 | ||
|
|
d30fa8b2ce | ||
|
|
ce50ddc702 | ||
|
|
f5aeca60da | ||
|
|
afda0e2994 | ||
|
|
4caec3989e | ||
|
|
99c6d77ad8 | ||
|
|
a0c45d3c56 | ||
|
|
e05df7ef19 | ||
|
|
76c63e8585 | ||
|
|
1fc9ae0c0d | ||
|
|
9b4865dceb | ||
|
|
83dbfadf20 | ||
|
|
8ac9707242 | ||
|
|
0fd9d35a5d | ||
|
|
289a3909fd | ||
|
|
5544bec231 | ||
|
|
eb81fbdd25 | ||
|
|
ffeebc6ea6 | ||
|
|
a2b8f2a00d | ||
|
|
045cf6cc65 | ||
|
|
483c16bcbb | ||
|
|
952c43073e | ||
|
|
9b5bb1678c | ||
|
|
9e858feeba | ||
|
|
e16b4fca69 | ||
|
|
06912584b0 | ||
|
|
d02efdb146 | ||
|
|
d9b4da3a8f | ||
|
|
a0fbd3ba8f | ||
|
|
169d51d5ba | ||
|
|
fe6ee093cb | ||
|
|
ea4c637842 | ||
|
|
ad9e19c102 | ||
|
|
b701479e87 | ||
|
|
89e46057a5 | ||
|
|
2c86cf1d6c | ||
|
|
80c5fc0ff6 | ||
|
|
cde564299c | ||
|
|
db6d823e0f | ||
|
|
59e30e93c5 | ||
|
|
9776b81b45 | ||
|
|
8aec59f32b | ||
|
|
6aef3fe0ac | ||
|
|
0dbf362f57 | ||
|
|
3d51f1f497 | ||
|
|
b41b3e218e | ||
|
|
77dfabc67f | ||
|
|
d022f944c5 | ||
|
|
cc8256b4cc | ||
|
|
916d6e3e38 | ||
|
|
5bb6fdf686 | ||
|
|
ec5e0e208c | ||
|
|
fc8eee58e7 | ||
|
|
61594d53fb | ||
|
|
795b1eb3fa | ||
|
|
9a23938180 | ||
|
|
a294a92e2f | ||
|
|
08fa3fa0a0 | ||
|
|
5ad44c780c | ||
|
|
e35766c7b8 | ||
|
|
be340f2adc | ||
|
|
0cc5968b12 | ||
|
|
fe340ac620 | ||
|
|
4568be8ff4 | ||
|
|
886be660f6 | ||
|
|
2c62fe71a3 | ||
|
|
0c3046b9c7 | ||
|
|
8778d82576 | ||
|
|
fb347c37ac | ||
|
|
e6678435bd | ||
|
|
a0476d1bf2 | ||
|
|
d674d05083 | ||
|
|
fa8f49086c | ||
|
|
7f5228d934 | ||
|
|
917b33f17d | ||
|
|
89c9f20d16 | ||
|
|
b67275831b | ||
|
|
a84d8de0e6 | ||
|
|
d30d444bc7 | ||
|
|
8db7f003ee | ||
|
|
32a5fac5ef | ||
|
|
77f73d3e05 | ||
|
|
3cf37d17b1 | ||
|
|
251a2a92b0 | ||
|
|
83e9817415 | ||
|
|
f3a05da1eb | ||
|
|
9b38a1fc3d | ||
|
|
35cdfa5922 | ||
|
|
8c29d12e65 | ||
|
|
de33f632e1 | ||
|
|
e6dfc83330 | ||
|
|
f557a059ab | ||
|
|
be433c00cb | ||
|
|
5bf824220e | ||
|
|
cd4698d92f | ||
|
|
8531d399f3 | ||
|
|
bcc3ea87c3 | ||
|
|
b5b758dc87 | ||
|
|
c05b3a5c8b |
2
.github/FUNDING.yml
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
github: [jankae]
|
||||
|
||||
132
.github/workflows/Build.yml
vendored
|
|
@ -10,14 +10,15 @@ on:
|
|||
|
||||
jobs:
|
||||
PC_Application_Ubuntu:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libusb-1.0-0-dev qt5-default qt5-qmake qtbase5-dev
|
||||
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev libqt6svg6-dev libgl-dev
|
||||
qtchooser -install qt6 $(which qmake6)
|
||||
|
||||
- name: Get build timestamp
|
||||
id: id_date
|
||||
|
|
@ -35,6 +36,7 @@ jobs:
|
|||
- name: Build application
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
export QT_SELECT=qt6
|
||||
qmake LibreVNA-GUI.pro
|
||||
make -j9
|
||||
shell: bash
|
||||
|
|
@ -42,28 +44,66 @@ jobs:
|
|||
- name: Upload artifact
|
||||
env:
|
||||
LIBREVNA_VERSION: "${{steps.id_version.outputs.app_version}}"
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: LibreVNA-GUI-Ubuntu-${{env.LIBREVNA_VERSION}}
|
||||
path: Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI
|
||||
|
||||
PC_Application_Windows:
|
||||
runs-on: windows-2019
|
||||
PC_Application_RPi5:
|
||||
runs-on: RPi-HIL
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev libqt6svg6-dev
|
||||
|
||||
- name: Get build timestamp
|
||||
id: id_date
|
||||
run: echo "timestamp=$(date +%Y-%m-%d-%H-%M-%S)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Get app version
|
||||
id: id_version
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
fw_major=`grep -oP '(?<=FW_MAJOR=)[0-9]+' LibreVNA-GUI.pro`
|
||||
fw_minor=`grep -oP '(?<=FW_MINOR=)[0-9]+' LibreVNA-GUI.pro`
|
||||
fw_patch=`grep -oP '(?<=FW_PATCH=)[0-9]+' LibreVNA-GUI.pro`
|
||||
echo "app_version=v$fw_major.$fw_minor.$fw_patch-${{steps.id_date.outputs.timestamp}}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build application
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
qmake6 LibreVNA-GUI.pro
|
||||
make -j9
|
||||
shell: bash
|
||||
|
||||
- name: Upload artifact
|
||||
env:
|
||||
LIBREVNA_VERSION: "${{steps.id_version.outputs.app_version}}"
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: LibreVNA-GUI-RPi5-${{env.LIBREVNA_VERSION}}
|
||||
path: Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI
|
||||
|
||||
PC_Application_Windows:
|
||||
runs-on: windows-2022
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: msys2/setup-msys2@v2
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v2
|
||||
uses: jurplel/install-qt-action@v4
|
||||
with:
|
||||
version: '5.15.2'
|
||||
arch: 'win64_mingw81'
|
||||
version: '6.2.4'
|
||||
arch: 'win64_mingw'
|
||||
|
||||
- name: Download libusb
|
||||
run: |
|
||||
curl -o libusb.7z -L https://github.com/libusb/libusb/releases/download/v1.0.25/libusb-1.0.25.7z
|
||||
7z x libusb.7z -r -olibusb
|
||||
Xcopy /E /I /Y libusb\include ..\Qt\5.15.2\mingw81_64\include
|
||||
Xcopy /E /I /Y libusb\include %QT_ROOT_DIR%\include
|
||||
Xcopy /E /I /Y libusb\MinGW64\static\libusb-1.0.a Software\PC_Application\LibreVNA-GUI
|
||||
shell: cmd
|
||||
|
||||
|
|
@ -94,14 +134,13 @@ jobs:
|
|||
cd Software/PC_Application/LibreVNA-GUI/release
|
||||
del *.o *.cpp
|
||||
windeployqt.exe .
|
||||
copy ..\..\..\..\..\Qt\5.15.2\mingw81_64\bin\libwinpthread-1.dll .
|
||||
copy ..\..\..\..\..\Qt\5.15.2\mingw81_64\bin\libgcc_s_seh-1.dll .
|
||||
copy "..\..\..\..\..\Qt\5.15.2\mingw81_64\bin\libstdc++-6.dll" .
|
||||
copy ..\..\..\..\..\Qt\5.15.2\mingw81_64\bin\Qt5OpenGL.dll .
|
||||
copy %QT_ROOT_DIR%\bin\libwinpthread-1.dll .
|
||||
copy %QT_ROOT_DIR%\bin\libgcc_s_seh-1.dll .
|
||||
copy %QT_ROOT_DIR%\bin\Qt6OpenGL.dll .
|
||||
shell: cmd
|
||||
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
env:
|
||||
LIBREVNA_VERSION: "${{steps.id_version.outputs.app_version}}"
|
||||
with:
|
||||
|
|
@ -109,17 +148,17 @@ jobs:
|
|||
path: Software/PC_Application/LibreVNA-GUI/release
|
||||
|
||||
PC_Application_OSX:
|
||||
runs-on: macos-11
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
brew install qt@5 libusb
|
||||
brew install qt@6 pcre
|
||||
|
||||
- name: Set Environment
|
||||
run: |
|
||||
echo "/usr/local/opt/qt@5/bin" >> $GITHUB_PATH
|
||||
echo "/usr/local/opt/qt@6/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Get build timestamp
|
||||
id: id_date
|
||||
|
|
@ -146,15 +185,58 @@ jobs:
|
|||
- name: Upload artifact
|
||||
env:
|
||||
LIBREVNA_VERSION: "${{steps.id_version.outputs.app_version}}"
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: LibreVNA-GUI-OSX-${{env.LIBREVNA_VERSION}}
|
||||
name: LibreVNA-GUI-OSX-latest-${{env.LIBREVNA_VERSION}}
|
||||
path: Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI.zip
|
||||
|
||||
PC_Application_OSX_13:
|
||||
runs-on: macos-13
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
brew install qt@6 pcre
|
||||
|
||||
- name: Set Environment
|
||||
run: |
|
||||
echo "/usr/local/opt/qt@6/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Get build timestamp
|
||||
id: id_date
|
||||
run: echo "timestamp=$(date +%Y-%m-%d-%H-%M-%S)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Get app version
|
||||
id: id_version
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
fw_major=`pcregrep -o '(?<=FW_MAJOR=)[0-9]+' LibreVNA-GUI.pro`
|
||||
fw_minor=`pcregrep -o '(?<=FW_MINOR=)[0-9]+' LibreVNA-GUI.pro`
|
||||
fw_patch=`pcregrep -o '(?<=FW_PATCH=)[0-9]+' LibreVNA-GUI.pro`
|
||||
echo "app_version=v$fw_major.$fw_minor.$fw_patch-${{steps.id_date.outputs.timestamp}}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build application
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
qmake LibreVNA-GUI.pro
|
||||
make -j9
|
||||
macdeployqt LibreVNA-GUI.app
|
||||
zip -ry LibreVNA-GUI.zip LibreVNA-GUI.app
|
||||
shell: bash
|
||||
|
||||
- name: Upload artifact
|
||||
env:
|
||||
LIBREVNA_VERSION: "${{steps.id_version.outputs.app_version}}"
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: LibreVNA-GUI-OSX-13.7-${{env.LIBREVNA_VERSION}}
|
||||
path: Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI.zip
|
||||
|
||||
Embedded_Firmware:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install toolchain
|
||||
run: |
|
||||
|
|
@ -187,7 +269,7 @@ jobs:
|
|||
shell: bash
|
||||
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
env:
|
||||
LIBREVNA_VERSION: "${{steps.id_version.outputs.app_version}}"
|
||||
with:
|
||||
|
|
|
|||
60
.github/workflows/HIL_Tests.yml
vendored
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
name: HIL_Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- HIL_actions
|
||||
|
||||
jobs:
|
||||
Get_Repository:
|
||||
runs-on: RPi-HIL
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
|
||||
PC_Application_RPi5:
|
||||
runs-on: RPi-HIL
|
||||
needs: Get_Repository
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev qt6-svg-dev
|
||||
|
||||
- name: Build application
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
qmake6 LibreVNA-GUI.pro
|
||||
make -j9
|
||||
shell: bash
|
||||
|
||||
Embedded_Firmware:
|
||||
runs-on: RPi-HIL
|
||||
needs: Get_Repository
|
||||
steps:
|
||||
- name: Install toolchain
|
||||
run: |
|
||||
sudo apt-get install -y gcc-arm-none-eabi binutils-arm-none-eabi
|
||||
|
||||
- name: Build application
|
||||
run: |
|
||||
cd Software/VNA_embedded
|
||||
make -j9
|
||||
cp build/VNA_embedded.elf ../../
|
||||
shell: bash
|
||||
|
||||
- name: Combine with FPGA bitstream
|
||||
run: |
|
||||
python3 AssembleFirmware.py
|
||||
shell: bash
|
||||
|
||||
HIL:
|
||||
runs-on: RPi-HIL
|
||||
needs: [PC_Application_RPi5, Embedded_Firmware]
|
||||
steps:
|
||||
- name: Run HIL tests
|
||||
run: |
|
||||
cd Software/Integrationtests
|
||||
export DISPLAY=:0
|
||||
python3 Integrationtest.py
|
||||
|
||||
124
.github/workflows/Release_tag_stable.yml
vendored
|
|
@ -8,16 +8,17 @@ on:
|
|||
jobs:
|
||||
|
||||
PC_Application_Ubuntu:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
outputs:
|
||||
upload_url: ${{ steps.bump_release.outputs.upload_url }}
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libusb-1.0-0-dev qt5-default qt5-qmake qtbase5-dev zip
|
||||
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev libqt6svg6-dev libgl-dev zip
|
||||
qtchooser -install qt6 $(which qmake6)
|
||||
|
||||
- name: Get app version
|
||||
id: id_version
|
||||
|
|
@ -31,8 +32,10 @@ jobs:
|
|||
- name: Build application
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
export QT_SELECT=qt6
|
||||
qmake LibreVNA-GUI.pro
|
||||
make -j9
|
||||
zip LibreVNA-GUI.zip LibreVNA-GUI
|
||||
shell: bash
|
||||
|
||||
- name: Bump release page
|
||||
|
|
@ -60,24 +63,63 @@ jobs:
|
|||
asset_name: LibreVNA-GUI-Ubuntu-${{env.LIBREVNA_VERSION}}.zip
|
||||
asset_content_type: application/tar+gzip
|
||||
|
||||
PC_Application_RPi5:
|
||||
needs: PC_Application_Ubuntu
|
||||
runs-on: RPi-HIL
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev qt6-svg-dev
|
||||
|
||||
- name: Get app version
|
||||
id: id_version
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
fw_major=`grep -oP '(?<=FW_MAJOR=)[0-9]+' LibreVNA-GUI.pro`
|
||||
fw_minor=`grep -oP '(?<=FW_MINOR=)[0-9]+' LibreVNA-GUI.pro`
|
||||
fw_patch=`grep -oP '(?<=FW_PATCH=)[0-9]+' LibreVNA-GUI.pro`
|
||||
echo "app_version=v$fw_major.$fw_minor.$fw_patch" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build application
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
qmake6 LibreVNA-GUI.pro
|
||||
make -j9
|
||||
zip LibreVNA-GUI.zip LibreVNA-GUI
|
||||
shell: bash
|
||||
|
||||
- name: 'Upload release asset'
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
LIBREVNA_VERSION: "${{steps.id_version.outputs.app_version}}"
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ needs.PC_Application_Ubuntu.outputs.upload_url }}
|
||||
asset_path: ./Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI.zip
|
||||
asset_name: LibreVNA-GUI-RPi5-${{env.LIBREVNA_VERSION}}.zip
|
||||
asset_content_type: application/tar+gzip
|
||||
|
||||
PC_Application_Windows:
|
||||
needs: PC_Application_Ubuntu
|
||||
runs-on: windows-2019
|
||||
runs-on: windows-2022
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v4
|
||||
- uses: msys2/setup-msys2@v2
|
||||
|
||||
- name: Install Qt
|
||||
uses: jurplel/install-qt-action@v2
|
||||
uses: jurplel/install-qt-action@v4
|
||||
with:
|
||||
version: '5.15.2'
|
||||
arch: 'win64_mingw81'
|
||||
version: '6.2.4'
|
||||
arch: 'win64_mingw'
|
||||
|
||||
- name: Download libusb
|
||||
run: |
|
||||
curl -o libusb.7z -L https://github.com/libusb/libusb/releases/download/v1.0.25/libusb-1.0.25.7z
|
||||
7z x libusb.7z -r -olibusb
|
||||
Xcopy /E /I /Y libusb\include ..\Qt\5.15.2\mingw81_64\include
|
||||
Xcopy /E /I /Y libusb\include %QT_ROOT_DIR%\include
|
||||
Xcopy /E /I /Y libusb\MinGW64\static\libusb-1.0.a Software\PC_Application\LibreVNA-GUI
|
||||
shell: cmd
|
||||
|
||||
|
|
@ -103,10 +145,9 @@ jobs:
|
|||
cd Software/PC_Application/LibreVNA-GUI/release
|
||||
del *.o *.cpp
|
||||
windeployqt.exe .
|
||||
copy ..\..\..\..\..\Qt\5.15.2\mingw81_64\bin\libwinpthread-1.dll .
|
||||
copy ..\..\..\..\..\Qt\5.15.2\mingw81_64\bin\libgcc_s_seh-1.dll .
|
||||
copy "..\..\..\..\..\Qt\5.15.2\mingw81_64\bin\libstdc++-6.dll" .
|
||||
copy ..\..\..\..\..\Qt\5.15.2\mingw81_64\bin\Qt5OpenGL.dll .
|
||||
copy %QT_ROOT_DIR%\bin\libwinpthread-1.dll .
|
||||
copy %QT_ROOT_DIR%\bin\libgcc_s_seh-1.dll .
|
||||
copy %QT_ROOT_DIR%\bin\Qt6OpenGL.dll .
|
||||
shell: cmd
|
||||
|
||||
- name: Zip app
|
||||
|
|
@ -129,17 +170,17 @@ jobs:
|
|||
|
||||
PC_Application_OSX:
|
||||
needs: PC_Application_Ubuntu
|
||||
runs-on: macos-11
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
brew install qt@5 libusb
|
||||
brew install qt@6 pcre
|
||||
|
||||
- name: Set Environment
|
||||
run: |
|
||||
echo "/usr/local/opt/qt@5/bin" >> $GITHUB_PATH
|
||||
echo "/usr/local/opt/qt@6/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Get app version
|
||||
id: id_version
|
||||
|
|
@ -167,14 +208,57 @@ jobs:
|
|||
with:
|
||||
upload_url: ${{ needs.PC_Application_Ubuntu.outputs.upload_url }}
|
||||
asset_path: ./Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI.zip
|
||||
asset_name: LibreVNA-GUI-OSX-${{env.LIBREVNA_VERSION}}.zip
|
||||
asset_name: LibreVNA-GUI-OSX-latest-${{env.LIBREVNA_VERSION}}.zip
|
||||
asset_content_type: application/tar+gzip
|
||||
|
||||
PC_Application_OSX_13:
|
||||
needs: PC_Application_Ubuntu
|
||||
runs-on: macos-13
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
brew install qt@6 pcre
|
||||
|
||||
- name: Set Environment
|
||||
run: |
|
||||
echo "/usr/local/opt/qt@6/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Get app version
|
||||
id: id_version
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
fw_major=`pcregrep -o '(?<=FW_MAJOR=)[0-9]+' LibreVNA-GUI.pro`
|
||||
fw_minor=`pcregrep -o '(?<=FW_MINOR=)[0-9]+' LibreVNA-GUI.pro`
|
||||
fw_patch=`pcregrep -o '(?<=FW_PATCH=)[0-9]+' LibreVNA-GUI.pro`
|
||||
echo "app_version=v$fw_major.$fw_minor.$fw_patch" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build application
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
qmake LibreVNA-GUI.pro
|
||||
make -j9
|
||||
macdeployqt LibreVNA-GUI.app
|
||||
zip -ry LibreVNA-GUI.zip LibreVNA-GUI.app
|
||||
shell: bash
|
||||
|
||||
- name: 'Upload release asset'
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
LIBREVNA_VERSION: "${{steps.id_version.outputs.app_version}}"
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ needs.PC_Application_Ubuntu.outputs.upload_url }}
|
||||
asset_path: ./Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI.zip
|
||||
asset_name: LibreVNA-GUI-OSX-13.7-${{env.LIBREVNA_VERSION}}.zip
|
||||
asset_content_type: application/tar+gzip
|
||||
|
||||
Embedded_Firmware:
|
||||
needs: PC_Application_Ubuntu
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install toolchain
|
||||
run: |
|
||||
|
|
|
|||
8
.github/workflows/Test.yml
vendored
|
|
@ -1,4 +1,4 @@
|
|||
name: Build
|
||||
name: Unit_Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
|
|
@ -10,18 +10,20 @@ on:
|
|||
|
||||
jobs:
|
||||
Tests:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libusb-1.0-0-dev qt5-default qt5-qmake qtbase5-dev
|
||||
sudo apt-get install -y libusb-1.0-0-dev qt6-tools-dev qt6-base-dev libqt6svg6-dev libgl-dev
|
||||
qtchooser -install qt6 $(which qmake6)
|
||||
|
||||
- name: Build Tests
|
||||
run: |
|
||||
cd Software/PC_Application/LibreVNA-Test
|
||||
export QT_SELECT=qt6
|
||||
qmake LibreVNA-Test.pro
|
||||
make -j9
|
||||
shell: bash
|
||||
|
|
|
|||
131
CHANGELOG.md
|
|
@ -1,14 +1,137 @@
|
|||
# Changelog
|
||||
|
||||
## v1.6.4
|
||||
|
||||
Critical bugfix for the embedded firmware:
|
||||
|
||||
- Fix SPI flash timing, see #315
|
||||
|
||||
Minor improvement for the GUI:
|
||||
|
||||
- Option to add titles to graphs
|
||||
- Show trace names even when only enabled on secondary Y axis
|
||||
- Add x axis variable to the available variables for formulas in "from math" traces
|
||||
|
||||
|
||||
|
||||
## v1.6.3
|
||||
|
||||
Bugfixes and quality of life improvements
|
||||
|
||||
- Windows and macOS: add icon to GUI application
|
||||
- From math traces:
|
||||
- Validate formula immediately and show error messages
|
||||
- Bugfix: do not reset variable names when opening trace edit dialog again
|
||||
- Fix crash when combining with de-embedding
|
||||
- Calibration:
|
||||
- Interpolate points using mag/phase instead of real/imag (minor improvements in accuracy)
|
||||
- Update widget when changing span
|
||||
- Fix race condition when aborting measurement
|
||||
- Reset LibreCAL port settings when aborting measurement
|
||||
- Manual improvement: typos and wording
|
||||
- Increase USB buffer timeout during sweep (should prevent disconnect when CPU is very busy)
|
||||
- Include actual serial of connected device in SCPI \*IDN? response
|
||||
- Allow group delay plot for reflection traces
|
||||
- Configurable default Y axis limits per Y axis type
|
||||
- Fix streaming server output for zero span sweeps
|
||||
- Synchronization improvements for compound device
|
||||
- Allow name changes for existing modes
|
||||
|
||||
## v1.6.2
|
||||
|
||||
Mostly bugfixes with only minor new features
|
||||
|
||||
- New features:
|
||||
- New SCPI commands:
|
||||
- Temperatures readout
|
||||
- Complete control over manual control via SCPI
|
||||
- Padding option for TDR/DFT to increase resolution
|
||||
- Support for dwell time (adjustable delay before each point in the sweep)
|
||||
- Bugfixes:
|
||||
- Fix crash when deleting traces with TDR/DFT math
|
||||
- Spectrum analyzer: Improve tracking generator frequency accuracy
|
||||
- Fix swapped LO and Source unlock LEDs
|
||||
- Reduce amount of mode switches when starting and loading setups (faster loading time)
|
||||
- Use correct units on spectrum analyzer graphs (dBm instead of dB)
|
||||
- Fix Touchstone export file ending
|
||||
- Update eye diagram when changing settings while the trace data does not change
|
||||
- Keep eye diagram trace visible when other trace is deleted
|
||||
- Resolve math references when duplicating "from math" traces
|
||||
- Update LibreCAL API, detect LibreCALs with bad factory coefficients
|
||||
- Fix impedance renormalization (general formulas for parameter conversions)
|
||||
- Fix rare and random phase reversals of S parameter measurements
|
||||
|
||||
## v1.6.1
|
||||
|
||||
Mostly bugfixes with only minor new features
|
||||
|
||||
- New features:
|
||||
- New SCPI commands:
|
||||
- switch between linear/log sweeps in VNA mode
|
||||
- delete traces
|
||||
- Option to align axis ticks for left and right Y-axes
|
||||
- Import/export options in file menu
|
||||
- User-selectable handling of NaN values for limit checking
|
||||
- drop files on trace list to import them
|
||||
|
||||
- Bugfixes:
|
||||
- center TDR output values at zero (fixes impedance calculations in cases where there is a reflection from before the calibration plane)
|
||||
- fix calibration calculation when non-required S parameters are not available
|
||||
- improve LibreCAL coefficient extraction
|
||||
- use native OS dialogs for opening/saving files
|
||||
- future Qt version fix: prevent crash after taking calibration measurement
|
||||
- SCPI command handling improved
|
||||
- fix menus after loading setup files in certain scenarios
|
||||
|
||||
## v1.6.0
|
||||
|
||||
This update contains API breaking changes to the SCPI server. This was necessary because the previous implementation did not follow the standard completely. If you were talking to the SCPI server directly yourself, you will need to make the required changes. If you are using the provided libreVNA.py class, you just need to update that file.
|
||||
|
||||
- New featues:
|
||||
- New SCPI command: read/write preferences
|
||||
- New API: option to stream live trace data
|
||||
|
||||
- Bugfixes and improvements:
|
||||
- Keep de-embedding active when changing settings
|
||||
- Improvements to trace averaging
|
||||
- adjust SCPI API to conform better with the standard:
|
||||
- new required commands RST, CLS, ESE, ESR, OPC and WAI
|
||||
- no responses to commands, errors are reported through status registers instead
|
||||
- TDR updates happen during a sweep not just afterwards (with configurable update rate)
|
||||
- Additional sanity checks when loading calibration files
|
||||
|
||||
## v1.5.1
|
||||
|
||||
Mostly bugfixes with only minor new features
|
||||
|
||||
- New features:
|
||||
- Z0 of through standard now adjustable
|
||||
- Option to automatically adjust the span to the active calibration
|
||||
- Bugfixes:
|
||||
- Make De-embedding menu visible on MacOS
|
||||
- Detection of handling of LibreCAL in the automatic calibration dialog
|
||||
- Allow updates of devices with older firmwares (a matching older GUI version had to be used previously)
|
||||
- Fix port excitation when not all S-parameters are measured
|
||||
- Do not use DFT in spectrum analyzer when in zero span mode
|
||||
- Readback of certain GUI values on Windows now correct (was stuck on 0 before)
|
||||
- Prevent crash when disconnecting the device while a dialog was open
|
||||
- Prevent occasional crash at the end of calibration measurements
|
||||
- Fix spikes in sweep when a frequency calibration is set
|
||||
- Improve sample timing between ADC and FPGA (resulted in very noisy traces on some devices)
|
||||
|
||||
## v1.5.0
|
||||
**v1.5.0 is in a pre-release state for now:** The following changes are implemented but not sufficiently tested for productive use. The v1.5.0-alpha.2 release allows testing of these features, proceed at your own risk.
|
||||
|
||||
- New features:
|
||||
- Further abstraction from the LibreVNA hardware. The GUI now supports VNAs with up to 8 ports
|
||||
- Allow cascading of muliple LibreVNAs, see Preferences->Compound Devices. You need to configure a compound device first (consisting of up to 4 LibreVNAs). Afterwards, you are able to use them as one larger, virtual VNA with more ports (or more physical separation between the ports). Measurements within one physical LibreVNA will contain phase information, measurements between different LibreVNAs have their phase set to zero
|
||||
- Capsulation of communication to the hardware inside of the DeviceDriver class. This simplifies the integration of drivers for other equipment
|
||||
- Experimental drivers for Siglent SSA3000X and SNA5000A series devices as examples
|
||||
- Allow cascading of muliple LibreVNAs, see Preferences->Device Drivers->LibreVNA/Compound. You need to configure a compound device first (consisting of up to 4 LibreVNAs). Afterwards, you are able to use them as one larger, virtual VNA with more ports (or more physical separation between the ports). Measurements within one physical LibreVNA will contain phase information, measurements between different LibreVNAs have their phase set to zero
|
||||
- Support for calibrating with sliding loads
|
||||
- New graph type: Eye Diagram
|
||||
- Restrict markers to a certain frequency range
|
||||
- Switched to a dedicated USB VID/PID thanks to pid.codes
|
||||
- Switched to Qt6
|
||||
- Easier
|
||||
|
||||
- API-breaking changes: Unfortunately, some major rework was required to make the GUI compatible to devices with more than two ports. In some areas, the file storage format and the SCPI API had to change. Almost all changes are within the calibration system.
|
||||
- Calibration kit file format changed (old calibration kits can be imported)
|
||||
|
|
@ -22,6 +145,10 @@
|
|||
- Valgrind issues fixed (mostly variable initializations)
|
||||
- made USB communication more robust
|
||||
- PLL locking issue fixed
|
||||
- no more disappearing device log
|
||||
|
||||
## v1.4.1
|
||||
- Bugfix: Configure voltage regulator for correct voltage at startup
|
||||
|
||||
## v1.4.0
|
||||
|
||||
|
|
|
|||
|
|
@ -12,17 +12,17 @@ Creating all the different parts from the source code requires quite a few tools
|
|||
## Building the PC application:
|
||||
* Install the required tools (Qt and libusb-1.0):
|
||||
```
|
||||
sudo apt-get install qt5-default qt5-qmake qtbase5-dev libusb-1.0-0-dev
|
||||
sudo apt-get install libusb-1.0-0-dev qt6-tools-dev qt6-base-dev
|
||||
```
|
||||
* Build the application:
|
||||
* either:
|
||||
```
|
||||
cd Software/PC_Application
|
||||
qmake
|
||||
cd Software/PC_Application/LibreVNA-GUI
|
||||
qmake6
|
||||
make
|
||||
```
|
||||
* or:
|
||||
* Open Software/PC_Application/Application.pro with Qt Creator
|
||||
* Open Software/PC_Application/LibreVNA-GUI/LibreVNA-GUI.pro with Qt Creator
|
||||
* Build the application with Qt Creator
|
||||
|
||||
## Building the MCU firmware:
|
||||
|
|
|
|||
BIN
Documentation/DeveloperInfo/Device_protocol_v13.pdf
Normal file
1392
Documentation/DeveloperInfo/Device_protocol_v13.tex
Normal file
27
Documentation/DeveloperInfo/DownloadActionBuilds.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Download automatically build binaries
|
||||
|
||||
The Github actions are set up in such a way that binary files are created for each commit on the master branch. Feel free to try them out if you want the latest features but be prepared to find some unfinished things in them as well.
|
||||
|
||||
## Finding the binaries
|
||||
|
||||
1. Switch to the `Actions` tab in the repository:
|
||||
|
||||

|
||||
|
||||
2. Each commit will trigger two workflow runs, one for the binaries and one for some automated tests. Pick a commit and chose the workflow run with the higher build number:
|
||||
|
||||

|
||||
|
||||
4. The next window should look like this:
|
||||
|
||||

|
||||
|
||||
If it looks like this instead, you have picked the test workflow run (which does not contain any binaries):
|
||||
|
||||

|
||||
|
||||
5. Scroll down to find the binaries:
|
||||
|
||||

|
||||
|
||||
6. Click on an artifact to download it. If that doesn't seem to work, check that you are logged in on Github (required for the download)
|
||||
|
|
@ -13,6 +13,7 @@
|
|||
{geometry}
|
||||
\usepackage{tikz}
|
||||
\usepackage{siunitx}
|
||||
\usepackage{minibox}
|
||||
\DeclareSIUnit{\belmilliwatt}{Bm}
|
||||
\DeclareSIUnit{\dBm}{\deci\belmilliwatt}
|
||||
|
||||
|
|
@ -534,6 +535,26 @@ $$ f_{firstBin} = \frac{SR_{ADC} * DFT\_FIRST\_BIN}{2^{16}}$$
|
|||
$$ \Delta f = \frac{SR_{ADC} * DFT\_FREQ\_SPACING}{2^{24}}$$
|
||||
\end{itemize}
|
||||
|
||||
\subsection{SETTLING\_TIME: 0x14}
|
||||
\begin{center}
|
||||
\begin{tikzpicture}
|
||||
\bitrect{16}{16-\bit}
|
||||
\rwbits{0}{16}{SETTLING\_TIME[15:0]}
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
\begin{itemize}
|
||||
\item \textbf{SETTLING\_TIME[19:0]:} This value determines the time delay between applying the stimulus signal and the beginning of the ADC sampling.
|
||||
$$ t_{delay} = \frac{1}{\SI{102.4}{\mega\hertz}} SETTLING\_TIME $$
|
||||
\end{itemize}
|
||||
\subsection{SETTLING\_TIME: 0x15}
|
||||
\begin{center}
|
||||
\begin{tikzpicture}
|
||||
\bitrect{16}{16-\bit}
|
||||
\robits{0}{12}{reserved}
|
||||
\rwbits{12}{4}{SETTLING\_TIME[19:16]}
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
|
||||
\section{SweepConfig}
|
||||
\label{sweepconfig}
|
||||
The SweepConfig contains data for the source and LO1 PLL as well as the attenuator and source filter. Each point in the sweep, needs a valid SweepConfig before the sweep is started.
|
||||
|
|
@ -542,7 +563,9 @@ The SweepConfig contains data for the source and LO1 PLL as well as the attenuat
|
|||
\begin{tikzpicture}
|
||||
\bitrect{16}{96-\bit}
|
||||
\rwbits{0}{1}{HS}
|
||||
\rwbits{1}{2}{SettlingTime}
|
||||
%\rwbits{1}{2}{SettlingTime}
|
||||
\rwbits{1}{1}{\tiny LO N[6]}
|
||||
\rwbits{2}{1}{\minibox{\tiny Source\\N[6]}}
|
||||
\rwbits{3}{3}{Samples}
|
||||
\rwbits{6}{2}{SourceFilter}
|
||||
\rwbits{8}{8}{LO M[11:4]}
|
||||
|
|
@ -580,17 +603,17 @@ The SweepConfig contains data for the source and LO1 PLL as well as the attenuat
|
|||
\end{center}
|
||||
\begin{itemize}
|
||||
\item \textbf{HS: Halt sweep.} If set, settling and sampling of this sweep point will be postponed until the sweep resume command is issued.
|
||||
\item \textbf{SettlingTime:} Amount of time between locking of PLLs and beginning of ADC sampling
|
||||
\begin{center}
|
||||
\begin{tabular}{ c|c }
|
||||
Setting & Time\\
|
||||
\hline
|
||||
00 & \SI{20}{\micro\second}\\
|
||||
01 & \SI{60}{\micro\second}\\
|
||||
10 & \SI{180}{\micro\second}\\
|
||||
11 & \SI{540}{\micro\second}\\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
%\item \textbf{SettlingTime:} Amount of time between locking of PLLs and beginning of ADC sampling
|
||||
%\begin{center}
|
||||
%\begin{tabular}{ c|c }
|
||||
%Setting & Time\\
|
||||
%\hline
|
||||
%00 & \SI{20}{\micro\second}\\
|
||||
%01 & \SI{60}{\micro\second}\\
|
||||
%10 & \SI{180}{\micro\second}\\
|
||||
%11 & \SI{540}{\micro\second}\\
|
||||
%\end{tabular}
|
||||
%\end{center}
|
||||
\item \textbf{Samples:} Number of ADC samples to take
|
||||
\begin{center}
|
||||
\begin{tabular}{ c|c|c }
|
||||
|
|
|
|||
BIN
Documentation/DeveloperInfo/Screenshots/Binaries1.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
Documentation/DeveloperInfo/Screenshots/Binaries2.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
Documentation/DeveloperInfo/Screenshots/Binaries3.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
Documentation/DeveloperInfo/Screenshots/Binaries4.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
Documentation/DeveloperInfo/Screenshots/Binaries5.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
|
|
@ -168,7 +168,7 @@
|
|||
\clearpage
|
||||
|
||||
\section{USB device}
|
||||
The LibreVNA implements a ``custom class'' USB device. It uses a VID of 0x0483 and a PID of 0x4142. The custom class contains a single interface with three bulk endpoints:
|
||||
The LibreVNA implements a ``custom class'' USB device. It uses a VID of 0x0483 and a PID of 0x4121. The custom class contains a single interface with three bulk endpoints:
|
||||
\begin{itemize}
|
||||
\item \textbf{Endpoint 0x01:} Communication data from the USB host to the LibreVNA
|
||||
\item \textbf{Endpoint 0x81:} Communication data from the LibreVNA to the USB host
|
||||
|
|
@ -248,6 +248,9 @@ The following packet types are available:
|
|||
27 & VNADatapoint & D$\rightarrow$H & Sent for every sampled frequency within the sweep in VNA mode &None \\
|
||||
28 & SetTrigger & D$\leftrightarrow$H & Updates the trigger status for synchronization over USB & None\\
|
||||
29 & ClearTrigger & D$\leftrightarrow$H & Updates the trigger status for synchronization over USB & None\\
|
||||
30 & StopStatusUpdates & H$\rightarrow$D & Stops the automatic transmission of device status packets & None\\
|
||||
31 & StartStatusUpdates & H$\rightarrow$D & Starts the automatic transmission of device status packets & None\\
|
||||
32 & InitiateSweep & H$\rightarrow$D & Initiates a single sweep when configured for standby operation & None\\
|
||||
\end{longtable}
|
||||
\end{ThreePartTable}
|
||||
An Ack is transmitted by the device for every received command after it has been handled successfully. If additional responses are triggered by the command, they are transmitted after this Ack.
|
||||
|
|
@ -279,9 +282,9 @@ The packet contains the following fields:
|
|||
8 & 8 & UINT64 & f\_stop & Stop frequency in Hz \\
|
||||
16 & 2 & UINT16 & points & Number of points in the sweep \\
|
||||
18 & 4 & UINT32 & IF\_bandwidth & Bandwidth of the IF sampling in Hz \\
|
||||
22 & 2 & UIN164 &cdbm\_excitation\_start & Stimulus power at the first point in $\frac{1}{100}$dBm \\
|
||||
22 & 2 & INT16 &cdbm\_excitation\_start & Stimulus power at the first point in $\frac{1}{100}$dBm \\
|
||||
24 & 2 & UINT16 & Configuration & Bitmap for configuration, see below \\
|
||||
26 & 2 & UINT16 &cdbm\_excitation\_stop & Stimulus power at the last point in $\frac{1}{100}$dBm \\
|
||||
26 & 2 & INT16 &cdbm\_excitation\_stop & Stimulus power at the last point in $\frac{1}{100}$dBm \\
|
||||
\end{longtable}
|
||||
\end{ThreePartTable}
|
||||
|
||||
|
|
@ -297,7 +300,7 @@ The packet contains the following fields:
|
|||
\rwbits{12}{1}{FP}
|
||||
\rwbits{13}{1}{SP}
|
||||
\rwbits{14}{1}{SM}
|
||||
\robits{15}{1}{}
|
||||
\rwbits{15}{1}{SO}
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
\begin{itemize}
|
||||
|
|
@ -335,6 +338,15 @@ Setting & Behavior\\
|
|||
\end{tabularx}
|
||||
\end{center}
|
||||
\item \textbf{SM:} Sync Master. Must be set to 1 at exactly one device when multiple devices are synchronized. Set to 0 when synchronization is disabled.
|
||||
\item \textbf{SO:} Standby Operation. Indicates whether the VNA will begin sweep immediately, or wait in the configured state to be triggered manually by InitiateSweep packets. Standy operation allows for lower latency of intermittent single sweeps.
|
||||
\begin{center}
|
||||
\begin{tabularx}{\textwidth}{ c|X }
|
||||
Setting & Behavior\\
|
||||
\hline
|
||||
0 & VNA will begin sweep immediately and timeout to idle mode 1000ms after sweep is completed or 100ms after entering the halted state. \\
|
||||
1 & VNA will wait in a configured state for InitiateSweep packets. The host application is responsible for putting the VNA into idle mode with a SetIdle packet.\\
|
||||
\end{tabularx}
|
||||
\end{center}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{ManualStatusV1}
|
||||
|
|
@ -355,12 +367,12 @@ The packet contains the following fields:
|
|||
%\insertTableNotes % tell LaTeX where to insert the table-related notes
|
||||
\endlastfoot
|
||||
|
||||
0 & 2 & UINT16 & port1min & Minimum value of the ADC at port 1 \\
|
||||
2 & 2 & UINT16 & port1max & Maximum value of the ADC at port 1 \\
|
||||
4 & 2 & UINT16 & port2min & Minimum value of the ADC at port 2 \\
|
||||
6 & 2 & UINT16 & port2max & Maximum value of the ADC at port 2 \\
|
||||
8 & 2 & UINT16 & refmin & Minimum value of the ADC at the reference receiver \\
|
||||
10 & 2 & UINT16 & refmax & Maximum value of the ADC at the reference receiver \\
|
||||
0 & 2 & INT16 & port1min & Minimum value of the ADC at port 1 \\
|
||||
2 & 2 & INT16 & port1max & Maximum value of the ADC at port 1 \\
|
||||
4 & 2 & INT16 & port2min & Minimum value of the ADC at port 2 \\
|
||||
6 & 2 & INT16 & port2max & Maximum value of the ADC at port 2 \\
|
||||
8 & 2 & INT16 & refmin & Minimum value of the ADC at the reference receiver \\
|
||||
10 & 2 & INT16 & refmax & Maximum value of the ADC at the reference receiver \\
|
||||
12 & 4 & FLOAT & port1real & Real part of the complex signal at port 1 \\
|
||||
16 & 4 & FLOAT & port1imag & Imaginary part of the complex signal at port 1 \\
|
||||
20 & 4 & FLOAT & port2real & Real part of the complex signal at port 2 \\
|
||||
|
|
@ -547,8 +559,8 @@ The packet contains the following fields:
|
|||
23 & 4 & UINT64 & MinIFBW & Minimum supported IF bandwidth in Hz \\
|
||||
27 & 4 & UINT64 & MaxIFBW & Maximum supported IF bandwidth in Hz \\
|
||||
31 & 2 & UINT16 & MaxPoints & Maximum number of points per sweep \\
|
||||
33 & 2 & UINT16 & MincdBm & Minimum stimulus power in $\frac{1}{100}$dBm \\
|
||||
35 & 2 & UINT16 & MaxcdBm & Maximum stimulus power in $\frac{1}{100}$dBm \\
|
||||
33 & 2 & INT16 & MincdBm & Minimum stimulus power in $\frac{1}{100}$dBm \\
|
||||
35 & 2 & INT16 & MaxcdBm & Maximum stimulus power in $\frac{1}{100}$dBm \\
|
||||
37 & 4 & UINT32 & MinRBW & Minimum supported resolution bandwidth in Hz \\
|
||||
41 & 4 & UINT32 & MaxRBW & Maximum supported resolution bandwidth in Hz \\
|
||||
45 & 1 & UINT8 & MaxAmplitudePoints & Maximum supported number of amplitude calibration points \\
|
||||
|
|
@ -633,7 +645,7 @@ The packet contains the following fields:
|
|||
\endlastfoot
|
||||
|
||||
0 & 8 & UINT64 & OutputFrequency & Output frequency of the generator in Hz\\
|
||||
8 & 2 & UINT16 & cdBmLevel & Output level in $\frac{1}{100}$dBm \\
|
||||
8 & 2 & INT16 & cdBmLevel & Output level in $\frac{1}{100}$dBm \\
|
||||
10 & 1 & UINT8 & Configuration & Configuration bitmap, see below \\
|
||||
\end{longtable}
|
||||
\end{ThreePartTable}
|
||||
|
|
@ -777,13 +789,13 @@ The packet contains the following fields:
|
|||
\end{longtable}
|
||||
\end{ThreePartTable}
|
||||
|
||||
\subsection{Nack}
|
||||
\subsection{RequestDeviceInfo}
|
||||
This packet is used to make the device send the DeviceInfo packet. It has no payload.
|
||||
|
||||
\subsection{RequestSourceCal}
|
||||
This packet is used to make the device send the source amplitude calibration. It has no payload. For each source amplitude calibration point one SourceCalPoint packet will be returned.
|
||||
|
||||
\subsection{RequestSourceCal}
|
||||
\subsection{RequestReceiverCal}
|
||||
This packet is used to make the device send the receiver amplitude calibration. It has no payload. For each receiver amplitude calibration point one ReceiverCalPoint packet will be returned.
|
||||
|
||||
\subsection{SourceCalPoint}
|
||||
|
|
@ -1010,4 +1022,13 @@ This packet is used when multiple devices are synchronized over USB and can be t
|
|||
\subsection{ClearTrigger}
|
||||
This packet is used when multiple devices are synchronized over USB and can be transmitted in both directions. It has no payload. Synchronized devices must be logically organized in a closed loop. When a ClearTrigger packet is received from any devices in the loop it must be passed on to the next device in the loop.
|
||||
|
||||
\subsection{StopStatusUpdates}
|
||||
This packet instructs the device to stop sending automatically scheduled DeviceStatusV1 packets. Device status can still be requested explicitly via RequestDeviceStatus packets.
|
||||
|
||||
\subsection{StartStatusUpdates}
|
||||
This packet instructs the device to start sending automatically scheduled DeviceStatusV1 packets. This restores default update behaviour if a StopStatusUpdates packet has previously been sent.
|
||||
|
||||
\subsection{InitiateSweep}
|
||||
This packet instructs the device to initiate a new single sweep when the VNA is configured for standby operation. This triggering method can be used for fast intermittent single sweeps with minimum latency. If the SweepSettings are not configured for standby operation, this packet will result in a Nack response.
|
||||
|
||||
\end{document}
|
||||
|
|
@ -123,6 +123,7 @@
|
|||
\usepackage{xifthen}
|
||||
\newcommand{\vna}{LibreVNA}
|
||||
\newcommand{\gui}{\vna{}-GUI}
|
||||
\newcommand{\subsubsubsection}[1]{\paragraph{#1}\mbox{}\\\\}
|
||||
|
||||
\newcommand{\screenshot}[2]{\begin{center}
|
||||
\includegraphics[width=#1\textwidth]{Screenshots/#2}
|
||||
|
|
@ -153,7 +154,8 @@
|
|||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\setcounter{tocdepth}{3}
|
||||
\setcounter{tocdepth}{4}
|
||||
\setcounter{secnumdepth}{4}
|
||||
\tableofcontents
|
||||
|
||||
\clearpage
|
||||
|
|
@ -177,42 +179,72 @@ The syntax follows the usual SCPI rules:
|
|||
\item All commands are case insensitive (implicitly converted to uppercase before evaluated)
|
||||
\item The command tree is organized in branches, separated by a colon:
|
||||
\begin{lstlisting}
|
||||
:VNA:TRACE:LIST?
|
||||
VNA:TRACE:LIST?
|
||||
\end{lstlisting}
|
||||
\item Multiple commands can be concatenated in one line using a semicolon:
|
||||
\begin{lstlisting}
|
||||
:DEVice:CONNECT;:DEVice:INFo:FWRevision?
|
||||
DEVice:CONNECT;:DEVice:INFo:FWRevision?
|
||||
\end{lstlisting}
|
||||
\item If a command starts with a colon it is evaluated from the root branch, otherwise the last used branch is assumed:
|
||||
\item If a subsequent command starts with a colon it is evaluated from the root branch, otherwise the last used branch is assumed:
|
||||
\begin{lstlisting}
|
||||
:VNA:FREQuency:START 1000000
|
||||
STOP 2000000 #No colon, VNA:FREQuency branch was used before
|
||||
VNA:FREQuency:START 1000000;STOP 2000000 #No colon, VNA:FREQuency branch was used before
|
||||
\end{lstlisting}
|
||||
\item Branches and commands can be abbreviated by using only the uppercase part of their name, the following commands are identical:
|
||||
\begin{lstlisting}
|
||||
:DEVice:INFo:LIMits:MINFrequency?
|
||||
:DEV:INF:LIM:MINF?
|
||||
DEVice:INFo:LIMits:MINFrequency?
|
||||
DEV:INF:LIM:MINF?
|
||||
\end{lstlisting}
|
||||
\item Every command generates a (possibly empty) response, terminated with a newline character.
|
||||
\item Every query generates a response, terminated with a newline character (exceptions exist for a few queries which return more than one line)
|
||||
\item Some commands require additional arguments that have to be passed after the command (separated by spaces):
|
||||
\begin{lstlisting}
|
||||
:DEV:REF:OUT 10
|
||||
DEV:REF:OUT 10
|
||||
\end{lstlisting}
|
||||
\item Two types of commands are available:
|
||||
\begin{itemize}
|
||||
\item \textbf{Events} change a setting or trigger an action. They usually have an empty response (unless there was an error).
|
||||
\item \textbf{Events} change a setting or trigger an action. They have no response
|
||||
\item \textbf{Queries} request information. They end with a question mark.
|
||||
\end{itemize}
|
||||
Some commands are both events and queries, depending on whether the question mark is present:
|
||||
\begin{lstlisting}
|
||||
:VNA:FREQ:SPAN 50000000 # Set the span
|
||||
:VNA:FREQ:SPAN? # Read the current span
|
||||
VNA:FREQ:SPAN 50000000 # Set the span
|
||||
VNA:FREQ:SPAN? # Read the current span
|
||||
\end{lstlisting}
|
||||
\end{itemize}
|
||||
\section{Commands}
|
||||
\subsection{General Commands}
|
||||
\subsubsection{*IDN}
|
||||
\query{Returns the identifications string}{*IDN?}{None}{LibreVNA-GUI}
|
||||
\query{Returns the identifications string}{*IDN?}{None}{LibreVNA,LibreVNA-GUI,<serial>,<software version>}
|
||||
\begin{itemize}
|
||||
\item The serial number is the serial number from the connected LibreVNA. If none is connected, it will be set to ``Not connected''
|
||||
\item The software version is the version of the \gui{}, not the firmware version of the connected \vna{}
|
||||
\end{itemize}
|
||||
\subsubsection{*RST}
|
||||
\event{Resets the GUI (and any connected device) to the default state}{*RST}{None}
|
||||
\subsubsection{*CLS}
|
||||
\event{Clears the event status register}{*CLI}{None}
|
||||
\subsubsection{*ESE}
|
||||
\event{Configures the event status enable register}{*ESE}{<enabled\_bits\_decimal>}
|
||||
\query{Returns the event status enable register}{*ESE?}{None}{<enabled\_bits\_decimal>}
|
||||
\subsubsection{*ESR}
|
||||
\query{Returns the event status register}{*ESR?}{None}{<set\_bits\_decimal>}
|
||||
The bits are used according to IEEE 488:
|
||||
\begin{longtable}{p{.1\textwidth} | p{.1\textwidth} | p{.4\textwidth} }
|
||||
\textbf{Bitvalue} & \textbf{Name} & \textbf{Meaning}\\
|
||||
\hline
|
||||
1 & OPC & Operation complete\\
|
||||
2 & RQC & Request control (not used)\\
|
||||
4 & QYE & Query error (not used)\\
|
||||
8 & DDE & Device dependent error (not used)\\
|
||||
16 & EXE & Execution error (not used)\\
|
||||
32 & CME & Command error\\
|
||||
64 & URQ & User request (not used)\\
|
||||
128 & PON & Power on (not used)\\
|
||||
\end{longtable}
|
||||
\subsubsection{*OPC}
|
||||
\event{Sets the OPC bit in the event status register after all operations are complete}{*OPC}{None}
|
||||
\query{Returns a 1 after every active operation has completed}{*OPC?}{None}{1}
|
||||
\subsubsection{*WAI}
|
||||
\event{Blocks further command parsing until all active operations are complete}{*WAI}{None}
|
||||
\subsubsection{*LST}
|
||||
\query{Lists all available commands}{*LST?}{None}{List of commands, separated by newline}
|
||||
\subsection{Device Commands}
|
||||
|
|
@ -238,6 +270,21 @@ This section contains general device commands, available regardless of the curre
|
|||
206039903350,208939A23350
|
||||
\end{example}
|
||||
|
||||
\subsubsection{DEVice:PREFerences}
|
||||
This command provides read/write access to the preferences. The recommended way is usually to change the preferences manually in the GUI. But if for some reason that is not an option, this is also possible through the SCPI server. There is no complete documentation for all available preferences, refer to the source code.
|
||||
|
||||
\event{Set a preferences entry}{DEVice:PREFerences <name> <value>}{<name> Name of the preferences entry\\ <value> New value for the preferences entry}
|
||||
\begin{example}
|
||||
:DEV:PREF Startup.ConnectToFirstDevice false
|
||||
\end{example}
|
||||
Most settings take effect immediately but some (such as changing the port for the SCPI server) are only applied when the preferences are saved. Also see command~\ref{DEV:APPLYPREF}.
|
||||
|
||||
\query{Returns a preferences entry}{DEVice:PREFerences? <name>}{<name> Name of the preferences entry}{Current value of the preferences entry}
|
||||
|
||||
\subsubsection{DEVice:APPLYPREFerences}
|
||||
\label{DEV:APPLYPREF}
|
||||
\event{Permanently stores the preferences after a setting has been changed}{DEVice:APPLYPREFerences}{None}
|
||||
|
||||
\subsubsection{DEVice:MODE}
|
||||
\event{Switches the device to the specified mode}{DEVice:MODE <mode>}{<mode>:\\ \hspace{1cm} VNA: set to vector analyzer\\ \hspace{1cm} GEN: set to signal generator\\ \hspace{1cm} SA: set to spectrum analyzer}
|
||||
\begin{example}
|
||||
|
|
@ -249,6 +296,22 @@ This section contains general device commands, available regardless of the curre
|
|||
VNA
|
||||
\end{example}
|
||||
|
||||
\subsubsection{DEVice:SETUP:SAVE}
|
||||
\event{Saves the GUI setup to a file}{DEVice:SETUP:SAVE}{<filename>}
|
||||
Important points when saving/loading setup files through SCPI commands:
|
||||
\begin{itemize}
|
||||
\item Filenames must be either absolute or relative to the location of the GUI application.
|
||||
\item If the LibreVNA-GUI (and thus also the SCPI server) is running on a different machine than the SCPI client, the setup files will be saved/loaded from the machine that runs the GUI.
|
||||
\item If no (or a wrong) file ending is specified, ``.setup'' is automatically added to the filename.
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection{DEVice:SETUP:LOAD}
|
||||
\query{Loads a setup file}{DEVice:SETUP:LOAD?}{<filename>}{TRUE or FALSE}
|
||||
\begin{itemize}
|
||||
\item Filenames must be either absolute or relative to the location of the GUI application.
|
||||
\item The filename must include the file ending ``.setup''.
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection{DEVice:REFerence:OUT}
|
||||
\event{Sets the reference output frequency}{DEVice:REFerence:OUT <freq>}{<freq> in MHz, either 0 (disabled), 10 or 100}
|
||||
\query{Queries the reference output frequency}{DEVice:REFerence:OUT?}{None}{Output frequency in MHz}
|
||||
|
|
@ -278,12 +341,6 @@ VNA
|
|||
:DEV:INF:HWREV?
|
||||
B
|
||||
\end{example}
|
||||
\subsubsection{DEVice:INFo:TEMPeratures}
|
||||
\query{Queries the temperatures of certain chips}{DEVice:INFo:TEMPeratures?}{None}{<source>/<1.LO>/<CPU>}
|
||||
\begin{example}
|
||||
:DEV:INF:TEMP?
|
||||
45/51/31
|
||||
\end{example}
|
||||
|
||||
\subsubsection{DEVice:INFo:LIMits:MINFrequency}
|
||||
\query{Queries the lowest frequency the device can measure}{DEVice:INFo:LIMits:MINFrequency?}{None}{lowest frequency in Hz}
|
||||
|
|
@ -352,6 +409,17 @@ These commands change or query VNA settings. Although most of them are available
|
|||
\event{Sets the stop power of the power sweep}{VNA:POWer:STOP}{<stop power>, in dBm}
|
||||
\query{Queries the currently selected stop power}{VNA:POWer:STOP?}{None}{stop power in dBm}
|
||||
|
||||
\subsubsection{VNA:SWEEPTYPE}
|
||||
\event{Selects between linear and logarithmic sweeps}{VNA:SWEEPTYPE}{<type>, either ``LIN'' or ``LOG''}
|
||||
\query{Queries the currently selected sweep type}{VNA:SWEEPTYPE?}{None}{``LIN'' or ``LOG''}
|
||||
|
||||
\subsubsection{VNA:ACQuisition:RUN}
|
||||
\event{Puts the VNA into run mode (sweep active)}{VNA:ACQuisition:RUN}{None}
|
||||
\query{Queries whether the VNA is in run mode}{VNA:ACQuisition:RUN?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{VNA:ACQuisition:STOP}
|
||||
\event{Puts the VNA into stop mode (sweep inactive)}{VNA:ACQuisition:STOP}{None}
|
||||
|
||||
\subsubsection{VNA:ACQuisition:IFBW}
|
||||
\event{Sets the IF bandwidth}{VNA:ACQuisition:IFBW}{<IF bandwidth>, in Hz}
|
||||
\query{Queries the currently selected IF bandwidth}{VNA:ACQuisition:IFBW?}{None}{IF bandwidth in Hz}
|
||||
|
|
@ -395,6 +463,21 @@ If single sweep is enabled, the acquisition is stopped when the required number
|
|||
\item Issue the command again (i.e. VNA:ACQ:SINGLE TRUE always triggers a new sweep)
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection{VNA:ACQuisition:FREQuency}
|
||||
\query{Returns the current frequency of the sweep}{VNA:ACQuisition:FREQuency?}{None}{<Frequency in Hz>}
|
||||
|
||||
This command only returns valid data when a sweep is running and the the sweep is a frequency sweep.
|
||||
|
||||
\subsubsection{VNA:ACQuisition:POWer}
|
||||
\query{Returns the current power of the sweep}{VNA:ACQuisition:POWer?}{None}{<Power in dBm>}
|
||||
|
||||
This command only returns valid data when a sweep is running and the the sweep is a power sweep.
|
||||
|
||||
\subsubsection{VNA:ACQuisition:TIME}
|
||||
\query{Returns the current time of the sweep}{VNA:ACQuisition:TIME?}{None}{<Time in seconds>}
|
||||
|
||||
This command only returns valid data when a sweep is running and the the sweep is a zero-span sweep.
|
||||
|
||||
\subsubsection{VNA:STIMulus:LVL}
|
||||
\event{Sets the output power of the stimulus signal when sweep type is frequency}{VNA:STIMulus:LVL}{<power>, in dBm}
|
||||
\query{Queries the currently selected output power}{VNA:STIMulus:LVL?}{None}{power in dBm}
|
||||
|
|
@ -426,7 +509,7 @@ Depending on the sweep and possible confiigured math operations, x may be either
|
|||
[5.33344e+9,0.13223,-0.00780554],
|
||||
[6e+9,-0.0314859,-0.246024]
|
||||
\end{example}
|
||||
\vspace{-0.6cm}
|
||||
\vspace{-0.3cm}
|
||||
\begin{center}
|
||||
\footnotesize{Note: actual response will not include newlines between data points, only at the end}
|
||||
\end{center}
|
||||
|
|
@ -481,6 +564,9 @@ $$ S_{11}...S_{1n},S_{21}...S_{2n},...,S_{n1}...S_{nn} $$
|
|||
\subsubsection{VNA:TRACe:NEW}
|
||||
\event{Creates a new trace}{VNA:TRACe:NEW}{<trace name>}
|
||||
|
||||
\subsubsection{VNA:TRACe:DELete}
|
||||
\event{Deletes a trace}{VNA:TRACe:DELete}{<trace>, either by name or by index}
|
||||
|
||||
\subsubsection{VNA:TRACe:RENAME}
|
||||
\event{Changes the name of a trace}{VNA:TRACe:RENAME}{<trace>, either by name or by index\\<new name>}
|
||||
|
||||
|
|
@ -493,6 +579,16 @@ $$ S_{11}...S_{1n},S_{21}...S_{2n},...,S_{n1}...S_{nn} $$
|
|||
\subsubsection{VNA:TRACe:PAUSED}
|
||||
\query{Queries whether a trace is paused}{VNA:TRACe:PAUSED?}{<trace>, either by name or by index}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{VNA:TRACe:DEEMBedding:ACTive}
|
||||
\event{Enables/disables de-embedding on a trace}{VNA:TRACe:DEEMBedding:ACTive}{<trace>, either by name or by index\\<enable>, either TRUE or FALSE}
|
||||
|
||||
If no de-embedding is configured for the selected trace, enabling the de-embedding will fail.
|
||||
|
||||
\query{Queries whether de-embedding is active for the selected trace}{VNA:TRACe:DEEMBedding:ACTive?}{<trace>, either by name or by index}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{VNA:TRACe:DEEMBedding:AVAILable}
|
||||
\query{Queries whether de-embedding is available for the selected trace}{VNA:TRACe:DEEMBedding:AVAILable?}{<trace>, either by name or by index}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{VNA:TRACe:PARAMeter}
|
||||
\event{Sets the measurement parameter that is stored in the trace}{VNA:TRACe:PARAMeter}{<trace>, either by name or by index\\<parameter>, options are S11, S12, S21 or S22}
|
||||
\query{Queries the measurement parameter of a trace}{VNA:TRACe:PARAMeter?}{<trace>, either by name or by index}{S11, S12, S21 or S22}
|
||||
|
|
@ -521,6 +617,9 @@ $$ S_{11}...S_{1n},S_{21}...S_{2n},...,S_{n1}...S_{nn} $$
|
|||
\hspace{1cm}LOAD\\
|
||||
\hspace{1cm}THROUGH\\
|
||||
\hspace{1cm}ISOLATION\\
|
||||
\hspace{1cm}SLIDINGLOAD\\
|
||||
\hspace{1cm}REFLECT\\
|
||||
\hspace{1cm}LINE\\
|
||||
{[<standard>]}, calibration kit standard name, optional\\}
|
||||
|
||||
\subsubsection{VNA:CALibration:TYPE}
|
||||
|
|
@ -529,7 +628,10 @@ $$ S_{11}...S_{1n},S_{21}...S_{2n},...,S_{n1}...S_{nn} $$
|
|||
\hspace{1cm}SHORT\\
|
||||
\hspace{1cm}LOAD\\
|
||||
\hspace{1cm}THROUGH\\
|
||||
\hspace{1cm}ISOLATION\\}
|
||||
\hspace{1cm}ISOLATION\\
|
||||
\hspace{1cm}SLIDINGLOAD\\
|
||||
\hspace{1cm}REFLECT\\
|
||||
\hspace{1cm}LINE\\}
|
||||
|
||||
\subsubsection{VNA:CALibration:PORT}
|
||||
\event{Sets the port for the specified measurement}{VNA:CALibration:PORT}{<measurement number> <port number>}
|
||||
|
|
@ -551,13 +653,377 @@ Any number of measurements can be specified (by their number). These measurement
|
|||
Important points when saving/loading calibration files through SCPI commands:
|
||||
\begin{itemize}
|
||||
\item Filenames must be either absolute or relative to the location of the GUI application.
|
||||
\item SCPI parsing implicitly capitalizes all commands, the file will be saved using only uppercase letters. Similarly, it is not possible to load a file whose filename contains lowercase characters.
|
||||
\item If the LibreVNA-GUI (and thus also the SCPI server) is running on a different machine than the SCPI client, the calibration files will be saved/loaded from the machine that runs the GUI.
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection{VNA:CALibration:LOAD}
|
||||
\query{Loads a calibration file}{VNA:CALibration:LOAD?}{<filename>}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{VNA:CALibration:KIT:MANufacturer}
|
||||
\event{Sets the manufacturer name of the calibration kit}{VNA:CALibration:KIT:MANufacturer}{<manufacturer>}
|
||||
\query{Returns the manufacturer name of the calibration kit}{VNA:CALibration:KIT:MANufacturer?}{None}{<manufacturer>}
|
||||
|
||||
\subsubsection{VNA:CALibration:KIT:SERial}
|
||||
\event{Sets the serial number of the calibration kit}{VNA:CALibration:KIT:SERial}{<serial number>}
|
||||
\query{Returns the serial number of the calibration kit}{VNA:CALibration:KIT:SERial?}{None}{<serial number>}
|
||||
|
||||
\subsubsection{VNA:CALibration:KIT:DESCription}
|
||||
\event{Sets the description of the calibration kit}{VNA:CALibration:KIT:DESCription}{<description>}
|
||||
\query{Returns the description of the calibration kit}{VNA:CALibration:KIT:DESCription?}{None}{<description>}
|
||||
|
||||
\subsubsection{VNA:CALibration:KIT:FILEname}
|
||||
\query{Returns the filename of the calibration kit}{VNA:CALibration:KIT:FILEname?}{None}{<filename>}
|
||||
|
||||
The filename is only available if the calibration kit was loaded from a dedicated file. If it was loaded as part of a calibration file or has not been loaded since the GUI started, no filename will be returned.
|
||||
|
||||
\subsubsection{VNA:CALibration:KIT:SAVE}
|
||||
\event{Saves the active calibration kit to a file}{VNA:CALibration:KIT:SAVE}{<filename>}
|
||||
Important points when saving/loading calibration kit files through SCPI commands:
|
||||
\begin{itemize}
|
||||
\item Filenames must be either absolute or relative to the location of the GUI application.
|
||||
\item If the LibreVNA-GUI (and thus also the SCPI server) is running on a different machine than the SCPI client, the calibration kit files will be saved/loaded from the machine that runs the GUI.
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection{VNA:CALibration:KIT:LOAD}
|
||||
\query{Loads a calibration kit file}{VNA:CALibration:KIT:LOAD?}{<filename>}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{Common calibration kit standards commands}
|
||||
The calibration kit supports an arbitrary amount of standards. This requires a flexible SCPI API which adjusts to the currently configured standards.
|
||||
|
||||
A few calibration kit standard commands are always available and they can be used to create and delete calibration standards. Every created calibration standard adds their own commands. They can be accessed by including the calibration standard number in the command (shown as ``x'' in the following commands).
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:CLEAR}
|
||||
\event{Resets the calibration kit to default values (ideal standards)}{VNA:CALibration:KIT:STAndard:CLEAR}{None}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:NUMber}
|
||||
\query{Returns the number of configured calibration standards}{VNA:CALibration:KIT:STAndard:NUMber?}{None}{<number of calibration standards>}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:TYPE}
|
||||
\query{Returns the type of a created calibration standard}{VNA:CALibration:KIT:STAndard:TYPE?}{<x> Number of calibration standard}{Type of standard, one of:\\
|
||||
\hspace{1cm}Open\\
|
||||
\hspace{1cm}Short\\
|
||||
\hspace{1cm}Load\\
|
||||
\hspace{1cm}Reflect\\
|
||||
\hspace{1cm}Through\\
|
||||
\hspace{1cm}Line\\}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:NEW}
|
||||
\event{Adds a new calibration standard}{VNA:CALibration:KIT:STAndard:NEW}{<type> Type of calibration standard, one of:\\
|
||||
\hspace{1cm}Open\\
|
||||
\hspace{1cm}Short\\
|
||||
\hspace{1cm}Load\\
|
||||
\hspace{1cm}Reflect\\
|
||||
\hspace{1cm}Through\\
|
||||
\hspace{1cm}Line\\
|
||||
<name> User selectable name of new standard}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:DELete}
|
||||
\event{Removes a calibration standard}{VNA:CALibration:KIT:STAndard:DELete}{<x> Number of standard to delete}
|
||||
|
||||
\subsubsection{OPEN standard commands}
|
||||
The following commands are only valid for a calibration standard of type ``Open''. The ``x'' in the command names must be replaced with the calibration standard number.
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:NAME}
|
||||
\event{Sets the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME}{<name> User selectable name}
|
||||
\query{Queries the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME?}{None}{<name> User selectable name}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:Z0}
|
||||
\event{Sets the characteristic impedance of the standard}{VNA:CALibration:KIT:STAndard:x:Z0}{<Z> Characteristic impedance in Ohm}
|
||||
\query{Queries the characteristic impedance of the standard}{VNA:CALibration:KIT:STAndard:x:Z0?}{None}{<Z> Characteristic impedance in Ohm}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:DELAY}
|
||||
\event{Sets the delay of the standard}{VNA:CALibration:KIT:STAndard:x:DELAY}{<delay> Delay in \unit{\pico\second}}
|
||||
\query{Queries the delay of the standard}{VNA:CALibration:KIT:STAndard:x:DELAY?}{None}{<delay> Delay in \unit{\pico\second}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:LOSS}
|
||||
\event{Sets the loss of the standard}{VNA:CALibration:KIT:STAndard:x:LOSS}{<loss> Loss in \unit{\giga\ohm\per\second}}
|
||||
\query{Queries the loss of the standard}{VNA:CALibration:KIT:STAndard:x:LOSS?}{None}{<loss> Loss in \unit{\giga\ohm\per\second}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:C0}
|
||||
\event{Sets the fringing capacitance polynom term 0 of the standard}{VNA:CALibration:KIT:STAndard:x:C0}{<C0> in \num{d-15}\unit{\farad}}
|
||||
\query{Queries the fringing capacitance polynom term 0 of the standard}{VNA:CALibration:KIT:STAndard:x:C0?}{None}{<C0> in \num{d-15}\unit{\farad}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:C1}
|
||||
\event{Sets the fringing capacitance polynom term 1 of the standard}{VNA:CALibration:KIT:STAndard:x:C1}{<C1> in \num{d-27}\unit{\farad\per\hertz}}
|
||||
\query{Queries the fringing capacitance polynom term 1 of the standard}{VNA:CALibration:KIT:STAndard:x:C1?}{None}{<C1> in \num{d-27}\unit{\farad\per\hertz}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:C2}
|
||||
\event{Sets the fringing capacitance polynom term 2 of the standard}{VNA:CALibration:KIT:STAndard:x:C2}{<C2> in \num{d-36}\unit{\farad\per\hertz\squared}}
|
||||
\query{Queries the fringing capacitance polynom term 2 of the standard}{VNA:CALibration:KIT:STAndard:x:C2?}{None}{<C2> in \num{d-36}\unit{\farad\per\hertz\squared}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:C3}
|
||||
\event{Sets the fringing capacitance polynom term 3 of the standard}{VNA:CALibration:KIT:STAndard:x:C3}{<C3> in \num{d-45}\unit{\farad\per\hertz\cubed}}
|
||||
\query{Queries the fringing capacitance polynom term 3 of the standard}{VNA:CALibration:KIT:STAndard:x:C3?}{None}{<C3> in \num{d-45}\unit{\farad\per\hertz\cubed}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:FILE}
|
||||
\event{Loads the coefficients for the calibration standard from a touchstone file}{VNA:CALibration:KIT:STAndard:x:FILE}{<filename>\\<port> sets the port from the file which is used to define the standard, optional}
|
||||
|
||||
\subsubsection{SHORT standard commands}
|
||||
The following commands are only valid for a calibration standard of type ``Short''. The ``x'' in the command names must be replaced with the calibration standard number.
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:NAME}
|
||||
\event{Sets the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME}{<name> User selectable name}
|
||||
\query{Queries the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME?}{None}{<name> User selectable name}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:Z0}
|
||||
\event{Sets the characteristic impedance of the standard}{VNA:CALibration:KIT:STAndard:x:Z0}{<Z> Characteristic impedance in Ohm}
|
||||
\query{Queries the characteristic impedance of the standard}{VNA:CALibration:KIT:STAndard:x:Z0?}{None}{<Z> Characteristic impedance in Ohm}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:DELAY}
|
||||
\event{Sets the delay of the standard}{VNA:CALibration:KIT:STAndard:x:DELAY}{<delay> Delay in \unit{\pico\second}}
|
||||
\query{Queries the delay of the standard}{VNA:CALibration:KIT:STAndard:x:DELAY?}{None}{<delay> Delay in \unit{\pico\second}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:LOSS}
|
||||
\event{Sets the loss of the standard}{VNA:CALibration:KIT:STAndard:x:LOSS}{<loss> Loss in \unit{\giga\ohm\per\second}}
|
||||
\query{Queries the loss of the standard}{VNA:CALibration:KIT:STAndard:x:LOSS?}{None}{<loss> Loss in \unit{\giga\ohm\per\second}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:L0}
|
||||
\event{Sets the residual inductance polynom term 0 of the standard}{VNA:CALibration:KIT:STAndard:x:L0}{<L0> in \num{d-12}\unit{\henry}}
|
||||
\query{Queries the residual inductance polynom term 0 of the standard}{VNA:CALibration:KIT:STAndard:x:L0?}{None}{<L0> in \num{d-12}\unit{\henry}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:L1}
|
||||
\event{Sets the residual inductance polynom term 1 of the standard}{VNA:CALibration:KIT:STAndard:x:L1}{<L1> in \num{d-24}\unit{\henry\per\hertz}}
|
||||
\query{Queries the residual inductance polynom term 1 of the standard}{VNA:CALibration:KIT:STAndard:x:L1?}{None}{<L1> in \num{d-24}\unit{\henry\per\hertz}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:L2}
|
||||
\event{Sets the residual inductance polynom term 2 of the standard}{VNA:CALibration:KIT:STAndard:x:L2}{<L2> in \num{d-33}\unit{\henry\per\hertz\squared}}
|
||||
\query{Queries the residual inductance polynom term 2 of the standard}{VNA:CALibration:KIT:STAndard:x:L2?}{None}{<L2> in \num{d-33}\unit{\henry\per\hertz\squared}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:L3}
|
||||
\event{Sets the residual inductance polynom term 3 of the standard}{VNA:CALibration:KIT:STAndard:x:L3}{<L3> in \num{d-42}\unit{\henry\per\hertz\cubed}}
|
||||
\query{Queries the residual inductance polynom term 3 of the standard}{VNA:CALibration:KIT:STAndard:x:L3?}{None}{<L3> in \num{d-42}\unit{\henry\per\hertz\cubed}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:FILE}
|
||||
\event{Loads the coefficients for the calibration standard from a touchstone file}{VNA:CALibration:KIT:STAndard:x:FILE}{<filename>\\<port> sets the port from the file which is used to define the standard, optional}
|
||||
|
||||
\subsubsection{LOAD standard commands}
|
||||
The following commands are only valid for a calibration standard of type ``Load''. The ``x'' in the command names must be replaced with the calibration standard number.
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:NAME}
|
||||
\event{Sets the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME}{<name> User selectable name}
|
||||
\query{Queries the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME?}{None}{<name> User selectable name}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:RESistance}
|
||||
\event{Sets the resistance of the standard}{VNA:CALibration:KIT:STAndard:x:RESistance}{<R> in \unit{\ohm}}
|
||||
\query{Queries the resistance of the standard}{VNA:CALibration:KIT:STAndard:x:RESistance?}{None}{<R> in \unit{\ohm}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:Z0}
|
||||
\event{Sets the characteristic impedance of the standard}{VNA:CALibration:KIT:STAndard:x:Z0}{<Z> Characteristic impedance in Ohm}
|
||||
\query{Queries the characteristic impedance of the standard}{VNA:CALibration:KIT:STAndard:x:Z0?}{None}{<Z> Characteristic impedance in Ohm}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:DELAY}
|
||||
\event{Sets the delay of the standard}{VNA:CALibration:KIT:STAndard:x:DELAY}{<delay> Delay in \unit{\pico\second}}
|
||||
\query{Queries the delay of the standard}{VNA:CALibration:KIT:STAndard:x:DELAY?}{None}{<delay> Delay in \unit{\pico\second}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:LOSS}
|
||||
\event{Sets the loss of the standard}{VNA:CALibration:KIT:STAndard:x:LOSS}{<loss> Loss in \unit{\giga\ohm\per\second}}
|
||||
\query{Queries the loss of the standard}{VNA:CALibration:KIT:STAndard:x:LOSS?}{None}{<loss> Loss in \unit{\giga\ohm\per\second}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:CARallel}
|
||||
\event{Sets the residual capacitance polynom of the standard}{VNA:CALibration:KIT:STAndard:x:CARallel}{<C> in \unit{\farad}}
|
||||
\query{Queries the residual capacitance of the standard}{VNA:CALibration:KIT:STAndard:x:CARallel?}{None}{<C> in \unit{\farad}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:LSERies}
|
||||
\event{Sets the residual inductance of the standard}{VNA:CALibration:KIT:STAndard:x:LSERies}{<L> in \unit{\henry}}
|
||||
\query{Queries the residual inductance of the standard}{VNA:CALibration:KIT:STAndard:x:LSERies?}{None}{<L> in \unit{\henry}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:CFIRST}
|
||||
\event{Sets the order of residual capacitance/inductance}{VNA:CALibration:KIT:STAndard:x:CFIRST}{TRUE or FALSE}
|
||||
\query{Queries the order of residual capacitance/inductance}{VNA:CALibration:KIT:STAndard:x:CFIRST?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:FILE}
|
||||
\event{Loads the coefficients for the calibration standard from a touchstone file}{VNA:CALibration:KIT:STAndard:x:FILE}{<filename>\\<port> sets the port from the file which is used to define the standard, optional}
|
||||
|
||||
\subsubsection{REFLECT standard commands}
|
||||
The following commands are only valid for a calibration standard of type ``Reflect''. The ``x'' in the command names must be replaced with the calibration standard number.
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:NAME}
|
||||
\event{Sets the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME}{<name> User selectable name}
|
||||
\query{Queries the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME?}{None}{<name> User selectable name}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:SHORT}
|
||||
\event{Sets the type of reflection standard}{VNA:CALibration:KIT:STAndard:x:SHORT}{TRUE for short standard or FALSE for open standard}
|
||||
\query{Queries the type of reflection standard}{VNA:CALibration:KIT:STAndard:x:SHORT?}{None}{TRUE for short standard or FALSE for open standard}
|
||||
|
||||
\subsubsection{THROUGH standard commands}
|
||||
The following commands are only valid for a calibration standard of type ``Through''. The ``x'' in the command names must be replaced with the calibration standard number.
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:NAME}
|
||||
\event{Sets the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME}{<name> User selectable name}
|
||||
\query{Queries the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME?}{None}{<name> User selectable name}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:Z0}
|
||||
\event{Sets the characteristic impedance of the standard}{VNA:CALibration:KIT:STAndard:x:Z0}{<Z> Characteristic impedance in Ohm}
|
||||
\query{Queries the characteristic impedance of the standard}{VNA:CALibration:KIT:STAndard:x:Z0?}{None}{<Z> Characteristic impedance in Ohm}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:DELAY}
|
||||
\event{Sets the delay of the standard}{VNA:CALibration:KIT:STAndard:x:DELAY}{<delay> Delay in \unit{\pico\second}}
|
||||
\query{Queries the delay of the standard}{VNA:CALibration:KIT:STAndard:x:DELAY?}{None}{<delay> Delay in \unit{\pico\second}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:LOSS}
|
||||
\event{Sets the loss of the standard}{VNA:CALibration:KIT:STAndard:x:LOSS}{<loss> Loss in \unit{\giga\ohm\per\second}}
|
||||
\query{Queries the loss of the standard}{VNA:CALibration:KIT:STAndard:x:LOSS?}{None}{<loss> Loss in \unit{\giga\ohm\per\second}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:FILE}
|
||||
\event{Loads the coefficients for the calibration standard from a touchstone file}{VNA:CALibration:KIT:STAndard:x:FILE}{<filename>\\
|
||||
<port1> selects the first port from the file which is used to define the standard\\
|
||||
<port1> selects the second port from the file which is used to define the standard}
|
||||
|
||||
\subsubsection{LINE standard commands}
|
||||
The following commands are only valid for a calibration standard of type ``Line''. The ``x'' in the command names must be replaced with the calibration standard number.
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:NAME}
|
||||
\event{Sets the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME}{<name> User selectable name}
|
||||
\query{Queries the name of the standard}{VNA:CALibration:KIT:STAndard:x:NAME?}{None}{<name> User selectable name}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:Z0}
|
||||
\event{Sets the characteristic impedance of the standard}{VNA:CALibration:KIT:STAndard:x:Z0}{<Z> Characteristic impedance in Ohm}
|
||||
\query{Queries the characteristic impedance of the standard}{VNA:CALibration:KIT:STAndard:x:Z0?}{None}{<Z> Characteristic impedance in Ohm}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:DELAY}
|
||||
\event{Sets the delay of the standard}{VNA:CALibration:KIT:STAndard:x:DELAY}{<delay> Delay in \unit{\pico\second}}
|
||||
\query{Queries the delay of the standard}{VNA:CALibration:KIT:STAndard:x:DELAY?}{None}{<delay> Delay in \unit{\pico\second}}
|
||||
|
||||
\subsubsubsection{VNA:CALibration:KIT:STAndard:x:FILE}
|
||||
\event{Loads the coefficients for the calibration standard from a touchstone file}{VNA:CALibration:KIT:STAndard:x:FILE}{<filename>\\
|
||||
<port1> selects the first port from the file which is used to define the standard\\
|
||||
<port1> selects the second port from the file which is used to define the standard}
|
||||
|
||||
\subsubsection{Common Deembedding Commands}
|
||||
The VNA supports various deembedding options which can also be configured through the SCPI API. Because the deembedding system is flexible and supports any number of deembedding options at the same time, the SCPI API is also flexible. Instead of fixed commands, the available commands change depending on the configured deembedding options.
|
||||
|
||||
A few deembedding commands are always available and they can be used to create, delete and swap deembedding options. Every created deembedding option adds their own commands. They can be accessed by including the option number in the command (shown as ``x'' in the following commands).
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:NUMber}
|
||||
\query{Returns the number of configured deembedding options}{VNA:DEEMBedding:NUMber?}{None}{<number of deembedding options>}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:TYPE}
|
||||
\query{Returns the type of a configured deembedding option}{VNA:DEEMBedding:TYPE?}{<x> Number of deembedding option}{Type of option, one of:\\
|
||||
\hspace{1cm}Port\_Extension\\
|
||||
\hspace{1cm}2xThru\\
|
||||
\hspace{1cm}Matching\_Network\\
|
||||
\hspace{1cm}Impedance\_Renormalization\\}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:NEW}
|
||||
\event{Adds a new deembedding option}{VNA:DEEMBedding:NEW}{<type> Type of option, one of:\\
|
||||
\hspace{1cm}Port\_Extension\\
|
||||
\hspace{1cm}2xThru\\
|
||||
\hspace{1cm}Matching\_Network\\
|
||||
\hspace{1cm}Impedance\_Renormalization\\}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:DELete}
|
||||
\event{Removes a deembedding option}{VNA:DEEMBedding:DELete}{<x> Number of option to delete}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:SWAP}
|
||||
\event{Swaps the order of two deembedding options}{VNA:DEEMBedding:SWAP}{<x1> Number of option 1 to swap\\<x2> Number of option 2 to swap}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:CLEAR}
|
||||
\event{Delete all deembedding options}{VNA:DEEMBedding:CLEAR}{None}
|
||||
|
||||
\subsubsection{Port Extension Deembedding Commands}
|
||||
The following commands are only valid for a deembedding option of type ``Port\_Extension''. The ``x'' in the command names must be replaced with the option number.
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:PORT}
|
||||
\event{Sets the port}{VNA:DEEMBedding:x:PORT}{<port>, 1...n}
|
||||
\query{Queries the selected port}{VNA:DEEMBedding:x:PORT?}{None}{<port>, 1...n}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:DELAY}
|
||||
\event{Sets the delay of the port extension}{VNA:DEEMBedding:x:DELAY}{<delay> Delay in seconds}
|
||||
\query{Queries the delay of the port extension}{VNA:DEEMBedding:x:DELAY?}{None}{<delay> Delay in seconds}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:DCLOSS}
|
||||
\event{Sets the DC loss of the port extension}{VNA:DEEMBedding:x:DCLOSS}{<loss> Loss at DC in dB}
|
||||
\query{Queries the DC loss of the port extension}{VNA:DEEMBedding:x:DCLOSS?}{None}{<loss> Loss at DC in dB}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:LOSS}
|
||||
\event{Sets the loss of the port extension at the configured frequency}{VNA:DEEMBedding:x:LOSS}{<loss> Loss at frequency in dB}
|
||||
\query{Queries the loss of the port extension at the configured frequency}{VNA:DEEMBedding:x:LOSS?}{None}{<loss> Loss at frequency in dB}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:FREQuency}
|
||||
\event{Sets the frequency for the specified loss of the port extension}{VNA:DEEMBedding:x:FREQuency}{<freq> Frequency for loss in Hz}
|
||||
\query{Queries the frequency for the specified loss of the port extension}{VNA:DEEMBedding:x:FREQuency?}{None}{<freq> Frequency for loss in Hz}
|
||||
|
||||
\subsubsection{2xThru Deembedding Commands}
|
||||
The 2xThru deembedding does not have a SCPI API so far because it requires the user to manually make specific connections and take additional measurements.
|
||||
|
||||
\subsubsection{Matching Network Deembedding Commands}
|
||||
The following commands are only valid for a deembedding option of type ``Matching\_Network''. The ``x'' in the command names must be replaced with the option number.
|
||||
|
||||
Similarly to the deembedding options, the matching network itself is also flexible and requires a flexible API as well. A similar approach is used where components in the matching network are given a number. This number is shown as ``y'' in the following commands.
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:PORT}
|
||||
\event{Sets the port at which the matching network is added}{VNA:DEEMBedding:x:PORT}{<port>, 1...n}
|
||||
\query{Queries the port at which the matching network is added}{VNA:DEEMBedding:x:PORT?}{None}{<port>, 1...n}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:ADD}
|
||||
\event{Selects whether the network is added or removed during the deembedding}{VNA:DEEMBedding:x:ADD}{TRUE if the effect of the network should be added. FALSE if the effect of the\\
|
||||
\hspace{1cm}network should be subtracted}
|
||||
\query{Queries whether the network is added or removed during the deembedding}{VNA:DEEMBedding:x:ADD?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:NUMber}
|
||||
\query{Returns the number of configured matching network components}{VNA:DEEMBedding:x:NUMber?}{None}{<number of matching network components>}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:TYPE}
|
||||
\query{Returns the type of a configured matching network component}{VNA:DEEMBedding:x:TYPE? <y>}{<y> Number of matching component}{Type of component, one of:\\
|
||||
\hspace{1cm}SeriesR\\
|
||||
\hspace{1cm}SeriesL\\
|
||||
\hspace{1cm}SeriesC\\
|
||||
\hspace{1cm}ParallelR\\
|
||||
\hspace{1cm}ParallelL\\
|
||||
\hspace{1cm}ParallelC\\
|
||||
\hspace{1cm}Touchstone\_Through\\
|
||||
\hspace{1cm}Touchstone\_Shunt\\}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:NEW}
|
||||
\event{Adds a new matching network component}{VNA:DEEMBedding:x:NEW}{<type> Type of component, one of:\\
|
||||
\hspace{1cm}SeriesR\\
|
||||
\hspace{1cm}SeriesL\\
|
||||
\hspace{1cm}SeriesC\\
|
||||
\hspace{1cm}ParallelR\\
|
||||
\hspace{1cm}ParallelL\\
|
||||
\hspace{1cm}ParallelC\\
|
||||
\hspace{1cm}Touchstone\_Through\\
|
||||
\hspace{1cm}Touchstone\_Shunt\\
|
||||
<pos> position at which the component will be added. A value of 0 adds the\\
|
||||
\hspace{1cm}component closest to the port. This parameter is optional. If it is omitted,\\
|
||||
\hspace{1cm}the component is added closest to the DUT}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:DELete}
|
||||
\event{Removes a matching network component}{VNA:DEEMBedding:x:DELete}{<y> Number of component to delete}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:CLEAR}
|
||||
\event{Removes all matching network components}{VNA:DEEMBedding:x:DELete}{None}
|
||||
|
||||
\subsubsection{Impedance Renormalization Deembedding Commands}
|
||||
The following commands are only valid for a deembedding option of type ``Impedance\_Renormalization''. The ``x'' in the command names must be replaced with the option number.
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:IMPedance}
|
||||
\event{Sets the target impedance}{VNA:DEEMBedding:x:IMPedance}{<impedance> Impedance in Ohm}
|
||||
\query{Queries the target impedance}{VNA:DEEMBedding:x:IMPedance?}{None}{<impedance> Impedance in Ohm}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:y:VALue}
|
||||
\event{Sets the value of a matching network component}{VNA:DEEMBedding:x:y:VALue}{<value>, either in Ohm, Farad or Henry}
|
||||
\query{Queries the value of a matching network component}{VNA:DEEMBedding:x:y:VALue?}{None}{<port>, either in Ohm, Farad or Henry}
|
||||
|
||||
This command is only available for a component of these types:
|
||||
\begin{itemize}
|
||||
\item SeriesR
|
||||
\item SeriesL
|
||||
\item SeriesC
|
||||
\item ParallelR
|
||||
\item ParallelL
|
||||
\item ParallelC
|
||||
\end{itemize}
|
||||
|
||||
\subsubsubsection{VNA:DEEMBedding:x:y:FILE}
|
||||
\event{Loads a matching network component values from a Touchstone file}{VNA:DEEMBedding:x:y:FILE}{<filename>}
|
||||
|
||||
This command is only available for a component of these types:
|
||||
\begin{itemize}
|
||||
\item Touchstone\_Through
|
||||
\item Touchstone\_Shunt
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Signal Generator Commands}
|
||||
These commands change or query signal generator settings. Although most of them are available regardless of the current device mode, they usually only have an effect once the generator mode is active.
|
||||
|
||||
|
|
@ -601,6 +1067,13 @@ These commands change or query spectrum analyzer settings. Although most of them
|
|||
\subsubsection{SA:FREQuency:ZERO}
|
||||
\event{Sets the device to zero span mode}{SA:FREQuency:ZERO}{None}
|
||||
|
||||
\subsubsection{SA:ACQuisition:RUN}
|
||||
\event{Puts the spectrum analyzer into run mode (sweep active)}{SA:ACQuisition:RUN}{None}
|
||||
\query{Queries whether the spectrum analyzer is in run mode}{SA:ACQuisition:RUN?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{SA:ACQuisition:STOP}
|
||||
\event{Puts the spectrum analyzer into stop mode (sweep inactive)}{SA:ACQuisition:STOP}{None}
|
||||
|
||||
\subsubsection{SA:ACQuisition:RBW}
|
||||
\event{Sets the resolution bandwidth}{SA:ACQuisition:IFBW}{<resolution bandwidth>, in Hz}
|
||||
\query{Queries the currently selected resolution bandwidth}{SA:ACQuisition:IFBW?}{None}{resolution bandwidth in Hz}
|
||||
|
|
@ -663,6 +1136,16 @@ If single sweep is enabled, the acquisition is stopped when the required number
|
|||
\event{Enables/disables signal identification}{SA:ACQuisition:SIGid}{<enabled>, option are TRUE, FALSE, 1 or 0}
|
||||
\query{Queries whether signal identification is enabled}{SA:ACQuisition:SIGid?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{SA:ACQuisition:FREQuency}
|
||||
\query{Returns the current frequency of the sweep}{SA:ACQuisition:FREQuency?}{None}{<Frequency in Hz>}
|
||||
|
||||
This command only returns valid data when a sweep is running and the the sweep is a frequency sweep.
|
||||
|
||||
\subsubsection{SA:ACQuisition:TIME}
|
||||
\query{Returns the current time of the sweep}{SA:ACQuisition:TIME?}{None}{<Time in seconds>}
|
||||
|
||||
This command only returns valid data when a sweep is running and the the sweep is a zero-span sweep.
|
||||
|
||||
\subsubsection{SA:TRACKing:ENable}
|
||||
\event{Enables/disables the tracking generator}{SA:TRACKing:ENable}{<enabled>, option are TRUE, FALSE, 1 or 0}
|
||||
\query{Queries whether tracking generator is enabled}{SA:TRACKing:ENable?}{None}{TRUE or FALSE}
|
||||
|
|
@ -743,6 +1226,9 @@ Port1,Port2
|
|||
\subsubsection{SA:TRACe:NEW}
|
||||
\event{Creates a new trace}{SA:TRACe:NEW}{<trace name>}
|
||||
|
||||
\subsubsection{SA:TRACe:DELete}
|
||||
\event{Deletes a trace}{VNA:TRACe:DELete}{<trace>, either by name or by index}
|
||||
|
||||
\subsubsection{SA:TRACe:RENAME}
|
||||
\event{Changes the name of a trace}{SA:TRACe:RENAME}{<trace>, either by name or by index\\<new name>}
|
||||
|
||||
|
|
@ -763,4 +1249,299 @@ Port1,Port2
|
|||
\event{Sets the storage type of a trace}{SA:TRACe:TYPE}{<trace>, either by name or by index\\<type>, options are OVERWRITE, MAXHOLD or MINHOLD}
|
||||
\query{Queries the storage type of a trace}{SA:TRACe:TYPE?}{<trace>, either by name or by index}{OVERWRITE, MAXHOLD or MINHOLD}
|
||||
|
||||
\section{Custom Driver Commands}
|
||||
The \gui{} is mainly intended to be used with the \vna{}. However, the interface between the \gui{} and the actual VNA is abstracting certain hardware features to allow the \gui{} to interact with other devices as well. This is mainly intended for future extensions and only very few other devices are supported for testing and demonstration purposes.
|
||||
|
||||
Each device driver may implement additional SCPI commands that are too specific to be useful with every device. These commands are only available when the \gui{} is connected to the device.
|
||||
|
||||
\subsection{LibreVNA Version 1}
|
||||
The following commands are available when connected to a LibreVNA (hardware version 1):
|
||||
|
||||
\subsubsection{DEVice:UPDATE}
|
||||
\event{Updates the firmware of the connected device}{DEVice:UPDATE <fw\_file>}{<fw\_file> Path to the firmware file}
|
||||
Important points when saving/loading setup files through SCPI commands:
|
||||
\begin{itemize}
|
||||
\item The path must be either absolute or relative to the location of the GUI application.
|
||||
\item If the LibreVNA-GUI (and thus also the SCPI server) is running on a different machine than the SCPI client, the firmware file must be stored on the machine that runs the GUI.
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection{DEVice:INFo:TEMPeratures}
|
||||
\query{Queries the temperatures of certain chips}{DEVice:INFo:TEMPeratures?}{None}{<source>/<1.LO>/<CPU>}
|
||||
\begin{example}
|
||||
:DEV:INF:TEMP?
|
||||
45/51/31
|
||||
\end{example}
|
||||
|
||||
\subsubsection{MANual:STArt}
|
||||
\event{Starts the manual device control dialog}{MANual:STArt}{None}
|
||||
|
||||
The manual device control dialog allows the user to directly access all the hardware components. This can be considered as a forth mode (in addition to VNA, signal generator and spectrum analyzer). As long as it is active, it takes priority over any other mode. After starting the manual control dialog, all hardware components are disabled by default. While the manual control dialog is active, additional SCPI commands are available to configure the hardware and retrieve ADC readings.
|
||||
|
||||
\subsubsection{MANual:STOp}
|
||||
\event{Stops the manual device control dialog}{MANual:STOp}{None}
|
||||
|
||||
\subsubsection{MANual:HSRC\_CE}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the chip enable for the highband source}{MANual:HSRC\_CE}{TRUE or FALSE}
|
||||
\query{Queries the status of the chip enable for the highband source}{MANual:HSRC\_CE?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:HSRC\_RFEN}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the RF enable for the highband source}{MANual:HSRC\_RFEN}{TRUE or FALSE}
|
||||
\query{Queries the status of the RF enable for the highband source}{MANual:HSRC\_RFEN?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:HSRC\_LOCKed}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the lock status of the highband source}{MANual:HSRC\_LOCKed?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:HSRC\_PWR}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the output power of the highband source}{MANual:HSRC\_PWR}{<power>, output power in dBm, allowed values are -4, -1, 2 and 5}
|
||||
\query{Queries the output power of the highband source}{MANual:HSRC\_PWR?}{None}{<power>, output power in dBm}
|
||||
|
||||
\subsubsection{MANual:HSRC\_FREQ}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the target frequency of the highband source}{MANual:HSRC\_FREQ}{<freq>, frequency in Hz}
|
||||
\query{Queries the target frequency of the highband source}{MANual:HSRC\_FREQ?}{None}{<freq>, frequency in Hz}
|
||||
|
||||
\subsubsection{MANual:HSRC\_LPF}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the lowpass filter of the highband source}{MANual:HSRC\_LPF}{<cutoff>, Cutoff frequency in MHz, allowed values are 947, 1880, 3500 and\\0 (no filter)}
|
||||
\query{Queries the lowpass filter setting of the highband source}{MANual:HSRC\_LPF?}{None}{<cutoff>, Cutoff frequency in MHz}
|
||||
|
||||
\subsubsection{MANual:LSRC\_EN}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the enable signal for the lowband source}{MANual:LSRC\_EN}{TRUE or FALSE}
|
||||
\query{Queries the status of the enable signal for the lowband source}{MANual:LSRC\_EN?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:LSRC\_PWR}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the output power of the lowband source}{MANual:LSRC\_PWR}{<power>, output power in mA, allowed values are 2, 4, 6 and 8}
|
||||
\query{Queries the output power of the lowband source}{MANual:LSRC\_PWR?}{None}{<power>, output power in mA}
|
||||
|
||||
\subsubsection{MANual:LSRC\_FREQ}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the target frequency of the lowband source}{MANual:LSRC\_FREQ}{<freq>, frequency in Hz}
|
||||
\query{Queries the target frequency of the lowband source}{MANual:LSRC\_FREQ?}{None}{<freq>, frequency in Hz}
|
||||
|
||||
\subsubsection{MANual:BAND\_SW}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the band selector switch}{MANual:BAND\_SW}{TRUE for highband, FALSE for lowband}
|
||||
\query{Queries the status of the band selector switch}{MANual:BAND\_SW?}{None}{TRUE for highband, FALSE for lowband}
|
||||
|
||||
\subsubsection{MANual:ATTenuator}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the attenuator value}{MANual:ATTenuator}{<att>, Attenuation in dB, values between -31.75 and 0}
|
||||
\query{Queries the attenuator value}{MANual:ATTenuator?}{None}{<att>, Attenuation in dB}
|
||||
|
||||
\subsubsection{MANual:AMP\_EN}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the enable signal for the amplifier}{MANual:AMP\_EN}{TRUE or FALSE}
|
||||
\query{Queries the status of the enable signal for the amplifier}{MANual:AMP\_EN?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:PORT\_SW}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the port selector switch}{MANual:PORT\_SW}{<port>, either 1 or 2}
|
||||
\query{Queries the status of the port selector switch}{MANual:PORT\_SW?}{None}{<port>}
|
||||
|
||||
\subsubsection{MANual:LO1\_CE}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the chip enable for the LO1 PLL}{MANual:LO1\_CE}{TRUE or FALSE}
|
||||
\query{Queries the status of the chip enable for the LO1 PLL}{MANual:LO1\_CE?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:LO1\_RFEN}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the RF enable for the LO1 PLL}{MANual:LO1\_RFEN}{TRUE or FALSE}
|
||||
\query{Queries the status of the RF enable for the LO1 PLL}{MANual:LO1\_RFEN?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:LO1\_LOCKed}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the lock status of the LO1 PLL}{MANual:LO1\_LOCKed?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:LO1\_FREQ}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the target frequency of the LO1 PLL}{MANual:LO1\_FREQ}{<freq>, frequency in Hz}
|
||||
\query{Queries the target frequency of the LO1 PLL}{MANual:LO1\_FREQ?}{None}{<freq>, frequency in Hz}
|
||||
|
||||
\subsubsection{MANual:IF1\_FREQ}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the IF1 frequency}{MANual:IF1\_FREQ}{<freq>, frequency in Hz}
|
||||
\query{Queries the IF1 frequency}{MANual:IF1\_FREQ?}{None}{<freq>, frequency in Hz}
|
||||
|
||||
\subsubsection{MANual:LO2\_EN}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the enable signal for the LO2 PLL}{MANual:LO2\_EN}{TRUE or FALSE}
|
||||
\query{Queries the status of the enable signal for the LO2 PLL}{MANual:LO2\_EN?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:LO2\_FREQ}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the target frequency of the LO2 PLL}{MANual:LO2\_FREQ}{<freq>, frequency in Hz}
|
||||
\query{Queries the target frequency of the LO2 PLL}{MANual:LO2\_FREQ?}{None}{<freq>, frequency in Hz}
|
||||
|
||||
\subsubsection{MANual:IF2\_FREQ}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the IF2 frequency}{MANual:IF2\_FREQ}{<freq>, frequency in Hz}
|
||||
\query{Queries the IF2 frequency}{MANual:IF2\_FREQ?}{None}{<freq>, frequency in Hz}
|
||||
|
||||
\subsubsection{MANual:PORT1\_EN}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the enable signal for the port 1 receiver}{MANual:PORT1\_EN}{TRUE or FALSE}
|
||||
\query{Queries the status of the enable signal for the port 1 receiver}{MANual:PORT1\_EN?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:PORT2\_EN}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the enable signal for the port 2 receiver}{MANual:PORT2\_EN}{TRUE or FALSE}
|
||||
\query{Queries the status of the enable signal for the port 2 receiver}{MANual:PORT2\_EN?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:REF\_EN}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Controls the enable signal for the reference receiver}{MANual:REF\_EN}{TRUE or FALSE}
|
||||
\query{Queries the status of the enable signal for the reference receiver}{MANual:REF\_EN?}{None}{TRUE or FALSE}
|
||||
|
||||
\subsubsection{MANual:SAMPLES}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the number of ADC samples per reading}{MANual:SAMPLES}{<samples>, value between 16 and 131072 in increments of 16}
|
||||
\query{Queries the number of ADC samples per reading}{MANual:SAMPLES?}{None}{<samples>}
|
||||
|
||||
\subsubsection{MANual:WINdow}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\event{Sets the window for the DFT calculation}{MANual:WINdow}{<window>, either NONE, KAISER, HANN or FLATTOP}
|
||||
\query{Queries the window for the DFT calculatio}{MANual:WINdow?}{None}{NONE, KAISER, HANN or FLATTOP}
|
||||
|
||||
\subsubsection{MANual:PORT1\_MIN}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the minimum observed port 1 ADC value in the last sampling period}{MANual:PORT1\_MIN?}{None}{minimum ADC value}
|
||||
|
||||
\subsubsection{MANual:PORT1\_MAX}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the maximum observed port 1 ADC value in the last sampling period}{MANual:PORT1\_MAX?}{None}{maximum ADC value}
|
||||
|
||||
\subsubsection{MANual:PORT1\_MAG}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the observerd magnitude at port 1 in the last sampling period}{MANual:PORT1\_MAG?}{None}{port 1 magnitude (linear unit, arbitrary scale)}
|
||||
|
||||
\subsubsection{MANual:PORT1\_PHAse}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the observed phase at port 1 in the last sampling period}{MANual:PORT1\_PHAse?}{None}{phase in degree (random value because it is relativ to an internal sampling clock)}
|
||||
|
||||
\subsubsection{MANual:PORT1\_REFerenced}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the observed signal at port 1 relative to the reference in the last sampling period}{MANual:PORT1\_REFerenced?}{None}{<real>, <imag>}
|
||||
|
||||
\subsubsection{MANual:PORT2\_MIN}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the minimum observed port 2 ADC value in the last sampling period}{MANual:PORT2\_MIN?}{None}{minimum ADC value}
|
||||
|
||||
\subsubsection{MANual:PORT2\_MAX}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the maximum observed port 2 ADC value in the last sampling period}{MANual:PORT2\_MAX?}{None}{maximum ADC value}
|
||||
|
||||
\subsubsection{MANual:PORT2\_MAG}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the observerd magnitude at port 2 in the last sampling period}{MANual:PORT2\_MAG?}{None}{port 1 magnitude (linear unit, arbitrary scale)}
|
||||
|
||||
\subsubsection{MANual:PORT2\_PHAse}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the observed phase at port 2 in the last sampling period}{MANual:PORT2\_PHAse?}{None}{phase in degree (random value because it is relativ to an internal sampling clock)}
|
||||
|
||||
\subsubsection{MANual:PORT2\_REFerenced}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the observed signal at port 2 relative to the reference in the last sampling period}{MANual:PORT2\_REFerenced?}{None}{<real>, <imag>}
|
||||
|
||||
\subsubsection{MANual:REF\_MIN}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the minimum observed reference ADC value in the last sampling period}{MANual:REF\_MIN?}{None}{minimum ADC value}
|
||||
|
||||
\subsubsection{MANual:REF\_MAX}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the maximum observed reference ADC value in the last sampling period}{MANual:REF\_MAX?}{None}{maximum ADC value}
|
||||
|
||||
\subsubsection{MANual:REF\_MAG}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the observerd magnitude at the reference receiver in the last sampling period}{MANual:REF\_MAG?}{None}{port 1 magnitude (linear unit, arbitrary scale)}
|
||||
|
||||
\subsubsection{MANual:REF\_PHAse}
|
||||
Only available when the manual control dialog is active.
|
||||
|
||||
\query{Queries the observed phase at the reference receiver in the last sampling period}{MANual:REF\_PHAse?}{None}{phase in degree (random value because it is relativ to an internal sampling clock)}
|
||||
|
||||
\section{Streaming data}
|
||||
The SCPI server works well for configuring the device and also for reading trace data once an acquition is done. But it isn't very well suited for reading data while the device is capturing it. For some applications (e.g. when running continuous sweeps) it may be beneficial to process the data externally as it getting captured. For this purpose, the LibreVNA-GUI supports streaming the data over dedicated ports.
|
||||
|
||||
These streaming servers have to be enbled first. This can be done in \menu[,]{Window,Preferences,Streaming Servers}.
|
||||
|
||||
There are a total of 5 streaming servers available. They can all be enabled and used at the same time, although not all servers will output data all the time.
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{VNA raw data:} Outputs the raw S-parameters without any calibration applied. This output is always available, even when a calibration is enabled or de-embedding it active. Apart from averaging (if enabled) no processing is done on the data.
|
||||
\item \textbf{VNA calibrated data:} Outputs the calibrated S-parameters with the calibration applied. This output is only available when a calibration is enabled.
|
||||
\item \textbf{VNA de-embedded data:} Outputs the de-embedded S-parameters with the de-embbeding and calibration (if enabled) applied. This output is only available when de-embedding is active.
|
||||
\item \textbf{SA raw data:} Outputs the raw (not normalized) power levels from the spectrum analyzer. This output is always available, even when normalizing is active.
|
||||
\item \textbf{SA normalized data:} Outputs the normalized power levels from the spectrum analyzer. This output is only available when normalizing is active.
|
||||
\end{itemize}
|
||||
|
||||
\vspace{0.5cm}
|
||||
|
||||
All servers output a newline-terminated line of json formatted data for each measurement point in the sweep. The format of the output data changes depending on the configured sweep type.
|
||||
|
||||
\begin{itemize}
|
||||
\item VNA frequency or power sweeps:
|
||||
\begin{example}
|
||||
{"Z0":50.0,"dBm":-20.0,"frequency":42993000.0,"measurements":{"S11_imag":-0.061379313997181856,"S11_real":0.023033630841401063,"S12_imag":0.3205479840477101,"S12_real":-0.5742283570681822,"S21_imag":-0.3746074656570865,"S21_real":0.6126114195570408,"S22_imag":0.06312766256272641,"S22_real":-0.018668561526968372},"pointNum":7}
|
||||
\end{example}
|
||||
\item VNA zero span sweeps:
|
||||
\begin{example}
|
||||
{"Z0":50.0,"measurements":{"S11_imag":0.0697879786634009,"S11_real":0.11959939538177566,"S12_imag":-0.2820494760489866,"S12_real":0.4134518710922877,"S21_imag":0.11201366122663228,"S21_real":-0.4258244924547545,"S22_imag":-0.004193267854043776,"S22_real":0.028964823536021114},"pointNum":7,"time":2.438674}
|
||||
\end{example}
|
||||
\item Spectrum analyzer non zero span sweeps:
|
||||
\begin{example}
|
||||
{"frequency":2182396.0,"measurements":{"PORT1":7.343487141042715e-06,"PORT2":6.78117066854611e-06},"pointNum":445}
|
||||
\end{example}
|
||||
\item Spectrum analyzer zero span sweeps:
|
||||
\begin{example}
|
||||
{"measurements":{"PORT1":2.595309979369631e-06,"PORT2":1.4385256008608849e-06},"pointNum":7,"time":0.344095}
|
||||
\end{example}
|
||||
\end{itemize}
|
||||
|
||||
For zero span sweeps, the time in seconds since the beginning of the sweep is given instead of a frequency of power level. The time is always relative to point 0 of the current sweep and point 0 will have a time of 0.
|
||||
|
||||
\end{document}
|
||||
|
|
|
|||
57
Documentation/UserManual/SCPI_Examples/capture_live_data.py
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import time
|
||||
from libreVNA import libreVNA
|
||||
|
||||
# Create the control instance
|
||||
vna = libreVNA('localhost', 19542)
|
||||
|
||||
# Quick connection check (should print "LibreVNA-GUI")
|
||||
print(vna.query("*IDN?"))
|
||||
|
||||
# Make sure we are connecting to a device (just to be sure, with default settings the LibreVNA-GUI auto-connects)
|
||||
vna.cmd(":DEV:CONN")
|
||||
dev = vna.query(":DEV:CONN?")
|
||||
if dev == "Not connected":
|
||||
print("Not connected to any device, aborting")
|
||||
exit(-1)
|
||||
else:
|
||||
print("Connected to "+dev)
|
||||
|
||||
# Capture live data as it is coming in. Stop acquisition for now
|
||||
vna.cmd(":VNA:ACQ:STOP")
|
||||
|
||||
# switch to VNA mode, set up the sweep parameters
|
||||
print("Setting up the sweep...")
|
||||
vna.cmd(":DEV:MODE VNA")
|
||||
vna.cmd(":VNA:SWEEP FREQUENCY")
|
||||
vna.cmd(":VNA:STIM:LVL -10")
|
||||
vna.cmd(":VNA:ACQ:IFBW 100")
|
||||
vna.cmd(":VNA:ACQ:AVG 1")
|
||||
vna.cmd(":VNA:ACQ:POINTS 501")
|
||||
vna.cmd(":VNA:FREQuency:START 10000000")
|
||||
vna.cmd(":VNA:FREQuency:STOP 6000000000")
|
||||
|
||||
sweepComplete = False
|
||||
|
||||
|
||||
def callback(data):
|
||||
global sweepComplete
|
||||
print(data)
|
||||
if data["pointNum"] == 500:
|
||||
# this was the last point
|
||||
vna.remove_live_callback(19000, callback)
|
||||
sweepComplete = True
|
||||
|
||||
|
||||
# Set up the connection for the live data
|
||||
vna.add_live_callback(19000, callback)
|
||||
print("Starting the sweep...")
|
||||
vna.cmd(":VNA:ACQ:RUN")
|
||||
|
||||
while not sweepComplete:
|
||||
time.sleep(0.1)
|
||||
|
||||
print("Sweep complete")
|
||||
|
||||
|
||||
50
Documentation/UserManual/SCPI_Examples/deembedding_test.py
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import time
|
||||
from libreVNA import libreVNA
|
||||
|
||||
# Create the control instance
|
||||
vna = libreVNA('localhost', 19542)
|
||||
|
||||
# Quick connection check (should print "LibreVNA-GUI")
|
||||
print(vna.query("*IDN?"))
|
||||
|
||||
vna.cmd(":VNA:DEEMB:CLEAR")
|
||||
vna.cmd(":VNA:DEEMB:NEW PORT_EXTENSION")
|
||||
vna.cmd(":VNA:DEEMB:NEW 2XTHRU")
|
||||
vna.cmd(":VNA:DEEMB:NEW MATCHING_NETWORK")
|
||||
vna.cmd(":VNA:DEEMB:NEW IMPEDANCE_RENORMALIZATION")
|
||||
|
||||
print("Number of total deembedding options:")
|
||||
num_options = int(vna.query(":VNA:DEEMB:NUM?"))
|
||||
print(num_options)
|
||||
|
||||
for i in range(1, num_options+1):
|
||||
option_name = vna.query(":VNA:DEEMB:TYPE? "+str(i))
|
||||
print("Option "+str(i)+": "+option_name)
|
||||
|
||||
# edit port extension
|
||||
vna.cmd(":VNA:DEEMB:1:PORT 2")
|
||||
vna.cmd(":VNA:DEEMB:1:DELAY 0.00002")
|
||||
vna.cmd(":VNA:DEEMB:1:DCLOSS 1")
|
||||
vna.cmd(":VNA:DEEMB:1:LOSS 3")
|
||||
vna.cmd(":VNA:DEEMB:1:FREQUENCY 5000000000")
|
||||
|
||||
vna.cmd(":VNA:DEEMB:3:PORT 3")
|
||||
vna.cmd(":VNA:DEEMB:3:CLEAR")
|
||||
vna.cmd(":VNA:DEEMB:3:ADD FALSE")
|
||||
vna.cmd(":VNA:DEEMB:3:NEW ParallelC")
|
||||
vna.cmd(":VNA:DEEMB:3:NEW SeriesR")
|
||||
vna.cmd(":VNA:DEEMB:3:NEW ParallelL")
|
||||
vna.cmd(":VNA:DEEMB:3:NEW SeriesL")
|
||||
vna.cmd(":VNA:DEEMB:3:NEW touchstone_shunt")
|
||||
|
||||
vna.cmd(":VNA:DEEMB:3:1:VALUE 0.0001")
|
||||
vna.cmd(":VNA:DEEMB:3:2:VALUE 0.00002")
|
||||
vna.cmd(":VNA:DEEMB:3:3:VALUE 0.000003")
|
||||
vna.cmd(":VNA:DEEMB:3:4:VALUE 0.000004")
|
||||
|
||||
vna.cmd(":VNA:DEEMB:3:5:FILE TEST.S2P")
|
||||
|
||||
vna.cmd(":VNA:DEEMB:4:IMPedance 75")
|
||||
|
||||
120
Documentation/UserManual/SCPI_Examples/libreVNA.py
Normal file → Executable file
|
|
@ -1,12 +1,16 @@
|
|||
import re
|
||||
import socket
|
||||
from asyncio import IncompleteReadError # only import the exception class
|
||||
import time
|
||||
import threading
|
||||
import json
|
||||
|
||||
class SocketStreamReader:
|
||||
def __init__(self, sock: socket.socket):
|
||||
def __init__(self, sock: socket.socket, default_timeout=1):
|
||||
self._sock = sock
|
||||
self._sock.setblocking(0)
|
||||
self._recv_buffer = bytearray()
|
||||
self.timeout = 1.0
|
||||
self.default_timeout = default_timeout
|
||||
|
||||
def read(self, num_bytes: int = -1) -> bytes:
|
||||
raise NotImplementedError
|
||||
|
|
@ -21,12 +25,14 @@ class SocketStreamReader:
|
|||
pos += n
|
||||
return bytes(buf)
|
||||
|
||||
def readline(self) -> bytes:
|
||||
return self.readuntil(b"\n")
|
||||
def readline(self, timeout=None) -> bytes:
|
||||
return self.readuntil(b"\n", timeout=timeout)
|
||||
|
||||
def readuntil(self, separator: bytes = b"\n") -> bytes:
|
||||
def readuntil(self, separator: bytes = b"\n", timeout=None) -> bytes:
|
||||
if len(separator) != 1:
|
||||
raise ValueError("Only separators of length 1 are supported.")
|
||||
if timeout is None:
|
||||
timeout = self.default_timeout
|
||||
|
||||
chunk = bytearray(4096)
|
||||
start = 0
|
||||
|
|
@ -34,12 +40,12 @@ class SocketStreamReader:
|
|||
bytes_read = self._recv_into(memoryview(buf))
|
||||
assert bytes_read == len(buf)
|
||||
|
||||
timeout = time.time() + self.timeout
|
||||
time_limit = time.time() + timeout
|
||||
while True:
|
||||
idx = buf.find(separator, start)
|
||||
if idx != -1:
|
||||
break
|
||||
elif time.time() > timeout:
|
||||
elif time.time() > time_limit:
|
||||
raise Exception("Timed out waiting for response from GUI")
|
||||
|
||||
start = len(self._recv_buffer)
|
||||
|
|
@ -59,35 +65,117 @@ class SocketStreamReader:
|
|||
if bytes_read == len(view):
|
||||
return bytes_read
|
||||
try:
|
||||
bytes_read += self._sock.recv_into(view[bytes_read:], 0, socket.MSG_DONTWAIT)
|
||||
bytes_read += self._sock.recv_into(view[bytes_read:], 0)
|
||||
except:
|
||||
pass
|
||||
return bytes_read
|
||||
|
||||
class libreVNA:
|
||||
def __init__(self, host='localhost', port=19542):
|
||||
def __init__(self, host='localhost', port=19542,
|
||||
check_cmds=True, timeout=1):
|
||||
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
self.host = host
|
||||
try:
|
||||
self.sock.connect((host, port))
|
||||
except:
|
||||
raise Exception("Unable to connect to LibreVNA-GUI. Make sure it is running and the TCP server is enabled.")
|
||||
self.reader = SocketStreamReader(self.sock)
|
||||
self.reader = SocketStreamReader(self.sock,
|
||||
default_timeout=timeout)
|
||||
self.default_check_cmds = check_cmds
|
||||
self.live_threads = {}
|
||||
self.live_callbacks = {}
|
||||
|
||||
def __del__(self):
|
||||
self.sock.close()
|
||||
|
||||
def __read_response(self):
|
||||
return self.reader.readline().decode().rstrip()
|
||||
def __read_response(self, timeout=None):
|
||||
return self.reader.readline(timeout=timeout).decode().rstrip()
|
||||
|
||||
def cmd(self, cmd):
|
||||
def cmd(self, cmd, check=None, timeout=None):
|
||||
self.sock.sendall(cmd.encode())
|
||||
self.sock.send(b"\n")
|
||||
self.__read_response()
|
||||
if check or (check is None and self.default_check_cmds):
|
||||
status = self.get_status(timeout=timeout)
|
||||
if status & 0x20:
|
||||
raise Exception("Command Error")
|
||||
if status & 0x10:
|
||||
raise Exception("Execution Error")
|
||||
if status & 0x08:
|
||||
raise Exception("Device Error")
|
||||
if status & 0x04:
|
||||
raise Exception("Query Error")
|
||||
return status
|
||||
else:
|
||||
return None
|
||||
|
||||
def query(self, query):
|
||||
def query(self, query, timeout=None):
|
||||
self.sock.sendall(query.encode())
|
||||
self.sock.send(b"\n")
|
||||
return self.__read_response()
|
||||
return self.__read_response(timeout=timeout)
|
||||
|
||||
def get_status(self, timeout=None):
|
||||
resp = self.query("*ESR?", timeout=timeout)
|
||||
if not re.match(r'^\d+$', resp):
|
||||
raise Exception("Expected numeric response from *ESR? but got "
|
||||
f"'{resp}'")
|
||||
status = int(resp)
|
||||
if status < 0 or status > 255:
|
||||
raise Exception(f"*ESR? returned invalid value {status}.")
|
||||
return status
|
||||
|
||||
def add_live_callback(self, port, callback):
|
||||
# check if we already have a thread handling this connection
|
||||
if not port in self.live_threads:
|
||||
# needs to create the connection and thread first
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
try:
|
||||
sock.connect((self.host, port))
|
||||
except:
|
||||
raise Exception("Unable to connect to streaming server at port {}. Make sure it is enabled.".format(port))
|
||||
|
||||
self.live_callbacks[port] = [callback]
|
||||
self.live_threads[port] = threading.Thread(target=self.__live_thread, args=(sock, port))
|
||||
self.live_threads[port].start()
|
||||
else:
|
||||
# thread already existed, simply add to list
|
||||
self.live_callbacks[port].append(callback)
|
||||
|
||||
def remove_live_callback(self, port, callback):
|
||||
if port in self.live_callbacks:
|
||||
# remove all matching callbacks from the list
|
||||
self.live_callbacks[port] = [cb for cb in self.live_callbacks[port] if cb != callback]
|
||||
# if the list is now empty, the thread will exit
|
||||
if len(self.live_callbacks) == 0:
|
||||
self.live_threads[port].join()
|
||||
del self.live_threads[port]
|
||||
|
||||
def __live_thread(self, sock, port):
|
||||
reader = SocketStreamReader(sock, default_timeout=0.1)
|
||||
while len(self.live_callbacks[port]) > 0:
|
||||
try:
|
||||
line = reader.readline().decode().rstrip()
|
||||
# determine whether this is data from the VNA or spectrum analyzer
|
||||
data = json.loads(line)
|
||||
if "Z0" in data:
|
||||
# This is VNA data which has the imag/real parts of the S-parameters split into two float values.
|
||||
# This was necessary because json does not support complex number. But python does -> convert back
|
||||
# to complex
|
||||
measurements = {}
|
||||
for meas in data["measurements"].keys():
|
||||
if meas.endswith("_imag"):
|
||||
# ignore
|
||||
continue
|
||||
name = meas.removesuffix("_real")
|
||||
real = data["measurements"][meas]
|
||||
imag = data["measurements"][name+"_imag"]
|
||||
measurements[name] = complex(real, imag)
|
||||
data["measurements"] = measurements
|
||||
for cb in self.live_callbacks[port]:
|
||||
cb(data)
|
||||
except:
|
||||
# ignore timeouts
|
||||
pass
|
||||
|
||||
|
||||
@staticmethod
|
||||
def parse_VNA_trace_data(data):
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 17 KiB |
BIN
Documentation/UserManual/Screenshots/GraphEyeDiagram.png
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
Documentation/UserManual/Screenshots/GraphEyeDiagramSetup.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 44 KiB |
|
|
@ -191,9 +191,9 @@ The implemented USB device is limited to USB 2.0 Fullspeed and data transmission
|
|||
\subsection{External Power}
|
||||
Input jack for external DC power (\SI{5}{\volt}, \SI{1.5}{\ampere}, positive center pin). If a power source is connected, no current is drawn from the USB port anymore.
|
||||
\subsection{RF ports}
|
||||
RF connector to connect the DUT. Both ports are identical and the device architecture support full S-Parameter measurements (S11, S21, S12 and S22).
|
||||
RF connector to connect the DUT. Both ports are identical and the device architecture supports full S-Parameter measurements (S11, S21, S12 and S22).
|
||||
\begin{important}
|
||||
The RF ports have no input protection, do not apply a signal with more than +\SI{10}{\dBm} of power.
|
||||
The RF ports have no input protection, so do not apply a signal with more than +\SI{10}{\dBm} of power.
|
||||
\end{important}
|
||||
\subsection{LEDs}
|
||||
Ten LEDs indicate the status:
|
||||
|
|
@ -219,7 +219,7 @@ Due to the high impedance input, the external input may detect a valid signal wh
|
|||
|
||||
\section{Getting started}
|
||||
\begin{enumerate}
|
||||
\item Connect the \vna{} to a computer using the USB port. After a couple of seconds, only the "Power" and "Ready" LEDs should stay on. If the "Ready" LED does not turn on or the "Booting" LED indicates an error code, there is a problem und the device will not function properly. See section~\ref{troubleshooting} for possible solutions.
|
||||
\item Connect the \vna{} to a computer using the USB port. After a couple of seconds, only the "Power" and "Ready" LEDs should stay on. If the "Ready" LED does not turn on or the "Booting" LED indicates an error code, there is a problem and the device will not function properly. See section~\ref{troubleshooting} for possible solutions.
|
||||
\item Start the PC application to connect to the \vna{}. The window should look similar to this:
|
||||
\makebox[\textwidth][c]{
|
||||
\includegraphics[width=\textwidth]{Screenshots/ApplicationOverview.png}
|
||||
|
|
@ -402,7 +402,16 @@ Every trace can receive its data from one of three source:
|
|||
|
||||
\paragraph{Live Capture}
|
||||
\screenshot{0.5}{LiveCapture.png}
|
||||
The trace is constantly updated by the data received from a connected and sweeping LibreVNA. Available settings are the S parameter from which the data is updated and a simple Max Hold and Min Hold function (based on signal magnitude).
|
||||
The trace is constantly updated by the data received from a connected and sweeping LibreVNA. The available Live Capture parameters are:
|
||||
\begin{itemize}
|
||||
\item \textbf{Type:} Live Captures can be 3 different types:
|
||||
\begin{itemize}
|
||||
\item \textbf{Overwrite:} The trace data is overwritten each sweep
|
||||
\item \textbf{Max hold:} The trace data with the highest signal magnitude is persisted
|
||||
\item \textbf{Min hold:} The trace data with the lowest signal magnitude is persisted
|
||||
\end{itemize}
|
||||
\item \textbf{Parameter:} The S-Parameter you want traced
|
||||
\end{itemize}
|
||||
|
||||
\paragraph{From File}
|
||||
\screenshot{0.5}{FromFile.png}
|
||||
|
|
@ -477,7 +486,7 @@ Adjustable settings:
|
|||
\item \textbf{Bandpass:} Input samples may use any frequency and span. Only an impulse response can be calculated as the DC point is unknown.
|
||||
\end{itemize}
|
||||
\item \textbf{Compute Step Response:} Enable calculation of step response as well (only available in lowpass mode)
|
||||
\item \textbf{DC point:} Chose between extrapolating the DC point from frequency data or specifying it manually (only available in lowpass mode)
|
||||
\item \textbf{DC point:} Choose between extrapolating the DC point from frequency data or specifying it manually (only available in lowpass mode)
|
||||
\item \textbf{Window:} A window is applied before performing the transformation. Available windows are:
|
||||
\begin{itemize}
|
||||
\item Rectangular
|
||||
|
|
@ -750,7 +759,7 @@ Performing a calibration, especially when multiple ports are used, can require a
|
|||
|
||||
To start the electronic calibration, select \menu[,]{Calibration,Electronic Calibration} or \menu[,]{Calibration,Calibration Measurements,Electronic Calibration}. There is no need to create a calibration kit first, as the electronic calibration will use the calibration coefficients stored in the LibreCAL.
|
||||
\begin{important}
|
||||
The electronic calibration will delete and replace any currently active calibration and also the calibration kit standards. Please store any unsaved calibration data before starting the electronic calibration.
|
||||
The electronic calibration will delete and replace any currently active calibration and calibration kit. Please store any unsaved calibration data before starting the electronic calibration.
|
||||
\end{important}
|
||||
|
||||
\screenshot{0.6}{eCal.png}
|
||||
|
|
@ -762,8 +771,8 @@ Steps required to perform the electronic calibration:
|
|||
\item Start the electronic calibration dialog
|
||||
\item Select the correct LibreCAL device and the coefficients:
|
||||
\begin{itemize}
|
||||
\item \textbf{Device:} Serialnumber of the LibreCAL. Usually, only one should be connected and the serialnumber will be automatically selected when the dialog is first opened
|
||||
\item \textbf{Coefficients:} Select the coefficient set to be used. The LibreCAL can store multiple sets of coefficients. Please the manual\footnote{\url{https://github.com/jankae/LibreCAL/blob/main/Documentation/manual.pdf}} of the LibreCAL for detailed information on coefficient sets.
|
||||
\item \textbf{Device:} The serial number of the LibreCAL. Usually, only one should be connected and the serial number will be automatically selected when the dialog is first opened
|
||||
\item \textbf{Coefficients:} Select the coefficient set to be used. The LibreCAL can store multiple sets of coefficients. Refer to the LibreCAL manual\footnote{\url{https://github.com/jankae/LibreCAL/blob/main/Documentation/manual.pdf}} for detailed information on coefficient sets.
|
||||
\end{itemize}
|
||||
\item Check and adjust the port assignments. Ports between the \vna{} and LibreCAL can be connected in any order. Match the ports in the dialog to your physical setup.
|
||||
\item Press the "Start" button. This will perform the following steps:
|
||||
|
|
@ -771,7 +780,7 @@ Steps required to perform the electronic calibration:
|
|||
\item Fill the calibration kit based on the coefficients extracted from the LibreCAL
|
||||
\item Take an open, short and load measurement for every port of the \vna{}
|
||||
\item Take a through measurement for any combination of ports
|
||||
\item Apply the SOLT calibration. For the FACTORY coefficient set, the reference plane will be at the ports of the LibreCAL´
|
||||
\item Apply the SOLT calibration. For the FACTORY coefficient set, the reference plane will be at the ports of the LibreCAL
|
||||
\end{itemize}
|
||||
\end{enumerate}
|
||||
|
||||
|
|
@ -835,7 +844,7 @@ Any combination of these components can be dragged into the signal path between
|
|||
|
||||
Further settings:
|
||||
\begin{itemize}
|
||||
\item \textbf{Operation:} Chose between embedding and de-embedding
|
||||
\item \textbf{Operation:} Choose between embedding and de-embedding
|
||||
\item \textbf{Port:} Port of the \vna{}
|
||||
\end{itemize}
|
||||
If a matching network is required at multiple ports, add this option once for each port.
|
||||
|
|
@ -848,17 +857,17 @@ The \vna{} is a \SI{50}{\ohm} system. S parameter measurements are reported with
|
|||
\section{Signal Generator}
|
||||
In the signal generator mode, measurements are stopped and the \vna{} only outputs a CW signal.
|
||||
\screenshot{0.8}{Signalgenerator.png}
|
||||
The hardware is not optimized for signal generation which means that the output level is not very accurate, especially at higher frequencies (also see section~\ref{amplitude:calibration}). Also, the signal will contain higher levels of harmonics than one would normally expect from a signal generator.
|
||||
The hardware is not optimized for signal generation which means that the output level is not very accurate, especially at higher frequencies (see also section~\ref{amplitude:calibration}). Also, the signal will contain higher levels of harmonics than one would normally expect from a signal generator.
|
||||
\section{Spectrum Analyzer}
|
||||
Although the \vna{} hardware is not designed to be used as a spectrum analyzer, the general hardware architecture of a spectrum analyzer is similar enough to that of a VNA to implement basic two-channel spectrum measurements. This is in no way on the same performance level as a dedicated spectrum analyzer but for simple measurements it might suffice if no other equipment is available. The main differences to a real spectrum analyzer are:
|
||||
\begin{itemize}
|
||||
\item \textbf{No input attenuator or pre-amplifier:} This means that the measurement range is essentially fixed to approximately \SI{-110}{\dBm} to \SI{-10}{\dBm}.
|
||||
\item \textbf{No amplitude calibration:} The displayed signal level is not very accurate, especially at higher frequencies (also see section~\ref{amplitude:calibration}).
|
||||
\item \textbf{No amplitude calibration:} The displayed signal level is not very accurate, especially at higher frequencies (see also section~\ref{amplitude:calibration}).
|
||||
\item \textbf{No image rejection filters:} This is probably the most severe limitation, because it means that for every real signal several other signals will show up in the spectrum that are not actually present at the input. Most of the images can be filtered out by signal identification but some will remain (at lower amplitude) in the reported data.
|
||||
\item \textbf{Highest resolution bandwidth is quite low:} The sweep speed is too slow to cover the complete frequency range of \SI{1}{\mega\hertz} to \SI{6}{\giga\hertz} in an acceptable time.
|
||||
\end{itemize}
|
||||
|
||||
Most control elements (Frequencies, Span, Traces, Marker, ...) are indentical to the vector network analyzer mode.
|
||||
Most control elements (Frequencies, Span, Traces, Marker, ...) are identical to the vector network analyzer mode.
|
||||
\subsection{Acquisition Toolbar}
|
||||
\screenshot{0.7}{ToolbarSAAcquisition.png}
|
||||
\begin{itemize}
|
||||
|
|
@ -902,7 +911,7 @@ A tracking generator at either port is available in the spectum analyzer. If the
|
|||
DFT acquisition is not available when the tracking generator is active. Also, due to hardware limitations, the tracking generator is unable to reach every frequency exactly. For narrow spans this could result in "drops" in the spectrum where the signal of the tracking generator is outside of the RBW filters passband. The frequency resolution is frequency dependent. A warning message appears if this could be a problem with the selected span and stop frequency.
|
||||
|
||||
\section{Graphs}
|
||||
In VNA and spectrum analyzer mode, the trace data in displayed on graphs. Several different graph types are available and most can be customized as well.
|
||||
In VNA and spectrum analyzer mode, the trace data is displayed on graphs. Several different graph types are available and most can be customized as well.
|
||||
\subsection{General graph settings}
|
||||
Common settings for the behavior and appearance of all graphs can be found in \menu[,]{Window,Preferences,Graphs}:
|
||||
\screenshot{1.0}{GraphSettings.png}
|
||||
|
|
@ -920,20 +929,20 @@ Graphs use an underlying tile system. Each tile can either:
|
|||
\end{itemize}
|
||||
For split tiles, the position of the split can be adjusted manually by using the cursor.
|
||||
|
||||
To create new graphs, an empty tile must be available. If all tiles are showing graphs (the default when starting the GUI), an empty one must be created first. This can be done by right-clicking a graph and either selecting \menu{close} to remove it from its tile or selecting \menu{Add tile...} and chosing in which direction the new tile should be added.
|
||||
To create new graphs, an empty tile must be available. If all tiles are showing graphs (the default when starting the GUI), an empty one must be created first. This can be done by right-clicking a graph and either selecting \menu{close} to remove it from its tile or selecting \menu{Add tile...} and choosing in which direction the new tile should be added.
|
||||
|
||||
From the empty tile, all graph types are available:
|
||||
\screenshot{0.5}{GraphEmptyTile.png}
|
||||
|
||||
\begin{information}
|
||||
For a quick enlarged view of a graph, double-click it. The graph will take up the whole tile area. Another double-click returns the graph to its original size.
|
||||
For a quick enlarged view of a graph, double-click it. The graph will take up the whole trace display area. Another double-click returns the graph to its original size.
|
||||
\end{information}
|
||||
|
||||
\subsection{Adding and removing traces}
|
||||
When a new graph is created, it is empty by default and traces must be added to show up. There are two ways to add traces:
|
||||
\begin{itemize}
|
||||
\item Drag-and-drop traces from the trace list onto the graph
|
||||
\item Right-click a graph and select the trace to add. Traces can also be removed be deselecting them in the context menu
|
||||
\item Right-click on the graph and select the trace to add. Traces can also be removed be deselecting them in the context menu
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Smithchart}
|
||||
|
|
@ -944,21 +953,22 @@ There are a few smithchart specific settings in the setup dialog:
|
|||
\screenshot{1.0}{GraphSmithchartSetup.png}
|
||||
The left side of the dialog contains settings on how data is displayed:
|
||||
\begin{itemize}
|
||||
\item \textbf{Display mode (Frequency)} There are three options on how much of a trace is visible in the frequency range:
|
||||
\item \textbf{Display mode (Frequency):} There are three options on how much of a trace is visible in the frequency range:
|
||||
\begin{itemize}
|
||||
\item \textbf{Limit to current span} Shows all traces only in the frequency range of the currently selected span, even when the trace contains data outside of the span
|
||||
\item \textbf{Show complete traces} Always shows the complete trace, regardless of the selected span
|
||||
\item \textbf{Manual frequency range} Allows selection of an abitrary frequency range to display
|
||||
\item \textbf{Limit to current span:} Shows all traces only in the frequency range of the currently selected span, even when the trace contains data outside of the span
|
||||
\item \textbf{Show complete traces:} Always shows the complete trace, regardless of the selected span
|
||||
\item \textbf{Manual frequency range:} Allows selection of an abitrary frequency range to display
|
||||
\end{itemize}
|
||||
\item \textbf{Display mode (Impedance)} There are two options on how much of a trace impedance is visible:
|
||||
\item \textbf{Display mode (Impedance):} There are two options on how much of a trace impedance is visible:
|
||||
\begin{itemize}
|
||||
\item \textbf{Limit to visible are} Clips the trace data at the edge of the smithchart circle
|
||||
\item \textbf{Show complete traces} Always shows the complete trace, even when the trace data falls outside of the smithchart circle
|
||||
\item \textbf{Limit to visible are:} Clips the trace data at the edge of the smithchart circle
|
||||
\item \textbf{Show complete traces:} Always shows the complete trace, even when the trace data falls outside of the smithchart circle
|
||||
\end{itemize}
|
||||
\item \textbf{Zoom} Allows to change the center position and zoom factor of the smithchart. Zooming is also possible by using the mousewheel on the graph
|
||||
\item \textbf{Zoom:} Allows to change the center position and zoom factor of the smithchart. Zooming is also possible by using the mousewheel on the graph
|
||||
\end{itemize}
|
||||
|
||||
The right side of the dialog allows the user to add lines of constant values to the smithchart for a quick visual comparisation of trace data to these values. Four types of lines are available:
|
||||
The right side of the dialog allows the user to add lines of constant values to the smithchart for a quick visual comparison of trace data to these values.
|
||||
\textbf{Constant Lines:} Available types are:
|
||||
\begin{itemize}
|
||||
\item Constant VSWR
|
||||
\item Constant resistance
|
||||
|
|
@ -971,9 +981,9 @@ For each line, the color and constant value must be manually selected.
|
|||
\screenshot{1.0}{GraphXYplot.png}
|
||||
The XY-plot is the most versatile graph. It can display every trace type if configured correctly. The XY-plot consists of up to three axes:
|
||||
\begin{itemize}
|
||||
\item \textbf{X-axis} Always present
|
||||
\item \textbf{Primary Y-axis} Optional, on the left side of the graph
|
||||
\item \textbf{Secondary Y-axis} Optional, on the right side of the graph
|
||||
\item \textbf{X-axis:} Always present
|
||||
\item \textbf{Primary Y-axis:} Optional, on the left side of the graph
|
||||
\item \textbf{Secondary Y-axis:} Optional, on the right side of the graph
|
||||
\end{itemize}
|
||||
Different types can be used for the X-axis and the selected type must match the output domain of all displayed traces. Available types are:
|
||||
\begin{center}
|
||||
|
|
@ -1029,7 +1039,7 @@ Different types are also available for the Y-axes. The Y-axis type determines ho
|
|||
\hline
|
||||
Inductance & Extracted inductance from a reflection measurement\\
|
||||
\hline
|
||||
Quality Facotr & Quality Factor of the impedance from a reflection measurement\\
|
||||
Quality Factor & Quality Factor of the impedance from a reflection measurement\\
|
||||
\hline
|
||||
Group Delay & Group Delay of a transmission measurement\\
|
||||
\hline
|
||||
|
|
@ -1114,12 +1124,24 @@ For every axis, the displayed range can either be determined automatically or ma
|
|||
\subsubsection{Limit lines}
|
||||
The XY-plot also supports custom limit lines:
|
||||
\screenshot{1.0}{GraphXYplotLimit.png}
|
||||
Limit lines can be added and removed in the bottom part of the Axis Setup Dialog. Each line is a list of manually defined points, a selectable color and can be configured either as a high limit, low limit or just as a constant line without any limit checking:
|
||||
Limit lines can be added, removed, imported and exported in the bottom part of the Axis Setup Dialog. Creating a new Limit line by pressing the + button or doubleclicking on an existing one will open up the Edit line window.
|
||||
\screenshot{1.0}{GraphXYplotLine.png}
|
||||
On the left side, you will find limit line parameters and on the right side, you need to plot your limit line by adding points
|
||||
\begin{itemize}
|
||||
\item \textbf{Name:} The name of the limit
|
||||
\item \textbf{Color:} The color of the limit as it will appear on the graph
|
||||
\item \textbf{Axis:} The X-Axis you want to apply the limit to: Primary or Secondary
|
||||
\item \textbf{Pass/Fail:} The limit behavior:
|
||||
\begin{itemize}
|
||||
\item \textbf{Dont Care:} Visual line only
|
||||
\item \textbf{High Limit:} Fails when plot goes above the line
|
||||
\item \textbf{Low Limit:} Fails when the plot goes below the line
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Waterfall}
|
||||
\screenshot{1.0}{GraphWaterfall.png}
|
||||
The waterfall graph can display the amplitude trend of a single trace over multiple sweeps. Its specific settings are mostly a subset of the XY-plot, the Y-axis configuration is almost identical.
|
||||
The waterfall graph can display the amplitude trend of a single trace over multiple sweeps. Its specific settings are mostly a subset of the XY-plot and the Y-axis configuration is almost identical.
|
||||
\screenshot{0.8}{GraphWaterfallSetup.png}
|
||||
Other settings include:
|
||||
\begin{itemize}
|
||||
|
|
@ -1127,25 +1149,30 @@ Other settings include:
|
|||
\item \textbf{Pixels per line:} Provides a simple vertical zoom feature
|
||||
\item \textbf{Mode:} Determines whether sweep data that doesn't fit onto the graph anymore is kept or deleted (a resize of the graph would reveal kept data)
|
||||
\item \textbf{Number of sweeps:} The maximum number of sweeps kept if mode is set to "Keep offscreen data"
|
||||
\item \textbf{Alignment:} The waterfall can be aligned to a XY-plot of equal size and peaks in the trace data of both plots will line up.
|
||||
\item \textbf{Alignment:} The waterfall can be aligned to an XY-plot of equal size, so that trace peaks of both plots line up
|
||||
\begin{important}
|
||||
Both plots are still completely independent of each other. For the alignment to work, they must have the same width and one must be placed exactly below the other.
|
||||
\end{important}
|
||||
\end{itemize}
|
||||
\subsection{Polar Chart}
|
||||
\screenshot{0.6}{GraphPolarplot.png}
|
||||
The Polar Chart looks similar to the smithchart but doesn't perform the transformation from S-paramter to impedance. Furthermore, through measurements can be displayed as well. The available settings are identical to the smithchart but the Polar Chart does not support adding custom constant lines:
|
||||
The Polar Chart looks similar to the smithchart but doesn't perform the transformation from S-parameter to impedance. Furthermore, through measurements can be displayed as well. The available settings are identical to the smithchart but the Polar Chart does not support adding custom constant lines:
|
||||
\screenshot{0.6}{GraphPolarchartSetup.png}
|
||||
|
||||
\subsection{Eye Diagram}
|
||||
\screenshot{1.0}{GraphEyeDiagram.png}
|
||||
The eye diagram graph shows how a simulated signal would look like after being passed through a transmission line. The transmission line is created from a through measurement (e.g. S21). The simulated signal is a PRBS sequence with additional noise, jitter and limited rise and fall times. All parameters can be edited in the setup dialog:
|
||||
\screenshot{1.0}{GraphEyeDiagramSetup.png}
|
||||
|
||||
\section{Markers}
|
||||
Markers provide an easy read-out of trace data at specific points. Each marker is assigned to one trace and will show up on any graph that show the trace at the marker position.
|
||||
Markers provide an easy read-out of trace data at specific points. Each marker is assigned to a single trace and will show up on all graphs that have that trace selected.
|
||||
|
||||
Some general marker settings are available in the preferences:
|
||||
\screenshot{1.0}{MarkerPreferences.png}
|
||||
\begin{itemize}
|
||||
\item \textbf{Show data on graphs:} Marker data (X-coordinate, trace value) will be shown by default to the right of any graph the marker is visible on
|
||||
\item \textbf{Show data in all available formats:} All available formats for the marker data will be shown by default
|
||||
\item \textbf{Positioning:} When moving markers by hand, the can either snap to the individual trace points or be interpolated along the plotted trace
|
||||
\item \textbf{Positioning:} When moving markers by hand, they can either be snapped to the individual trace points or be interpolated along the plotted trace
|
||||
\item \textbf{Sort order on graphs:} Defines the order of marker data to the right of a graph
|
||||
\item \textbf{Symbol style:} Various symbol styles for drawing markers on the graphs are available
|
||||
\end{itemize}
|
||||
|
|
@ -1159,11 +1186,11 @@ The marker dock provides a quick overview of all markers:
|
|||
\item \textbf{Marker \#:} The marker number as shown on the graphs
|
||||
\item \includesvg[height=8pt]{Screenshots/visible}/\includesvg[height=10pt]{Screenshots/invisible}: Enable/disable global visibility: Shows/hides the marker an all graphs
|
||||
\item \includegraphics[height=8pt]{Screenshots/chainlink.png}: Indicates linked markers. Markers with the same number are linked and all of them move when one changes its position
|
||||
\item \textbf{Trace:} The trace name the markers is assigned to
|
||||
\item \textbf{Trace:} The trace name the marker is assigned to
|
||||
\item \textbf{Type:} Various marker types are available, see section~\ref{marker:types}
|
||||
\item \textbf{Settings:} Depends on the marker type, allows configuration of the marker
|
||||
\item \textbf{Settings:} Allows for configuration of the marker based on marker type
|
||||
\item \textbf{Restrict:} Forces the marker to a specific frequency range (or power/time range if the trace uses another domain)
|
||||
\item \textbf{Data:} The trace data at the marker position. Can be displayed in different formats
|
||||
\item \textbf{Data:} The trace data at the marker position which can be displayed in different formats
|
||||
\end{itemize}
|
||||
|
||||
Various other settings are also available in the \textbf{context menu}. The context menu can be reached by right-clicking the marker, either in the marker dock or on the marker symbol in any graph.
|
||||
|
|
@ -1220,7 +1247,7 @@ This marker type is only available for through measurements.
|
|||
\subsubsection{TOI/IP3}
|
||||
\screenshot{1.0}{MarkerTOIGraph.png}
|
||||
\screenshot{1.0}{MarkerTOITable.png}
|
||||
This marker type calculated the third-order intercept point. It is only available in spectrum analyzer mode. Initially a peak search is executed to find the two highest peaks. The frequencies of the intermodulation products are calculated from these peak frequencies and helper markers placed on each of these frequencies. Finally, the third-order intercept point as well as the tone and distortion signal amplitudes are calculated.
|
||||
This marker type calculates the third-order intercept point. It is only available in spectrum analyzer mode. Initially a peak search is executed to find the two highest peaks. Helper markers suffixed with "p", that show these peaks, are added to the parent marker. These helper markers show up on the graph and in the marker dock by clicking the expand/collapse arrow to the left of the marker \#. The frequencies of the intermodulation products are calculated from the two peak helper markers and a new helper marker is placed at each of these frequencies. One suffixed "l" to the left of the first peak and one suffixed "r" to the right of the second peak. Finally, the third-order intercept point as well as the tone and distortion signal amplitudes are calculated.
|
||||
\subsubsection{Phase noise}
|
||||
\screenshot{1.0}{MarkerPhasenoiseGraph.png}
|
||||
\screenshot{1.0}{MarkerPhasenoiseTable.png}
|
||||
|
|
@ -1234,7 +1261,7 @@ This marker type is only available for through measurements on power sweeps. It
|
|||
\subsection{Marker Data}
|
||||
The trace data at the marker position can be displayed in the marker dock and on the graphs in various formats. The available formats depend on the marker type as well as the domain of the trace data. Only one of the available formats can be displayed in the marker dock at a time. On graphs, any amount of formats can be displayed at once. The shown formats can be selected in the context menu of the marker.
|
||||
|
||||
|
||||
\begin{footnotesize}
|
||||
\begin{center}
|
||||
\begin{threeparttable}
|
||||
\begin{tabularx}{\textwidth}{L{3cm}|X|L{7cm}}
|
||||
|
|
@ -1303,6 +1330,8 @@ $Quality factor$\\
|
|||
& & dB + angle\\
|
||||
\cline{3-3}
|
||||
& & Real/Imaginary \\
|
||||
\cline{3-3}
|
||||
& & Group Delay \\
|
||||
\cline{3-3}
|
||||
& & \multirow{6}{*}{$\left.\begin{array}{l}
|
||||
$Impedance$\\
|
||||
|
|
@ -1355,45 +1384,46 @@ $Quality factor$\\
|
|||
\end{tabularx}
|
||||
\end{threeparttable}
|
||||
\end{center}
|
||||
\end{footnotesize}
|
||||
|
||||
\subsection{Linking markers}
|
||||
\label{marker:linking}
|
||||
Normally, markers can be moved individually and are only connected to one trace. This creates a problem when reading out trace data from multiple traces at the same position. If the position is changed, all markers need to be moved manually to the new position. Linked markers provide a solution to this problem: All markers within a linked group always use the same position. If one marker is moved, the others move as well. The linked group of each marker is indicated in the marker dock (empty if the marker does not belong to any linked group.
|
||||
Normally, markers can be moved individually and are only connected to one trace. This creates a problem when reading out trace data from multiple traces at the same position. If the position is changed, all markers need to be moved manually to the new position. Linked markers provide a solution to this problem: All markers within a linked group always use the same position. If one marker is moved, the others move as well. The linked group of each marker is indicated in the marker dock (empty if the marker does not belong to any linked group).
|
||||
|
||||
Only markers that are movable can be added to linked groups. If a marker type performs automatic positioning of the marker (e.g. the maximum marker type), it can not be added.
|
||||
Only markers that are movable can be added to linked groups. Markers that perform automatic positioning (e.g. a marker with the type maximum) cannot be added to a linked group.
|
||||
|
||||
\subsubsection{Creating a new linked group}
|
||||
Select multiple markers in the marker dock, right-click and select "link selected".
|
||||
\subsubsection{Adding a marker to an existing linked group}
|
||||
Open the markers context menu, chose "Add to linked group" and select the linked group the marker should be added to.
|
||||
Open the marker's context menu, choose "Add to linked group" and select the linked group the marker should be added to.
|
||||
\subsubsection{Removing a marker from a linked group}
|
||||
\begin{itemize}
|
||||
\item Open the markers context menu, chose "Remove from linked group"
|
||||
\item Open the marker's context menu, choose "Remove from linked group"
|
||||
\item Select multiple linked markers in the marker dock, right-click and select "Break links" to remove all selected markers from their linked groups.
|
||||
\end{itemize}
|
||||
|
||||
\section{Compound Device}
|
||||
The LibreVNA supports combining multiple hardware units to a "Compound Device". When used, the configured physical LibreVNAs are combined into a virtual device with more ports. When connected to such a device, additional measurement paramaters are available (e.g. measuring S23 in VNA mode or port 3 in spectrumanalyzer mode).
|
||||
The LibreVNA supports combining multiple hardware units into a "Compound Device". When used, the configured physical LibreVNAs are combined into a virtual device with more ports. When connected to such a device, additional measurement paramaters are available (e.g. measuring S23 in VNA mode or port 3 in spectrum analyzer mode).
|
||||
|
||||
\begin{important}
|
||||
When connected to a compound device and in VNA mode, there is no phase information for through measurements between different physical devices. This is a hardware limitation and the phase is set to zero in the software. Through measurements within a physical device and all reflection measurements retain their phase information.
|
||||
\end{important}
|
||||
|
||||
\subsection{Creating a compound device}
|
||||
Compound devices must be configured in the preferences: \menu[,]{Window,Preferences,Compound Devices}
|
||||
Compound devices must be configured in the preferences:\linebreak\menu[,]{Window,Preferences,Device Drivers,LibreVNA/Compound}
|
||||
\screenshot{1.0}{CompoundDeviceList.png}
|
||||
Create and remove compound devices with the buttons on the right. Edit an existing compound device by double-clicking it:
|
||||
\screenshot{1.0}{CompoundDeviceEdit.png}
|
||||
Required steps when creating a compound device:
|
||||
\begin{enumerate}
|
||||
\item Assign a name to the new compound device
|
||||
\item Select the synchronization method between devices. At the moment, only USB synchronization is supported but future hardware versions might support faster synchronization via dedicated trigger ports
|
||||
\item Select the synchronization method between devices. At the moment, only GUI synchronization is supported but future hardware versions might support faster synchronization via dedicated trigger ports
|
||||
\item Drag-and-drop a LibreVNA symbol into the configuration area for every physical device in the compound device
|
||||
\begin{itemize}
|
||||
\item At least two physical devices must be used
|
||||
\item At most four physical devices can be combined with a maximum of eight virtual ports
|
||||
\end{itemize}
|
||||
\item Assign the serialnumbers for each physical device. Serialnumbers for all currently connected devices are available as suggestions but it is also possible to enter a different serialnumber manually
|
||||
\item Assign serial numbers to each physical device. Serial numbers for all currently connected devices are available in the dropdown but it is also possible to enter a different serial number manually
|
||||
\item Assign the virtual ports of the compound device:
|
||||
\begin{itemize}
|
||||
\item Each port number must appear only once
|
||||
|
|
@ -1404,7 +1434,7 @@ Required steps when creating a compound device:
|
|||
\end{enumerate}
|
||||
|
||||
\subsection{Connecting to a compound device}
|
||||
Configured compound devices appear in the device list with their name when all required physical devices are connected. Once connected, new measurements or ports are available depending on the number of configured ports in the compound device.
|
||||
Configured compound devices appear in the device list when all required physical devices are connected. Once connected, new measurements or ports are available depending on the number of configured ports in the compound device.
|
||||
|
||||
\begin{information}
|
||||
Through measurements between physical devices depend on precise matching of the stimulus frequency. Depending on the accuracy of the internal frequency source and the selected IF bandwidth, the stimulus signal from the generating device may fall outside of the IF bandwidth of the receiving device, resulting in a reported lower amplitude than actually present. Either align both internal oscillators precisely with the frequency calibration or (recommended) switch to using the external reference input when using a compound device.
|
||||
|
|
@ -1425,26 +1455,26 @@ Certain features are not available when connected to a compound device. To use t
|
|||
\label{amplitude:calibration}
|
||||
This section is about calibrating the source output level and spectrum analyzer level. It does not affect VNA measurements at all. For the VNA calibration, see section~\ref{vna:calibration}.
|
||||
|
||||
Both the internal signal source and the receiver paths used in the generator or spectrum analyzer mode have no means of ensuring accurate amplitudes (as imperfections are removed by the VNA calibration, the hardware is not optimized for absolute amplitude accuracy). In order to improve the accuracy of both the generator and the spectrum analyzer (especially with enabled tracking generator), frequency dependent amplitude calibrations are available. They are permanently stored in the device and are only required to be performed once. The \textbf{Source Calibration} corrects the ouput of the (tracking) generator, while the \textbf{Receiver Calibration} corrects the measurement of the spectrum analyzer.
|
||||
Both the internal signal source and the receiver paths used in the signal generator or spectrum analyzer modes have no means of ensuring accurate amplitudes (as imperfections are removed by the VNA calibration, the hardware is not optimized for absolute amplitude accuracy). Frequency dependent amplitude calibrations are available in order to improve the accuracy of both the signal generator and the spectrum analyzer (especially when the tracking generator option is enabled in the spectrum analyzer). These calibrations are permanently stored in the device and are only required to be performed once. The \textbf{Source Calibration} corrects the output of the signal generator and the spectrum analyzer's tracking generator, while the \textbf{Receiver Calibration} corrects the measurement of the spectrum analyzer.
|
||||
|
||||
For both calibrations, other test equipment is required, ideally covering the whole range of \SI{1}{\mega\hertz} to \SI{6}{\giga\hertz} (a calibration of only the partial frequeny range is also possible but signals/measurements outside the calibrated range will be inaccurate). The Soure Calibration requires a way to measure the output of the \vna{} (e.g. a spectrum analyzer or power meter), the Receiver Calibration requires a signal source (e.g. a signal generator). Once either calibration has been completed, the \vna{} can also infer the other one with reasonable accuracy.
|
||||
For both calibrations, other test equipment is required, ideally covering the whole range of \SI{1}{\mega\hertz} to \SI{6}{\giga\hertz} (a calibration of only the partial frequency range is also possible but signals/measurements outside the calibrated range will be inaccurate). The Source Calibration requires a way to measure the output of the \vna{} (e.g. a spectrum analyzer or power meter), the Receiver Calibration requires a signal source (e.g. a signal generator). Once either calibration has been completed, the \vna{} can also infer the other one with reasonable accuracy.
|
||||
|
||||
\subsection{Source Calibration}
|
||||
Select \menu[,]{Device,Source Calibration}. A window showing the current source calibration opens:
|
||||
\screenshot{1.0}{SourceCalibration.png}
|
||||
These are the necessary steps:
|
||||
\begin{enumerate}
|
||||
\item \textbf{Set up the calibration frequencies:} Add or remove points according to your needs. Ideally, they should be evenly spaced across the range to calibrate, maybe with a slight emphasis on higher frequencies (signal levels generally vary more at higher frequencies). Additionally, it is advisable to set one point at \SI{25}{\mega\hertz} and one just below (at \SI{25}{\mega\hertz} a band is switched, resulting in an amplitude discontinuity). Up to 64 points can be used.
|
||||
\item \textbf{Set up the calibration frequencies:} Add or remove points according to your needs. Ideally, they should be evenly spaced across the calibration range, maybe with a slight emphasis on higher frequencies (signal levels generally vary more at higher frequencies). Additionally, it is advisable to set one point at \SI{25}{\mega\hertz} and another point just below it (at \SI{25}{\mega\hertz} a band is switched, resulting in an amplitude discontinuity). Up to 64 points can be used.
|
||||
\item \textbf{Select the calibration mode:} Either calibrate both ports separately (best accuracy but more work) or assume that they are identical and use the measurement at one port for both.
|
||||
\item \textbf{Perform the calibration:} For each frequency and port, select the corresponding cell in the table. The \vna{} will generate a signal at the selected frequency and port with (what it thinks are) \SI{-20}{\dBm}. Use external equipment to determine the actual output level and enter the measured value into the selected cell.
|
||||
\item \textbf{Perform the calibration:} For each frequency and port, select the corresponding cell in the table. The \vna{} will generate a signal at the selected frequency, on the selected port, at (what it thinks is) \SI{-20}{\dBm}. Use your external equipment to determine the actual output level and enter it into the selected cell.
|
||||
\item \textbf{Save the calibration:} Once all measurements have been taken, the "Save to Device" button becomes available. There is no way to save intermediate results, you have to calibrate all frequencies you have chosen in step 1.
|
||||
\end{enumerate}
|
||||
If the Receiver Calibration is already done, it is also possible to infer the Source Calibration from that. Press \keys{Automatic measurement} and connect both ports of the \vna{} directly to each other. This connection should be as ideal as possible (short, low loss cable) as every imperfection directly translates into calibration errors. During the automatic calibration, the \vna{} uses the already established frequency points from the Receiver Calibration and measures the output amplitude by itself to determine the coefficients of the Source Calibration.
|
||||
If you've already done a Receiver Calibration, it's possible to infer the Source Calibration from it. Press \keys{Automatic measurement}, connect both ports of the \vna{} directly to each other and press \keys{Start Measurement}. This connection should be as ideal as possible (short, low loss cable) as every imperfection directly translates into calibration errors. During the automatic calibration, the \vna{} uses the already established frequency points from the Receiver Calibration and measures the output amplitude by itself to determine the coefficients of the Source Calibration.
|
||||
\subsection{Receiver Calibration}
|
||||
Select \menu[,]{Device,Receiver Calibration}. The Receiver Calibration works almost identically to the Source Calibration. The only difference is in step 3:
|
||||
\begin{enumerate}
|
||||
\setcounter{enumi}{2}
|
||||
\item \textbf{Perform the calibration:} For each frequency and port, select the corresponding cell in the table and apply a signal with known level at the selected frequency and port. The signal level should be in the range of \SI{-40}{\dBm} to \SI{-10}{\dBm}. Higher signal levels might already compress in the receiver while lower levels unnecessarily increase calibration errors due to noise. The \vna{} tunes its receiver to the selected frequency and measures the amplitude. Apply the signal for at least \SI{2}{\second} and enter its actual amplitude into the selected cell while the signal is still active.
|
||||
\item \textbf{Perform the calibration:} For each frequency and port, select the corresponding cell in the table and apply a signal with known level at the selected frequency and port. The signal level should be in the range of \SI{-40}{\dBm} to \SI{-10}{\dBm}. Higher signal levels might already compress in the receiver while lower levels unnecessarily increase calibration errors due to noise. The \vna{} tunes its receiver to the selected frequency and measures the applied signal's amplitude. Enter the actual amplitude into the selected cell while the signal is still being applied. The signal should be applied for a minimum of \SI{2}{\second} to ensure an accurate measurement.
|
||||
\end{enumerate}
|
||||
\section{Troubleshooting}
|
||||
\label{troubleshooting}
|
||||
|
|
|
|||
|
|
@ -42,22 +42,33 @@ entity MCP33131 is
|
|||
RESET_MINMAX : in STD_LOGIC;
|
||||
SDO : in STD_LOGIC;
|
||||
CONVSTART : out STD_LOGIC;
|
||||
SCLK : out STD_LOGIC);
|
||||
SCLK : inout STD_LOGIC);
|
||||
end MCP33131;
|
||||
|
||||
architecture Behavioral of MCP33131 is
|
||||
signal conv_cnt : integer range 0 to CONVCYCLES-1;
|
||||
signal div_cnt : integer range 0 to (CLK_DIV/2)-1;
|
||||
signal bit_cnt : integer range 0 to 15;
|
||||
signal sclk_phase : std_logic;
|
||||
signal adc_data : std_logic_vector(15 downto 0);
|
||||
type States is (Idle, Conversion, WAIT_tEN, Transmission);
|
||||
type States is (Idle, Conversion, WAIT_tEN, Transmission, Done);
|
||||
signal state : States;
|
||||
signal ready_int : std_logic;
|
||||
signal ready_delay : integer range 0 to 30;
|
||||
signal min_int, max_int, data_int : signed(15 downto 0);
|
||||
begin
|
||||
|
||||
MIN <= std_logic_vector(min_int);
|
||||
MAX <= std_logic_vector(max_int);
|
||||
DATA <= std_logic_vector(data_int);
|
||||
SCLK <= sclk_phase;
|
||||
|
||||
process(SCLK, START)
|
||||
begin
|
||||
if(falling_edge(SCLK)) then
|
||||
adc_data <= adc_data(14 downto 0) & SDO;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
process(CLK, RESET)
|
||||
begin
|
||||
|
|
@ -65,11 +76,13 @@ begin
|
|||
if(RESET = '1') then
|
||||
state <= Idle;
|
||||
READY <= '0';
|
||||
ready_int <= '0';
|
||||
CONVSTART <= '0';
|
||||
sclk_phase <= '0';
|
||||
CONVSTART <= '0';
|
||||
conv_cnt <= 0;
|
||||
div_cnt <= 0;
|
||||
bit_cnt <= 0;
|
||||
min_int <= to_signed(32767, 16);
|
||||
max_int <= to_signed(-32768, 16);
|
||||
else
|
||||
|
|
@ -84,48 +97,61 @@ begin
|
|||
max_int <= data_int;
|
||||
end if;
|
||||
end if;
|
||||
|
||||
READY <= '0';
|
||||
if ready_int = '1' then
|
||||
ready_delay <= 3;
|
||||
else
|
||||
if ready_delay > 0 then
|
||||
ready_delay <= ready_delay - 1;
|
||||
end if;
|
||||
if ready_delay = 1 then
|
||||
READY <= '1';
|
||||
data_int <= signed(adc_data);
|
||||
end if;
|
||||
end if;
|
||||
|
||||
case state is
|
||||
when Idle =>
|
||||
SCLK <= '0';
|
||||
READY <= '0';
|
||||
ready_int <= '0';
|
||||
if START = '1' then
|
||||
state <= Conversion;
|
||||
conv_cnt <= 0;
|
||||
CONVSTART <= '1';
|
||||
end if;
|
||||
when Conversion =>
|
||||
ready_int <= '0';
|
||||
if(conv_cnt < CONVCYCLES-1) then
|
||||
conv_cnt <= conv_cnt + 1;
|
||||
else
|
||||
div_cnt <= 0;
|
||||
CONVSTART <= '0';
|
||||
adc_data <= "0000000000000001";
|
||||
state <= WAIT_tEN;
|
||||
end if;
|
||||
when WAIT_tEN =>
|
||||
ready_int <= '0';
|
||||
state <= Transmission;
|
||||
when Transmission =>
|
||||
ready_int <= '0';
|
||||
if(div_cnt < (CLK_DIV/2)-1) then
|
||||
div_cnt <= div_cnt + 1;
|
||||
else
|
||||
if(sclk_phase = '0') then
|
||||
sclk_phase <= '1';
|
||||
SCLK <= '1';
|
||||
else
|
||||
sclk_phase <= '0';
|
||||
SCLK <= '0';
|
||||
if(adc_data(15) = '0') then
|
||||
-- not the last bit yet
|
||||
adc_data <= adc_data(14 downto 0) & SDO;
|
||||
if bit_cnt = 15 then
|
||||
state <= Done;
|
||||
bit_cnt <= 0;
|
||||
else
|
||||
-- last bit, move to output and indicate ready state
|
||||
data_int <= signed(adc_data(14 downto 0) & SDO);
|
||||
READY <= '1';
|
||||
state <= Idle;
|
||||
bit_cnt <= bit_cnt + 1;
|
||||
end if;
|
||||
end if;
|
||||
div_cnt <= 0;
|
||||
end if;
|
||||
when Done =>
|
||||
ready_int <= '1';
|
||||
state <= Idle;
|
||||
end case;
|
||||
end if;
|
||||
end if;
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ entity SPICommands is
|
|||
SWEEP_POINTS : out STD_LOGIC_VECTOR (12 downto 0);
|
||||
NSAMPLES : out STD_LOGIC_VECTOR (12 downto 0);
|
||||
STAGES : out STD_LOGIC_VECTOR (2 downto 0);
|
||||
SETTLING_TIME : out STD_LOGIC_VECTOR (19 downto 0);
|
||||
SYNC_ENABLED : out STD_LOGIC;
|
||||
SYNC_MASTER : out STD_LOGIC;
|
||||
PORT1_STAGE : out STD_LOGIC_VECTOR (2 downto 0);
|
||||
|
|
@ -90,7 +91,8 @@ end SPICommands;
|
|||
|
||||
architecture Behavioral of SPICommands is
|
||||
COMPONENT spi_slave
|
||||
Generic(W : integer);
|
||||
Generic(W : integer;
|
||||
PREWIDTH : integer);
|
||||
PORT(
|
||||
SPI_CLK : in STD_LOGIC;
|
||||
MISO : out STD_LOGIC;
|
||||
|
|
@ -99,7 +101,9 @@ architecture Behavioral of SPICommands is
|
|||
BUF_OUT : out STD_LOGIC_VECTOR (W-1 downto 0) := (others => '0');
|
||||
BUF_IN : in STD_LOGIC_VECTOR (W-1 downto 0);
|
||||
CLK : in STD_LOGIC;
|
||||
COMPLETE : out STD_LOGIC
|
||||
COMPLETE : out STD_LOGIC;
|
||||
PRE_COMPLETE : out STD_LOGIC;
|
||||
PRE_BUF_OUT : out STD_LOGIC_VECTOR (PREWIDTH-1 downto 0)
|
||||
);
|
||||
END COMPONENT;
|
||||
|
||||
|
|
@ -107,6 +111,8 @@ architecture Behavioral of SPICommands is
|
|||
signal spi_buf_out : std_logic_vector(15 downto 0);
|
||||
signal spi_buf_in : std_logic_vector(15 downto 0);
|
||||
signal spi_complete : std_logic;
|
||||
signal spi_pre_complete : std_logic;
|
||||
signal spi_pre_buf_out : std_logic_vector(2 downto 0);
|
||||
signal word_cnt : integer range 0 to 19;
|
||||
type SPI_states is (FirstWord, WriteSweepConfig, ReadResult, WriteRegister);
|
||||
signal state : SPI_states;
|
||||
|
|
@ -127,7 +133,8 @@ architecture Behavioral of SPICommands is
|
|||
signal sweepconfig_buffer : std_logic_vector(79 downto 0);
|
||||
begin
|
||||
SPI: spi_slave
|
||||
GENERIC MAP(w => 16)
|
||||
GENERIC MAP(W => 16,
|
||||
PREWIDTH => 3)
|
||||
PORT MAP(
|
||||
SPI_CLK => SCLK,
|
||||
MISO => MISO,
|
||||
|
|
@ -136,7 +143,9 @@ begin
|
|||
BUF_OUT => spi_buf_out,
|
||||
BUF_IN => spi_buf_in,
|
||||
CLK => CLK,
|
||||
COMPLETE =>spi_complete
|
||||
COMPLETE => spi_complete,
|
||||
PRE_COMPLETE => spi_pre_complete,
|
||||
PRE_BUF_OUT => spi_pre_buf_out
|
||||
);
|
||||
|
||||
SWEEP_WRITE(0) <= sweep_config_write;
|
||||
|
|
@ -204,23 +213,15 @@ begin
|
|||
word_cnt <= 0;
|
||||
spi_buf_in <= interrupt_status;
|
||||
state <= FirstWord;
|
||||
elsif spi_complete = '1' then
|
||||
word_cnt <= word_cnt + 1;
|
||||
else
|
||||
-- handle read operations when the first PREWIDTH bits are complete
|
||||
if spi_pre_complete = '1' then
|
||||
case state is
|
||||
when FirstWord =>
|
||||
-- initial word determines action
|
||||
case spi_buf_out(15 downto 13) is
|
||||
when "000" => state <= WriteSweepConfig;
|
||||
-- also extract the point number
|
||||
SWEEP_ADDRESS <= spi_buf_out(12 downto 0);
|
||||
when "001" => state <= FirstWord;
|
||||
SWEEP_RESUME <= '1';
|
||||
-- initial word determines the action
|
||||
case spi_pre_buf_out is
|
||||
when "010" => state <= FirstWord;
|
||||
spi_buf_in <= "1111000010100101";
|
||||
when "011" => state <= FirstWord;
|
||||
RESET_MINMAX <= '1';
|
||||
when "100" => state <= WriteRegister;
|
||||
selected_register <= to_integer(unsigned(spi_buf_out(4 downto 0)));
|
||||
when "101" => state <= ReadResult;-- can use same state as read result, but the latched data will contain the DFT values
|
||||
latched_result(175 downto 0) <= DFT_OUTPUT(191 downto 16);
|
||||
spi_buf_in <= DFT_OUTPUT(15 downto 0);
|
||||
|
|
@ -232,6 +233,37 @@ begin
|
|||
when "111" => state <= ReadResult; -- can use same state as read result, but the latched data will contain the min/max ADC values
|
||||
latched_result(79 downto 0) <= ADC_MINMAX(95 downto 16);
|
||||
spi_buf_in <= ADC_MINMAX(15 downto 0);
|
||||
--ignore other options
|
||||
when others =>
|
||||
end case;
|
||||
when ReadResult =>
|
||||
-- pass on next word of latched result
|
||||
spi_buf_in <= latched_result(15 downto 0);
|
||||
latched_result <= "0000000000000000" & latched_result(287 downto 16);
|
||||
when others =>
|
||||
end case;
|
||||
end if;
|
||||
-- handle write operations when the whole word is complete
|
||||
if spi_complete = '1' then
|
||||
word_cnt <= word_cnt + 1;
|
||||
case state is
|
||||
when FirstWord =>
|
||||
-- initial word determines action
|
||||
case spi_buf_out(15 downto 13) is
|
||||
when "000" => state <= WriteSweepConfig;
|
||||
-- also extract the point number
|
||||
SWEEP_ADDRESS <= spi_buf_out(12 downto 0);
|
||||
when "001" => state <= FirstWord;
|
||||
SWEEP_RESUME <= '1';
|
||||
when "011" => state <= FirstWord;
|
||||
RESET_MINMAX <= '1';
|
||||
when "100" => state <= WriteRegister;
|
||||
selected_register <= to_integer(unsigned(spi_buf_out(4 downto 0)));
|
||||
-- ignore read options (already handled in other state machine)
|
||||
when "010" =>
|
||||
when "101" =>
|
||||
when "110" =>
|
||||
when "111" =>
|
||||
when others => state <= FirstWord;
|
||||
end case;
|
||||
when WriteRegister =>
|
||||
|
|
@ -270,6 +302,8 @@ begin
|
|||
when 15 => MAX2871_DEF_4(31 downto 16) <= spi_buf_out;
|
||||
when 18 => DFT_BIN1_PHASEINC <= spi_buf_out;
|
||||
when 19 => DFT_DIFFBIN_PHASEINC <= spi_buf_out;
|
||||
when 20 => SETTLING_TIME(15 downto 0) <= spi_buf_out;
|
||||
when 21 => SETTLING_TIME(19 downto 16) <= spi_buf_out(3 downto 0);
|
||||
when others =>
|
||||
end case;
|
||||
selected_register <= selected_register + 1;
|
||||
|
|
@ -282,14 +316,13 @@ begin
|
|||
-- shift next word into buffer
|
||||
sweepconfig_buffer <= sweepconfig_buffer(63 downto 0) & spi_buf_out;
|
||||
end if;
|
||||
-- read already handled in pre_complete, ignore
|
||||
when ReadResult =>
|
||||
-- pass on next word of latched result
|
||||
spi_buf_in <= latched_result(15 downto 0);
|
||||
latched_result <= "0000000000000000" & latched_result(287 downto 16);
|
||||
end case;
|
||||
end if;
|
||||
end if;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
end Behavioral;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ entity Sweep is
|
|||
CONFIG_DATA : in STD_LOGIC_VECTOR (95 downto 0);
|
||||
USER_NSAMPLES : in STD_LOGIC_VECTOR (12 downto 0);
|
||||
NSAMPLES : out STD_LOGIC_VECTOR (12 downto 0);
|
||||
SETTLING_TIME : in STD_LOGIC_VECTOR (19 downto 0);
|
||||
SAMPLING_BUSY : in STD_LOGIC;
|
||||
SAMPLING_DONE : in STD_LOGIC;
|
||||
START_SAMPLING : out STD_LOGIC;
|
||||
|
|
@ -92,8 +93,7 @@ architecture Behavioral of Sweep is
|
|||
signal point_cnt : unsigned(12 downto 0);
|
||||
type Point_states is (WaitInitialLow, TriggerSetup, SettingUp, Settling, WaitTriggerHigh, Exciting, WaitTriggerLow, SamplingDone, NextPoint, Done);
|
||||
signal state : Point_states;
|
||||
signal settling_cnt : unsigned(15 downto 0);
|
||||
signal settling_time : unsigned(15 downto 0);
|
||||
signal settling_cnt : unsigned(19 downto 0);
|
||||
signal stage_cnt : unsigned (2 downto 0);
|
||||
signal config_reg : std_logic_vector(95 downto 0);
|
||||
signal source_active : std_logic;
|
||||
|
|
@ -103,7 +103,7 @@ begin
|
|||
|
||||
-- assemble registers
|
||||
-- source register 0: N divider and fractional division value
|
||||
SOURCE_REG_0 <= MAX2871_DEF_0(31) & "0000000000" & config_reg(5 downto 0) & config_reg(26 downto 15) & "000";
|
||||
SOURCE_REG_0 <= MAX2871_DEF_0(31) & "000000000" & config_reg(93) & config_reg(5 downto 0) & config_reg(26 downto 15) & "000";
|
||||
-- source register 1: Modulus value
|
||||
SOURCE_REG_1 <= MAX2871_DEF_1(31 downto 15) & config_reg(38 downto 27) & "001";
|
||||
-- source register 3: VCO selection
|
||||
|
|
@ -112,7 +112,7 @@ begin
|
|||
SOURCE_REG_4 <= MAX2871_DEF_4(31 downto 23) & config_reg(14 downto 12) & MAX2871_DEF_4(19 downto 9) & "000" & MAX2871_DEF_4(5) & config_reg(47 downto 46) & "100";
|
||||
|
||||
-- LO register 0: N divider and fractional division value
|
||||
LO_REG_0 <= MAX2871_DEF_0(31) & "0000000000" & config_reg(54 downto 49) & config_reg(75 downto 64) & "000";
|
||||
LO_REG_0 <= MAX2871_DEF_0(31) & "000000000" & config_reg(94) & config_reg(54 downto 49) & config_reg(75 downto 64) & "000";
|
||||
-- LO register 1: Modulus value
|
||||
LO_REG_1 <= MAX2871_DEF_1(31 downto 15) & config_reg(87 downto 76) & "001";
|
||||
-- LO register 3: VCO selection
|
||||
|
|
@ -184,13 +184,7 @@ begin
|
|||
-- highest bit in config_reg determines whether the sweep should be halted prior to sampling
|
||||
SWEEP_HALTED <= config_reg(95);
|
||||
RELOAD_PLL_REGS <= '0';
|
||||
case config_reg(94 downto 93) is
|
||||
when "00" => settling_time <= to_unsigned(2048, 16); -- 20us
|
||||
when "01" => settling_time <= to_unsigned(6144, 16); -- 60us
|
||||
when "10" => settling_time <= to_unsigned(18432, 16); -- 180us
|
||||
when others => settling_time <= to_unsigned(55296, 16); -- 540us
|
||||
end case;
|
||||
settling_cnt <= settling_time;
|
||||
settling_cnt <= unsigned(SETTLING_TIME);
|
||||
if PLL_RELOAD_DONE = '1' and PLL_LOCKED = '1' then
|
||||
-- check if halted sweep is resumed
|
||||
if config_reg(95) = '0' or SWEEP_RESUME = '1' then
|
||||
|
|
@ -257,7 +251,7 @@ begin
|
|||
else
|
||||
state <= NextPoint;
|
||||
end if;
|
||||
settling_cnt <= settling_time;
|
||||
settling_cnt <= unsigned(SETTLING_TIME);
|
||||
when NextPoint =>
|
||||
NEW_DATA <= '0';
|
||||
if point_cnt < unsigned(NPOINTS) then
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ ARCHITECTURE behavior OF Test_MCP33131 IS
|
|||
RESET_MINMAX : in STD_LOGIC;
|
||||
SDO : IN std_logic;
|
||||
CONVSTART : OUT std_logic;
|
||||
SCLK : OUT std_logic
|
||||
SCLK : INOUT std_logic
|
||||
);
|
||||
END COMPONENT;
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,8 @@ ARCHITECTURE behavior OF Test_SPI IS
|
|||
-- Component Declaration for the Unit Under Test (UUT)
|
||||
|
||||
COMPONENT spi_slave
|
||||
GENERIC(W : integer);
|
||||
GENERIC(W : integer;
|
||||
PREWIDTH : integer);
|
||||
PORT(
|
||||
SPI_CLK : IN std_logic;
|
||||
MISO : OUT std_logic;
|
||||
|
|
@ -49,7 +50,9 @@ ARCHITECTURE behavior OF Test_SPI IS
|
|||
BUF_OUT : OUT std_logic_vector(W-1 downto 0);
|
||||
BUF_IN : IN std_logic_vector(W-1 downto 0);
|
||||
CLK : IN std_logic;
|
||||
COMPLETE : OUT std_logic
|
||||
COMPLETE : OUT std_logic;
|
||||
PRE_COMPLETE : out STD_LOGIC;
|
||||
PRE_BUF_OUT : out STD_LOGIC_VECTOR (PREWIDTH-1 downto 0)
|
||||
);
|
||||
END COMPONENT;
|
||||
|
||||
|
|
@ -65,10 +68,12 @@ ARCHITECTURE behavior OF Test_SPI IS
|
|||
signal MISO : std_logic;
|
||||
signal BUF_OUT : std_logic_vector(15 downto 0);
|
||||
signal COMPLETE : std_logic;
|
||||
signal PRE_COMPLETE : std_logic;
|
||||
signal PRE_BUF_OUT : std_logic_vector(2 downto 0);
|
||||
|
||||
-- Clock period definitions
|
||||
constant CLK_period : time := 10 ns;
|
||||
constant SPI_CLK_period : time := 100 ns;
|
||||
constant CLK_period : time := 9.765625 ns;
|
||||
constant SPI_CLK_period : time := 25 ns;
|
||||
|
||||
signal data_signal : std_logic_vector(15 downto 0);
|
||||
|
||||
|
|
@ -76,7 +81,7 @@ BEGIN
|
|||
|
||||
-- Instantiate the Unit Under Test (UUT)
|
||||
uut: spi_slave
|
||||
GENERIC MAP(W => 16)
|
||||
GENERIC MAP(W => 16, PREWIDTH => 3)
|
||||
PORT MAP (
|
||||
SPI_CLK => SPI_CLK,
|
||||
MISO => MISO,
|
||||
|
|
@ -85,7 +90,9 @@ BEGIN
|
|||
BUF_OUT => BUF_OUT,
|
||||
BUF_IN => BUF_IN,
|
||||
CLK => CLK,
|
||||
COMPLETE => COMPLETE
|
||||
COMPLETE => COMPLETE,
|
||||
PRE_COMPLETE => PRE_COMPLETE,
|
||||
PRE_BUF_OUT => PRE_BUF_OUT
|
||||
);
|
||||
|
||||
-- Clock process definitions
|
||||
|
|
|
|||
|
|
@ -41,33 +41,63 @@ ARCHITECTURE behavior OF Test_SPICommands IS
|
|||
|
||||
COMPONENT SPICommands
|
||||
PORT(
|
||||
CLK : IN std_logic;
|
||||
RESET : IN std_logic;
|
||||
SCLK : IN std_logic;
|
||||
MOSI : IN std_logic;
|
||||
MISO : OUT std_logic;
|
||||
NSS : IN std_logic;
|
||||
NEW_SAMPLING_DATA : IN std_logic;
|
||||
SAMPLING_RESULT : IN std_logic_vector(303 downto 0);
|
||||
SOURCE_UNLOCKED : IN std_logic;
|
||||
LO_UNLOCKED : IN std_logic;
|
||||
MAX2871_DEF_4 : OUT std_logic_vector(31 downto 0);
|
||||
MAX2871_DEF_3 : OUT std_logic_vector(31 downto 0);
|
||||
MAX2871_DEF_1 : OUT std_logic_vector(31 downto 0);
|
||||
MAX2871_DEF_0 : OUT std_logic_vector(31 downto 0);
|
||||
SWEEP_DATA : OUT std_logic_vector(95 downto 0);
|
||||
SWEEP_ADDRESS : OUT std_logic_vector(12 downto 0);
|
||||
SWEEP_WRITE : OUT std_logic_vector(0 downto 0);
|
||||
SWEEP_POINTS : OUT std_logic_vector(12 downto 0);
|
||||
NSAMPLES : OUT std_logic_vector(12 downto 0);
|
||||
PORT1_EN : OUT std_logic;
|
||||
PORT2_EN : OUT std_logic;
|
||||
REF_EN : OUT std_logic;
|
||||
AMP_SHDN : OUT std_logic;
|
||||
SOURCE_RF_EN : OUT std_logic;
|
||||
LO_RF_EN : OUT std_logic;
|
||||
LEDS : OUT std_logic_vector(2 downto 0);
|
||||
INTERRUPT_ASSERTED : OUT std_logic
|
||||
CLK : in STD_LOGIC;
|
||||
RESET : in STD_LOGIC;
|
||||
SCLK : in STD_LOGIC;
|
||||
MOSI : in STD_LOGIC;
|
||||
MISO : out STD_LOGIC;
|
||||
NSS : in STD_LOGIC;
|
||||
NEW_SAMPLING_DATA : in STD_LOGIC;
|
||||
SAMPLING_RESULT : in STD_LOGIC_VECTOR (303 downto 0);
|
||||
ADC_MINMAX : in STD_LOGIC_VECTOR(95 downto 0);
|
||||
SOURCE_UNLOCKED : in STD_LOGIC;
|
||||
LO_UNLOCKED : in STD_LOGIC;
|
||||
MAX2871_DEF_4 : out STD_LOGIC_VECTOR (31 downto 0);
|
||||
MAX2871_DEF_3 : out STD_LOGIC_VECTOR (31 downto 0);
|
||||
MAX2871_DEF_1 : out STD_LOGIC_VECTOR (31 downto 0);
|
||||
MAX2871_DEF_0 : out STD_LOGIC_VECTOR (31 downto 0);
|
||||
SWEEP_DATA : out STD_LOGIC_VECTOR (95 downto 0);
|
||||
SWEEP_ADDRESS : out STD_LOGIC_VECTOR (12 downto 0);
|
||||
SWEEP_WRITE : out STD_LOGIC_VECTOR (0 downto 0);
|
||||
SWEEP_POINTS : out STD_LOGIC_VECTOR (12 downto 0);
|
||||
NSAMPLES : out STD_LOGIC_VECTOR (12 downto 0);
|
||||
STAGES : out STD_LOGIC_VECTOR (2 downto 0);
|
||||
SETTLING_TIME : out STD_LOGIC_VECTOR (19 downto 0);
|
||||
SYNC_ENABLED : out STD_LOGIC;
|
||||
SYNC_MASTER : out STD_LOGIC;
|
||||
PORT1_STAGE : out STD_LOGIC_VECTOR (2 downto 0);
|
||||
PORT2_STAGE : out STD_LOGIC_VECTOR (2 downto 0);
|
||||
PORT1_EN : out STD_LOGIC;
|
||||
PORT2_EN : out STD_LOGIC;
|
||||
REF_EN : out STD_LOGIC;
|
||||
AMP_SHDN : out STD_LOGIC;
|
||||
SOURCE_RF_EN : out STD_LOGIC;
|
||||
LO_RF_EN : out STD_LOGIC;
|
||||
SOURCE_CE_EN : out STD_LOGIC;
|
||||
LO_CE_EN : out STD_LOGIC;
|
||||
PORTSWITCH_EN : out STD_LOGIC;
|
||||
LEDS : out STD_LOGIC_VECTOR(2 downto 0);
|
||||
WINDOW_SETTING : out STD_LOGIC_VECTOR(1 downto 0);
|
||||
ADC_PRESCALER : out STD_LOGIC_VECTOR(7 downto 0);
|
||||
ADC_PHASEINC : out STD_LOGIC_VECTOR(11 downto 0);
|
||||
INTERRUPT_ASSERTED : out STD_LOGIC;
|
||||
RESET_MINMAX : out STD_LOGIC;
|
||||
SWEEP_HALTED : in STD_LOGIC;
|
||||
SWEEP_RESUME : out STD_LOGIC;
|
||||
|
||||
-- hardware overwrite signals
|
||||
SPI_OVERWRITE_ENABLED : out STD_LOGIC;
|
||||
SPI_OVERWRITE_DATA : out STD_LOGIC_VECTOR(14 downto 0);
|
||||
|
||||
-- DFT signals
|
||||
DFT_BIN1_PHASEINC : out STD_LOGIC_VECTOR (15 downto 0);
|
||||
DFT_DIFFBIN_PHASEINC : out STD_LOGIC_VECTOR (15 downto 0);
|
||||
DFT_RESULT_READY : in STD_LOGIC;
|
||||
DFT_OUTPUT : in STD_LOGIC_VECTOR (191 downto 0);
|
||||
DFT_NEXT_OUTPUT : out STD_LOGIC;
|
||||
DFT_ENABLE : out STD_LOGIC;
|
||||
|
||||
DEBUG_STATUS : in STD_LOGIC_VECTOR(10 downto 0)
|
||||
);
|
||||
END COMPONENT;
|
||||
|
||||
|
|
@ -104,8 +134,8 @@ ARCHITECTURE behavior OF Test_SPICommands IS
|
|||
signal INTERRUPT_ASSERTED : std_logic;
|
||||
|
||||
-- Clock period definitions
|
||||
constant CLK_period : time := 6.25 ns;
|
||||
constant SPI_CLK_period : time := 100 ns;
|
||||
constant CLK_period : time := 9.765625 ns;
|
||||
constant SPI_CLK_period : time := 23.52941176 ns;
|
||||
|
||||
signal data_signal : std_logic_vector(15 downto 0);
|
||||
BEGIN
|
||||
|
|
@ -120,6 +150,7 @@ BEGIN
|
|||
NSS => NSS,
|
||||
NEW_SAMPLING_DATA => NEW_SAMPLING_DATA,
|
||||
SAMPLING_RESULT => SAMPLING_RESULT,
|
||||
ADC_MINMAX => (others => '0'),
|
||||
SOURCE_UNLOCKED => SOURCE_UNLOCKED,
|
||||
LO_UNLOCKED => LO_UNLOCKED,
|
||||
MAX2871_DEF_4 => MAX2871_DEF_4,
|
||||
|
|
@ -138,7 +169,11 @@ BEGIN
|
|||
SOURCE_RF_EN => SOURCE_RF_EN,
|
||||
LO_RF_EN => LO_RF_EN,
|
||||
LEDS => LEDS,
|
||||
INTERRUPT_ASSERTED => INTERRUPT_ASSERTED
|
||||
INTERRUPT_ASSERTED => INTERRUPT_ASSERTED,
|
||||
SWEEP_HALTED => '0',
|
||||
DFT_RESULT_READY => '0',
|
||||
DFT_OUTPUT => (others => '0'),
|
||||
DEBUG_STATUS => (others => '0')
|
||||
);
|
||||
|
||||
-- Clock process definitions
|
||||
|
|
@ -258,9 +293,28 @@ BEGIN
|
|||
wait for 100 ns;
|
||||
RESET <= '0';
|
||||
wait for CLK_period*10;
|
||||
-- read static test register
|
||||
NSS <= '0';
|
||||
SPI("0100000000000000");
|
||||
SPI("0000000000000000");
|
||||
NSS <= '1';
|
||||
|
||||
wait for CLK_period*50;
|
||||
-- write register 3 = 0xFFFF (enable all periphery)
|
||||
NSS <= '0';
|
||||
SPI("1000000000000011");
|
||||
SPI("1111111111111111");
|
||||
NSS <= '1';
|
||||
|
||||
wait for CLK_period*50;
|
||||
-- set sampling result and read first 4 words
|
||||
SAMPLING_RESULT(63 downto 0) <= "1111000011110000101010101010101001010101010101010000111100001111";
|
||||
NSS <= '0';
|
||||
SPI("1100000000000000");
|
||||
SPI("0000000000000000");
|
||||
SPI("0000000000000000");
|
||||
SPI("0000000000000000");
|
||||
SPI("0000000000000000");
|
||||
NSS <= '1';
|
||||
|
||||
wait for CLK_period*50;
|
||||
|
|
|
|||
|
|
@ -43,7 +43,9 @@
|
|||
<file xil_pn:branch="BehavioralSim" xil_pn:fileType="FILE_ISIM_EXE" xil_pn:name="Test_MAX2871_isim_beh.exe"/>
|
||||
<file xil_pn:branch="BehavioralSim" xil_pn:fileType="FILE_ISIM_EXE" xil_pn:name="Test_MCP33131_isim_beh.exe"/>
|
||||
<file xil_pn:branch="BehavioralSim" xil_pn:fileType="FILE_ISIM_EXE" xil_pn:name="Test_PLL_isim_beh.exe"/>
|
||||
<file xil_pn:fileType="FILE_XST_PROJECT" xil_pn:name="Test_SPICommands_beh.prj"/>
|
||||
<file xil_pn:branch="BehavioralSim" xil_pn:fileType="FILE_ISIM_EXE" xil_pn:name="Test_SPICommands_isim_beh.exe"/>
|
||||
<file xil_pn:fileType="FILE_ISIM_MISC" xil_pn:name="Test_SPICommands_isim_beh.wdb"/>
|
||||
<file xil_pn:branch="BehavioralSim" xil_pn:fileType="FILE_ISIM_EXE" xil_pn:name="Test_SPI_isim_beh.exe"/>
|
||||
<file xil_pn:branch="BehavioralSim" xil_pn:fileType="FILE_ISIM_EXE" xil_pn:name="Test_Sampling_isim_beh.exe"/>
|
||||
<file xil_pn:branch="BehavioralSim" xil_pn:fileType="FILE_ISIM_EXE" xil_pn:name="Test_SinCos_isim_beh.exe"/>
|
||||
|
|
@ -135,7 +137,7 @@
|
|||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1604764195" xil_pn:in_ck="-3235419683908193302" xil_pn:name="TRAN_copyAbstractToPostAbstractSimulation" xil_pn:start_ts="1604764195">
|
||||
<transform xil_pn:end_ts="1735897915" xil_pn:in_ck="-3235419683908193302" xil_pn:name="TRAN_copyAbstractToPostAbstractSimulation" xil_pn:start_ts="1735897915">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
<status xil_pn:value="OutOfDateForInputs"/>
|
||||
|
|
@ -165,66 +167,98 @@
|
|||
<outfile xil_pn:name="top.vhd"/>
|
||||
<outfile xil_pn:name="window.vhd"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1604764128" xil_pn:name="TRAN_xawsToSimhdl" xil_pn:prop_ck="3044368668303368987" xil_pn:start_ts="1604764128">
|
||||
<transform xil_pn:end_ts="1735898132" xil_pn:name="TRAN_xawsToSimhdl" xil_pn:prop_ck="9011583378592605907" xil_pn:start_ts="1735898132">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1604764128" xil_pn:name="TRAN_schematicsToHdlSim" xil_pn:prop_ck="-7898843873652552295" xil_pn:start_ts="1604764128">
|
||||
<transform xil_pn:end_ts="1735898132" xil_pn:name="TRAN_schematicsToHdlSim" xil_pn:prop_ck="2919554697640690001" xil_pn:start_ts="1735898132">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1604763670" xil_pn:in_ck="6306144844996157057" xil_pn:name="TRAN_regenerateCoresSim" xil_pn:prop_ck="-2723611991789822717" xil_pn:start_ts="1604763670">
|
||||
<transform xil_pn:end_ts="1735887598" xil_pn:in_ck="-4366097307991745463" xil_pn:name="TRAN_regenerateCoresSim" xil_pn:prop_ck="-2723611991789822717" xil_pn:start_ts="1735887598">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
<status xil_pn:value="OutOfDateForInputs"/>
|
||||
<status xil_pn:value="OutOfDateForOutputs"/>
|
||||
<status xil_pn:value="InputChanged"/>
|
||||
<status xil_pn:value="InputRemoved"/>
|
||||
<status xil_pn:value="OutputRemoved"/>
|
||||
<outfile xil_pn:name="ipcore_dir/DSP_SLICE.ngc"/>
|
||||
<outfile xil_pn:name="ipcore_dir/DSP_SLICE.vhd"/>
|
||||
<outfile xil_pn:name="ipcore_dir/PLL.vhd"/>
|
||||
<outfile xil_pn:name="ipcore_dir/SinCos.ngc"/>
|
||||
<outfile xil_pn:name="ipcore_dir/SinCos.vhd"/>
|
||||
<outfile xil_pn:name="ipcore_dir/SweepConfigMem.ngc"/>
|
||||
<outfile xil_pn:name="ipcore_dir/SweepConfigMem.vhd"/>
|
||||
<outfile xil_pn:name="ipcore_dir/result_bram.ngc"/>
|
||||
<outfile xil_pn:name="ipcore_dir/result_bram.vhd"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1604764195" xil_pn:in_ck="-9185925483828391381" xil_pn:name="TRAN_copyPostAbstractToPreSimulation" xil_pn:start_ts="1604764195">
|
||||
<transform xil_pn:end_ts="1735897915" xil_pn:in_ck="-9185925483828391381" xil_pn:name="TRAN_copyPostAbstractToPreSimulation" xil_pn:start_ts="1735897915">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
<status xil_pn:value="OutOfDateForInputs"/>
|
||||
<status xil_pn:value="OutOfDateForPredecessor"/>
|
||||
<status xil_pn:value="OutOfDateForOutputs"/>
|
||||
<status xil_pn:value="InputChanged"/>
|
||||
<status xil_pn:value="InputRemoved"/>
|
||||
<status xil_pn:value="OutputRemoved"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1604764196" xil_pn:in_ck="4954137158046299803" xil_pn:name="TRAN_ISimulateBehavioralModelRunFuse" xil_pn:prop_ck="3520630626282717961" xil_pn:start_ts="1604764195">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
<status xil_pn:value="OutOfDateForInputs"/>
|
||||
<status xil_pn:value="OutOfDateForProperties"/>
|
||||
<status xil_pn:value="OutOfDateForPredecessor"/>
|
||||
<status xil_pn:value="OutOfDateForOutputs"/>
|
||||
<status xil_pn:value="InputAdded"/>
|
||||
<status xil_pn:value="InputChanged"/>
|
||||
<status xil_pn:value="InputRemoved"/>
|
||||
<status xil_pn:value="OutputChanged"/>
|
||||
<status xil_pn:value="OutputRemoved"/>
|
||||
<outfile xil_pn:name="DFT.vhd"/>
|
||||
<outfile xil_pn:name="MAX2871.vhd"/>
|
||||
<outfile xil_pn:name="MCP33131.vhd"/>
|
||||
<outfile xil_pn:name="ResetDelay.vhd"/>
|
||||
<outfile xil_pn:name="SPIConfig.vhd"/>
|
||||
<outfile xil_pn:name="Sampling.vhd"/>
|
||||
<outfile xil_pn:name="Sweep.vhd"/>
|
||||
<outfile xil_pn:name="Synchronizer.vhd"/>
|
||||
<outfile xil_pn:name="Test_DFT.vhd"/>
|
||||
<outfile xil_pn:name="Test_MAX2871.vhd"/>
|
||||
<outfile xil_pn:name="Test_MCP33131.vhd"/>
|
||||
<outfile xil_pn:name="Test_PLL.vhd"/>
|
||||
<outfile xil_pn:name="Test_SPI.vhd"/>
|
||||
<outfile xil_pn:name="Test_SPICommands.vhd"/>
|
||||
<outfile xil_pn:name="Test_Sampling.vhd"/>
|
||||
<outfile xil_pn:name="Test_SinCos.vhd"/>
|
||||
<outfile xil_pn:name="Test_Window.vhd"/>
|
||||
<outfile xil_pn:name="Test_Windowing.vhd"/>
|
||||
<outfile xil_pn:name="Windowing.vhd"/>
|
||||
<outfile xil_pn:name="ipcore_dir/DSP_SLICE.vhd"/>
|
||||
<outfile xil_pn:name="ipcore_dir/PLL.vhd"/>
|
||||
<outfile xil_pn:name="ipcore_dir/SinCos.vhd"/>
|
||||
<outfile xil_pn:name="ipcore_dir/SweepConfigMem.vhd"/>
|
||||
<outfile xil_pn:name="ipcore_dir/result_bram.vhd"/>
|
||||
<outfile xil_pn:name="spi_slave.vhd"/>
|
||||
<outfile xil_pn:name="top.vhd"/>
|
||||
<outfile xil_pn:name="window.vhd"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1604764196" xil_pn:in_ck="-6978407093755538946" xil_pn:name="TRAN_ISimulateBehavioralModel" xil_pn:prop_ck="-8357625476205656394" xil_pn:start_ts="1604764196">
|
||||
<transform xil_pn:end_ts="1735898134" xil_pn:in_ck="-9185925483828391381" xil_pn:name="TRAN_ISimulateBehavioralModelRunFuse" xil_pn:prop_ck="-8439971377188504826" xil_pn:start_ts="1735898132">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
<status xil_pn:value="OutOfDateForInputs"/>
|
||||
<status xil_pn:value="OutOfDateForProperties"/>
|
||||
<status xil_pn:value="OutOfDateForPredecessor"/>
|
||||
<status xil_pn:value="OutOfDateForOutputs"/>
|
||||
<status xil_pn:value="InputRemoved"/>
|
||||
<status xil_pn:value="InputChanged"/>
|
||||
<status xil_pn:value="OutputChanged"/>
|
||||
<status xil_pn:value="OutputRemoved"/>
|
||||
<outfile xil_pn:name="Test_SPICommands_beh.prj"/>
|
||||
<outfile xil_pn:name="Test_SPICommands_isim_beh.exe"/>
|
||||
<outfile xil_pn:name="fuse.log"/>
|
||||
<outfile xil_pn:name="isim"/>
|
||||
<outfile xil_pn:name="isim.log"/>
|
||||
<outfile xil_pn:name="xilinxsim.ini"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1600270761" xil_pn:name="TRAN_copyInitialToXSTAbstractSynthesis" xil_pn:start_ts="1600270761">
|
||||
<transform xil_pn:end_ts="1735898134" xil_pn:in_ck="4191604156099045257" xil_pn:name="TRAN_ISimulateBehavioralModel" xil_pn:prop_ck="-6574364550222252173" xil_pn:start_ts="1735898134">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
<status xil_pn:value="OutOfDateForPredecessor"/>
|
||||
<status xil_pn:value="OutOfDateForOutputs"/>
|
||||
<status xil_pn:value="OutputChanged"/>
|
||||
<outfile xil_pn:name="Test_SPICommands_isim_beh.wdb"/>
|
||||
<outfile xil_pn:name="isim.cmd"/>
|
||||
<outfile xil_pn:name="isim.log"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1735835257" xil_pn:name="TRAN_copyInitialToXSTAbstractSynthesis" xil_pn:start_ts="1735835257">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1600270761" xil_pn:name="TRAN_schematicsToHdl" xil_pn:prop_ck="6623951845608321876" xil_pn:start_ts="1600270761">
|
||||
<transform xil_pn:end_ts="1735835257" xil_pn:name="TRAN_schematicsToHdl" xil_pn:prop_ck="6623951845608321876" xil_pn:start_ts="1735835257">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1667776201" xil_pn:in_ck="-4366097307991745463" xil_pn:name="TRAN_regenerateCores" xil_pn:prop_ck="-2723611991789822717" xil_pn:start_ts="1667776201">
|
||||
<transform xil_pn:end_ts="1736097035" xil_pn:in_ck="-4366097307991745463" xil_pn:name="TRAN_regenerateCores" xil_pn:prop_ck="-2723611991789822717" xil_pn:start_ts="1736097035">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
<outfile xil_pn:name="ipcore_dir/DSP_SLICE.ngc"/>
|
||||
|
|
@ -237,23 +271,23 @@
|
|||
<outfile xil_pn:name="ipcore_dir/result_bram.ngc"/>
|
||||
<outfile xil_pn:name="ipcore_dir/result_bram.vhd"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1600270761" xil_pn:in_ck="277585929807082169" xil_pn:name="TRAN_SubProjectAbstractToPreProxy" xil_pn:start_ts="1600270761">
|
||||
<transform xil_pn:end_ts="1735835257" xil_pn:in_ck="-2664127494180108140" xil_pn:name="TRAN_SubProjectAbstractToPreProxy" xil_pn:start_ts="1735835257">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1600270761" xil_pn:name="TRAN_xawsTohdl" xil_pn:prop_ck="-9042377951913232490" xil_pn:start_ts="1600270761">
|
||||
<transform xil_pn:end_ts="1735835257" xil_pn:name="TRAN_xawsTohdl" xil_pn:prop_ck="-9042377951913232490" xil_pn:start_ts="1735835257">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1600270761" xil_pn:in_ck="277585929807082169" xil_pn:name="TRAN_SubProjectPreToStructuralProxy" xil_pn:prop_ck="250970745955965653" xil_pn:start_ts="1600270761">
|
||||
<transform xil_pn:end_ts="1735835257" xil_pn:in_ck="-2664127494180108140" xil_pn:name="TRAN_SubProjectPreToStructuralProxy" xil_pn:prop_ck="250970745955965653" xil_pn:start_ts="1735835257">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1600270761" xil_pn:name="TRAN_platgen" xil_pn:prop_ck="6527189854873920525" xil_pn:start_ts="1600270761">
|
||||
<transform xil_pn:end_ts="1735835257" xil_pn:name="TRAN_platgen" xil_pn:prop_ck="6527189854873920525" xil_pn:start_ts="1735835257">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1667776245" xil_pn:in_ck="2241500006820465658" xil_pn:name="TRANEXT_xstsynthesize_spartan6" xil_pn:prop_ck="3256065936432453276" xil_pn:start_ts="1667776235">
|
||||
<transform xil_pn:end_ts="1736097046" xil_pn:in_ck="2241500006820465658" xil_pn:name="TRANEXT_xstsynthesize_spartan6" xil_pn:prop_ck="3256065936432453276" xil_pn:start_ts="1736097035">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="WarningsGenerated"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
|
|
@ -271,11 +305,11 @@
|
|||
<outfile xil_pn:name="webtalk_pn.xml"/>
|
||||
<outfile xil_pn:name="xst"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1659800190" xil_pn:in_ck="934418963425178690" xil_pn:name="TRAN_compileBCD2" xil_pn:prop_ck="6693835875156060939" xil_pn:start_ts="1659800190">
|
||||
<transform xil_pn:end_ts="1736097046" xil_pn:in_ck="934418963425178690" xil_pn:name="TRAN_compileBCD2" xil_pn:prop_ck="6693835875156060939" xil_pn:start_ts="1736097046">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1667776248" xil_pn:in_ck="5411862124762956458" xil_pn:name="TRANEXT_ngdbuild_FPGA" xil_pn:prop_ck="4604875190571501774" xil_pn:start_ts="1667776245">
|
||||
<transform xil_pn:end_ts="1736097050" xil_pn:in_ck="5411862124762956458" xil_pn:name="TRANEXT_ngdbuild_FPGA" xil_pn:prop_ck="4604875190571501774" xil_pn:start_ts="1736097046">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
<outfile xil_pn:name="_ngo"/>
|
||||
|
|
@ -284,7 +318,7 @@
|
|||
<outfile xil_pn:name="top.ngd"/>
|
||||
<outfile xil_pn:name="top_ngdbuild.xrpt"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1667776396" xil_pn:in_ck="8512332261572065657" xil_pn:name="TRANEXT_map_spartan6" xil_pn:prop_ck="-4668962392366239264" xil_pn:start_ts="1667776248">
|
||||
<transform xil_pn:end_ts="1736097131" xil_pn:in_ck="8512332261572065657" xil_pn:name="TRANEXT_map_spartan6" xil_pn:prop_ck="-4668962392366239264" xil_pn:start_ts="1736097050">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="WarningsGenerated"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
|
|
@ -298,8 +332,9 @@
|
|||
<outfile xil_pn:name="top_summary.xml"/>
|
||||
<outfile xil_pn:name="top_usage.xml"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1667776409" xil_pn:in_ck="1117507038335044978" xil_pn:name="TRANEXT_par_spartan6" xil_pn:prop_ck="-1085068593928086116" xil_pn:start_ts="1667776396">
|
||||
<transform xil_pn:end_ts="1736097154" xil_pn:in_ck="1117507038335044978" xil_pn:name="TRANEXT_par_spartan6" xil_pn:prop_ck="-1085068593928086116" xil_pn:start_ts="1736097131">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="WarningsGenerated"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
<outfile xil_pn:name="_xmsgs/par.xmsgs"/>
|
||||
<outfile xil_pn:name="top.ncd"/>
|
||||
|
|
@ -312,7 +347,7 @@
|
|||
<outfile xil_pn:name="top_pad.txt"/>
|
||||
<outfile xil_pn:name="top_par.xrpt"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1667776416" xil_pn:in_ck="154288912438" xil_pn:name="TRANEXT_bitFile_spartan6" xil_pn:prop_ck="3274353840855015246" xil_pn:start_ts="1667776409">
|
||||
<transform xil_pn:end_ts="1736097164" xil_pn:in_ck="154288912438" xil_pn:name="TRANEXT_bitFile_spartan6" xil_pn:prop_ck="3274353840855015246" xil_pn:start_ts="1736097154">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
<outfile xil_pn:name="_xmsgs/bitgen.xmsgs"/>
|
||||
|
|
@ -365,8 +400,9 @@
|
|||
<status xil_pn:value="InputChanged"/>
|
||||
<status xil_pn:value="InputRemoved"/>
|
||||
</transform>
|
||||
<transform xil_pn:end_ts="1667776409" xil_pn:in_ck="8512326635937592693" xil_pn:name="TRAN_postRouteTrce" xil_pn:prop_ck="445577401284416184" xil_pn:start_ts="1667776405">
|
||||
<transform xil_pn:end_ts="1736097154" xil_pn:in_ck="8512326635937592693" xil_pn:name="TRAN_postRouteTrce" xil_pn:prop_ck="445577401284416184" xil_pn:start_ts="1736097149">
|
||||
<status xil_pn:value="SuccessfullyRun"/>
|
||||
<status xil_pn:value="WarningsGenerated"/>
|
||||
<status xil_pn:value="ReadyToRun"/>
|
||||
<outfile xil_pn:name="_xmsgs/trce.xmsgs"/>
|
||||
<outfile xil_pn:name="top.twr"/>
|
||||
|
|
|
|||
|
|
@ -55,11 +55,11 @@
|
|||
<association xil_pn:name="PostTranslateSimulation" xil_pn:seqID="49"/>
|
||||
</file>
|
||||
<file xil_pn:name="spi_slave.vhd" xil_pn:type="FILE_VHDL">
|
||||
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/>
|
||||
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="1"/>
|
||||
<association xil_pn:name="Implementation" xil_pn:seqID="2"/>
|
||||
</file>
|
||||
<file xil_pn:name="SPIConfig.vhd" xil_pn:type="FILE_VHDL">
|
||||
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/>
|
||||
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="2"/>
|
||||
<association xil_pn:name="Implementation" xil_pn:seqID="9"/>
|
||||
</file>
|
||||
<file xil_pn:name="Sweep.vhd" xil_pn:type="FILE_VHDL">
|
||||
|
|
@ -77,7 +77,7 @@
|
|||
<association xil_pn:name="PostTranslateSimulation" xil_pn:seqID="77"/>
|
||||
</file>
|
||||
<file xil_pn:name="Test_SPICommands.vhd" xil_pn:type="FILE_VHDL">
|
||||
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/>
|
||||
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="3"/>
|
||||
<association xil_pn:name="PostMapSimulation" xil_pn:seqID="115"/>
|
||||
<association xil_pn:name="PostRouteSimulation" xil_pn:seqID="115"/>
|
||||
<association xil_pn:name="PostTranslateSimulation" xil_pn:seqID="115"/>
|
||||
|
|
@ -109,7 +109,7 @@
|
|||
<association xil_pn:name="Implementation" xil_pn:seqID="7"/>
|
||||
</file>
|
||||
<file xil_pn:name="window.vhd" xil_pn:type="FILE_VHDL">
|
||||
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="1"/>
|
||||
<association xil_pn:name="BehavioralSimulation" xil_pn:seqID="0"/>
|
||||
<association xil_pn:name="Implementation" xil_pn:seqID="1"/>
|
||||
</file>
|
||||
<file xil_pn:name="Test_Window.vhd" xil_pn:type="FILE_VHDL">
|
||||
|
|
@ -405,8 +405,8 @@
|
|||
<property xil_pn:name="Run for Specified Time Translate" xil_pn:value="true" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Safe Implementation" xil_pn:value="No" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Security" xil_pn:value="Enable Readback and Reconfiguration" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Selected Module Instance Name" xil_pn:value="/Test_DFT" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Selected Simulation Root Source Node Behavioral" xil_pn:value="work.Test_DFT" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Selected Module Instance Name" xil_pn:value="/Test_SPICommands" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Selected Simulation Root Source Node Behavioral" xil_pn:value="work.Test_SPICommands" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="Selected Simulation Root Source Node Post-Map" xil_pn:value="" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Selected Simulation Root Source Node Post-Route" xil_pn:value="" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Selected Simulation Root Source Node Post-Translate" xil_pn:value="" xil_pn:valueState="default"/>
|
||||
|
|
@ -424,7 +424,7 @@
|
|||
<property xil_pn:name="Simulator" xil_pn:value="ISim (VHDL/Verilog)" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Slice Utilization Ratio" xil_pn:value="100" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Specify 'define Macro Name and Value" xil_pn:value="" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Specify Top Level Instance Names Behavioral" xil_pn:value="work.Test_DFT" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Specify Top Level Instance Names Behavioral" xil_pn:value="work.Test_SPICommands" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Specify Top Level Instance Names Post-Map" xil_pn:value="Default" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Specify Top Level Instance Names Post-Route" xil_pn:value="Default" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="Specify Top Level Instance Names Post-Translate" xil_pn:value="Default" xil_pn:valueState="default"/>
|
||||
|
|
@ -476,7 +476,7 @@
|
|||
<!-- -->
|
||||
<!-- The following properties are for internal use only. These should not be modified.-->
|
||||
<!-- -->
|
||||
<property xil_pn:name="PROP_BehavioralSimTop" xil_pn:value="Architecture|window|Behavioral" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="PROP_BehavioralSimTop" xil_pn:value="Architecture|Test_SPICommands|behavior" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="PROP_DesignName" xil_pn:value="VNA" xil_pn:valueState="non-default"/>
|
||||
<property xil_pn:name="PROP_DevFamilyPMName" xil_pn:value="spartan6" xil_pn:valueState="default"/>
|
||||
<property xil_pn:name="PROP_FPGAConfiguration" xil_pn:value="FPGAConfiguration" xil_pn:valueState="default"/>
|
||||
|
|
|
|||
|
|
@ -31,7 +31,8 @@ use IEEE.numeric_std.all;
|
|||
--use UNISIM.VComponents.all;
|
||||
|
||||
entity spi_slave is
|
||||
generic ( W : integer);
|
||||
generic ( W : integer;
|
||||
PREWIDTH : integer);
|
||||
Port ( SPI_CLK : in STD_LOGIC;
|
||||
MISO : out STD_LOGIC;
|
||||
MOSI : in STD_LOGIC;
|
||||
|
|
@ -39,9 +40,12 @@ entity spi_slave is
|
|||
BUF_OUT : out STD_LOGIC_VECTOR (W-1 downto 0) := (others => '0');
|
||||
BUF_IN : in STD_LOGIC_VECTOR (W-1 downto 0);
|
||||
CLK : in STD_LOGIC;
|
||||
COMPLETE : out STD_LOGIC
|
||||
-- RISING_TOGGLE : inout STD_LOGIC;
|
||||
-- FALLING_TOGGLE : inout STD_LOGIC
|
||||
COMPLETE : out STD_LOGIC;
|
||||
-- processing the complete word after it is complete leaves very little time
|
||||
-- for read operations. Indicate when the first PREWIDTH bits are ready which
|
||||
-- allows more time to prepare the response to the next word
|
||||
PRE_COMPLETE : out STD_LOGIC;
|
||||
PRE_BUF_OUT : out STD_LOGIC_VECTOR (PREWIDTH-1 downto 0) := (others => '0')
|
||||
);
|
||||
end spi_slave;
|
||||
|
||||
|
|
@ -52,6 +56,8 @@ architecture Behavioral of spi_slave is
|
|||
signal data_valid : STD_LOGIC_VECTOR(2 downto 0);
|
||||
signal data_synced : STD_LOGIC_VECTOR(2 downto 0);
|
||||
signal data : STD_LOGIC_VECTOR(W-1 downto 0);
|
||||
signal pre_data : STD_LOGIC_VECTOR(PREWIDTH-1 downto 0);
|
||||
signal pre_data_valid : STD_LOGIC_VECTOR(3 downto 0);
|
||||
|
||||
signal bit_cnt : integer range 0 to W-1;
|
||||
begin
|
||||
|
|
@ -59,9 +65,11 @@ begin
|
|||
process(CLK)
|
||||
begin
|
||||
if rising_edge(CLK) then
|
||||
data_valid(2 downto 1) <= data_valid(1 downto 0);
|
||||
COMPLETE <= '0';
|
||||
if data_valid(1) = '1' then
|
||||
PRE_COMPLETE <= '0';
|
||||
data_valid(2 downto 1) <= data_valid(1 downto 0);
|
||||
pre_data_valid(3 downto 1) <= pre_data_valid(2 downto 0);
|
||||
if data_valid(2) = '1' then
|
||||
if data_synced(0) = '0' then
|
||||
BUF_OUT <= data;
|
||||
COMPLETE <= '1';
|
||||
|
|
@ -70,19 +78,33 @@ begin
|
|||
else
|
||||
data_synced(0) <= '0';
|
||||
end if;
|
||||
if pre_data_valid(3 downto 2) = "01" then
|
||||
-- pre_data has just become valid
|
||||
PRE_BUF_OUT <= pre_data;
|
||||
PRE_COMPLETE <= '1';
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
--MISO <= BUF_IN(W - 1 - bit_cnt);-- when bit_cnt = 0 else miso_buffer(W-2);
|
||||
MISO <= BUF_IN(15) when bit_cnt = 0 else miso_buffer(W-2);
|
||||
|
||||
slave_in: process(SPI_CLK)
|
||||
slave_in: process(SPI_CLK, CS)
|
||||
begin
|
||||
if rising_edge(SPI_CLK) then
|
||||
-- FALLING_TOGGLE <= not FALLING_TOGGLE;
|
||||
if CS = '1' then
|
||||
bit_cnt <= 0;
|
||||
data_valid(0) <= '0';
|
||||
pre_data_valid(0) <= '0';
|
||||
elsif rising_edge(SPI_CLK) then
|
||||
-- data input process: sample on the rising edge
|
||||
data_synced(2 downto 1) <= data_synced(1 downto 0);
|
||||
if bit_cnt = PREWIDTH-1 then
|
||||
-- first couple of bits are ready
|
||||
pre_data <= mosi_buffer(PREWIDTH-2 downto 0) & MOSI;
|
||||
pre_data_valid(0) <= '1';
|
||||
end if;
|
||||
if bit_cnt = W-1 then
|
||||
-- this was the last bit
|
||||
pre_data_valid(0) <= '0';
|
||||
data_valid(0) <= '1';
|
||||
data <= mosi_buffer(W-2 downto 0) & MOSI;
|
||||
else
|
||||
|
|
@ -91,14 +113,9 @@ begin
|
|||
end if;
|
||||
mosi_buffer <= mosi_buffer(W-3 downto 0) & MOSI;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
slave_out: process(SPI_CLK, CS, BUF_IN, bit_cnt)
|
||||
begin
|
||||
if CS = '1' then
|
||||
bit_cnt <= 0;
|
||||
elsif falling_edge(SPI_CLK) then
|
||||
-- data output process: data should be launched on the falling edge
|
||||
-- but the delay is too large. Launch on the rising edge instead
|
||||
if bit_cnt < W-1 then
|
||||
bit_cnt <= bit_cnt + 1;
|
||||
if bit_cnt = 0 then
|
||||
|
|
@ -108,9 +125,27 @@ begin
|
|||
end if;
|
||||
else
|
||||
bit_cnt <= 0;
|
||||
--miso_buffer <= BUF_IN;
|
||||
end if;
|
||||
end if;
|
||||
end process;
|
||||
|
||||
-- slave_out: process(SPI_CLK, CS, BUF_IN, bit_cnt)
|
||||
-- begin
|
||||
-- if CS = '1' then
|
||||
-- bit_cnt <= 0;
|
||||
-- elsif falling_edge(SPI_CLK) then
|
||||
-- if bit_cnt < W-1 then
|
||||
-- bit_cnt <= bit_cnt + 1;
|
||||
-- if bit_cnt = 0 then
|
||||
-- miso_buffer <= BUF_IN;
|
||||
-- else
|
||||
-- miso_buffer <= miso_buffer(W-2 downto 0) & '0';
|
||||
-- end if;
|
||||
-- else
|
||||
-- bit_cnt <= 0;
|
||||
-- --miso_buffer <= BUF_IN;
|
||||
-- end if;
|
||||
-- end if;
|
||||
-- end process;
|
||||
|
||||
end Behavioral;
|
||||
BIN
FPGA/VNA/top.bin
|
|
@ -1,6 +1,23 @@
|
|||
CONFIG VCCAUX = 3.3;
|
||||
# Global FPGA clock
|
||||
NET "CLK" PERIOD = 62.5 ns HIGH 50%;
|
||||
NET "MCU_SCK" PERIOD = 25ns HIGH 50%;
|
||||
|
||||
# Constraints for SPI interface to MCU
|
||||
NET "MCU_SCK" PERIOD = 23.52941176ns HIGH 50%;
|
||||
NET "MCU_MOSI" OFFSET = IN 2ns VALID 3ns BEFORE "MCU_SCK";
|
||||
NET "MCU_MISO" OFFSET = OUT 18.529ns VALID 10ns AFTER "MCU_SCK";
|
||||
NET "MCU_MISO" SLEW = FAST;
|
||||
|
||||
# ADC constraints
|
||||
NET "REF_SCLK" PERIOD = 19.5ns HIGH 50%;
|
||||
NET "REF_SDO" OFFSET = IN 9ns VALID 9ns BEFORE "REF_SCLK";
|
||||
NET "PORT1_SCLK" PERIOD = 19.5ns HIGH 50%;
|
||||
NET "PORT1_SDO" OFFSET = IN 9ns VALID 9ns BEFORE "PORT1_SCLK";
|
||||
NET "PORT2_SCLK" PERIOD = 19.5ns HIGH 50%;
|
||||
NET "PORT2_SDO" OFFSET = IN 9ns VALID 9ns BEFORE "PORT2_SCLK";
|
||||
NET "PORT1_SCLK" SLEW = FAST;
|
||||
NET "PORT2_SCLK" SLEW = FAST;
|
||||
NET "REF_SCLK" SLEW = FAST;
|
||||
|
||||
NET "ATTENUATION[6]" IOSTANDARD = LVCMOS33;
|
||||
NET "ATTENUATION[5]" IOSTANDARD = LVCMOS33;
|
||||
|
|
@ -60,10 +77,6 @@ NET "MCU_AUX3" IOSTANDARD = LVCMOS33;
|
|||
NET "TRIGGER_IN" IOSTANDARD = LVCMOS33;
|
||||
NET "TRIGGER_OUT" IOSTANDARD = LVCMOS33;
|
||||
|
||||
NET "PORT1_SCLK" SLEW = FAST;
|
||||
NET "PORT2_SCLK" SLEW = FAST;
|
||||
NET "REF_SCLK" SLEW = FAST;
|
||||
|
||||
NET "ATTENUATION[6]" LOC = P9;
|
||||
NET "ATTENUATION[5]" LOC = P10;
|
||||
NET "ATTENUATION[4]" LOC = P11;
|
||||
|
|
|
|||
|
|
@ -44,12 +44,12 @@ entity top is
|
|||
TRIGGER_OUT : out STD_LOGIC;
|
||||
PORT2_CONVSTART : out STD_LOGIC;
|
||||
PORT2_SDO : in STD_LOGIC;
|
||||
PORT2_SCLK : out STD_LOGIC;
|
||||
PORT2_SCLK : inout STD_LOGIC;
|
||||
PORT2_MIX2_EN : out STD_LOGIC;
|
||||
PORT2_MIX1_EN : out STD_LOGIC;
|
||||
PORT1_CONVSTART : out STD_LOGIC;
|
||||
PORT1_SDO : in STD_LOGIC;
|
||||
PORT1_SCLK : out STD_LOGIC;
|
||||
PORT1_SCLK : inout STD_LOGIC;
|
||||
PORT1_MIX2_EN : out STD_LOGIC;
|
||||
PORT1_MIX1_EN : out STD_LOGIC;
|
||||
LO1_MUX : in STD_LOGIC;
|
||||
|
|
@ -83,7 +83,7 @@ entity top is
|
|||
SOURCE_CE : out STD_LOGIC;
|
||||
REF_CONVSTART : out STD_LOGIC;
|
||||
REF_SDO : in STD_LOGIC;
|
||||
REF_SCLK : out STD_LOGIC);
|
||||
REF_SCLK : inout STD_LOGIC);
|
||||
end top;
|
||||
|
||||
architecture Behavioral of top is
|
||||
|
|
@ -116,6 +116,7 @@ architecture Behavioral of top is
|
|||
CONFIG_DATA : IN std_logic_vector(95 downto 0);
|
||||
USER_NSAMPLES : in STD_LOGIC_VECTOR (12 downto 0);
|
||||
NSAMPLES : out STD_LOGIC_VECTOR (12 downto 0);
|
||||
SETTLING_TIME : in STD_LOGIC_VECTOR (19 downto 0);
|
||||
SAMPLING_BUSY : in STD_LOGIC;
|
||||
SAMPLING_DONE : IN std_logic;
|
||||
MAX2871_DEF_4 : IN std_logic_vector(31 downto 0);
|
||||
|
|
@ -213,7 +214,7 @@ architecture Behavioral of top is
|
|||
MAX : out STD_LOGIC_VECTOR (15 downto 0);
|
||||
RESET_MINMAX : in STD_LOGIC;
|
||||
CONVSTART : OUT std_logic;
|
||||
SCLK : OUT std_logic
|
||||
SCLK : INOUT std_logic
|
||||
);
|
||||
END COMPONENT;
|
||||
COMPONENT MAX2871
|
||||
|
|
@ -255,6 +256,7 @@ architecture Behavioral of top is
|
|||
SWEEP_POINTS : OUT std_logic_vector(12 downto 0);
|
||||
NSAMPLES : OUT std_logic_vector(12 downto 0);
|
||||
STAGES : out STD_LOGIC_VECTOR (2 downto 0);
|
||||
SETTLING_TIME : out STD_LOGIC_VECTOR (19 downto 0);
|
||||
SYNC_ENABLED : out STD_LOGIC;
|
||||
SYNC_MASTER : out STD_LOGIC;
|
||||
PORT1_STAGE : out STD_LOGIC_VECTOR (2 downto 0);
|
||||
|
|
@ -406,7 +408,7 @@ architecture Behavioral of top is
|
|||
signal sweep_trigger_out : std_logic;
|
||||
|
||||
-- Configuration signals
|
||||
signal settling_time : std_logic_vector(15 downto 0);
|
||||
signal settling_time : std_logic_vector(19 downto 0);
|
||||
signal def_reg_4 : std_logic_vector(31 downto 0);
|
||||
signal def_reg_3 : std_logic_vector(31 downto 0);
|
||||
signal def_reg_1 : std_logic_vector(31 downto 0);
|
||||
|
|
@ -457,8 +459,8 @@ begin
|
|||
LEDS(0) <= user_leds(2);
|
||||
-- Lock status of PLLs
|
||||
LEDS(1) <= clk_locked;
|
||||
LEDS(2) <= SOURCE_LD;
|
||||
LEDS(3) <= LO1_LD;
|
||||
LEDS(2) <= LO1_LD;
|
||||
LEDS(3) <= SOURCE_LD;
|
||||
-- Sweep and active port
|
||||
PORT_SELECT2 <= (sweep_excite_port2 and portswitch_en) when HW_overwrite_enabled = '0' else HW_overwrite_data(3);
|
||||
PORT2_SELECT <= (sweep_excite_port2 and portswitch_en) when HW_overwrite_enabled = '0' else HW_overwrite_data(3);
|
||||
|
|
@ -560,7 +562,7 @@ begin
|
|||
|
||||
|
||||
Source: MAX2871
|
||||
GENERIC MAP(CLK_DIV => 10)
|
||||
GENERIC MAP(CLK_DIV => 6)
|
||||
PORT MAP(
|
||||
CLK => clk_pll,
|
||||
RESET => int_reset,
|
||||
|
|
@ -575,7 +577,7 @@ begin
|
|||
DONE => source_reloaded
|
||||
);
|
||||
LO1: MAX2871
|
||||
GENERIC MAP(CLK_DIV => 10)
|
||||
GENERIC MAP(CLK_DIV => 6)
|
||||
PORT MAP(
|
||||
CLK => clk_pll,
|
||||
RESET => int_reset,
|
||||
|
|
@ -692,6 +694,7 @@ begin
|
|||
CONFIG_DATA => sweep_config_data,
|
||||
USER_NSAMPLES => sampling_user_samples,
|
||||
NSAMPLES => sampling_samples,
|
||||
SETTLING_TIME => settling_time,
|
||||
SAMPLING_BUSY => sampling_busy,
|
||||
SAMPLING_DONE => sampling_done,
|
||||
START_SAMPLING => sampling_start,
|
||||
|
|
@ -801,6 +804,7 @@ begin
|
|||
SWEEP_HALTED => sweep_halted,
|
||||
SWEEP_RESUME => sweep_resume,
|
||||
STAGES => sweep_stages,
|
||||
SETTLING_TIME => settling_time,
|
||||
SYNC_ENABLED => sweep_sync_enabled,
|
||||
SYNC_MASTER => sweep_sync_master,
|
||||
PORT1_STAGE => sweep_port1_stage,
|
||||
|
|
|
|||
BIN
Hardware/BOM.ods
BIN
Hardware/Eagle/BOM.ods
Normal file
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
BIN
Hardware/Eagle/Schematic.pdf
Normal file
23
Hardware/Eagle/VNA.mnb
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
J2 12.00 0.67 90 BU-1420701851 BU-1420701851
|
||||
J3 110.00 0.67 90 BU-1420701851 BU-1420701851
|
||||
TP1 28.00 64.00 180 TPB1,27 B1,27
|
||||
TP2 28.00 62.00 180 TPB1,27 B1,27
|
||||
TP3 28.00 60.00 180 TPB1,27 B1,27
|
||||
TP4 28.00 66.00 180 TPB1,27 B1,27
|
||||
TP5 20.00 35.00 180 TPB1,27 B1,27
|
||||
TP6 22.00 35.00 180 TPB1,27 B1,27
|
||||
TP7 106.00 56.00 180 TPB1,27 B1,27
|
||||
TP8 107.00 53.00 180 TPB1,27 B1,27
|
||||
TP9 36.00 42.00 180 TPB1,27 B1,27
|
||||
TP10 32.00 42.00 180 TPB1,27 B1,27
|
||||
TP11 86.30 58.30 180 TPB1,27 B1,27
|
||||
TP12 90.00 52.00 180 TPB1,27 B1,27
|
||||
TP13 73.00 55.00 0 TPB1,27 B1,27
|
||||
TP14 76.00 52.00 0 TPB1,27 B1,27
|
||||
TP15 84.00 17.70 0 TPB1,27 B1,27
|
||||
TP16 79.90 29.00 180 TPB1,27 B1,27
|
||||
TP17 5.00 52.50 0 TPB1,27 B1,27
|
||||
TP18 112.00 58.70 0 TPB1,27 B1,27
|
||||
TP19 34.00 42.00 0 TPB1,27 B1,27
|
||||
X1 111.00 93.78 270 SMA_CONNECTOR J502-ND-142-0711-821/826
|
||||
X2 95.00 93.78 270 SMA_CONNECTOR J502-ND-142-0711-821/826
|
||||
568
Hardware/Eagle/VNA.mnt
Normal file
|
|
@ -0,0 +1,568 @@
|
|||
C1 97.50 82.20 90 10u C1206
|
||||
C2 84.80 75.00 180 10u C1206
|
||||
C3 84.80 83.00 180 10u C1206
|
||||
C4 96.40 72.80 0 100n C0402
|
||||
C5 95.70 74.90 90 10n C0402
|
||||
C6 89.80 79.00 180 100n C0402
|
||||
C7 84.80 87.90 180 10u C1206
|
||||
C8 84.80 72.60 180 10u C1206
|
||||
C9 99.50 72.80 180 100p C0402
|
||||
C10 84.80 85.50 180 10u C1206
|
||||
C11 84.80 70.20 180 10u C1206
|
||||
C12 108.50 75.70 90 10u C1206
|
||||
C13 106.30 75.70 90 10u C1206
|
||||
C14 75.30 72.00 270 10u C1206
|
||||
C15 73.00 72.00 270 10u C1206
|
||||
C16 108.00 80.00 180 10u C1206
|
||||
C17 108.00 82.30 180 10u C1206
|
||||
C18 21.00 46.90 0 1u C0603
|
||||
C19 102.00 50.80 180 1u C0603
|
||||
C20 29.90 26.30 0 1u C0603
|
||||
C21 95.00 52.00 180 1u C0603
|
||||
C22 21.00 40.90 0 4u7 C0603
|
||||
C23 102.00 56.80 180 4u7 C0603
|
||||
C24 29.90 20.30 0 4u7 C0603
|
||||
C25 95.00 58.00 180 4u7 C0603
|
||||
C26 20.00 38.40 270 1u C0603
|
||||
C27 103.00 59.30 90 1u C0603
|
||||
C28 28.90 18.10 270 1u C0603
|
||||
C29 91.60 45.80 0 100n C0402
|
||||
C30 111.00 90.50 270 10n C0402
|
||||
C31 99.90 39.80 90 100n C0402
|
||||
C32 91.00 44.00 270 100n C0402
|
||||
C33 96.30 37.40 90 100n C0402
|
||||
C34 99.90 42.60 90 100n C0402
|
||||
C35 97.50 37.40 270 DNP C0402
|
||||
C36 89.20 39.00 270 DNP C0402
|
||||
C37 89.20 43.30 270 DNP C0402
|
||||
C38 89.20 36.70 90 56p C0402
|
||||
C39 95.00 90.50 90 10n C0402
|
||||
C40 99.90 37.40 90 DNP C0402
|
||||
C41 85.20 39.00 270 DNP C0402
|
||||
C42 85.20 43.30 270 DNP C0402
|
||||
C43 85.20 36.70 90 180p C0402
|
||||
C44 102.30 37.40 270 DNP C0402
|
||||
C45 81.20 39.00 270 DNP C0402
|
||||
C46 81.20 43.30 270 DNP C0402
|
||||
C47 81.20 36.70 90 56p C0402
|
||||
C48 74.00 36.00 0 100n C0402
|
||||
C49 92.00 54.60 270 10u C1206
|
||||
C50 80.60 57.90 90 1u C0603
|
||||
C51 72.90 50.50 180 10n C0402
|
||||
C52 75.50 57.90 90 1u C0603
|
||||
C53 79.20 54.90 180 10u C1206
|
||||
C54 72.90 49.30 0 100n C0402
|
||||
C55 72.90 51.70 0 100n C0402
|
||||
C56 65.70 45.50 270 100n C0402
|
||||
C57 73.30 58.70 0 100n C0402
|
||||
C58 71.10 45.50 270 1u C0402
|
||||
C59 66.90 45.50 270 1u C0402
|
||||
C60 69.90 45.50 270 1u C0402
|
||||
C61 64.30 46.80 270 100n C0402
|
||||
C62 63.10 49.10 90 100n C0402
|
||||
C63 66.60 55.60 90 180p C0402
|
||||
C64 63.10 53.70 90 100n C0402
|
||||
C65 51.40 49.60 270 100n/RF C0402
|
||||
C66 67.80 57.40 0 3n3 C0402
|
||||
C67 64.90 56.30 180 18p C0402
|
||||
C68 56.80 35.30 0 100n/RF C0402
|
||||
C69 60.00 39.00 180 100n C0402
|
||||
C70 64.00 32.00 90 100n C0402
|
||||
C71 60.80 23.50 270 100n/RF C0402
|
||||
C72 63.90 21.90 0 100n C0402
|
||||
C73 63.80 20.40 180 100n C0402
|
||||
C74 61.00 16.70 270 100n/RF C0402
|
||||
C75 61.90 3.80 180 100n C0402
|
||||
C76 26.00 10.50 90 100n C0402
|
||||
C77 84.90 7.94 225 100n C0402
|
||||
C78 73.00 18.00 270 10u C1206
|
||||
C79 76.60 17.80 270 1u C0603
|
||||
C80 82.90 24.10 0 10n C0402
|
||||
C81 81.60 17.80 270 1u C0603
|
||||
C82 76.00 29.00 180 10u C1206
|
||||
C83 82.90 25.30 180 100n C0402
|
||||
C84 82.90 22.90 180 100n C0402
|
||||
C85 90.30 29.00 90 100n C0402
|
||||
C86 83.50 17.10 180 100n C0402
|
||||
C87 84.90 29.00 90 1u C0402
|
||||
C88 89.10 29.00 90 1u C0402
|
||||
C89 86.10 29.00 90 1u C0402
|
||||
C90 89.70 18.80 270 180p C0402
|
||||
C91 95.10 23.70 270 100n C0402
|
||||
C92 88.50 17.00 180 3n3 C0402
|
||||
C93 92.70 28.50 270 10n C0402
|
||||
C94 95.10 26.10 90 100n C0402
|
||||
C95 91.40 18.10 0 18p C0402
|
||||
C96 26.80 5.60 180 100n/RF C0402
|
||||
C97 9.30 36.80 0 100n C0402
|
||||
C98 9.30 38.10 0 100n C0402
|
||||
C99 12.00 6.60 90 100n/RF C0402
|
||||
C100 11.70 41.70 180 1u C0402
|
||||
C101 14.00 41.70 0 1u C0402
|
||||
C102 14.80 38.70 90 100n C0402
|
||||
C103 9.30 40.50 0 100n C0402
|
||||
C104 8.20 18.70 180 10n C0402
|
||||
C105 8.20 22.60 180 10n C0402
|
||||
C106 15.40 17.60 270 10n C0402
|
||||
C107 19.10 18.90 180 DNP C0402
|
||||
C108 8.20 25.00 180 1u C0402
|
||||
C109 16.80 20.00 180 100n/RF C0402
|
||||
C110 16.80 21.20 180 100n/RF C0402
|
||||
C111 17.00 22.60 0 10n C0402
|
||||
C112 7.80 43.90 90 DNP C0402
|
||||
C113 17.60 43.90 270 DNP C0402
|
||||
C114 8.20 21.20 0 100n C0402
|
||||
C115 13.30 46.70 270 100n C0402
|
||||
C116 12.10 46.70 90 100n C0402
|
||||
C117 8.20 20.00 180 100n C0402
|
||||
C118 8.20 16.30 0 100n C0402
|
||||
C119 8.20 23.80 180 100n C0402
|
||||
C120 14.70 25.60 90 10n C0402
|
||||
C121 12.65 48.50 0 330p C0402
|
||||
C122 17.00 23.80 0 100n C0402
|
||||
C123 11.30 25.60 90 10n C0402
|
||||
C124 13.00 26.30 180 120p C0402
|
||||
C125 9.20 49.70 0 330p C0402
|
||||
C126 12.65 49.80 0 330p C0402
|
||||
C127 16.10 49.80 0 330p C0402
|
||||
C128 13.00 28.50 180 150p C0402
|
||||
C129 6.00 48.00 0 1u C0402
|
||||
C130 13.00 30.60 180 33p C0402
|
||||
C131 6.00 53.00 0 1u C0402
|
||||
C132 9.40 55.60 0 100n C0402
|
||||
C133 93.20 5.60 0 100n/RF C0402
|
||||
C134 110.00 40.80 0 100n C0402
|
||||
C135 110.00 42.20 0 100n C0402
|
||||
C136 110.00 6.70 90 100n/RF C0402
|
||||
C137 112.80 46.00 180 1u C0402
|
||||
C138 115.20 46.00 0 1u C0402
|
||||
C139 110.00 44.80 0 100n C0402
|
||||
C140 116.00 42.70 90 100n C0402
|
||||
C141 101.40 23.20 180 10n C0402
|
||||
C142 103.00 29.90 90 10n C0402
|
||||
C143 107.00 29.90 90 10n C0402
|
||||
C144 105.00 20.10 180 DNP C0402
|
||||
C145 110.60 21.70 270 1u C0402
|
||||
C146 104.40 21.80 90 100n/RF C0402
|
||||
C147 105.60 21.80 90 100n/RF C0402
|
||||
C148 108.20 21.70 270 10n C0402
|
||||
C149 109.40 48.20 90 DNP C0402
|
||||
C150 117.90 48.20 270 DNP C0402
|
||||
C151 105.60 29.90 270 100n C0402
|
||||
C152 113.60 51.00 270 100n C0402
|
||||
C153 112.40 51.00 90 100n C0402
|
||||
C154 104.40 29.90 90 100n C0402
|
||||
C155 100.60 29.90 270 100n C0402
|
||||
C156 109.40 21.70 270 100n C0402
|
||||
C157 110.50 24.90 0 10n C0402
|
||||
C158 113.00 53.70 0 330p C0402
|
||||
C159 108.20 29.90 90 100n C0402
|
||||
C160 110.50 26.10 0 10n C0402
|
||||
C161 112.30 25.50 90 120p C0402
|
||||
C162 109.00 55.00 0 330p C0402
|
||||
C163 113.00 55.00 0 330p C0402
|
||||
C164 117.00 55.00 0 330p C0402
|
||||
C165 114.10 28.60 180 150p C0402
|
||||
C166 105.00 59.10 270 1u C0402
|
||||
C167 114.10 32.20 180 33p C0402
|
||||
C168 110.00 59.10 270 1u C0402
|
||||
C169 110.00 61.30 0 100n C0402
|
||||
C170 54.00 13.40 90 100n/RF C0402
|
||||
C171 37.40 18.00 180 10n C0402
|
||||
C172 45.60 19.20 0 10n C0402
|
||||
C173 28.30 31.10 90 DNP C0402
|
||||
C174 38.10 31.00 270 DNP C0402
|
||||
C175 45.40 13.40 0 10n C0402
|
||||
C176 46.80 16.00 270 DNP C0402
|
||||
C177 45.60 21.60 0 1u C0402
|
||||
C178 45.00 15.40 180 100n/RF C0402
|
||||
C179 45.00 16.70 180 100n/RF C0402
|
||||
C180 37.40 14.00 180 10n C0402
|
||||
C181 33.80 34.00 270 100n C0402
|
||||
C182 32.60 34.00 90 100n C0402
|
||||
C183 37.40 16.60 0 100n C0402
|
||||
C184 33.20 36.70 0 330p C0402
|
||||
C185 37.40 15.40 180 100n C0402
|
||||
C186 37.40 11.60 0 100n C0402
|
||||
C187 29.50 38.10 0 330p C0402
|
||||
C188 33.20 38.10 0 330p C0402
|
||||
C189 37.00 36.70 0 330p C0402
|
||||
C190 37.40 19.20 180 100n C0402
|
||||
C191 43.50 21.00 90 10n C0402
|
||||
C192 40.00 21.00 90 10n C0402
|
||||
C193 45.60 20.40 0 100n C0402
|
||||
C194 41.75 21.65 180 120p C0402
|
||||
C195 37.00 39.50 0 1u C0402
|
||||
C196 41.75 23.95 180 150p C0402
|
||||
C197 41.76 26.42 180 33p C0402
|
||||
C198 37.00 44.50 0 1u C0402
|
||||
C199 37.20 22.40 90 100n C0402
|
||||
C200 34.20 22.40 90 100n C0402
|
||||
C201 30.50 43.70 90 100n C0402
|
||||
C202 31.90 28.90 180 1u C0402
|
||||
C203 34.60 28.90 0 1u C0402
|
||||
C204 37.00 27.70 180 100n C0402
|
||||
C205 32.60 22.40 90 100n C0402
|
||||
C206 60.50 73.00 180 100n C0402
|
||||
C207 70.00 79.70 90 100n C0402
|
||||
C208 61.30 84.30 90 100n C0402
|
||||
C209 50.20 64.20 180 100n C0402
|
||||
C210 34.50 51.80 180 100n C0402
|
||||
C211 21.40 66.60 180 100n C0402
|
||||
C212 41.50 52.80 270 100n C0402
|
||||
C213 40.30 52.50 270 100n C0402
|
||||
C214 49.10 66.80 0 100n C0402
|
||||
C215 49.10 65.60 0 100n C0402
|
||||
C216 28.60 53.20 0 100n C0402
|
||||
C217 34.50 53.00 180 100n C0402
|
||||
C218 18.70 61.30 270 100n C0402
|
||||
C219 36.10 80.40 90 100n C0402
|
||||
C220 43.00 79.80 0 100n C0402
|
||||
C221 27.50 79.80 180 100n C0402
|
||||
C222 21.40 68.60 180 100n C0402
|
||||
C223 28.40 43.70 90 100p C0402
|
||||
C224 28.90 39.40 180 100p C0402
|
||||
C225 28.90 36.80 180 100p C0402
|
||||
C226 28.90 33.20 180 100p C0402
|
||||
C227 15.40 54.30 90 100p C0402
|
||||
C228 15.40 51.70 270 100p C0402
|
||||
C229 18.50 51.50 180 100p C0402
|
||||
C230 20.60 49.70 90 100p C0402
|
||||
C231 108.70 50.30 180 100p C0402
|
||||
C232 108.00 52.10 270 100p C0402
|
||||
C233 105.80 51.00 0 100p C0402
|
||||
C234 105.50 55.10 0 100p C0402
|
||||
C235 80.40 20.20 0 100p C0402
|
||||
C236 87.44 11.06 45 100p C0402
|
||||
C237 48.70 22.70 180 100p C0402
|
||||
C238 48.70 19.20 180 100p C0402
|
||||
C239 51.10 22.70 0 100p C0402
|
||||
C240 51.10 19.20 0 100p C0402
|
||||
C241 18.20 33.20 180 100p C0402
|
||||
C242 18.20 29.50 180 100p C0402
|
||||
C243 54.00 23.50 90 100p C0402
|
||||
C244 54.00 18.10 270 100p C0402
|
||||
C245 69.30 38.50 270 100p C0402
|
||||
C246 66.00 38.50 90 100p C0402
|
||||
C247 73.60 38.50 270 100p C0402
|
||||
C248 70.50 38.50 90 100p C0402
|
||||
C249 45.50 29.60 180 100p C0402
|
||||
C250 66.50 33.50 90 100p C0402
|
||||
C251 45.90 28.40 180 100p C0402
|
||||
C252 67.00 31.10 90 100p C0402
|
||||
C253 42.00 31.20 180 100p C0402
|
||||
C254 66.30 29.20 0 100p C0402
|
||||
C255 42.00 30.00 180 100p C0402
|
||||
C256 66.30 28.00 0 100p C0402
|
||||
C257 63.90 24.00 180 100p C0402
|
||||
C258 46.10 23.50 270 100p C0402
|
||||
C259 65.70 24.50 270 100p C0402
|
||||
C260 46.10 25.90 90 100p C0402
|
||||
C261 66.90 24.50 270 100p C0402
|
||||
C262 42.00 28.80 180 100p C0402
|
||||
C263 39.10 52.50 270 100p C0402
|
||||
C264 37.90 52.50 270 100p C0402
|
||||
C265 53.40 42.00 0 100p C0402
|
||||
C266 36.70 52.50 270 100p C0402
|
||||
C267 59.00 60.30 0 100p C0402
|
||||
C268 70.20 55.60 90 100p C0402
|
||||
C269 5.10 15.40 90 100n C0402
|
||||
C270 34.70 15.90 135 100n C0402
|
||||
C271 52.80 60.30 180 100p C0402
|
||||
C272 74.20 47.30 0 100p C0402
|
||||
C273 46.00 55.90 180 100p C0402
|
||||
C274 74.20 46.00 0 100p C0402
|
||||
D1 103.01 75.60 90 MBRS2040LT3G SMB
|
||||
IC1 98.50 77.00 90 MIC2253 SON50P300X300X90-13T170X240N
|
||||
IC2 84.80 79.00 180 LM3370SD-4221 SON50P400X500X80-17T260X400N
|
||||
IC3 21.00 43.90 90 LDL212PU50R SON95P300X300X100-7T170X240N
|
||||
IC4 102.00 53.80 270 LDL212PU50R SON95P300X300X100-7T170X240N
|
||||
IC5 29.90 23.30 90 LDL212PU50R SON95P300X300X100-7T170X240N
|
||||
IC6 95.00 55.00 270 LDL212PU50R SON95P300X300X100-7T170X240N
|
||||
IC7 96.00 42.00 180 SI5351C QFN50P400X400X90-21T270N
|
||||
IC8 86.30 55.60 180 AP2114H SOT230P700X180-4
|
||||
IC9 78.10 57.90 180 NCP702-3.3 SOT95P240X110-5
|
||||
IC10 68.05 50.25 270 MAX2871 QFN50P500X500X80-33T310
|
||||
IC11 51.20 46.80 90 RFSW6042 QFN40P180X180X55-13T76N
|
||||
IC12 51.20 37.20 270 RFSW6042 QFN40P180X180X55-13T76N
|
||||
IC13 60.80 35.30 0 QPC6324 QFN50P400X400X75-21T206
|
||||
IC14 61.60 27.50 270 RFSA3714 QFN50P400X400X75-25T270
|
||||
IC15 60.65 20.60 270 TRF37A73 SON50P200X200X80-9T90X160N
|
||||
IC16 61.00 7.00 180 QPC6324 QFN50P400X400X75-21T206
|
||||
IC17 89.00 8.00 45 QPC6324 QFN50P400X400X75-21T206
|
||||
IC18 30.00 8.00 45 QPC6324 QFN50P400X400X75-21T206
|
||||
IC19 76.00 24.00 0 AP2114H SOT230P700X180-4
|
||||
IC20 79.10 17.80 0 NCP702-3.3 SOT95P240X110-5
|
||||
IC21 88.00 24.40 90 MAX2871 QFN50P500X500X80-33T310
|
||||
IC22 12.50 37.50 90 LT5560 SON50P300X300X80-9T165X238
|
||||
IC23 12.70 43.90 180 THS4521IDGKR SOP65P490X110-8N
|
||||
IC24 12.50 20.60 0 ADL5801 QFN50P400X400X100-25T250N
|
||||
IC25 6.00 50.50 90 NCP702-1.8 SOT95P240X110-5
|
||||
IC26 12.40 53.50 90 MCP33131D-10-E/MS SOP50P490X110-10N
|
||||
IC27 113.60 41.50 90 LT5560 SON50P300X300X80-9T165X238
|
||||
IC28 113.00 48.20 180 THS4521IDGKR SOP65P490X110-8N
|
||||
IC29 105.00 26.00 270 ADL5801 QFN50P400X400X100-25T250N
|
||||
IC30 107.50 59.10 0 NCP702-1.8 SOT95P240X110-5
|
||||
IC31 112.70 59.10 90 MCP33131D-10-E/MS SOP50P490X110-10N
|
||||
IC32 33.20 31.10 180 THS4521IDGKR SOP65P490X110-8N
|
||||
IC33 41.30 16.00 0 ADL5801 QFN50P400X400X100-25T250N
|
||||
IC34 37.00 42.00 90 NCP702-1.8 SOT95P240X110-5
|
||||
IC35 33.00 42.30 90 MCP33131D-10-E/MS SOP50P490X110-10N
|
||||
IC36 35.70 25.40 180 LT5560 SON50P300X300X80-9T165X238
|
||||
IC37 65.10 77.80 90 STM32G431CB QFN50P700X700X60-49T560N
|
||||
J2 12.00 -0.12 90 BU-1420701851 BU-1420701851
|
||||
J3 110.00 -0.12 90 BU-1420701851 BU-1420701851
|
||||
J4 64.00 88.60 180 TYPE-C16P(073) TYPE-C16P
|
||||
L1 101.50 81.90 0 2u2 SRN5040
|
||||
L2 90.30 83.00 90 2u2 SRN5040
|
||||
L3 90.30 75.00 270 2u2 SRN5040
|
||||
L4 79.30 72.00 90 2u2 SRN5040
|
||||
L5 112.45 75.65 90 2u2 SRN5040
|
||||
L6 22.00 38.40 270 Ferrite R0402
|
||||
L7 101.00 59.30 90 Ferrite R0402
|
||||
L8 30.90 17.80 270 Ferrite R0402
|
||||
L9 92.00 58.00 180 Ferrite R0402
|
||||
L10 92.20 44.00 270 Ferrite R0402
|
||||
L11 64.30 18.40 180 10u INDC2012X100N
|
||||
L12 16.80 38.70 270 Ferrite R0402
|
||||
L13 5.40 46.20 270 Ferrite R0402
|
||||
L14 87.20 36.00 180 330n L0402
|
||||
L15 16.80 41.40 270 Ferrite R0402
|
||||
L16 17.50 25.60 90 Ferrite R0402
|
||||
L17 7.70 26.80 90 Ferrite R0402
|
||||
L18 83.20 36.00 180 330n L0402
|
||||
L19 79.90 53.00 180 Ferrite R0402
|
||||
L20 73.30 57.20 180 Ferrite R0402
|
||||
L21 63.00 39.00 180 Ferrite R0402
|
||||
L22 65.20 32.00 270 Ferrite R0402
|
||||
L23 66.10 20.40 180 Ferrite R0402
|
||||
L24 61.60 18.40 180 330n L0402
|
||||
L25 64.30 4.50 90 Ferrite R0402
|
||||
L26 84.00 9.60 270 Ferrite R0402
|
||||
L27 24.80 10.50 270 Ferrite R0402
|
||||
L28 80.00 29.00 0 Ferrite R0402
|
||||
L29 83.50 18.50 0 Ferrite R0402
|
||||
L30 11.80 34.30 180 330n L0402
|
||||
L31 14.20 34.30 0 330n L0402
|
||||
L32 14.40 23.80 180 330n L0402
|
||||
L33 11.60 23.80 0 330n L0402
|
||||
L34 14.70 27.90 90 68n L0402
|
||||
L35 11.30 27.90 90 68n L0402
|
||||
L36 14.70 30.20 90 33n L0402
|
||||
L37 11.30 30.20 90 33n L0402
|
||||
L38 112.80 38.20 180 330n L0402
|
||||
L39 115.40 38.20 0 330n L0402
|
||||
L40 108.20 24.25 90 330n L0402
|
||||
L41 108.20 26.70 270 330n L0402
|
||||
L42 114.70 26.80 90 68n L0402
|
||||
L43 113.50 26.80 90 68n L0402
|
||||
L44 114.70 30.40 90 33n L0402
|
||||
L45 113.50 30.40 90 33n L0402
|
||||
L46 43.20 19.20 180 330n L0402
|
||||
L47 40.50 19.20 0 330n L0402
|
||||
L48 43.50 23.30 90 68n L0402
|
||||
L49 40.00 23.30 90 68n L0402
|
||||
L50 43.50 25.60 90 33n L0402
|
||||
L51 40.00 25.60 90 33n L0402
|
||||
L52 44.79 25.63 270 330n L0402
|
||||
L53 38.70 25.60 270 330n L0402
|
||||
L54 113.20 22.20 0 Ferrite R0402
|
||||
L55 109.40 29.90 90 Ferrite R0402
|
||||
L56 116.30 51.00 90 Ferrite R0402
|
||||
L57 117.50 44.80 0 Ferrite R0402
|
||||
L58 105.20 61.10 180 Ferrite R0402
|
||||
L59 45.40 12.20 0 Ferrite R0402
|
||||
L60 38.80 21.00 90 Ferrite R0402
|
||||
L61 38.00 29.10 0 Ferrite R0402
|
||||
L62 37.00 34.10 0 Ferrite R0402
|
||||
L63 37.00 38.40 180 Ferrite R0402
|
||||
L64 73.40 53.80 0 Ferrite R0402
|
||||
L65 83.80 28.00 90 Ferrite R0402
|
||||
LED1 34.60 82.70 180 Red CHIPLED_0603
|
||||
LED2 37.60 82.80 180 Green CHIPLED_0603
|
||||
LED3 31.60 82.80 180 Red CHIPLED_0603
|
||||
LED4 28.60 82.80 180 Red CHIPLED_0603
|
||||
LED5 25.60 82.80 180 Red CHIPLED_0603
|
||||
LED6 22.60 82.80 180 Green CHIPLED_0603
|
||||
LED7 19.60 82.80 180 Green CHIPLED_0603
|
||||
LED8 16.60 82.80 180 Green CHIPLED_0603
|
||||
LED9 13.60 82.80 180 Green CHIPLED_0603
|
||||
LED10 10.60 82.80 180 Green CHIPLED_0603
|
||||
LP1 47.70 41.90 90 LP0603A0947ANTR FILTRDFN160X84X70-4N
|
||||
LP2 55.60 42.10 90 LP0603N3500ANTR FILTRDFN160X84X70-4N
|
||||
LP3 58.00 42.10 90 LP0603A1880ANTR FILTRDFN160X84X70-4N
|
||||
Q1 70.00 86.00 180 SSM3J338R SOTFL95P240X80-3N
|
||||
Q2 73.30 87.90 0 SSM3J338R SOTFL95P240X80-3N
|
||||
R1 95.70 77.60 90 620 R0402
|
||||
R2 99.50 70.20 0 4k7 R0402
|
||||
R3 96.40 70.20 0 10k R0402
|
||||
R4 99.50 71.50 0 38k3 R0402
|
||||
R5 96.40 71.50 0 10k R0402
|
||||
R6 97.40 45.20 180 10k R0402
|
||||
R7 80.00 36.70 90 100 R0402
|
||||
R8 78.00 36.00 180 62 R0402
|
||||
R9 76.00 36.70 270 100 R0402
|
||||
R10 68.70 45.50 90 5k1 R0402
|
||||
R11 58.50 59.10 180 10k R0402
|
||||
R12 63.10 51.40 90 49R9 R0402
|
||||
R13 64.30 49.10 270 49R9 R0402
|
||||
R14 63.10 46.80 90 49R9 R0402
|
||||
R15 64.90 54.90 180 1k8 R0402
|
||||
R16 69.00 55.60 270 82 R0402
|
||||
R17 67.80 55.60 90 330 R0402
|
||||
R18 53.00 44.00 90 10k R0402
|
||||
R19 49.40 44.00 90 10k R0402
|
||||
R20 50.60 44.00 270 10k R0402
|
||||
R21 51.80 44.00 270 10k R0402
|
||||
R22 51.80 40.00 90 10k R0402
|
||||
R23 53.00 40.00 270 10k R0402
|
||||
R24 50.60 40.00 90 10k R0402
|
||||
R25 49.40 40.00 270 10k R0402
|
||||
R26 61.00 14.40 270 2R7 R0402
|
||||
R27 60.30 12.70 0 402 R0402
|
||||
R28 59.70 11.00 90 56 R0402
|
||||
R29 61.00 11.00 270 2R7 R0402
|
||||
R30 87.30 29.00 270 5k1 R0402
|
||||
R31 86.06 18.81 90 10k R0402
|
||||
R32 93.30 23.10 0 49R9 R0402
|
||||
R33 93.30 24.30 0 49R9 R0402
|
||||
R34 93.30 25.50 0 49R9 R0402
|
||||
R35 93.30 26.70 0 49R9 R0402
|
||||
R36 91.40 19.50 0 1k8 R0402
|
||||
R37 87.30 18.80 90 82 R0402
|
||||
R38 94.00 28.50 90 49R9 R0402
|
||||
R39 88.50 18.80 270 330 R0402
|
||||
R40 96.50 5.95 180 PAT0816-C-3DB-T5 PAT0816
|
||||
R45 17.40 12.00 300 49R9 R0402
|
||||
R46 19.50 12.00 240 49R9 R0402
|
||||
R47 109.65 10.00 270 DNP PAT0816
|
||||
R48 11.65 10.00 270 DNP PAT0816
|
||||
R49 23.25 5.95 180 PAT0816-C-3DB-T5 PAT0816
|
||||
R50 22.10 14.00 0 49R9 R0402
|
||||
R53 11.70 40.50 0 220 R0402
|
||||
R54 14.00 40.50 180 220 R0402
|
||||
R55 9.00 43.90 90 6k8 R0402
|
||||
R56 16.40 43.90 270 6k8 R0402
|
||||
R57 13.00 17.00 0 DNP R0402
|
||||
R58 10.00 46.70 270 220 R0402
|
||||
R59 15.20 46.70 270 220 R0402
|
||||
R60 8.20 17.50 180 1k R0402
|
||||
R61 10.90 49.10 270 220 R0402
|
||||
R62 14.40 49.20 270 220 R0402
|
||||
R63 13.00 31.80 0 56 R0402
|
||||
R64 14.70 32.50 270 20 R0402
|
||||
R65 11.30 32.50 270 20 R0402
|
||||
R66 13.00 33.10 180 56 R0402
|
||||
R72 105.40 13.30 240 49R9 R0402
|
||||
R73 103.40 13.30 300 49R9 R0402
|
||||
R76 100.90 15.20 180 49R9 R0402
|
||||
R80 112.80 44.80 0 220 R0402
|
||||
R81 115.20 44.80 180 220 R0402
|
||||
R82 108.20 48.20 90 6k8 R0402
|
||||
R83 116.70 48.20 270 6k8 R0402
|
||||
R84 100.60 25.50 270 DNP R0402
|
||||
R85 111.00 52.00 270 220 R0402
|
||||
R86 115.00 52.00 270 220 R0402
|
||||
R87 101.80 29.90 90 1k R0402
|
||||
R88 111.00 54.40 270 220 R0402
|
||||
R89 115.00 54.40 270 220 R0402
|
||||
R90 114.10 33.40 0 56 R0402
|
||||
R91 114.70 35.20 270 20 R0402
|
||||
R92 113.50 35.20 270 20 R0402
|
||||
R93 114.10 37.00 180 56 R0402
|
||||
R94 29.50 31.10 90 4k7 R0402
|
||||
R95 36.90 31.00 270 4k7 R0402
|
||||
R96 31.30 34.90 270 220 R0402
|
||||
R97 35.10 35.00 270 220 R0402
|
||||
R98 31.30 37.40 270 220 R0402
|
||||
R99 35.10 37.40 270 220 R0402
|
||||
R100 42.10 12.30 0 DNP R0402
|
||||
R101 37.40 12.80 180 1k R0402
|
||||
R102 32.60 24.80 90 220 R0402
|
||||
R103 34.60 27.70 180 220 R0402
|
||||
R104 56.90 73.70 180 0 R0402
|
||||
R105 56.90 71.30 180 0 R0402
|
||||
R106 56.90 72.50 180 0 R0402
|
||||
R107 56.90 70.10 180 0 R0402
|
||||
R108 56.90 68.90 180 0 R0402
|
||||
R109 56.90 74.90 180 0 R0402
|
||||
R110 56.90 76.10 180 0 R0402
|
||||
R111 53.90 73.70 180 DNP R0402
|
||||
R112 53.90 71.30 180 DNP R0402
|
||||
R113 53.90 72.50 180 DNP R0402
|
||||
R114 53.90 70.10 180 DNP R0402
|
||||
R115 53.90 68.90 180 DNP R0402
|
||||
R116 67.30 84.30 90 10k R0402
|
||||
R117 66.00 84.30 90 10k R0402
|
||||
R118 64.00 84.30 270 20 R0402
|
||||
R119 62.70 84.30 90 20 R0402
|
||||
R120 36.10 82.80 90 330 R0402
|
||||
R121 49.10 69.20 0 10k R0402
|
||||
R122 49.10 68.00 180 10k R0402
|
||||
R123 115.10 60.60 270 20 R0402
|
||||
R124 49.20 60.20 180 20 R0402
|
||||
R125 70.90 89.50 270 10k R0402
|
||||
R126 93.00 38.50 270 20 R0402
|
||||
R127 48.50 57.60 0 10k R0402
|
||||
R128 48.50 58.90 0 10k R0402
|
||||
R129 46.00 78.00 90 10k R0402
|
||||
R130 20.00 61.30 90 10k R0402
|
||||
R131 22.30 61.30 270 10k R0402
|
||||
R132 26.30 53.20 0 10k R0402
|
||||
R133 26.30 54.40 180 10k R0402
|
||||
R134 39.10 82.80 270 330 R0402
|
||||
R135 33.10 82.80 270 330 R0402
|
||||
R136 30.10 82.80 270 330 R0402
|
||||
R137 27.10 82.80 270 330 R0402
|
||||
R138 24.10 82.80 270 330 R0402
|
||||
R139 21.10 82.80 270 330 R0402
|
||||
R140 18.10 82.80 270 330 R0402
|
||||
R141 15.10 82.80 270 330 R0402
|
||||
R142 12.10 82.80 270 330 R0402
|
||||
R143 28.40 41.20 90 10k R0402
|
||||
R144 29.50 35.00 270 10k R0402
|
||||
R145 16.60 53.00 90 10k R0402
|
||||
R146 19.20 49.70 270 10k R0402
|
||||
R147 109.30 52.10 270 10k R0402
|
||||
R148 105.10 53.10 90 10k R0402
|
||||
R149 85.40 10.80 90 10k R0402
|
||||
R150 49.30 21.00 90 10k R0402
|
||||
R151 50.50 21.00 90 10k R0402
|
||||
R152 18.90 31.30 90 10k R0402
|
||||
R153 54.00 21.10 90 10k R0402
|
||||
R154 67.30 38.50 90 10k R0402
|
||||
R155 72.40 38.50 90 10k R0402
|
||||
R156 48.50 29.20 180 10k R0402
|
||||
R157 50.90 28.40 180 10k R0402
|
||||
R158 48.50 27.60 180 10k R0402
|
||||
R159 50.90 26.80 180 10k R0402
|
||||
R160 48.50 24.40 0 10k R0402
|
||||
R161 50.90 25.20 0 10k R0402
|
||||
R162 48.50 26.00 0 10k R0402
|
||||
R163 57.30 57.60 180 10k R0402
|
||||
R164 51.60 59.10 180 100 R0402
|
||||
R165 55.80 60.30 180 10k R0402
|
||||
R166 49.00 55.90 180 10k R0402
|
||||
R167 52.80 55.90 180 100 R0402
|
||||
R168 5.10 19.20 270 75 R0402
|
||||
R169 4.40 21.10 180 100 R0402
|
||||
R170 55.40 59.10 180 100 R0402
|
||||
R171 56.00 55.90 180 100 R0402
|
||||
R172 4.40 17.30 180 100 R0402
|
||||
R173 34.70 17.80 180 75 R0402
|
||||
R174 35.40 19.60 90 100 R0402
|
||||
R175 32.90 19.00 90 100 R0402
|
||||
R176 87.20 44.00 180 0 R0402
|
||||
R177 83.20 44.00 180 0 R0402
|
||||
R178 83.20 39.60 180 0 R0402
|
||||
R179 87.20 39.60 180 0 R0402
|
||||
R180 98.70 37.40 270 0 R0402
|
||||
R181 101.10 37.40 90 0 R0402
|
||||
T1 18.50 15.70 270 B012-617DB-1-63-B331 EASTEVER_BALUN
|
||||
T2 104.40 17.00 270 B012-617DB-1-63-B331 EASTEVER_BALUN
|
||||
T3 50.00 15.40 0 B012-617DB-1-63-B331 EASTEVER_BALUN
|
||||
U1 55.40 65.20 90 W25Q16BVSN SO08
|
||||
U2 35.00 67.00 90 6SLX9TQG144 TQ144
|
||||
X1 111.00 93.78 270 SMA_CONNECTOR J502-ND-142-0711-821/826
|
||||
X2 95.00 93.78 270 SMA_CONNECTOR J502-ND-142-0711-821/826
|
||||
Y1 102.10 41.00 90 DSB221SDN/26MHz 2.5X2.0_KXO-86-TCXO
|
||||
1
Hardware/Kicad/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
*-backups/
|
||||
16560
Hardware/Kicad/AttenuatorSwitches.kicad_sch
Normal file
20819
Hardware/Kicad/FPGAConnections.kicad_sch
Normal file
10167
Hardware/Kicad/FPGAMicrocontroller.kicad_sch
Normal file
15433
Hardware/Kicad/HighFreqSource.kicad_sch
Normal file
9091
Hardware/Kicad/LocalOsc1.kicad_sch
Normal file
9546
Hardware/Kicad/LocalOsc2_RefClock.kicad_sch
Normal file
18195
Hardware/Kicad/Port1.kicad_sch
Normal file
18048
Hardware/Kicad/Port2.kicad_sch
Normal file
17023
Hardware/Kicad/PowerSupply.kicad_sch
Normal file
BIN
Hardware/Kicad/Production/Mar2024Production.zip
Normal file
29279
Hardware/Kicad/Production/Mar2024Production/VNA-B_Cu.gbr
Normal file
2325
Hardware/Kicad/Production/Mar2024Production/VNA-B_Mask.gbr
Normal file
27
Hardware/Kicad/Production/Mar2024Production/VNA-B_Paste.gbr
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,8.0.1*%
|
||||
%TF.CreationDate,2024-03-24T21:42:04-04:00*%
|
||||
%TF.ProjectId,VNA,564e412e-6b69-4636-9164-5f7063625858,rev?*%
|
||||
%TF.SameCoordinates,PX535a28cPY8422900*%
|
||||
%TF.FileFunction,Paste,Bot*%
|
||||
%TF.FilePolarity,Positive*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 8.0.1) date 2024-03-24 21:42:04*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%ADD10R,2.286000X5.080000*%
|
||||
%ADD11R,2.667000X4.191000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X7580400Y665400D03*
|
||||
X16419600Y665400D03*
|
||||
X105580400Y665400D03*
|
||||
X114419600Y665400D03*
|
||||
D11*
|
||||
X98494600Y93784600D03*
|
||||
X91505400Y93784600D03*
|
||||
X114494600Y93784600D03*
|
||||
X107505400Y93784600D03*
|
||||
M02*
|
||||
4398
Hardware/Kicad/Production/Mar2024Production/VNA-B_Silkscreen.gbr
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
%TF.GenerationSoftware,KiCad,Pcbnew,8.0.1*%
|
||||
%TF.CreationDate,2024-03-24T21:42:04-04:00*%
|
||||
%TF.ProjectId,VNA,564e412e-6b69-4636-9164-5f7063625858,rev?*%
|
||||
%TF.SameCoordinates,PX535a28cPY8422900*%
|
||||
%TF.FileFunction,Profile,NP*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 8.0.1) date 2024-03-24 21:42:04*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X122000000Y96000000D02*
|
||||
X0Y96000000D01*
|
||||
X0Y-2000000D02*
|
||||
X122000000Y-2000000D01*
|
||||
X0Y96000000D02*
|
||||
X0Y-2000000D01*
|
||||
X122000000Y-2000000D02*
|
||||
X122000000Y96000000D01*
|
||||
M02*
|
||||
59777
Hardware/Kicad/Production/Mar2024Production/VNA-F_Cu.gbr
Normal file
4744
Hardware/Kicad/Production/Mar2024Production/VNA-F_Mask.gbr
Normal file
2623
Hardware/Kicad/Production/Mar2024Production/VNA-F_Paste.gbr
Normal file
9416
Hardware/Kicad/Production/Mar2024Production/VNA-F_Silkscreen.gbr
Normal file
29249
Hardware/Kicad/Production/Mar2024Production/VNA-In1_Cu.gbr
Normal file
28823
Hardware/Kicad/Production/Mar2024Production/VNA-In2_Cu.gbr
Normal file
31548
Hardware/Kicad/Production/Mar2024Production/VNA-In3_Cu.gbr
Normal file
31982
Hardware/Kicad/Production/Mar2024Production/VNA-In4_Cu.gbr
Normal file
21
Hardware/Kicad/Production/Mar2024Production/VNA-NPTH.drl
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
M48
|
||||
; DRILL file {KiCad 8.0.1} date 2024-03-25T21:57:40-0400
|
||||
; FORMAT={-:-/ absolute / metric / decimal}
|
||||
; #@! TF.CreationDate,2024-03-25T21:57:40-04:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,8.0.1
|
||||
; #@! TF.FileFunction,NonPlated,1,6,NPTH
|
||||
FMAT,2
|
||||
METRIC
|
||||
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
|
||||
T1C0.650
|
||||
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
|
||||
T2C1.200
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X61.109Y89.699
|
||||
X66.889Y89.699
|
||||
T2
|
||||
X51.5Y93.0
|
||||
M30
|
||||
3015
Hardware/Kicad/Production/Mar2024Production/VNA-PTH.drl
Normal file
|
|
@ -0,0 +1 @@
|
|||
Ref,Val,Package,PosX,PosY,Rot,Side
|
||||
|
224
Hardware/Kicad/Production/Mar2024Production/VNA-job.gbrjob
Normal file
|
|
@ -0,0 +1,224 @@
|
|||
{
|
||||
"Header": {
|
||||
"GenerationSoftware": {
|
||||
"Vendor": "KiCad",
|
||||
"Application": "Pcbnew",
|
||||
"Version": "8.0.1"
|
||||
},
|
||||
"CreationDate": "2024-03-24T21:42:04-04:00"
|
||||
},
|
||||
"GeneralSpecs": {
|
||||
"ProjectId": {
|
||||
"Name": "VNA",
|
||||
"GUID": "564e412e-6b69-4636-9164-5f7063625858",
|
||||
"Revision": "rev?"
|
||||
},
|
||||
"Size": {
|
||||
"X": 122.05,
|
||||
"Y": 98.05
|
||||
},
|
||||
"LayerNumber": 6,
|
||||
"BoardThickness": 1.5849,
|
||||
"Finish": "None",
|
||||
"ImpedanceControlled": true
|
||||
},
|
||||
"DesignRules": [
|
||||
{
|
||||
"Layers": "Outer",
|
||||
"PadToPad": 0.15,
|
||||
"PadToTrack": 0.15,
|
||||
"TrackToTrack": 0.15,
|
||||
"MinLineWidth": 0.15,
|
||||
"TrackToRegion": 0.15,
|
||||
"RegionToRegion": 0.15
|
||||
},
|
||||
{
|
||||
"Layers": "Inner",
|
||||
"PadToPad": 0.0,
|
||||
"PadToTrack": 0.0,
|
||||
"TrackToTrack": 0.15,
|
||||
"MinLineWidth": 0.15,
|
||||
"TrackToRegion": 0.15,
|
||||
"RegionToRegion": 0.15
|
||||
}
|
||||
],
|
||||
"FilesAttributes": [
|
||||
{
|
||||
"Path": "VNA-F_Cu.gbr",
|
||||
"FileFunction": "Copper,L1,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-In1_Cu.gbr",
|
||||
"FileFunction": "Copper,L2,Inr",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-In2_Cu.gbr",
|
||||
"FileFunction": "Copper,L3,Inr",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-In3_Cu.gbr",
|
||||
"FileFunction": "Copper,L4,Inr",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-In4_Cu.gbr",
|
||||
"FileFunction": "Copper,L5,Inr",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-B_Cu.gbr",
|
||||
"FileFunction": "Copper,L6,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-F_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-B_Paste.gbr",
|
||||
"FileFunction": "SolderPaste,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-F_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-B_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-F_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Top",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-B_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Bot",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "VNA-Edge_Cuts.gbr",
|
||||
"FileFunction": "Profile",
|
||||
"FilePolarity": "Positive"
|
||||
}
|
||||
],
|
||||
"MaterialStackup": [
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Color": "White",
|
||||
"Name": "Top Silk Screen"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Name": "Top Solder Paste"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Color": "Green",
|
||||
"Thickness": 0.0152,
|
||||
"Name": "Top Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.035,
|
||||
"Name": "F.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Color": "R109G116B75",
|
||||
"Thickness": 0.2104,
|
||||
"Material": "7628",
|
||||
"DielectricConstant": "4.4",
|
||||
"LossTangent": "0.02",
|
||||
"Name": "F.Cu/In1.Cu",
|
||||
"Notes": "Type: dielectric layer 1 (from F.Cu to In1.Cu)"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.0152,
|
||||
"Name": "In1.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Color": "R109G116B75",
|
||||
"Thickness": 0.4,
|
||||
"Material": "FR4",
|
||||
"DielectricConstant": "4.6",
|
||||
"LossTangent": "0.02",
|
||||
"Name": "In1.Cu/In2.Cu",
|
||||
"Notes": "Type: dielectric layer 2 (from In1.Cu to In2.Cu)"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.0152,
|
||||
"Name": "In2.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Color": "R109G116B75",
|
||||
"Thickness": 0.2028,
|
||||
"Material": "7628",
|
||||
"DielectricConstant": "4.4",
|
||||
"LossTangent": "0.02",
|
||||
"Name": "In2.Cu/In3.Cu",
|
||||
"Notes": "Type: dielectric layer 3 (from In2.Cu to In3.Cu)"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.0152,
|
||||
"Name": "In3.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Color": "R109G116B75",
|
||||
"Thickness": 0.4,
|
||||
"Material": "FR4",
|
||||
"DielectricConstant": "4.5",
|
||||
"LossTangent": "0.02",
|
||||
"Name": "In3.Cu/In4.Cu",
|
||||
"Notes": "Type: dielectric layer 4 (from In3.Cu to In4.Cu)"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.0152,
|
||||
"Name": "In4.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Color": "R109G116B75",
|
||||
"Thickness": 0.2104,
|
||||
"Material": "7628",
|
||||
"DielectricConstant": "4.6",
|
||||
"LossTangent": "0.02",
|
||||
"Name": "In4.Cu/B.Cu",
|
||||
"Notes": "Type: dielectric layer 5 (from In4.Cu to B.Cu)"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.035,
|
||||
"Name": "B.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Color": "Green",
|
||||
"Thickness": 0.0152,
|
||||
"Name": "Bottom Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "SolderPaste",
|
||||
"Name": "Bottom Solder Paste"
|
||||
},
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Color": "White",
|
||||
"Name": "Bottom Silk Screen"
|
||||
}
|
||||
]
|
||||
}
|
||||
569
Hardware/Kicad/Production/Mar2024Production/VNA-top-pos.csv
Normal file
|
|
@ -0,0 +1,569 @@
|
|||
Ref,Val,Package,PosX,PosY,Rot,Side
|
||||
"C1","10uF","C_1206_3216Metric",97.500000,82.200000,90.000000,top
|
||||
"C2","10uF","C_1206_3216Metric",84.800000,75.000000,180.000000,top
|
||||
"C3","10uF","C_1206_3216Metric",84.800000,83.000000,180.000000,top
|
||||
"C4","100nF","C_0402_1005Metric",96.400000,72.800000,0.000000,top
|
||||
"C5","10nF","C_0402_1005Metric",95.700000,74.900000,90.000000,top
|
||||
"C6","100nF","C_0402_1005Metric",89.800000,79.000000,180.000000,top
|
||||
"C7","10uF","C_1206_3216Metric",84.800000,87.900000,180.000000,top
|
||||
"C8","10uF","C_1206_3216Metric",84.800000,72.600000,180.000000,top
|
||||
"C9","100pF","C_0402_1005Metric",99.500000,72.800000,180.000000,top
|
||||
"C10","10uF","C_1206_3216Metric",84.800000,85.500000,180.000000,top
|
||||
"C11","10uF","C_1206_3216Metric",84.800000,70.200000,180.000000,top
|
||||
"C12","10uF","C_1206_3216Metric",108.500000,75.700000,90.000000,top
|
||||
"C13","10uF","C_1206_3216Metric",106.300000,75.700000,90.000000,top
|
||||
"C14","10uF","C_1206_3216Metric",75.300000,72.000000,-90.000000,top
|
||||
"C15","10uF","C_1206_3216Metric",73.000000,72.000000,-90.000000,top
|
||||
"C16","10uF","C_1206_3216Metric",108.000000,80.000000,180.000000,top
|
||||
"C17","10uF","C_1206_3216Metric",108.000000,82.300000,180.000000,top
|
||||
"C18","1uF","C_0603_1608Metric",21.000000,46.900000,0.000000,top
|
||||
"C19","1uF","C_0603_1608Metric",102.000000,50.800000,180.000000,top
|
||||
"C20","1uF","C_0603_1608Metric",29.900000,26.300000,0.000000,top
|
||||
"C21","1uF","C_0603_1608Metric",95.000000,52.000000,180.000000,top
|
||||
"C22","4u7F","C_0603_1608Metric",21.000000,40.900000,0.000000,top
|
||||
"C23","4u7F","C_0603_1608Metric",102.000000,56.800000,180.000000,top
|
||||
"C24","4u7F","C_0603_1608Metric",29.900000,20.300000,0.000000,top
|
||||
"C25","4u7F","C_0603_1608Metric",95.000000,58.000000,180.000000,top
|
||||
"C26","1uF","C_0603_1608Metric",20.000000,38.400000,-90.000000,top
|
||||
"C27","1uF","C_0603_1608Metric",103.000000,59.300000,90.000000,top
|
||||
"C28","1uF","C_0603_1608Metric",28.900000,18.100000,-90.000000,top
|
||||
"C29","100nF","C_0402_1005Metric",91.518900,45.800000,0.000000,top
|
||||
"C30","10nF","C_0402_1005Metric",111.000000,90.500000,-90.000000,top
|
||||
"C31","100nF","C_0402_1005Metric",99.898900,39.423600,90.000000,top
|
||||
"C32","100nF","C_0402_1005Metric",91.498900,43.263600,0.000000,top
|
||||
"C33","100nF","C_0402_1005Metric",96.300000,37.400000,90.000000,top
|
||||
"C34","100nF","C_0402_1005Metric",99.900000,41.675000,90.000000,top
|
||||
"C35","DNP","C_0402_1005Metric",97.500000,37.400000,-90.000000,top
|
||||
"C36","DNP","C_0402_1005Metric",89.200000,39.000000,-90.000000,top
|
||||
"C37","DNP","C_0402_1005Metric",89.200000,43.300000,-90.000000,top
|
||||
"C38","56pF","C_0402_1005Metric",89.200000,36.700000,90.000000,top
|
||||
"C39","10nF","C_0402_1005Metric",95.000000,90.500000,90.000000,top
|
||||
"C40","DNP","C_0402_1005Metric",99.900000,37.400000,90.000000,top
|
||||
"C41","DNP","C_0402_1005Metric",85.200000,39.000000,-90.000000,top
|
||||
"C42","DNP","C_0402_1005Metric",85.200000,43.300000,-90.000000,top
|
||||
"C43","180pF","C_0402_1005Metric",85.200000,36.700000,90.000000,top
|
||||
"C44","DNP","C_0402_1005Metric",102.300000,37.400000,-90.000000,top
|
||||
"C45","DNP","C_0402_1005Metric",81.200000,39.000000,-90.000000,top
|
||||
"C46","DNP","C_0402_1005Metric",81.200000,43.300000,-90.000000,top
|
||||
"C47","56pF","C_0402_1005Metric",81.200000,36.700000,90.000000,top
|
||||
"C48","100nF","C_0402_1005Metric",74.000000,36.000000,0.000000,top
|
||||
"C49","10uF","C_1206_3216Metric",92.000000,54.600000,-90.000000,top
|
||||
"C50","1uF","C_0603_1608Metric",80.600000,57.900000,90.000000,top
|
||||
"C51","10nF","C_0402_1005Metric",72.900000,50.500000,180.000000,top
|
||||
"C52","1uF","C_0603_1608Metric",75.500000,57.900000,90.000000,top
|
||||
"C53","10uF","C_1206_3216Metric",79.200000,54.900000,180.000000,top
|
||||
"C54","100nF","C_0402_1005Metric",72.900000,49.300000,0.000000,top
|
||||
"C55","100nF","C_0402_1005Metric",72.900000,51.700000,0.000000,top
|
||||
"C56","100nF","C_0402_1005Metric",65.700000,45.500000,-90.000000,top
|
||||
"C57","100nF","C_0402_1005Metric",73.300000,58.700000,0.000000,top
|
||||
"C58","1uF","C_0402_1005Metric",71.100000,45.500000,-90.000000,top
|
||||
"C59","1uF","C_0402_1005Metric",66.900000,45.500000,-90.000000,top
|
||||
"C60","1uF","C_0402_1005Metric",69.900000,45.500000,-90.000000,top
|
||||
"C61","100nF","C_0402_1005Metric",64.300000,46.800000,-90.000000,top
|
||||
"C62","100nF","C_0402_1005Metric",63.100000,49.100000,90.000000,top
|
||||
"C63","180pF","C_0402_1005Metric",66.600000,55.600000,90.000000,top
|
||||
"C64","100nF","C_0402_1005Metric",63.100000,53.700000,90.000000,top
|
||||
"C65","100nF/RF","C_0402_1005Metric",51.400000,49.600000,-90.000000,top
|
||||
"C66","3n3F","C_0402_1005Metric",67.800000,57.400000,0.000000,top
|
||||
"C67","18pF","C_0402_1005Metric",64.468900,55.543600,-90.000000,top
|
||||
"C68","100nF/RF","C_0402_1005Metric",56.800000,35.300000,0.000000,top
|
||||
"C69","100nF","C_0402_1005Metric",60.000000,39.000000,180.000000,top
|
||||
"C70","100nF","C_0402_1005Metric",64.000000,32.000000,90.000000,top
|
||||
"C71","100nF/RF","C_0402_1005Metric",60.800000,23.500000,-90.000000,top
|
||||
"C72","100nF","C_0402_1005Metric",63.900000,21.900000,0.000000,top
|
||||
"C73","100nF","C_0402_1005Metric",63.800000,20.400000,180.000000,top
|
||||
"C74","100nF/RF","C_0402_1005Metric",61.000000,16.700000,-90.000000,top
|
||||
"C75","100nF","C_0402_1005Metric",61.900000,3.800000,180.000000,top
|
||||
"C76","100nF","C_0402_1005Metric",26.000000,10.500000,90.000000,top
|
||||
"C77","100nF","C_0402_1005Metric",84.900000,7.941418,-135.000000,top
|
||||
"C78","10uF","C_1206_3216Metric",73.000000,18.000000,-90.000000,top
|
||||
"C79","1uF","C_0603_1608Metric",76.600000,17.800000,-90.000000,top
|
||||
"C80","10nF","C_0402_1005Metric",82.900000,24.100000,0.000000,top
|
||||
"C81","1uF","C_0603_1608Metric",81.600000,17.800000,-90.000000,top
|
||||
"C82","10uF","C_1206_3216Metric",76.000000,29.000000,180.000000,top
|
||||
"C83","100nF","C_0402_1005Metric",83.698900,25.503600,90.000000,top
|
||||
"C84","100nF","C_0402_1005Metric",82.900000,22.900000,180.000000,top
|
||||
"C85","100nF","C_0402_1005Metric",90.300000,29.000000,90.000000,top
|
||||
"C86","100nF","C_0402_1005Metric",83.500000,17.100000,180.000000,top
|
||||
"C87","1uF","C_0402_1005Metric",84.900000,29.000000,90.000000,top
|
||||
"C88","1uF","C_0402_1005Metric",89.100000,29.000000,90.000000,top
|
||||
"C89","1uF","C_0402_1005Metric",86.100000,29.000000,90.000000,top
|
||||
"C90","180pF","C_0402_1005Metric",89.700000,18.800000,-90.000000,top
|
||||
"C91","100nF","C_0402_1005Metric",95.100000,23.700000,-90.000000,top
|
||||
"C92","3n3F","C_0402_1005Metric",88.500000,17.000000,0.000000,top
|
||||
"C93","10nF","C_0402_1005Metric",92.725000,29.050000,-90.000000,top
|
||||
"C94","100nF","C_0402_1005Metric",95.100000,26.100000,90.000000,top
|
||||
"C95","18pF","C_0402_1005Metric",91.738900,18.773600,90.000000,top
|
||||
"C96","100nF/RF","C_0402_1005Metric",26.800000,5.600000,180.000000,top
|
||||
"C97","100nF","C_0402_1005Metric",9.300000,36.800000,0.000000,top
|
||||
"C98","100nF","C_0402_1005Metric",9.300000,38.100000,0.000000,top
|
||||
"C99","100nF/RF","C_0402_1005Metric",12.000000,6.600000,90.000000,top
|
||||
"C100","1uF","C_0402_1005Metric",11.700000,41.700000,180.000000,top
|
||||
"C101","1uF","C_0402_1005Metric",14.000000,41.700000,0.000000,top
|
||||
"C102","100nF","C_0402_1005Metric",14.800000,38.700000,90.000000,top
|
||||
"C103","100nF","C_0402_1005Metric",9.300000,40.500000,0.000000,top
|
||||
"C104","10nF","C_0402_1005Metric",8.200000,18.700000,180.000000,top
|
||||
"C105","10nF","C_0402_1005Metric",8.200000,22.600000,180.000000,top
|
||||
"C106","10nF","C_0402_1005Metric",15.400000,17.600000,-90.000000,top
|
||||
"C107","DNP","C_0402_1005Metric",19.100000,18.900000,180.000000,top
|
||||
"C108","1uF","C_0402_1005Metric",8.200000,25.000000,180.000000,top
|
||||
"C109","100nF/RF","C_0402_1005Metric",16.800000,20.000000,180.000000,top
|
||||
"C110","100nF/RF","C_0402_1005Metric",16.800000,21.200000,180.000000,top
|
||||
"C111","10nF","C_0402_1005Metric",17.000000,22.600000,0.000000,top
|
||||
"C112","DNP","C_0402_1005Metric",7.800000,43.900000,90.000000,top
|
||||
"C113","DNP","C_0402_1005Metric",17.600000,43.900000,-90.000000,top
|
||||
"C114","100nF","C_0402_1005Metric",8.200000,21.200000,0.000000,top
|
||||
"C115","100nF","C_0402_1005Metric",13.300000,46.700000,-90.000000,top
|
||||
"C116","100nF","C_0402_1005Metric",12.100000,46.700000,90.000000,top
|
||||
"C117","100nF","C_0402_1005Metric",8.200000,20.000000,180.000000,top
|
||||
"C118","100nF","C_0402_1005Metric",8.200000,16.300000,0.000000,top
|
||||
"C119","100nF","C_0402_1005Metric",8.200000,23.800000,180.000000,top
|
||||
"C120","10nF","C_0402_1005Metric",14.700000,25.600000,90.000000,top
|
||||
"C121","330pF","C_0402_1005Metric",12.650000,48.500000,0.000000,top
|
||||
"C122","100nF","C_0402_1005Metric",17.000000,23.800000,0.000000,top
|
||||
"C123","10nF","C_0402_1005Metric",11.300000,25.600000,90.000000,top
|
||||
"C124","120pF","C_0402_1005Metric",13.000000,26.300000,180.000000,top
|
||||
"C125","330pF","C_0402_1005Metric",9.200000,49.700000,0.000000,top
|
||||
"C126","330pF","C_0402_1005Metric",12.650000,49.800000,0.000000,top
|
||||
"C127","330pF","C_0402_1005Metric",16.100000,49.800000,0.000000,top
|
||||
"C128","150pF","C_0402_1005Metric",13.000000,28.500000,180.000000,top
|
||||
"C129","1uF","C_0402_1005Metric",6.000000,48.000000,0.000000,top
|
||||
"C130","33pF","C_0402_1005Metric",13.000000,30.600000,180.000000,top
|
||||
"C131","1uF","C_0402_1005Metric",6.000000,53.000000,0.000000,top
|
||||
"C132","100nF","C_0402_1005Metric",9.400000,55.600000,0.000000,top
|
||||
"C133","100nF/RF","C_0402_1005Metric",93.200000,5.600000,0.000000,top
|
||||
"C134","100nF","C_0402_1005Metric",110.000000,40.703600,0.000000,top
|
||||
"C135","100nF","C_0402_1005Metric",110.000000,42.200000,0.000000,top
|
||||
"C136","100nF/RF","C_0402_1005Metric",110.000000,6.700000,90.000000,top
|
||||
"C137","1uF","C_0402_1005Metric",112.800000,46.000000,180.000000,top
|
||||
"C138","1uF","C_0402_1005Metric",115.200000,46.000000,0.000000,top
|
||||
"C139","100nF","C_0402_1005Metric",110.000000,44.800000,0.000000,top
|
||||
"C140","100nF","C_0402_1005Metric",116.000000,42.700000,90.000000,top
|
||||
"C141","10nF","C_0402_1005Metric",101.400000,23.200000,180.000000,top
|
||||
"C142","10nF","C_0402_1005Metric",103.000000,29.900000,90.000000,top
|
||||
"C143","10nF","C_0402_1005Metric",107.000000,29.900000,90.000000,top
|
||||
"C144","DNP","C_0402_1005Metric",105.000000,20.100000,180.000000,top
|
||||
"C145","1uF","C_0402_1005Metric",110.600000,21.700000,-90.000000,top
|
||||
"C146","100nF/RF","C_0402_1005Metric",104.400000,21.800000,90.000000,top
|
||||
"C147","100nF/RF","C_0402_1005Metric",105.600000,21.800000,90.000000,top
|
||||
"C148","10nF","C_0402_1005Metric",108.200000,21.700000,-90.000000,top
|
||||
"C149","DNP","C_0402_1005Metric",109.400000,48.200000,90.000000,top
|
||||
"C150","DNP","C_0402_1005Metric",117.900000,48.200000,-90.000000,top
|
||||
"C151","100nF","C_0402_1005Metric",105.600000,29.900000,-90.000000,top
|
||||
"C152","100nF","C_0402_1005Metric",113.600000,51.000000,-90.000000,top
|
||||
"C153","100nF","C_0402_1005Metric",112.400000,51.000000,90.000000,top
|
||||
"C154","100nF","C_0402_1005Metric",104.400000,29.900000,90.000000,top
|
||||
"C155","100nF","C_0402_1005Metric",100.600000,29.900000,-90.000000,top
|
||||
"C156","100nF","C_0402_1005Metric",109.400000,21.700000,-90.000000,top
|
||||
"C157","10nF","C_0402_1005Metric",110.500000,24.900000,0.000000,top
|
||||
"C158","330pF","C_0402_1005Metric",113.000000,53.700000,0.000000,top
|
||||
"C159","100nF","C_0402_1005Metric",108.200000,29.900000,90.000000,top
|
||||
"C160","10nF","C_0402_1005Metric",110.500000,26.100000,0.000000,top
|
||||
"C161","120pF","C_0402_1005Metric",112.300000,25.500000,90.000000,top
|
||||
"C162","330pF","C_0402_1005Metric",109.000000,55.000000,0.000000,top
|
||||
"C163","330pF","C_0402_1005Metric",113.000000,55.000000,0.000000,top
|
||||
"C164","330pF","C_0402_1005Metric",117.000000,55.000000,0.000000,top
|
||||
"C165","150pF","C_0402_1005Metric",114.100000,28.600000,180.000000,top
|
||||
"C166","1uF","C_0402_1005Metric",105.000000,59.100000,-90.000000,top
|
||||
"C167","33pF","C_0402_1005Metric",114.100000,32.200000,180.000000,top
|
||||
"C168","1uF","C_0402_1005Metric",110.000000,59.100000,-90.000000,top
|
||||
"C169","100nF","C_0402_1005Metric",110.000000,61.300000,0.000000,top
|
||||
"C170","100nF/RF","C_0402_1005Metric",54.000000,13.400000,90.000000,top
|
||||
"C171","10nF","C_0402_1005Metric",37.400000,18.000000,180.000000,top
|
||||
"C172","10nF","C_0402_1005Metric",45.600000,19.200000,0.000000,top
|
||||
"C173","DNP","C_0402_1005Metric",28.300000,31.100000,90.000000,top
|
||||
"C174","DNP","C_0402_1005Metric",38.100000,31.000000,-90.000000,top
|
||||
"C175","10nF","C_0402_1005Metric",45.400000,13.400000,0.000000,top
|
||||
"C176","DNP","C_0402_1005Metric",46.800000,16.000000,-90.000000,top
|
||||
"C177","1uF","C_0402_1005Metric",45.600000,21.600000,0.000000,top
|
||||
"C178","100nF/RF","C_0402_1005Metric",45.000000,15.400000,180.000000,top
|
||||
"C179","100nF/RF","C_0402_1005Metric",45.000000,16.700000,180.000000,top
|
||||
"C180","10nF","C_0402_1005Metric",37.400000,14.000000,180.000000,top
|
||||
"C181","100nF","C_0402_1005Metric",33.800000,34.000000,-90.000000,top
|
||||
"C182","100nF","C_0402_1005Metric",32.600000,34.000000,90.000000,top
|
||||
"C183","100nF","C_0402_1005Metric",37.400000,16.600000,0.000000,top
|
||||
"C184","330pF","C_0402_1005Metric",33.200000,36.700000,0.000000,top
|
||||
"C185","100nF","C_0402_1005Metric",37.400000,15.400000,180.000000,top
|
||||
"C186","100nF","C_0402_1005Metric",37.400000,11.600000,0.000000,top
|
||||
"C187","330pF","C_0402_1005Metric",29.500000,38.100000,0.000000,top
|
||||
"C188","330pF","C_0402_1005Metric",33.200000,38.100000,0.000000,top
|
||||
"C189","330pF","C_0402_1005Metric",37.000000,36.700000,0.000000,top
|
||||
"C190","100nF","C_0402_1005Metric",37.400000,19.200000,180.000000,top
|
||||
"C191","10nF","C_0402_1005Metric",43.500000,21.000000,90.000000,top
|
||||
"C192","10nF","C_0402_1005Metric",40.000000,21.000000,90.000000,top
|
||||
"C193","100nF","C_0402_1005Metric",45.600000,20.400000,0.000000,top
|
||||
"C194","120pF","C_0402_1005Metric",41.750000,21.650000,180.000000,top
|
||||
"C195","1uF","C_0402_1005Metric",37.000000,39.500000,0.000000,top
|
||||
"C196","150pF","C_0402_1005Metric",41.750000,23.950000,180.000000,top
|
||||
"C197","33pF","C_0402_1005Metric",41.760000,26.420000,180.000000,top
|
||||
"C198","1uF","C_0402_1005Metric",37.000000,44.500000,0.000000,top
|
||||
"C199","100nF","C_0402_1005Metric",37.200000,22.400000,90.000000,top
|
||||
"C200","100nF","C_0402_1005Metric",34.200000,22.400000,90.000000,top
|
||||
"C201","100nF","C_0402_1005Metric",30.500000,43.700000,90.000000,top
|
||||
"C202","1uF","C_0402_1005Metric",31.900000,28.900000,180.000000,top
|
||||
"C203","1uF","C_0402_1005Metric",34.600000,28.900000,0.000000,top
|
||||
"C204","100nF","C_0402_1005Metric",37.000000,27.700000,180.000000,top
|
||||
"C205","100nF","C_0402_1005Metric",32.600000,22.400000,90.000000,top
|
||||
"C206","100nF","C_0402_1005Metric",60.500000,73.000000,180.000000,top
|
||||
"C207","100nF","C_0402_1005Metric",70.000000,79.700000,90.000000,top
|
||||
"C208","100nF","C_0402_1005Metric",61.300000,84.300000,90.000000,top
|
||||
"C209","100nF","C_0402_1005Metric",50.200000,64.200000,180.000000,top
|
||||
"C210","100nF","C_0402_1005Metric",34.500000,51.800000,180.000000,top
|
||||
"C211","100nF","C_0402_1005Metric",18.700000,61.300000,-90.000000,top
|
||||
"C212","100nF","C_0402_1005Metric",21.400000,66.600000,180.000000,top
|
||||
"C213","100nF","C_0402_1005Metric",36.100000,80.400000,90.000000,top
|
||||
"C214","100nF","C_0402_1005Metric",41.500000,52.800000,-90.000000,top
|
||||
"C215","100nF","C_0402_1005Metric",43.000000,79.800000,0.000000,top
|
||||
"C216","100nF","C_0402_1005Metric",40.300000,52.500000,-90.000000,top
|
||||
"C217","100nF","C_0402_1005Metric",28.198900,79.283600,180.000000,top
|
||||
"C218","100nF","C_0402_1005Metric",49.100000,66.800000,0.000000,top
|
||||
"C219","100nF","C_0402_1005Metric",21.400000,68.600000,180.000000,top
|
||||
"C220","100nF","C_0402_1005Metric",49.100000,65.600000,0.000000,top
|
||||
"C221","100nF","C_0402_1005Metric",28.600000,53.200000,0.000000,top
|
||||
"C222","100nF","C_0402_1005Metric",34.500000,53.000000,180.000000,top
|
||||
"C223","100pF","C_0402_1005Metric",28.400000,43.700000,90.000000,top
|
||||
"C224","100pF","C_0402_1005Metric",28.900000,39.400000,180.000000,top
|
||||
"C225","100pF","C_0402_1005Metric",28.900000,36.800000,180.000000,top
|
||||
"C226","100pF","C_0402_1005Metric",28.900000,33.200000,180.000000,top
|
||||
"C227","100pF","C_0402_1005Metric",15.400000,54.300000,90.000000,top
|
||||
"C228","100pF","C_0402_1005Metric",15.400000,51.700000,-90.000000,top
|
||||
"C229","100pF","C_0402_1005Metric",18.500000,51.500000,180.000000,top
|
||||
"C230","100pF","C_0402_1005Metric",20.600000,49.700000,90.000000,top
|
||||
"C231","100pF","C_0402_1005Metric",108.700000,50.300000,180.000000,top
|
||||
"C232","100pF","C_0402_1005Metric",108.000000,52.100000,-90.000000,top
|
||||
"C233","100pF","C_0402_1005Metric",105.800000,51.000000,0.000000,top
|
||||
"C234","100pF","C_0402_1005Metric",105.500000,55.100000,0.000000,top
|
||||
"C235","100pF","C_0402_1005Metric",80.400000,20.200000,0.000000,top
|
||||
"C236","100pF","C_0402_1005Metric",87.441418,11.058578,45.000000,top
|
||||
"C237","100pF","C_0402_1005Metric",48.700000,22.700000,180.000000,top
|
||||
"C238","100pF","C_0402_1005Metric",48.700000,19.200000,180.000000,top
|
||||
"C239","100pF","C_0402_1005Metric",51.100000,22.700000,0.000000,top
|
||||
"C240","100pF","C_0402_1005Metric",51.100000,19.200000,0.000000,top
|
||||
"C241","100pF","C_0402_1005Metric",18.200000,33.200000,180.000000,top
|
||||
"C242","100pF","C_0402_1005Metric",18.200000,29.500000,180.000000,top
|
||||
"C243","100pF","C_0402_1005Metric",54.000000,23.500000,90.000000,top
|
||||
"C244","100pF","C_0402_1005Metric",54.000000,18.100000,-90.000000,top
|
||||
"C245","100pF","C_0402_1005Metric",69.300000,38.500000,-90.000000,top
|
||||
"C246","100pF","C_0402_1005Metric",66.000000,38.500000,90.000000,top
|
||||
"C247","100pF","C_0402_1005Metric",73.600000,38.500000,-90.000000,top
|
||||
"C248","100pF","C_0402_1005Metric",70.500000,38.500000,90.000000,top
|
||||
"C249","100pF","C_0402_1005Metric",45.500000,29.600000,180.000000,top
|
||||
"C250","100pF","C_0402_1005Metric",66.500000,33.500000,90.000000,top
|
||||
"C251","100pF","C_0402_1005Metric",45.900000,28.400000,180.000000,top
|
||||
"C252","100pF","C_0402_1005Metric",67.000000,31.100000,90.000000,top
|
||||
"C253","100pF","C_0402_1005Metric",42.000000,31.200000,180.000000,top
|
||||
"C254","100pF","C_0402_1005Metric",66.300000,29.200000,0.000000,top
|
||||
"C255","100pF","C_0402_1005Metric",42.000000,30.000000,180.000000,top
|
||||
"C256","100pF","C_0402_1005Metric",66.300000,28.000000,0.000000,top
|
||||
"C257","100pF","C_0402_1005Metric",63.900000,24.000000,180.000000,top
|
||||
"C258","100pF","C_0402_1005Metric",46.100000,23.500000,-90.000000,top
|
||||
"C259","100pF","C_0402_1005Metric",65.700000,24.500000,-90.000000,top
|
||||
"C260","100pF","C_0402_1005Metric",46.100000,25.900000,90.000000,top
|
||||
"C261","100pF","C_0402_1005Metric",66.900000,24.500000,-90.000000,top
|
||||
"C262","100pF","C_0402_1005Metric",42.000000,28.800000,180.000000,top
|
||||
"C263","100pF","C_0402_1005Metric",39.100000,52.500000,-90.000000,top
|
||||
"C264","100pF","C_0402_1005Metric",37.900000,52.500000,-90.000000,top
|
||||
"C265","100pF","C_0402_1005Metric",53.400000,42.000000,0.000000,top
|
||||
"C266","100pF","C_0402_1005Metric",36.700000,52.500000,-90.000000,top
|
||||
"C267","100pF","C_0402_1005Metric",59.000000,60.300000,0.000000,top
|
||||
"C268","100pF","C_0402_1005Metric",70.200000,55.600000,90.000000,top
|
||||
"C269","100nF","C_0402_1005Metric",5.100000,15.400000,90.000000,top
|
||||
"C270","100nF","C_0402_1005Metric",34.700000,15.900000,135.000000,top
|
||||
"C271","100pF","C_0402_1005Metric",52.800000,60.300000,180.000000,top
|
||||
"C272","100pF","C_0402_1005Metric",74.200000,47.300000,0.000000,top
|
||||
"C273","100pF","C_0402_1005Metric",46.000000,55.900000,180.000000,top
|
||||
"C274","100pF","C_0402_1005Metric",74.200000,46.000000,0.000000,top
|
||||
"D1","MBRS2040LT3G","D_SMB",102.900000,75.700000,90.000000,top
|
||||
"IC1","MIC2253","DFN-12-1EP_3x3mm_P0.45mm_EP1.66x2.38mm",98.500000,77.000000,90.000000,top
|
||||
"IC2","LM3370","DFN-16-1EP_4x5mm_P0.5mm_EP2.44x4.34mm",84.800000,79.000000,180.000000,top
|
||||
"IC3","LDL212PU50R","WSON-6-1EP_3x3mm_P0.95mm",21.000000,43.900000,90.000000,top
|
||||
"IC4","LDL212PU50R","WSON-6-1EP_3x3mm_P0.95mm",102.000000,53.800000,-90.000000,top
|
||||
"IC5","LDL212PU50R","WSON-6-1EP_3x3mm_P0.95mm",29.900000,23.300000,90.000000,top
|
||||
"IC6","LDL212PU50R","WSON-6-1EP_3x3mm_P0.95mm",95.000000,55.000000,-90.000000,top
|
||||
"IC7","SI5351C","QFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm",96.000000,42.000000,180.000000,top
|
||||
"IC8","AP2114H","SOT-223-3_TabPin2",86.300000,55.600000,180.000000,top
|
||||
"IC9","NCP702-3.3","SOT-23-5",78.100000,57.900000,180.000000,top
|
||||
"IC10","MAX2871","QFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm",68.050000,50.250000,-90.000000,top
|
||||
"IC11","RFSW6042","QFN40P180X180X55-13T76N",51.200000,46.800000,90.000000,top
|
||||
"IC12","RFSW6042","QFN40P180X180X55-13T76N",51.200000,37.200000,-90.000000,top
|
||||
"IC13","QPC6324","QFN-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mm",60.800000,35.300000,0.000000,top
|
||||
"IC14","RFSA3714","QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm",61.600000,27.500000,-90.000000,top
|
||||
"IC15","TRF37A73","DFN-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm",60.650000,20.600000,-90.000000,top
|
||||
"IC16","QPC6324","QFN-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mm",61.000000,7.000000,180.000000,top
|
||||
"IC17","QPC6324","QFN-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mm",89.000000,8.000000,45.000000,top
|
||||
"IC18","QPC6324","QFN-20-1EP_4x4mm_P0.5mm_EP2.5x2.5mm",30.000000,8.000000,45.000000,top
|
||||
"IC19","AP2114H","SOT-223-3_TabPin2",76.000000,24.000000,0.000000,top
|
||||
"IC20","NCP702-3.3","SOT-23-5",79.100000,17.800000,0.000000,top
|
||||
"IC21","MAX2871","QFN-32-1EP_5x5mm_P0.5mm_EP3.1x3.1mm",88.000000,24.400000,90.000000,top
|
||||
"IC22","LT5560","WSON-8-1EP_3x3mm_P0.5mm_EP1.45x2.4mm",12.500000,37.500000,90.000000,top
|
||||
"IC23","THS4521IDGKR","VSSOP-8_3.0x3.0mm_P0.65mm",12.700000,43.900000,180.000000,top
|
||||
"IC24","ADL5801","QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm",12.500000,20.600000,0.000000,top
|
||||
"IC25","NCP702-1.8","SOT-23-5",6.000000,50.500000,90.000000,top
|
||||
"IC26","MCP33131D-10-E/MS","VSSOP-10_3x3mm_P0.5mm",12.400000,53.500000,90.000000,top
|
||||
"IC27","LT5560","WSON-8-1EP_3x3mm_P0.5mm_EP1.45x2.4mm",113.600000,41.500000,90.000000,top
|
||||
"IC28","THS4521IDGKR","VSSOP-8_3.0x3.0mm_P0.65mm",113.000000,48.200000,180.000000,top
|
||||
"IC29","ADL5801","QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm",105.000000,26.000000,-90.000000,top
|
||||
"IC30","NCP702-1.8","SOT-23-5",107.500000,59.100000,0.000000,top
|
||||
"IC31","MCP33131D-10-E/MS","VSSOP-10_3x3mm_P0.5mm",112.700000,59.100000,90.000000,top
|
||||
"IC32","THS4521IDGKR","VSSOP-8_3.0x3.0mm_P0.65mm",33.200000,31.100000,180.000000,top
|
||||
"IC33","ADL5801","QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm",41.300000,16.000000,0.000000,top
|
||||
"IC34","NCP702-1.8","SOT-23-5",37.000000,42.000000,90.000000,top
|
||||
"IC35","MCP33131D-10-E/MS","VSSOP-10_3x3mm_P0.5mm",33.000000,42.300000,90.000000,top
|
||||
"IC36","LT5560","WSON-8-1EP_3x3mm_P0.5mm_EP1.45x2.4mm",35.700000,25.400000,180.000000,top
|
||||
"IC37","STM32G431CB","QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mm",65.100000,77.800000,90.000000,top
|
||||
"J2","SMA","BU-1420701851",12.000000,-1.900000,90.000000,top
|
||||
"J3","SMA","BU-1420701851",110.000000,-1.900000,90.000000,top
|
||||
"J4","USB_C_Receptacle_USB2.0_16P","USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal",63.998900,92.303600,180.000000,top
|
||||
"L1","2.2uH","L_Sunlord_SWPA5040S",101.500000,81.900000,0.000000,top
|
||||
"L2","2.2uH","L_Sunlord_SWPA5040S",90.300000,83.000000,90.000000,top
|
||||
"L3","2.2uH","L_Sunlord_SWPA5040S",90.300000,75.000000,-90.000000,top
|
||||
"L4","2.2uH","L_Sunlord_SWPA5040S",79.300000,72.000000,90.000000,top
|
||||
"L5","2.2uH","L_Sunlord_SWPA5040S",112.450000,75.650000,90.000000,top
|
||||
"L6","FERRITE","R_0402_1005Metric",22.000000,38.400000,-90.000000,top
|
||||
"L7","FERRITE","R_0402_1005Metric",101.000000,59.300000,90.000000,top
|
||||
"L8","FERRITE","R_0402_1005Metric",30.900000,17.800000,-90.000000,top
|
||||
"L9","FERRITE","R_0402_1005Metric",92.000000,58.000000,180.000000,top
|
||||
"L10","FERRITE","R_0402_1005Metric",91.488900,44.813600,180.000000,top
|
||||
"L11","10uH","L_0805_2012Metric_Pad1.15x1.40mm_HandSolder",64.300000,18.400000,180.000000,top
|
||||
"L12","FERRITE","R_0402_1005Metric",16.800000,38.700000,-90.000000,top
|
||||
"L13","FERRITE","R_0402_1005Metric",5.400000,46.200000,-90.000000,top
|
||||
"L14","330nH","L_0402_1005Metric",87.200000,36.000000,180.000000,top
|
||||
"L15","FERRITE","R_0402_1005Metric",16.800000,41.400000,-90.000000,top
|
||||
"L16","FERRITE","R_0402_1005Metric",17.500000,25.600000,90.000000,top
|
||||
"L17","FERRITE","R_0402_1005Metric",7.700000,26.800000,90.000000,top
|
||||
"L18","330nH","L_0402_1005Metric",83.200000,36.000000,180.000000,top
|
||||
"L19","FERRITE","R_0402_1005Metric",79.900000,53.000000,180.000000,top
|
||||
"L20","FERRITE","R_0402_1005Metric",73.300000,57.200000,180.000000,top
|
||||
"L21","FERRITE","R_0402_1005Metric",63.000000,39.000000,180.000000,top
|
||||
"L22","FERRITE","R_0402_1005Metric",65.200000,32.000000,-90.000000,top
|
||||
"L23","FERRITE","R_0402_1005Metric",66.100000,20.400000,180.000000,top
|
||||
"L24","330nH","L_0402_1005Metric",61.600000,18.400000,180.000000,top
|
||||
"L25","FERRITE","R_0402_1005Metric",64.300000,4.500000,90.000000,top
|
||||
"L26","FERRITE","R_0402_1005Metric",84.000000,9.600000,-90.000000,top
|
||||
"L27","FERRITE","R_0402_1005Metric",24.800000,10.500000,-90.000000,top
|
||||
"L28","FERRITE","R_0402_1005Metric",80.000000,29.000000,0.000000,top
|
||||
"L29","FERRITE","R_0402_1005Metric",83.500000,18.500000,0.000000,top
|
||||
"L30","330nH","L_0402_1005Metric",11.800000,34.300000,180.000000,top
|
||||
"L31","330nH","L_0402_1005Metric",14.200000,34.300000,0.000000,top
|
||||
"L32","330nH","L_0402_1005Metric",14.400000,23.800000,180.000000,top
|
||||
"L33","330nH","L_0402_1005Metric",11.600000,23.800000,0.000000,top
|
||||
"L34","68nH","L_0402_1005Metric",14.700000,27.900000,90.000000,top
|
||||
"L35","68nH","L_0402_1005Metric",11.300000,27.900000,90.000000,top
|
||||
"L36","33nH","L_0402_1005Metric",14.700000,30.200000,90.000000,top
|
||||
"L37","33nH","L_0402_1005Metric",11.300000,30.200000,90.000000,top
|
||||
"L38","330nH","L_0402_1005Metric",112.800000,38.200000,180.000000,top
|
||||
"L39","330nH","L_0402_1005Metric",115.400000,38.200000,0.000000,top
|
||||
"L40","330nH","L_0402_1005Metric",108.200000,24.250000,90.000000,top
|
||||
"L41","330nH","L_0402_1005Metric",108.200000,26.700000,-90.000000,top
|
||||
"L42","68nH","L_0402_1005Metric",114.700000,26.800000,90.000000,top
|
||||
"L43","68nH","L_0402_1005Metric",113.500000,26.800000,90.000000,top
|
||||
"L44","33nH","L_0402_1005Metric",114.700000,30.400000,90.000000,top
|
||||
"L45","33nH","L_0402_1005Metric",113.500000,30.400000,90.000000,top
|
||||
"L46","330nH","L_0402_1005Metric",43.200000,19.200000,180.000000,top
|
||||
"L47","330nH","L_0402_1005Metric",40.500000,19.200000,0.000000,top
|
||||
"L48","68nH","L_0402_1005Metric",43.500000,23.300000,90.000000,top
|
||||
"L49","68nH","L_0402_1005Metric",40.000000,23.300000,90.000000,top
|
||||
"L50","33nH","L_0402_1005Metric",43.500000,25.600000,90.000000,top
|
||||
"L51","33nH","L_0402_1005Metric",40.000000,25.600000,90.000000,top
|
||||
"L52","330nH","L_0402_1005Metric",44.790000,25.630000,-90.000000,top
|
||||
"L53","330nH","L_0402_1005Metric",38.700000,25.600000,-90.000000,top
|
||||
"L54","FERRITE","R_0402_1005Metric",113.200000,22.200000,0.000000,top
|
||||
"L55","FERRITE","R_0402_1005Metric",109.400000,29.900000,90.000000,top
|
||||
"L56","FERRITE","R_0402_1005Metric",116.300000,51.000000,90.000000,top
|
||||
"L57","FERRITE","R_0402_1005Metric",117.500000,44.800000,0.000000,top
|
||||
"L58","FERRITE","R_0402_1005Metric",105.200000,61.100000,180.000000,top
|
||||
"L59","FERRITE","R_0402_1005Metric",45.400000,12.200000,0.000000,top
|
||||
"L60","FERRITE","R_0402_1005Metric",38.800000,21.000000,90.000000,top
|
||||
"L61","FERRITE","R_0402_1005Metric",38.000000,29.100000,0.000000,top
|
||||
"L62","FERRITE","R_0402_1005Metric",37.000000,34.100000,0.000000,top
|
||||
"L63","FERRITE","R_0402_1005Metric",37.000000,38.400000,180.000000,top
|
||||
"L64","FERRITE","R_0402_1005Metric",73.400000,53.800000,0.000000,top
|
||||
"L65","FERRITE","R_0402_1005Metric",83.800000,28.000000,90.000000,top
|
||||
"LED1","Red","LED_0603_1608Metric",34.620000,82.720000,90.000000,top
|
||||
"LED2","Green","LED_0603_1608Metric",37.620000,82.820000,90.000000,top
|
||||
"LED3","Red","LED_0603_1608Metric",31.620000,82.820000,90.000000,top
|
||||
"LED4","Red","LED_0603_1608Metric",28.620000,82.820000,90.000000,top
|
||||
"LED5","Red","LED_0603_1608Metric",25.620000,82.820000,90.000000,top
|
||||
"LED6","Green","LED_0603_1608Metric",22.620000,82.820000,90.000000,top
|
||||
"LED7","Green","LED_0603_1608Metric",19.620000,82.820000,90.000000,top
|
||||
"LED8","Green","LED_0603_1608Metric",16.620000,82.820000,90.000000,top
|
||||
"LED9","Green","LED_0603_1608Metric",13.620000,82.820000,90.000000,top
|
||||
"LED10","Green","LED_0603_1608Metric",10.620000,82.820000,90.000000,top
|
||||
"LP1","LP0603A-0947","FILTRDFN160X84X70-4N",47.700000,41.900000,90.000000,top
|
||||
"LP2","LP0603A-3500","FILTRDFN160X84X70-4N",55.600000,42.100000,90.000000,top
|
||||
"LP3","LP0603A-1880","FILTRDFN160X84X70-4N",58.000000,42.100000,90.000000,top
|
||||
"Q1","SSM3J338R","SOT-23",69.878900,86.013600,180.000000,top
|
||||
"Q2","SSM3J338R","SOT-23",73.518900,87.883600,0.000000,top
|
||||
"R1","620R","R_0402_1005Metric",95.700000,77.600000,90.000000,top
|
||||
"R2","4.7k","R_0402_1005Metric",99.500000,70.200000,0.000000,top
|
||||
"R3","10k","R_0402_1005Metric",96.400000,70.200000,0.000000,top
|
||||
"R4","38.3k","R_0402_1005Metric",99.500000,71.500000,0.000000,top
|
||||
"R5","10k","R_0402_1005Metric",96.400000,71.500000,0.000000,top
|
||||
"R6","10k","R_0402_1005Metric",97.400000,45.200000,180.000000,top
|
||||
"R7","100R","R_0402_1005Metric",80.000000,36.700000,90.000000,top
|
||||
"R8","62R","R_0402_1005Metric",78.000000,36.000000,180.000000,top
|
||||
"R9","100R","R_0402_1005Metric",76.000000,36.700000,-90.000000,top
|
||||
"R10","5.1k","R_0402_1005Metric",68.700000,45.500000,90.000000,top
|
||||
"R11","10k","R_0402_1005Metric",58.500000,59.100000,180.000000,top
|
||||
"R12","49.9R","R_0402_1005Metric",63.100000,51.400000,90.000000,top
|
||||
"R13","49.9R","R_0402_1005Metric",64.300000,49.100000,-90.000000,top
|
||||
"R14","49.9R","R_0402_1005Metric",63.100000,46.800000,90.000000,top
|
||||
"R15","1.8k","R_0402_1005Metric",65.508900,54.523600,-90.000000,top
|
||||
"R16","82R","R_0402_1005Metric",69.000000,55.600000,-90.000000,top
|
||||
"R17","330R","R_0402_1005Metric",67.800000,55.600000,90.000000,top
|
||||
"R18","10k","R_0402_1005Metric",53.000000,44.000000,90.000000,top
|
||||
"R19","10k","R_0402_1005Metric",49.400000,44.000000,90.000000,top
|
||||
"R20","10k","R_0402_1005Metric",50.600000,44.000000,-90.000000,top
|
||||
"R21","10k","R_0402_1005Metric",51.800000,44.000000,-90.000000,top
|
||||
"R22","10k","R_0402_1005Metric",51.800000,40.000000,90.000000,top
|
||||
"R23","10k","R_0402_1005Metric",53.000000,40.000000,-90.000000,top
|
||||
"R24","10k","R_0402_1005Metric",50.600000,40.000000,90.000000,top
|
||||
"R25","10k","R_0402_1005Metric",49.400000,40.000000,-90.000000,top
|
||||
"R26","2.7R","R_0402_1005Metric",61.000000,14.400000,-90.000000,top
|
||||
"R27","402R","R_0402_1005Metric",60.300000,12.700000,0.000000,top
|
||||
"R28","56R","R_0402_1005Metric",59.700000,11.000000,90.000000,top
|
||||
"R29","2.7R","R_0402_1005Metric",61.000000,11.000000,-90.000000,top
|
||||
"R30","5.1k","R_0402_1005Metric",87.300000,29.000000,-90.000000,top
|
||||
"R31","10k","R_0402_1005Metric",86.060000,18.810000,90.000000,top
|
||||
"R32","49.9R","R_0402_1005Metric",93.300000,22.700000,0.000000,top
|
||||
"R33","49.9R","R_0402_1005Metric",93.300000,24.350000,0.000000,top
|
||||
"R34","49.9R","R_0402_1005Metric",93.300000,25.925000,0.000000,top
|
||||
"R35","49.9R","R_0402_1005Metric",93.300000,27.275000,0.000000,top
|
||||
"R36","1.8k","R_0402_1005Metric",90.718900,19.793600,90.000000,top
|
||||
"R37","82R","R_0402_1005Metric",87.300000,18.800000,90.000000,top
|
||||
"R38","49.9R","R_0402_1005Metric",94.200000,29.850000,180.000000,top
|
||||
"R39","330R","R_0402_1005Metric",88.500000,18.800000,-90.000000,top
|
||||
"R40","PAT0816-C-3DB-T5","PAT0816",96.500000,5.950000,180.000000,top
|
||||
"R41","0R","R_0402_1005Metric",98.700000,37.400000,-90.000000,top
|
||||
"R42","0R","R_0402_1005Metric",101.100000,37.400000,90.000000,top
|
||||
"R43","0R","R_0402_1005Metric",87.200000,39.600000,180.000000,top
|
||||
"R44","0R","R_0402_1005Metric",83.200000,39.600000,180.000000,top
|
||||
"R45","49.9R","R_0402_1005Metric",17.400000,12.000000,-60.000000,top
|
||||
"R46","49.9R","R_0402_1005Metric",19.500000,12.000000,-120.000000,top
|
||||
"R47","PAT0816-C-3DB-T5","PAT0816",109.650000,10.000000,-90.000000,top
|
||||
"R48","PAT0816-C-3DB-T5","PAT0816",11.650000,10.000000,-90.000000,top
|
||||
"R49","PAT0816-C-3DB-T5","PAT0816",23.250000,5.950000,180.000000,top
|
||||
"R50","49.9R","R_0402_1005Metric",22.100000,14.000000,0.000000,top
|
||||
"R51","0R","R_0402_1005Metric",87.200000,44.000000,180.000000,top
|
||||
"R52","0R","R_0402_1005Metric",83.200000,44.000000,180.000000,top
|
||||
"R53","220R","R_0402_1005Metric",11.700000,40.500000,0.000000,top
|
||||
"R54","220R","R_0402_1005Metric",14.000000,40.500000,180.000000,top
|
||||
"R55","6.8k","R_0402_1005Metric",9.000000,43.900000,90.000000,top
|
||||
"R56","6.8k","R_0402_1005Metric",16.400000,43.900000,-90.000000,top
|
||||
"R57","DNP","R_0402_1005Metric",13.000000,17.000000,0.000000,top
|
||||
"R58","220R","R_0402_1005Metric",10.000000,46.700000,-90.000000,top
|
||||
"R59","220R","R_0402_1005Metric",15.200000,46.700000,-90.000000,top
|
||||
"R60","1k","R_0402_1005Metric",8.200000,17.500000,180.000000,top
|
||||
"R61","220R","R_0402_1005Metric",10.900000,49.100000,-90.000000,top
|
||||
"R62","220R","R_0402_1005Metric",14.400000,49.200000,-90.000000,top
|
||||
"R63","56R","R_0402_1005Metric",13.000000,31.800000,0.000000,top
|
||||
"R64","20R","R_0402_1005Metric",14.700000,32.500000,-90.000000,top
|
||||
"R65","20R","R_0402_1005Metric",11.300000,32.500000,-90.000000,top
|
||||
"R66","56R","R_0402_1005Metric",13.000000,33.100000,180.000000,top
|
||||
"R67","100R","R_0402_1005Metric",55.400000,59.100000,180.000000,top
|
||||
"R68","100R","R_0402_1005Metric",56.000000,55.900000,180.000000,top
|
||||
"R69","10k","R_0402_1005Metric",49.000000,55.900000,180.000000,top
|
||||
"R70","100R","R_0402_1005Metric",52.800000,55.900000,180.000000,top
|
||||
"R72","49.9R","R_0402_1005Metric",105.400000,13.300000,-120.000000,top
|
||||
"R73","49.9R","R_0402_1005Metric",103.400000,13.300000,-60.000000,top
|
||||
"R74","100R","R_0402_1005Metric",4.400000,17.300000,180.000000,top
|
||||
"R75","100R","R_0402_1005Metric",4.400000,21.100000,180.000000,top
|
||||
"R76","49.9R","R_0402_1005Metric",100.900000,15.200000,180.000000,top
|
||||
"R78","100R","R_0402_1005Metric",32.900000,19.000000,90.000000,top
|
||||
"R79","100R","R_0402_1005Metric",35.400000,19.600000,90.000000,top
|
||||
"R80","220R","R_0402_1005Metric",112.800000,44.800000,0.000000,top
|
||||
"R81","220R","R_0402_1005Metric",115.200000,44.800000,180.000000,top
|
||||
"R82","6.8k","R_0402_1005Metric",108.200000,48.200000,90.000000,top
|
||||
"R83","6.8k","R_0402_1005Metric",116.700000,48.200000,-90.000000,top
|
||||
"R84","DNP","R_0402_1005Metric",100.600000,25.500000,-90.000000,top
|
||||
"R85","220R","R_0402_1005Metric",111.000000,52.000000,-90.000000,top
|
||||
"R86","220R","R_0402_1005Metric",115.000000,52.000000,-90.000000,top
|
||||
"R87","1k","R_0402_1005Metric",101.800000,29.900000,90.000000,top
|
||||
"R88","220R","R_0402_1005Metric",111.000000,54.400000,-90.000000,top
|
||||
"R89","220R","R_0402_1005Metric",115.000000,54.400000,-90.000000,top
|
||||
"R90","56R","R_0402_1005Metric",114.100000,33.400000,0.000000,top
|
||||
"R91","20R","R_0402_1005Metric",114.700000,35.200000,-90.000000,top
|
||||
"R92","20R","R_0402_1005Metric",113.500000,35.200000,-90.000000,top
|
||||
"R93","56R","R_0402_1005Metric",114.100000,37.000000,180.000000,top
|
||||
"R94","4.7k","R_0402_1005Metric",29.500000,31.100000,90.000000,top
|
||||
"R95","4.7k","R_0402_1005Metric",36.900000,31.000000,-90.000000,top
|
||||
"R96","220R","R_0402_1005Metric",31.300000,34.900000,-90.000000,top
|
||||
"R97","220R","R_0402_1005Metric",35.100000,35.000000,-90.000000,top
|
||||
"R98","220R","R_0402_1005Metric",31.300000,37.400000,-90.000000,top
|
||||
"R99","220R","R_0402_1005Metric",35.100000,37.400000,-90.000000,top
|
||||
"R100","DNP","R_0402_1005Metric",42.100000,12.300000,0.000000,top
|
||||
"R101","1k","R_0402_1005Metric",37.400000,12.800000,180.000000,top
|
||||
"R102","220R","R_0402_1005Metric",32.600000,24.800000,90.000000,top
|
||||
"R103","220R","R_0402_1005Metric",34.600000,27.700000,180.000000,top
|
||||
"R104","0R","R_0402_1005Metric",56.900000,73.700000,180.000000,top
|
||||
"R105","0R","R_0402_1005Metric",56.900000,71.300000,180.000000,top
|
||||
"R106","0R","R_0402_1005Metric",56.900000,72.500000,180.000000,top
|
||||
"R107","0R","R_0402_1005Metric",56.900000,70.100000,180.000000,top
|
||||
"R108","0R","R_0402_1005Metric",56.900000,68.900000,180.000000,top
|
||||
"R109","0R","R_0402_1005Metric",56.900000,74.900000,180.000000,top
|
||||
"R110","0R","R_0402_1005Metric",56.900000,76.100000,180.000000,top
|
||||
"R111","DNP","R_0402_1005Metric",53.900000,73.700000,180.000000,top
|
||||
"R112","DNP","R_0402_1005Metric",53.900000,71.300000,180.000000,top
|
||||
"R113","DNP","R_0402_1005Metric",53.900000,72.500000,180.000000,top
|
||||
"R114","DNP","R_0402_1005Metric",53.900000,70.100000,180.000000,top
|
||||
"R115","DNP","R_0402_1005Metric",53.900000,68.900000,180.000000,top
|
||||
"R116","10k","R_0402_1005Metric",67.300000,84.300000,90.000000,top
|
||||
"R117","10k","R_0402_1005Metric",66.000000,84.300000,90.000000,top
|
||||
"R118","20R","R_0402_1005Metric",64.000000,84.300000,-90.000000,top
|
||||
"R119","20R","R_0402_1005Metric",62.700000,84.300000,90.000000,top
|
||||
"R120","330R","R_0402_1005Metric",36.100000,82.800000,90.000000,top
|
||||
"R121","10k","R_0402_1005Metric",49.098900,69.253600,0.000000,top
|
||||
"R122","10k","R_0402_1005Metric",49.100000,68.000000,180.000000,top
|
||||
"R123","20R","R_0402_1005Metric",115.100000,60.600000,-90.000000,top
|
||||
"R124","20R","R_0402_1005Metric",49.200000,60.200000,180.000000,top
|
||||
"R125","10k","R_0402_1005Metric",70.900000,89.500000,-90.000000,top
|
||||
"R126","20R","R_0402_1005Metric",93.000000,38.500000,-90.000000,top
|
||||
"R127","10k","R_0402_1005Metric",48.500000,57.600000,0.000000,top
|
||||
"R128","10k","R_0402_1005Metric",48.500000,58.900000,0.000000,top
|
||||
"R129","10k","R_0402_1005Metric",46.000000,78.000000,90.000000,top
|
||||
"R130","10k","R_0402_1005Metric",20.000000,61.300000,90.000000,top
|
||||
"R131","10k","R_0402_1005Metric",22.300000,61.300000,-90.000000,top
|
||||
"R132","10k","R_0402_1005Metric",26.300000,53.200000,0.000000,top
|
||||
"R133","10k","R_0402_1005Metric",26.300000,54.400000,180.000000,top
|
||||
"R134","330R","R_0402_1005Metric",39.100000,82.800000,-90.000000,top
|
||||
"R135","330R","R_0402_1005Metric",33.100000,82.800000,-90.000000,top
|
||||
"R136","330R","R_0402_1005Metric",30.100000,82.800000,-90.000000,top
|
||||
"R137","330R","R_0402_1005Metric",27.100000,82.800000,-90.000000,top
|
||||
"R138","330R","R_0402_1005Metric",24.100000,82.800000,-90.000000,top
|
||||
"R139","330R","R_0402_1005Metric",21.100000,82.800000,-90.000000,top
|
||||
"R140","330R","R_0402_1005Metric",18.100000,82.800000,-90.000000,top
|
||||
"R141","330R","R_0402_1005Metric",15.100000,82.800000,-90.000000,top
|
||||
"R142","330R","R_0402_1005Metric",12.100000,82.800000,-90.000000,top
|
||||
"R143","10k","R_0402_1005Metric",28.400000,41.200000,90.000000,top
|
||||
"R144","10k","R_0402_1005Metric",29.500000,35.000000,-90.000000,top
|
||||
"R145","10k","R_0402_1005Metric",16.600000,53.000000,90.000000,top
|
||||
"R146","10k","R_0402_1005Metric",19.200000,49.700000,-90.000000,top
|
||||
"R147","10k","R_0402_1005Metric",109.300000,52.100000,-90.000000,top
|
||||
"R148","10k","R_0402_1005Metric",105.100000,53.100000,90.000000,top
|
||||
"R149","10k","R_0402_1005Metric",85.400000,10.800000,90.000000,top
|
||||
"R150","10k","R_0402_1005Metric",49.300000,21.000000,90.000000,top
|
||||
"R151","10k","R_0402_1005Metric",50.500000,21.000000,90.000000,top
|
||||
"R152","10k","R_0402_1005Metric",18.900000,31.300000,90.000000,top
|
||||
"R153","10k","R_0402_1005Metric",54.000000,21.100000,90.000000,top
|
||||
"R154","10k","R_0402_1005Metric",67.300000,38.500000,90.000000,top
|
||||
"R155","10k","R_0402_1005Metric",72.400000,38.500000,90.000000,top
|
||||
"R156","10k","R_0402_1005Metric",48.500000,29.200000,180.000000,top
|
||||
"R157","10k","R_0402_1005Metric",50.900000,28.400000,180.000000,top
|
||||
"R158","10k","R_0402_1005Metric",48.500000,27.600000,180.000000,top
|
||||
"R159","10k","R_0402_1005Metric",50.900000,26.800000,180.000000,top
|
||||
"R160","10k","R_0402_1005Metric",48.500000,24.400000,0.000000,top
|
||||
"R161","10k","R_0402_1005Metric",50.900000,25.200000,0.000000,top
|
||||
"R162","10k","R_0402_1005Metric",48.500000,26.000000,0.000000,top
|
||||
"R163","10k","R_0402_1005Metric",57.300000,57.600000,180.000000,top
|
||||
"R164","100R","R_0402_1005Metric",51.600000,59.100000,180.000000,top
|
||||
"R165","10k","R_0402_1005Metric",55.800000,60.300000,180.000000,top
|
||||
"R168","75R","R_0402_1005Metric",5.100000,19.200000,-90.000000,top
|
||||
"R173","75R","R_0402_1005Metric",34.700000,17.800000,180.000000,top
|
||||
"T1","B012-617DB-1-63-B331","EASTEVER_BALUN",18.500000,15.700000,-90.000000,top
|
||||
"T2","B012-617DB-1-63-B331","EASTEVER_BALUN",104.400000,17.000000,-90.000000,top
|
||||
"T3","B012-617DB-1-63-B331","EASTEVER_BALUN",50.000000,15.400000,0.000000,top
|
||||
"U1","W25Q16BVSN","SOIC-8_3.9x4.9mm_P1.27mm",55.335000,65.265000,180.000000,top
|
||||
"U2","XC6SLX9-TQG144","TQFP-144_20x20mm_P0.5mm",35.000000,67.000000,90.000000,top
|
||||
"X1","SMA","J502-ND-142-0711-821_826",111.000000,95.900000,-90.000000,top
|
||||
"X2","SMA","J502-ND-142-0711-821_826",95.000000,95.900000,-90.000000,top
|
||||
"Y1","26MHz","Oscillator_SMD_ECS_20CSMV4_2.0x1.6mm",102.050000,41.025000,180.000000,top
|
||||
|