diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2017-08-13 11:22:07 +0200 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2017-08-13 11:22:07 +0200 |
commit | c895e6c051cfda77a22b31367cf5c0bbedce4249 (patch) | |
tree | eaaa475114cec384bc4d3d8e59da4e1ae10b3eb4 | |
parent | 21ed642fa528cc732f8d682266111be64c1ae711 (diff) | |
download | ee-python-c895e6c051cfda77a22b31367cf5c0bbedce4249.tar.gz ee-python-c895e6c051cfda77a22b31367cf5c0bbedce4249.tar.bz2 ee-python-c895e6c051cfda77a22b31367cf5c0bbedce4249.tar.xz ee-python-c895e6c051cfda77a22b31367cf5c0bbedce4249.zip |
o Going more jupyter.
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | demo/kicad/bom/A64-OlinuXino_Rev_C.xml | 211 | ||||
-rw-r--r-- | demo/notebooks/BOM Demo.ipynb | 1400 | ||||
-rw-r--r-- | requirements.txt | 5 | ||||
-rw-r--r-- | src/ee/kicad/bom/__init__.py | 77 | ||||
-rw-r--r-- | src/ee/kicad/bom_tool/__init__.py | 110 | ||||
-rw-r--r-- | src/ee/kicad/bom_tool/predef.py | 6 | ||||
-rw-r--r-- | test/test_bom.py | 41 | ||||
-rw-r--r-- | test/test_digikey.py | 16 | ||||
-rw-r--r-- | tox.ini | 3 |
10 files changed, 1861 insertions, 9 deletions
@@ -13,3 +13,4 @@ demo/*/*.raw demo/*/*.log .tox +.ipynb*/ diff --git a/demo/kicad/bom/A64-OlinuXino_Rev_C.xml b/demo/kicad/bom/A64-OlinuXino_Rev_C.xml index be920c1..39d4006 100644 --- a/demo/kicad/bom/A64-OlinuXino_Rev_C.xml +++ b/demo/kicad/bom/A64-OlinuXino_Rev_C.xml @@ -1,7 +1,12 @@ <?xml version="1.0" encoding="UTF-8"?> +<!-- +Downloaded from Github: OLIMEX/OLINUXINO/HARDWARE/A64-OLinuXino/A64-OLinuXino_Rev_C/A64-OlinuXino_Rev_C.sch. + +Slightly modified to create more interesting data. +--> <export version="D"> <design> - <source>/home/trygvis/dev/com.github/OLIMEX/OLINUXINO/HARDWARE/A64-OLinuXino/A64-OLinuXino_Rev_C/A64-OlinuXino_Rev_C.sch</source> + <source>/wat/OLIMEX/OLINUXINO/HARDWARE/A64-OLinuXino/A64-OLinuXino_Rev_C/A64-OlinuXino_Rev_C.sch</source> <date>ma. 07. aug. 2017 kl. 22.36 +0200</date> <tool>Eeschema 4.0.6+dfsg1-1</tool> <sheet number="1" name="/" tstamps="/"> @@ -64,6 +69,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>561E4D88</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C28"> <value>100nF/10V/10%</value> @@ -71,6 +80,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>561E4EAA</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C27"> <value>1uF/10V/10%</value> @@ -92,6 +105,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>561E4E92</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C29"> <value>100nF/10V/10%</value> @@ -99,6 +116,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>561E57FE</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="R7"> <value>243R/1%</value> @@ -113,6 +134,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>561E6CD8</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="R3"> <value>22R</value> @@ -162,6 +187,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>562050DC</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C23"> <value>100nF/10V/10%</value> @@ -169,6 +198,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5620575E</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C24"> <value>100nF/10V/10%</value> @@ -176,6 +209,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>56207D58</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C12"> <value>100nF/10V/10%</value> @@ -183,6 +220,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>56208905</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C13"> <value>100nF/10V/10%</value> @@ -190,6 +231,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5620A865</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C14"> <value>100nF/10V/10%</value> @@ -197,6 +242,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5620AB64</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C15"> <value>100nF/10V/10%</value> @@ -204,6 +253,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5620ADAF</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C16"> <value>10uF/6.3V/20%</value> @@ -218,6 +271,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5621202A</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C2"> <value>100nF/10V/10%</value> @@ -225,6 +282,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>56212030</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C3"> <value>100nF/10V/10%</value> @@ -232,6 +293,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>56212036</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C4"> <value>100nF/10V/10%</value> @@ -239,6 +304,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5621203C</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C5"> <value>10uF/6.3V/20%</value> @@ -267,6 +336,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>56217802</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C33"> <value>100nF/10V/10%</value> @@ -274,6 +347,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>56217880</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="R10"> <value>243R/1%</value> @@ -295,6 +372,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5621CFF8</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C17"> <value>100nF/10V/10%</value> @@ -302,6 +383,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5621CFFE</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C18"> <value>100nF/10V/10%</value> @@ -309,6 +394,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5621D004</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C19"> <value>100nF/10V/10%</value> @@ -316,6 +405,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5621D00A</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C20"> <value>100nF/10V/10%</value> @@ -323,6 +416,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5621D010</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C21"> <value>10uF/6.3V/20%</value> @@ -337,6 +434,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5621D028</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C7"> <value>100nF/10V/10%</value> @@ -344,6 +445,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5621D02E</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C8"> <value>100nF/10V/10%</value> @@ -351,6 +456,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5621D034</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C9"> <value>100nF/10V/10%</value> @@ -358,6 +467,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/" tstamps="/"/> <tstamp>5621D03A</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C10"> <value>10uF/6.3V/20%</value> @@ -481,6 +594,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>562677EF</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C38"> <value>1uF/10V/10%</value> @@ -495,6 +612,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>5624F9D4</tstamp> + <fields> + <field name="digikey">587-1819-2-ND</field> + <field name="part">JMK063BJ224MP-F</field> + </fields> </comp> <comp ref="C35"> <value>100nF/10V/10%</value> @@ -502,6 +623,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>5624F9CD</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C43"> <value>1uF/10V/10%</value> @@ -516,6 +641,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>56251915</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="L1"> <value>FB0805/600R/2A</value> @@ -586,6 +715,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>56274CAA</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="R15"> <value>NA(10k)</value> @@ -677,6 +810,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>562CBE9C</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C49"> <value>10uF/6.3V/20%</value> @@ -691,6 +828,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>562D84AB</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C53"> <value>10uF/6.3V/20%</value> @@ -754,6 +895,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>56299DA1</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C60"> <value>100nF/10V/10%</value> @@ -761,6 +906,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>5629AC30</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="R26"> <value>2k/1%</value> @@ -824,6 +973,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>562D6A02</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C66"> <value>100nF/10V/10%</value> @@ -831,6 +984,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>562D74CB</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="R35"> <value>100k</value> @@ -880,6 +1037,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>56326ED5</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C47"> <value>10uF/6.3V/20%</value> @@ -992,6 +1153,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>57BB8E9B</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C58"> <value>100nF/10V/10%</value> @@ -999,6 +1164,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>57BB8EA1</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C82"> <value>100nF/10V/10%</value> @@ -1006,6 +1175,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>57BBB6F8</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C83"> <value>100nF/10V/10%</value> @@ -1013,6 +1186,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>57BBB931</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C84"> <value>33pF/50V/5%</value> @@ -1034,6 +1211,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>57BC455C</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C87"> <value>100nF/10V/10%</value> @@ -1041,6 +1222,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/> <tstamp>57BC4562</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="GNDA1"> <value>TESTPAD</value> @@ -1181,6 +1366,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/USB&HDMI,WiFi&BT,Ethernet,LCD/" tstamps="/563556AE/"/> <tstamp>562AFE85</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="USB-OTG1"> <value>MICRO_USB/MISB-SWMM-5B_LF</value> @@ -1216,6 +1405,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/USB&HDMI,WiFi&BT,Ethernet,LCD/" tstamps="/563556AE/"/> <tstamp>562A7F62</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="C70"> <value>NA(47uF/6.3V/20%)</value> @@ -1265,6 +1458,10 @@ <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/USB&HDMI,WiFi&BT,Ethernet,LCD/" tstamps="/563556AE/"/> <tstamp>562C1028</tstamp> + <fields> + <field name="digikey">478-1129-2-ND</field> + <field name="part">0402ZD104KAT2A</field> + </fields> </comp> <comp ref="R40"> <value>10k</value> @@ -1752,6 +1949,8 @@ <field name="Fieldname 1">Value 1</field> <field name="Fieldname2">Value2</field> <field name="Fieldname3">Value3</field> + <field name="digikey">587-1819-2-ND</field> + <field name="part">JMK063BJ224MP-F</field> </fields> <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/USB&HDMI,WiFi&BT,Ethernet,LCD/" tstamps="/563556AE/"/> @@ -1819,6 +2018,8 @@ <field name="Fieldname 1">Value 1</field> <field name="Fieldname2">Value2</field> <field name="Fieldname3">Value3</field> + <field name="digikey">587-1819-2-ND</field> + <field name="part">JMK063BJ224MP-F</field> </fields> <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/USB&HDMI,WiFi&BT,Ethernet,LCD/" tstamps="/563556AE/"/> @@ -1843,6 +2044,8 @@ <field name="Fieldname 1">Value 1</field> <field name="Fieldname2">Value2</field> <field name="Fieldname3">Value3</field> + <field name="digikey">587-1819-2-ND</field> + <field name="part">JMK063BJ224MP-F</field> </fields> <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/USB&HDMI,WiFi&BT,Ethernet,LCD/" tstamps="/563556AE/"/> @@ -2013,6 +2216,8 @@ <field name="Fieldname 1">Value 1</field> <field name="Fieldname2">Value2</field> <field name="Fieldname3">Value3</field> + <field name="digikey">587-1819-2-ND</field> + <field name="part">JMK063BJ224MP-F</field> </fields> <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/USB&HDMI,WiFi&BT,Ethernet,LCD/" tstamps="/563556AE/"/> @@ -2049,6 +2254,8 @@ <field name="Fieldname 1">Value 1</field> <field name="Fieldname2">Value2</field> <field name="Fieldname3">Value3</field> + <field name="digikey">587-1819-2-ND</field> + <field name="part">JMK063BJ224MP-F</field> </fields> <libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/> <sheetpath names="/USB&HDMI,WiFi&BT,Ethernet,LCD/" tstamps="/563556AE/"/> @@ -4800,7 +5007,7 @@ </libparts> <libraries> <library logical="A64-OlinuXino_Rev_C-cache"> - <uri>/home/trygvis/dev/com.github/OLIMEX/OLINUXINO/HARDWARE/A64-OLinuXino/A64-OLinuXino_Rev_C/A64-OlinuXino_Rev_C-cache.lib</uri> + <uri>/wat/OLIMEX/OLINUXINO/HARDWARE/A64-OLinuXino/A64-OLinuXino_Rev_C/A64-OlinuXino_Rev_C-cache.lib</uri> </library> </libraries> <nets> diff --git a/demo/notebooks/BOM Demo.ipynb b/demo/notebooks/BOM Demo.ipynb new file mode 100644 index 0000000..f9d6faa --- /dev/null +++ b/demo/notebooks/BOM Demo.ipynb @@ -0,0 +1,1400 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Notebook configuration" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The autoreload extension is already loaded. To reload it, use:\n", + " %reload_ext autoreload\n" + ] + } + ], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "%aimport ee.kicad.bom\n", + "%aimport ee.kicad.bom.io\n", + "\n", + "from ee.kicad.bom import *\n", + "from ee.kicad.bom.io import read_bom" + ] + }, + { + "cell_type": "code", + "execution_count": 170, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "bom_file = \"../kicad/bom/A64-OlinuXino_Rev_C.xml\"\n", + "bom_file = \"../kicad/bom/gw.xml\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Load the BOM, sort by reference" + ] + }, + { + "cell_type": "code", + "execution_count": 199, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "import os\n", + "import os.path\n", + "import pandas\n", + "\n", + "bom = read_bom(bom_file).to_pandas()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Sort a BOM" + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "f=lambda x: pandas.Series(data=x, index=['ref_name', 'ref_num', 'ref_rest'])\n", + "sort_fields=bom[\"ref\"].map(ee.kicad.bom.split_ref).apply(f)\n", + "\n", + "bom=pandas.concat([bom, sort_fields], axis=1, join_axes=[bom.index])\n", + "bom=bom.sort_values(by=list(sort_fields.columns))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 201, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style>\n", + " .dataframe thead tr:only-child th {\n", + " text-align: right;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: left;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>Capacitance</th>\n", + " <th>Color</th>\n", + " <th>Description</th>\n", + " <th>Frequency</th>\n", + " <th>Impedance</th>\n", + " <th>Inductance</th>\n", + " <th>Manufacturer</th>\n", + " <th>Part Number</th>\n", + " <th>Resistance</th>\n", + " <th>ref</th>\n", + " <th>value</th>\n", + " <th>ref_name</th>\n", + " <th>ref_num</th>\n", + " <th>ref_rest</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>C1</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C1</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>1</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C2</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C2</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>2</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C3</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C3</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>3</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C4</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C4</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>4</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C5</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C5</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>5</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C6</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C6</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>6</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C7</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C7</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>7</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C8</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C8</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>8</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C9</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C9</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>9</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C10</th>\n", + " <td>4.7uF</td>\n", + " <td>None</td>\n", + " <td>4.7uF, 6.3Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM185R60J475ME15</td>\n", + " <td>None</td>\n", + " <td>C10</td>\n", + " <td>C0603_4u7_6.3Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>10</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C11</th>\n", + " <td>4.7uF</td>\n", + " <td>None</td>\n", + " <td>4.7uF, 6.3Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM185R60J475ME15</td>\n", + " <td>None</td>\n", + " <td>C11</td>\n", + " <td>C0603_4u7_6.3Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>11</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C12</th>\n", + " <td>4.7uF</td>\n", + " <td>None</td>\n", + " <td>4.7uF, 6.3Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM185R60J475ME15</td>\n", + " <td>None</td>\n", + " <td>C12</td>\n", + " <td>C0603_4u7_6.3Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>12</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C13</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C13</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>13</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C14</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C14</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>14</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C15</th>\n", + " <td>10000pF</td>\n", + " <td>None</td>\n", + " <td>10000pF, 10Vdc, ±10%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM155R61A103KA01</td>\n", + " <td>None</td>\n", + " <td>C15</td>\n", + " <td>C0402_10n_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>15</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C16</th>\n", + " <td>10000pF</td>\n", + " <td>None</td>\n", + " <td>10000pF, 10Vdc, ±10%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM155R61A103KA01</td>\n", + " <td>None</td>\n", + " <td>C16</td>\n", + " <td>C0402_10n_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>16</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C17</th>\n", + " <td>10000pF</td>\n", + " <td>None</td>\n", + " <td>10000pF, 10Vdc, ±10%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM155R61A103KA01</td>\n", + " <td>None</td>\n", + " <td>C17</td>\n", + " <td>C0402_10n_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>17</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C18</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C18</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>18</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C19</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C19</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>19</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C20</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C20</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>20</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C21</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C21</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>21</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C22</th>\n", + " <td>10pF</td>\n", + " <td>None</td>\n", + " <td>10pF, 100Vdc, ±2%, C0G</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM1555C2A100GA01</td>\n", + " <td>None</td>\n", + " <td>C22</td>\n", + " <td>C0402_10p_100Vdc_C0G</td>\n", + " <td>C</td>\n", + " <td>22</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C23</th>\n", + " <td>10pF</td>\n", + " <td>None</td>\n", + " <td>10pF, 100Vdc, ±2%, C0G</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM1555C2A100GA01</td>\n", + " <td>None</td>\n", + " <td>C23</td>\n", + " <td>C0402_10p_100Vdc_C0G</td>\n", + " <td>C</td>\n", + " <td>23</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C24</th>\n", + " <td>10pF</td>\n", + " <td>None</td>\n", + " <td>10pF, 100Vdc, ±2%, C0G</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM1555C2A100GA01</td>\n", + " <td>None</td>\n", + " <td>C24</td>\n", + " <td>C0402_10p_100Vdc_C0G</td>\n", + " <td>C</td>\n", + " <td>24</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C25</th>\n", + " <td>10pF</td>\n", + " <td>None</td>\n", + " <td>10pF, 100Vdc, ±2%, C0G</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM1555C2A100GA01</td>\n", + " <td>None</td>\n", + " <td>C25</td>\n", + " <td>C0402_10p_100Vdc_C0G</td>\n", + " <td>C</td>\n", + " <td>25</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C26</th>\n", + " <td>10pF</td>\n", + " <td>None</td>\n", + " <td>10pF, 100Vdc, ±2%, C0G</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM1555C2A100GA01</td>\n", + " <td>None</td>\n", + " <td>C26</td>\n", + " <td>C0402_10p_100Vdc_C0G</td>\n", + " <td>C</td>\n", + " <td>26</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C27</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C27</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>27</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C28</th>\n", + " <td>15pF</td>\n", + " <td>None</td>\n", + " <td>15pF, 100Vdc, ±2%, C0G</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM1555C2A150GA01</td>\n", + " <td>None</td>\n", + " <td>C28</td>\n", + " <td>C0402_15p_100Vdc_C0G</td>\n", + " <td>C</td>\n", + " <td>28</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C29</th>\n", + " <td>1.0uF</td>\n", + " <td>None</td>\n", + " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM153R61A105ME95</td>\n", + " <td>None</td>\n", + " <td>C29</td>\n", + " <td>C0402_1u_10Vdc_X5R</td>\n", + " <td>C</td>\n", + " <td>29</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>C30</th>\n", + " <td>15pF</td>\n", + " <td>None</td>\n", + " <td>15pF, 100Vdc, ±2%, C0G</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Murata</td>\n", + " <td>GRM1555C2A150GA01</td>\n", + " <td>None</td>\n", + " <td>C30</td>\n", + " <td>C0402_15p_100Vdc_C0G</td>\n", + " <td>C</td>\n", + " <td>30</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>R32</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>1.5k, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW04021K50FKED</td>\n", + " <td>1.5k</td>\n", + " <td>R32</td>\n", + " <td>R0402_1k50</td>\n", + " <td>R</td>\n", + " <td>32</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R33</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>10k, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW040210K0FKED</td>\n", + " <td>10k</td>\n", + " <td>R33</td>\n", + " <td>R0402_10k</td>\n", + " <td>R</td>\n", + " <td>33</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R34</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>330, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW0402330RFKED</td>\n", + " <td>330</td>\n", + " <td>R34</td>\n", + " <td>R0402_330R</td>\n", + " <td>R</td>\n", + " <td>34</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R35</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>330, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW0402330RFKED</td>\n", + " <td>330</td>\n", + " <td>R35</td>\n", + " <td>R0402_330R</td>\n", + " <td>R</td>\n", + " <td>35</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R36</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>10k, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW040210K0FKED</td>\n", + " <td>10k</td>\n", + " <td>R36</td>\n", + " <td>R0402_10k</td>\n", + " <td>R</td>\n", + " <td>36</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R37</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>100k, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW0402100KFKED</td>\n", + " <td>100k</td>\n", + " <td>R37</td>\n", + " <td>R0402_100k</td>\n", + " <td>R</td>\n", + " <td>37</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R38</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>100k, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW0402100KFKED</td>\n", + " <td>100k</td>\n", + " <td>R38</td>\n", + " <td>R0402_100k</td>\n", + " <td>R</td>\n", + " <td>38</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R39</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>100k, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW0402100KFKED</td>\n", + " <td>100k</td>\n", + " <td>R39</td>\n", + " <td>R0402_100k</td>\n", + " <td>R</td>\n", + " <td>39</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R40</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>100, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW0402100RFKED</td>\n", + " <td>100</td>\n", + " <td>R40</td>\n", + " <td>R0402_100R</td>\n", + " <td>R</td>\n", + " <td>40</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R41</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>100, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW0402100RFKED</td>\n", + " <td>100</td>\n", + " <td>R41</td>\n", + " <td>R0402_100R</td>\n", + " <td>R</td>\n", + " <td>41</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R42</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>39, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW040239R0FKED</td>\n", + " <td>39</td>\n", + " <td>R42</td>\n", + " <td>R0402_39R</td>\n", + " <td>R</td>\n", + " <td>42</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R43</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>39, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW040239R0FKED</td>\n", + " <td>39</td>\n", + " <td>R43</td>\n", + " <td>R0402_39R</td>\n", + " <td>R</td>\n", + " <td>43</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>R44</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>10k, ±1%, 0.063W</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Vishay</td>\n", + " <td>CRCW040210K0FKED</td>\n", + " <td>10k</td>\n", + " <td>R44</td>\n", + " <td>R0402_10k</td>\n", + " <td>R</td>\n", + " <td>44</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>T1</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>T1</td>\n", + " <td>S558-5999-T7-F</td>\n", + " <td>T</td>\n", + " <td>1</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>U1</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>U1</td>\n", + " <td>AT91SAM9G25</td>\n", + " <td>U</td>\n", + " <td>1</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>U2</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>U2</td>\n", + " <td>USBLC6-4</td>\n", + " <td>U</td>\n", + " <td>2</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>U3</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>U3</td>\n", + " <td>CC2520</td>\n", + " <td>U</td>\n", + " <td>3</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>U4</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>U4</td>\n", + " <td>NCP360SNAET1G</td>\n", + " <td>U</td>\n", + " <td>4</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>U5</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>U5</td>\n", + " <td>TPS62742</td>\n", + " <td>U</td>\n", + " <td>5</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>U6</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>U6</td>\n", + " <td>MIC23254</td>\n", + " <td>U</td>\n", + " <td>6</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>U7</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>U7</td>\n", + " <td>IS46DR16640B</td>\n", + " <td>U</td>\n", + " <td>7</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>U8</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>U8</td>\n", + " <td>MX30LF1G08AA</td>\n", + " <td>U</td>\n", + " <td>8</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>U9</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>U9</td>\n", + " <td>LAN8710</td>\n", + " <td>U</td>\n", + " <td>9</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>U10</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>U10</td>\n", + " <td>USBLC6-4</td>\n", + " <td>U</td>\n", + " <td>10</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>U11</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>U11</td>\n", + " <td>LP3470M5-3.08</td>\n", + " <td>U</td>\n", + " <td>11</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>X1</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>f=12MHz, Stability:±150ppm, Tol:±50ppm,Load ca...</td>\n", + " <td>12MHz</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>NDK</td>\n", + " <td>NX3225GA-12.000M-STD-CRA-1</td>\n", + " <td>None</td>\n", + " <td>X1</td>\n", + " <td>NX3225GA-12.000M-STD-CRA-1</td>\n", + " <td>X</td>\n", + " <td>1</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>X2</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>f=32.768kHz, Stability:-, Tol:±20ppm,Load capa...</td>\n", + " <td>32.768kHz</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>NDK</td>\n", + " <td>NX2012SA-32.768K-STD-MUB-1</td>\n", + " <td>None</td>\n", + " <td>X2</td>\n", + " <td>NX2012SA-32.768K-STD-MUB-1</td>\n", + " <td>X</td>\n", + " <td>2</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>X3</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>f=32MHz, Stability:±10ppm, Tol:±10ppm,Load cap...</td>\n", + " <td>32MHz</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>NDK</td>\n", + " <td>NX2520SA-32.000000MHZ</td>\n", + " <td>None</td>\n", + " <td>X3</td>\n", + " <td>NX2520SA-32.000000MHZ</td>\n", + " <td>X</td>\n", + " <td>3</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>X4</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>f=25MHz, Stability:±25ppm, Tol:±15ppm,Load cap...</td>\n", + " <td>25MHz</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>NDK</td>\n", + " <td>NX2520SA-25.000M-STD-CSW-5</td>\n", + " <td>None</td>\n", + " <td>X4</td>\n", + " <td>NX2520SA-25.000M-STD-CSW-5</td>\n", + " <td>X</td>\n", + " <td>4</td>\n", + " <td></td>\n", + " </tr>\n", + " <tr>\n", + " <th>Z1</th>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>None</td>\n", + " <td>Z1</td>\n", + " <td>WLA.01</td>\n", + " <td>Z</td>\n", + " <td>1</td>\n", + " <td></td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>165 rows × 14 columns</p>\n", + "</div>" + ], + "text/plain": [ + " Capacitance Color Description \\\n", + "C1 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C2 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C3 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C4 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C5 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C6 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C7 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C8 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C9 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C10 4.7uF None 4.7uF, 6.3Vdc, ±20%, X5R \n", + "C11 4.7uF None 4.7uF, 6.3Vdc, ±20%, X5R \n", + "C12 4.7uF None 4.7uF, 6.3Vdc, ±20%, X5R \n", + "C13 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C14 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C15 10000pF None 10000pF, 10Vdc, ±10%, X5R \n", + "C16 10000pF None 10000pF, 10Vdc, ±10%, X5R \n", + "C17 10000pF None 10000pF, 10Vdc, ±10%, X5R \n", + "C18 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C19 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C20 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C21 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C22 10pF None 10pF, 100Vdc, ±2%, C0G \n", + "C23 10pF None 10pF, 100Vdc, ±2%, C0G \n", + "C24 10pF None 10pF, 100Vdc, ±2%, C0G \n", + "C25 10pF None 10pF, 100Vdc, ±2%, C0G \n", + "C26 10pF None 10pF, 100Vdc, ±2%, C0G \n", + "C27 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C28 15pF None 15pF, 100Vdc, ±2%, C0G \n", + "C29 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n", + "C30 15pF None 15pF, 100Vdc, ±2%, C0G \n", + ".. ... ... ... \n", + "R32 None None 1.5k, ±1%, 0.063W \n", + "R33 None None 10k, ±1%, 0.063W \n", + "R34 None None 330, ±1%, 0.063W \n", + "R35 None None 330, ±1%, 0.063W \n", + "R36 None None 10k, ±1%, 0.063W \n", + "R37 None None 100k, ±1%, 0.063W \n", + "R38 None None 100k, ±1%, 0.063W \n", + "R39 None None 100k, ±1%, 0.063W \n", + "R40 None None 100, ±1%, 0.063W \n", + "R41 None None 100, ±1%, 0.063W \n", + "R42 None None 39, ±1%, 0.063W \n", + "R43 None None 39, ±1%, 0.063W \n", + "R44 None None 10k, ±1%, 0.063W \n", + "T1 None None None \n", + "U1 None None None \n", + "U2 None None None \n", + "U3 None None None \n", + "U4 None None None \n", + "U5 None None None \n", + "U6 None None None \n", + "U7 None None None \n", + "U8 None None None \n", + "U9 None None None \n", + "U10 None None None \n", + "U11 None None None \n", + "X1 None None f=12MHz, Stability:±150ppm, Tol:±50ppm,Load ca... \n", + "X2 None None f=32.768kHz, Stability:-, Tol:±20ppm,Load capa... \n", + "X3 None None f=32MHz, Stability:±10ppm, Tol:±10ppm,Load cap... \n", + "X4 None None f=25MHz, Stability:±25ppm, Tol:±15ppm,Load cap... \n", + "Z1 None None None \n", + "\n", + " Frequency Impedance Inductance Manufacturer Part Number \\\n", + "C1 None None None Murata GRM153R61A105ME95 \n", + "C2 None None None Murata GRM153R61A105ME95 \n", + "C3 None None None Murata GRM153R61A105ME95 \n", + "C4 None None None Murata GRM153R61A105ME95 \n", + "C5 None None None Murata GRM153R61A105ME95 \n", + "C6 None None None Murata GRM153R61A105ME95 \n", + "C7 None None None Murata GRM153R61A105ME95 \n", + "C8 None None None Murata GRM153R61A105ME95 \n", + "C9 None None None Murata GRM153R61A105ME95 \n", + "C10 None None None Murata GRM185R60J475ME15 \n", + "C11 None None None Murata GRM185R60J475ME15 \n", + "C12 None None None Murata GRM185R60J475ME15 \n", + "C13 None None None Murata GRM153R61A105ME95 \n", + "C14 None None None Murata GRM153R61A105ME95 \n", + "C15 None None None Murata GRM155R61A103KA01 \n", + "C16 None None None Murata GRM155R61A103KA01 \n", + "C17 None None None Murata GRM155R61A103KA01 \n", + "C18 None None None Murata GRM153R61A105ME95 \n", + "C19 None None None Murata GRM153R61A105ME95 \n", + "C20 None None None Murata GRM153R61A105ME95 \n", + "C21 None None None Murata GRM153R61A105ME95 \n", + "C22 None None None Murata GRM1555C2A100GA01 \n", + "C23 None None None Murata GRM1555C2A100GA01 \n", + "C24 None None None Murata GRM1555C2A100GA01 \n", + "C25 None None None Murata GRM1555C2A100GA01 \n", + "C26 None None None Murata GRM1555C2A100GA01 \n", + "C27 None None None Murata GRM153R61A105ME95 \n", + "C28 None None None Murata GRM1555C2A150GA01 \n", + "C29 None None None Murata GRM153R61A105ME95 \n", + "C30 None None None Murata GRM1555C2A150GA01 \n", + ".. ... ... ... ... ... \n", + "R32 None None None Vishay CRCW04021K50FKED \n", + "R33 None None None Vishay CRCW040210K0FKED \n", + "R34 None None None Vishay CRCW0402330RFKED \n", + "R35 None None None Vishay CRCW0402330RFKED \n", + "R36 None None None Vishay CRCW040210K0FKED \n", + "R37 None None None Vishay CRCW0402100KFKED \n", + "R38 None None None Vishay CRCW0402100KFKED \n", + "R39 None None None Vishay CRCW0402100KFKED \n", + "R40 None None None Vishay CRCW0402100RFKED \n", + "R41 None None None Vishay CRCW0402100RFKED \n", + "R42 None None None Vishay CRCW040239R0FKED \n", + "R43 None None None Vishay CRCW040239R0FKED \n", + "R44 None None None Vishay CRCW040210K0FKED \n", + "T1 None None None None None \n", + "U1 None None None None None \n", + "U2 None None None None None \n", + "U3 None None None None None \n", + "U4 None None None None None \n", + "U5 None None None None None \n", + "U6 None None None None None \n", + "U7 None None None None None \n", + "U8 None None None None None \n", + "U9 None None None None None \n", + "U10 None None None None None \n", + "U11 None None None None None \n", + "X1 12MHz None None NDK NX3225GA-12.000M-STD-CRA-1 \n", + "X2 32.768kHz None None NDK NX2012SA-32.768K-STD-MUB-1 \n", + "X3 32MHz None None NDK NX2520SA-32.000000MHZ \n", + "X4 25MHz None None NDK NX2520SA-25.000M-STD-CSW-5 \n", + "Z1 None None None None None \n", + "\n", + " Resistance ref value ref_name ref_num ref_rest \n", + "C1 None C1 C0402_1u_10Vdc_X5R C 1 \n", + "C2 None C2 C0402_1u_10Vdc_X5R C 2 \n", + "C3 None C3 C0402_1u_10Vdc_X5R C 3 \n", + "C4 None C4 C0402_1u_10Vdc_X5R C 4 \n", + "C5 None C5 C0402_1u_10Vdc_X5R C 5 \n", + "C6 None C6 C0402_1u_10Vdc_X5R C 6 \n", + "C7 None C7 C0402_1u_10Vdc_X5R C 7 \n", + "C8 None C8 C0402_1u_10Vdc_X5R C 8 \n", + "C9 None C9 C0402_1u_10Vdc_X5R C 9 \n", + "C10 None C10 C0603_4u7_6.3Vdc_X5R C 10 \n", + "C11 None C11 C0603_4u7_6.3Vdc_X5R C 11 \n", + "C12 None C12 C0603_4u7_6.3Vdc_X5R C 12 \n", + "C13 None C13 C0402_1u_10Vdc_X5R C 13 \n", + "C14 None C14 C0402_1u_10Vdc_X5R C 14 \n", + "C15 None C15 C0402_10n_10Vdc_X5R C 15 \n", + "C16 None C16 C0402_10n_10Vdc_X5R C 16 \n", + "C17 None C17 C0402_10n_10Vdc_X5R C 17 \n", + "C18 None C18 C0402_1u_10Vdc_X5R C 18 \n", + "C19 None C19 C0402_1u_10Vdc_X5R C 19 \n", + "C20 None C20 C0402_1u_10Vdc_X5R C 20 \n", + "C21 None C21 C0402_1u_10Vdc_X5R C 21 \n", + "C22 None C22 C0402_10p_100Vdc_C0G C 22 \n", + "C23 None C23 C0402_10p_100Vdc_C0G C 23 \n", + "C24 None C24 C0402_10p_100Vdc_C0G C 24 \n", + "C25 None C25 C0402_10p_100Vdc_C0G C 25 \n", + "C26 None C26 C0402_10p_100Vdc_C0G C 26 \n", + "C27 None C27 C0402_1u_10Vdc_X5R C 27 \n", + "C28 None C28 C0402_15p_100Vdc_C0G C 28 \n", + "C29 None C29 C0402_1u_10Vdc_X5R C 29 \n", + "C30 None C30 C0402_15p_100Vdc_C0G C 30 \n", + ".. ... ... ... ... ... ... \n", + "R32 1.5k R32 R0402_1k50 R 32 \n", + "R33 10k R33 R0402_10k R 33 \n", + "R34 330 R34 R0402_330R R 34 \n", + "R35 330 R35 R0402_330R R 35 \n", + "R36 10k R36 R0402_10k R 36 \n", + "R37 100k R37 R0402_100k R 37 \n", + "R38 100k R38 R0402_100k R 38 \n", + "R39 100k R39 R0402_100k R 39 \n", + "R40 100 R40 R0402_100R R 40 \n", + "R41 100 R41 R0402_100R R 41 \n", + "R42 39 R42 R0402_39R R 42 \n", + "R43 39 R43 R0402_39R R 43 \n", + "R44 10k R44 R0402_10k R 44 \n", + "T1 None T1 S558-5999-T7-F T 1 \n", + "U1 None U1 AT91SAM9G25 U 1 \n", + "U2 None U2 USBLC6-4 U 2 \n", + "U3 None U3 CC2520 U 3 \n", + "U4 None U4 NCP360SNAET1G U 4 \n", + "U5 None U5 TPS62742 U 5 \n", + "U6 None U6 MIC23254 U 6 \n", + "U7 None U7 IS46DR16640B U 7 \n", + "U8 None U8 MX30LF1G08AA U 8 \n", + "U9 None U9 LAN8710 U 9 \n", + "U10 None U10 USBLC6-4 U 10 \n", + "U11 None U11 LP3470M5-3.08 U 11 \n", + "X1 None X1 NX3225GA-12.000M-STD-CRA-1 X 1 \n", + "X2 None X2 NX2012SA-32.768K-STD-MUB-1 X 2 \n", + "X3 None X3 NX2520SA-32.000000MHZ X 3 \n", + "X4 None X4 NX2520SA-25.000M-STD-CSW-5 X 4 \n", + "Z1 None Z1 WLA.01 Z 1 \n", + "\n", + "[165 rows x 14 columns]" + ] + }, + "execution_count": 201, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bom" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.4rc1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/requirements.txt b/requirements.txt index d338937..627079e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,8 @@ matplotlib==2.0.2 pandas==0.20.3 Pillow==4.2.1 pytest==3.2.0 + +mypy==0.521; python_version >= '3.0' + +# for development +jupyter==1.0.0 diff --git a/src/ee/kicad/bom/__init__.py b/src/ee/kicad/bom/__init__.py index 1808357..d0798a4 100644 --- a/src/ee/kicad/bom/__init__.py +++ b/src/ee/kicad/bom/__init__.py @@ -1,10 +1,34 @@ +import re +import sys + __all__ = [ 'Part', 'Library', 'Bom', 'Comp', + 'split_ref', ] +def split_ref(ref): + """Split "C12" into a tuple that's useful for sorting by component reference. + + For example: "C12" => ("C", 12, None). "Cfoo" => ("C", sys.maxsize, ""). + """ + m = split_ref.r.match(ref) + if not m: + return (ref, sys.maxsize, "") + groups = m.groups() + ref = groups[0] + val = groups[1] + rest = groups[2] + try: + return (ref, int(val), rest) + except ValueError: + pass + + return (ref, val, rest) +split_ref.r = re.compile("([A-Za-z]+)([0-9]+)(.*)") + class Part: def __init__(self, name): self.name = name @@ -22,19 +46,26 @@ class Library: self.parts[part] = p return p -class Bom: +class Bom(object): def __init__(self): self.libraries = {} - self.components = {} + self._components = {} def add_component(self, component): - self.components[component.ref] = component + self._components[component.ref] = component def get_component(self, name): - return self.components[name] + return self._components[name] def get_components(self): - return self.components + return self._components + + def all_field_names(self): + fields = set(['ref', 'value']) + for c in self._components.values(): + for f in c.fields: + fields.add(f) + return fields def find_library(self, name): try: @@ -44,6 +75,27 @@ class Bom: self.libraries[name] = lib return lib + def to_pandas(self, ref_field_name = None, value_field_name = None): + import pandas + + ref_field_name = ref_field_name or "ref" + value_field_name = value_field_name or "value" + + fields = self.all_field_names() + data = {k: [] for k in fields} + refs = [] + values = [] + for ref, c in self.get_components().items(): + refs.append(c.ref) + values.append(c.value) + for field in fields: + data[field].append(c[field] if field in c else None) + +# del data[ref_field_name] + data[ref_field_name] = refs + data[value_field_name] = values + return pandas.DataFrame(data=data, index=refs) + class Comp: def __init__(self, ref, value, library, part, footprint): self.ref = ref @@ -56,3 +108,18 @@ class Comp: def add_field(self, key, value): self.fields[key] = value + def __contains__(self, key): + if key == 'ref': + return self.ref is not None + elif key == 'value': + return self.value is not None + else: + return key in self.fields + + def __getitem__(self, key): + if key == 'ref': + return self.ref + elif key == 'value': + return self.value + else: + return self.fields[key] diff --git a/src/ee/kicad/bom_tool/__init__.py b/src/ee/kicad/bom_tool/__init__.py new file mode 100644 index 0000000..9f450c9 --- /dev/null +++ b/src/ee/kicad/bom_tool/__init__.py @@ -0,0 +1,110 @@ +from ee.kicad.bom import * +import functools +import itertools +import pandas as pd + +def _none_if_empty(l): + return l if l is not None and len(l) > 0 else None + +class Supplier(): + def __init__(self, name, bom_field = None): + self._name = name + self._bom_field = bom_field if not None else name + + @property + def bom_field(self): + return self._bom_field + +class Settings(): + def __init__(self, suppliers = None, part_field = None): + self._suppliers = suppliers if suppliers is not None else [] + self._part_field = part_field if part_field is not None else 'part' + + @property + def suppliers(self): + return self._suppliers + + @property + def part_field(self): + return self._part_field + + @part_field.setter + def part_field(self, value): + self._part_field = value + +class CsvFormat(): + def __init__(self, supplier = None, group_by_fields = None, required_fields = None): + self._supplier = supplier + self._group_by_fields = _none_if_empty(group_by_fields) + self._required_fields = _none_if_empty(required_fields) + + @property + def supplier(self): + return self._supplier + + @property + def group_by_fields(self): + return self._group_by_fields + + @property + def required_fields(self): + return self._required_fields + +def _all(fs, c): + for f in fs: + if not f(c): + return False + return True + +def to_panda(bom, bom_settings, csv_format): # type: (Bom, BomSettings, CsvFormat) -> None + filters = [] + + print("csv_format.supplier.bom_field={}".format(csv_format.supplier.bom_field)) + if csv_format.supplier is not None: + filters.append(lambda c: csv_format.supplier.bom_field in c) + + if csv_format.group_by_fields is not None: + filters.append(lambda c: all([field in c for field in csv_format.group_by_fields])) + + if csv_format.required_fields is not None: + filters.append(lambda c: all([field in c for field in csv_format.required_fields])) + + f = functools.partial(_all, filters) + print("len(filters)={}".format(len(filters))) + print("len(bom.get_components())={}".format(len(bom.get_components()))) + + filtered = [c for ref, c in bom.get_components().items() if f(c)] + print("filtered:, len={}".format(len(filtered))) + filtered.sort(key=lambda c: c.ref) + print("sorted filtered:, len={}".format(len(filtered))) + + counts=None + parts=[] + + frame = {} + for n in bom.all_field_names(): + frame[n] = [] + + if csv_format.group_by_fields is not None: + counts, parts, refs=([],[],[]) + for group, comps in itertools.groupby(filtered, key=lambda c: [field for field in c for c in csv_format.group_by_fields]): + gs = list(group) + cs = list(comps) +# counts.append(len(cs)) +# dpns.append(part) +# mpns.append(part) +# refs.append(functools.reduce(lambda a, b: a + ' ' + b, [c.ref for c in cs], '')) + print("group={}".format(gs)) + +# return pd.DataFrame(data={ +# 'count': counts, +# 'mpn': mpns, +# 'dpn': dpns, +# 'refs': refs, +# }) + else: + for ref, c in filtered: + for key, value in c: + frame[key] = value + + return pd.DataFrame(data=frame) diff --git a/src/ee/kicad/bom_tool/predef.py b/src/ee/kicad/bom_tool/predef.py new file mode 100644 index 0000000..717f6d3 --- /dev/null +++ b/src/ee/kicad/bom_tool/predef.py @@ -0,0 +1,6 @@ +from ee.kicad.bom_tool import * + +digikey = Supplier('Digi-Key', bom_field = 'digikey') + +def digikeyCsvFormat(digikey_supplier): + return CsvFormat(supplier = digikey, group_by_fields = [digikey_supplier.bom_field]) diff --git a/test/test_bom.py b/test/test_bom.py index 1a54a9e..6da7798 100644 --- a/test/test_bom.py +++ b/test/test_bom.py @@ -1,11 +1,22 @@ import pytest import os.path +import sys from ee.kicad.bom import * from ee.kicad.bom.io import read_bom basedir = os.path.dirname(os.path.abspath(__file__)) +@pytest.mark.parametrize("s, ref, val, rest", [ + ("C12", "C", 12, ""), + ("C12n", "C", 12, "n"), + ("C", "C", sys.maxsize, ""), + ("Foo", "Foo", sys.maxsize, ""), + ("+3.0VA1", "+3.0VA1", sys.maxsize, ""), + ]) +def test_split_ref(s, ref, val, rest): + assert split_ref(s) == (ref, val, rest) + def test_read_bom_1(): bom = read_bom(basedir + '/../demo/kicad/bom/A64-OlinuXino_Rev_C.xml') assert len(bom.get_components()) == 425 @@ -17,7 +28,37 @@ def test_read_bom_2(): r5 = bom.get_component("R5") assert r5.ref == "R5" assert r5.value == "R0402_100R" + assert r5["value"] == "R0402_100R" assert r5.footprint == "Resistors_SMD:R_0402" assert r5.library.name == "gw-cache" assert len(r5.fields) == 4 assert r5.fields["Part Number"] == "CRCW0402100RFKED" + assert r5["Part Number"] == "CRCW0402100RFKED" + assert set(['ref', 'value', 'Capacitance', 'Color', 'Description', 'Frequency', 'Impedance', 'Inductance', 'Manufacturer', 'Part Number', 'Resistance']) == bom.all_field_names() + + assert not "foo" in r5 + with pytest.raises(KeyError): + r5["foo"] + +def test_read_bom_2_pandas(): + bom = read_bom(basedir + '/../demo/kicad/bom/gw.xml').to_pandas() + assert len(bom) == 165 + + print("bom") + print(str(bom)) + r5 = bom.loc["R5"] + print(str(r5.index)) +# assert r5.index == "R5" + assert r5["ref"] == "R5" + assert r5["value"] == "R0402_100R" + assert r5["value"] == "R0402_100R" +# assert r5["footprint"] == "Resistors_SMD:R_0402" +# assert r5.library.name == "gw-cache" +# assert len(r5.fields) == 4 +# assert r5.fields["Part Number"] == "CRCW0402100RFKED" + assert r5["Part Number"] == "CRCW0402100RFKED" +# assert set(['ref', 'value', 'Capacitance', 'Color', 'Description', 'Frequency', 'Impedance', 'Inductance', 'Manufacturer', 'Part Number', 'Resistance']) == bom.all_field_names() + + assert not "foo" in r5 + with pytest.raises(KeyError): + r5["foo"] diff --git a/test/test_digikey.py b/test/test_digikey.py new file mode 100644 index 0000000..148f56e --- /dev/null +++ b/test/test_digikey.py @@ -0,0 +1,16 @@ +from ee.kicad.bom import * +from ee.kicad.bom.io import read_bom +import ee.kicad.bom_tool as bom_tool +import ee.kicad.bom_tool.predef as predef +import os.path +import pytest + +basedir = os.path.dirname(os.path.abspath(__file__)) + +@pytest.mark.skip(reason="disabled for now") +def test_digikey(): + print("") + bom = read_bom(basedir + '/../demo/kicad/bom/A64-OlinuXino_Rev_C.xml') + settings = bom_tool.Settings(suppliers = [predef.digikey]) + pd = bom_tool.to_panda(bom, settings, predef.digikeyCsvFormat(predef.digikey)) + print(pd.to_csv(index = False)) @@ -1,8 +1,7 @@ [testenv] changedir=test deps= - pytest - numpy + -rrequirements.txt commands= pytest \ --basetemp={envtmpdir} \ |