Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
Loading items

Target

Select target project
  • sdiy/mami
1 result
Select Git revision
Loading items
Show changes
Commits on Source (2)
Showing
with 265 additions and 46 deletions
File mode changed from 100644 to 100755
%% Cell type:code id: tags:
``` python
# Change these values to calculate the needed values
INPUTS = 8
OUTPUTS = 8
# Should output normalization be used? (Needs more opamps, ...)
NORMALIZATION = True
# Do you want to build an envelope as well?
ENVELOPES = False
# Do not edit below this Point unless you know what you are doing
requirements = {"inputs": INPUTS, "outputs": OUTPUTS}
data = {
"mami-input": {
"input-channels": 2,
"parts": [
{"MPN": "PJ301M-12", "n": 2},
{"MPN": "Subminiature On-Off-(On) Toggle switch", "n": 2},
]
},
"mami-output": {
"output-channels": 2,
"parts": [
{"MPN": "LME49720", "n": 2},
{"MPN": "100nF 0603 25V", "n": 4},
{"MPN": "100k 0805", "n": 6},
{"MPN": "100R 0805", "n": 2},
{"MPN": "PJ301M-12", "n": 2}
]
},
"mami-quad": {
"input-channels":2, "output-channels":2,
"parts": [
{"MPN": "P0915N-FC15BR100K", "n": 4},
{"MPN": "Knob", "n": 4},
{"MPN": "100k 0805", "n": 4}
]
},
"mami-env": {
"output-channels":2,
"parts": [
{"MPN": "100nF 0603 25V", "n": 4},
{"MPN": "PJ301M-12", "n": 2},
{"MPN": "TL074CD", "n": 2},
{"MPN": "100k 0805", "n": 8},
{"MPN": "200k 0805", "n": 6},
{"MPN": "20k 0805", "n": 2},
{"MPN": "1k 0805", "n": 2},
{"MPN": "470R 0805", "n": 2},
{"MPN": "1M 0805", "n": 2},
{"MPN": "1nF 0603", "n": 2},
{"MPN": "1uF 5mm lead spacing (e.g. MKS2C041001F00J)", "n": 2},
{"MPN": "LED 3mm", "n": 2},
{"MPN": "BAV199", "n": 4}
]
}
}
# If normalization is desired use this list of parts instead
if NORMALIZATION:
data["mami-output"] = {
"output-channels": 2,
"parts": [
{"MPN": "LME49720", "n": 3},
{"MPN": "100nF 0603 25V", "n": 6},
{"MPN": "100k 0805", "n": 12},
{"MPN": "100R 0805", "n": 2},
{"MPN": "PJ301M-12", "n": 2}
]
}
# Calculate how many PCBs are needed
n_input_modules = int(requirements["inputs"] / data["mami-input"]["input-channels"])
n_output_modules = int(requirements["outputs"] / data["mami-output"]["output-channels"])
n_env_modules = n_output_modules
n_quad_modules = int((requirements["inputs"] * requirements["outputs"]) / (data["mami-output"]["output-channels"] * data["mami-input"]["input-channels"]))
# Print the PCB
print("Needed for a {}x{} Matrix Mixer without envelopes".format(requirements["inputs"], requirements["outputs"]))
print("{}".format("="*50))
print("{0:>5}x MAMI-INPUT-Module".format(n_input_modules))
print("{0:>5}x MAMI-OUTPUT-Module".format(n_output_modules))
print("{0:>5}x MAMI-QUAD-Module".format(n_quad_modules))
if ENVELOPES:
print("{0:>5}x MAMI-ENV-Module".format(n_env_modules))
print()
# Collect all the parts
bom = {}
def get_parts(data, n_input_modules, n_quad_modules, n_output_modules, n_env_modules):
parts = []
for part in data["mami-input"]["parts"]*n_input_modules:
parts.append(part)
for part in data["mami-quad"]["parts"]*n_quad_modules:
parts.append(part)
for part in data["mami-output"]["parts"]*n_output_modules:
parts.append(part)
if ENVELOPES:
for part in data["mami-env"]["parts"]*n_env_modules:
parts.append(part)
return parts
for part in get_parts(data, n_input_modules, n_quad_modules, n_output_modules, n_env_modules):
if part["MPN"] in bom:
bom[part["MPN"]] += part["n"]
else:
bom[part["MPN"]] = part["n"]
# Print the BOM
print("Parts\n{}".format("="*50))
for key, value in bom.items():
print("{:>5}x {}".format(value, key))
# Print second variant
print()
print("="*80)
print()
envelopes = True
# Print the PCB
print("Needed for a {}x{} Matrix Mixer with envelopes".format(requirements["inputs"], requirements["outputs"]))
print("{}".format("="*50))
print("{0:>5}x MAMI-INPUT-Module".format(n_input_modules))
print("{0:>5}x MAMI-OUTPUT-Module".format(n_output_modules))
print("{0:>5}x MAMI-QUAD-Module".format(n_quad_modules))
if envelopes:
print("{0:>5}x MAMI-ENV-Module".format(n_env_modules))
print()
# Collect all the parts
bom = {}
def get_parts(data, n_input_modules, n_quad_modules, n_output_modules, n_env_modules):
parts = []
for part in data["mami-input"]["parts"]*n_input_modules:
parts.append(part)
for part in data["mami-quad"]["parts"]*n_quad_modules:
parts.append(part)
for part in data["mami-output"]["parts"]*n_output_modules:
parts.append(part)
if envelopes:
for part in data["mami-env"]["parts"]*n_env_modules:
parts.append(part)
return parts
for part in get_parts(data, n_input_modules, n_quad_modules, n_output_modules, n_env_modules):
if part["MPN"] in bom:
bom[part["MPN"]] += part["n"]
else:
bom[part["MPN"]] = part["n"]
# Print the BOM
print("Parts\n{}".format("="*50))
for key, value in bom.items():
print("{:>5}x {}".format(value, key))
```
%% Output
Needed for a 8x8 Matrix Mixer with envelopes
==================================================
4x MAMI-INPUT-Module
4x MAMI-OUTPUT-Module
16x MAMI-QUAD-Module
4x MAMI-ENV-Module
Parts
==================================================
24x PJ301M-12
8x Subminiature On-Off-(On) Toggle switch
64x P0915N-FC15BR100K
64x Knob
120x 100k 0805
8x LME49720
32x 100nF 0603 25V
8x 100R 0805
8x TL074CD
24x 200k 0805
8x 20k 0805
8x 1k 0805
8x 470R 0805
8x 1M 0805
8x 1nF 0603
8x 1uF 5mm lead spacing (e.g. MKS2C041001F00J)
8x LED 3mm
16x BAV199
================================================================================
Needed for a 8x8 Matrix Mixer without envelopes
==================================================
4x MAMI-INPUT-Module
4x MAMI-OUTPUT-Module
16x MAMI-QUAD-Module
Parts
==================================================
16x PJ301M-12
8x Subminiature On-Off-(On) Toggle switch
64x P0915N-FC15BR100K
64x Knob
88x 100k 0805
8x LME49720
16x 100nF 0603 25V
8x 100R 0805
{"data":{"layout-restorer:data":{"main":{"dock":{"type":"tab-area","currentIndex":0,"widgets":["notebook:calculate-parts.ipynb"]},"current":"notebook:calculate-parts.ipynb"},"down":{"size":0,"widgets":[]},"left":{"collapsed":false,"current":"filebrowser","widgets":["filebrowser","running-sessions","@jupyterlab/toc:plugin","extensionmanager.main-view"]},"right":{"collapsed":true,"widgets":["jp-property-inspector","debugger-sidebar"]},"relativeSizes":[0.26227795193312436,0.7377220480668757,0]},"notebook:calculate-parts.ipynb":{"data":{"path":"calculate-parts.ipynb","factory":"Notebook"}}},"metadata":{"id":"default"}}
\ No newline at end of file
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
Designator,Mid X,Mid Y,Rotation,Layer
C1,3.335,-0.317502,0.0,top
C2,-4.605,-5.715002,0.0,top
C3,5.875,5.714998,0.0,top
C4,-4.605,1.904998,0.0,top
C5,10.4775,14.9225,0.0,top
C6,10.4775,-18.415,180.0,top
R1,-4.1275,5.3975,90.0,top
R2,10.795,5.08,90.0,top
R3,5.17525,2.2225,90.0,top
R4,8.5725,5.08,90.0,top
R5,-4.445,-2.2225,90.0,top
R6,5.08,-5.3975,270.0,top
R7,9.2075,-5.3975,270.0,top
R8,6.6675,-5.3975,270.0,top
R9,8.5725,19.685,0.0,top
R10,13.335,-10.4775,270.0,top
R12,10.4775,7.62,0.0,top
R14,7.62,-8.89,90.0,top
R_LED1,8.5725,9.2075,180.0,top
R_LED2,9.2075,-8.89,270.0,top
U1,0.3175,3.81,270.0,top
U2,0.3175,-3.81,270.0,top
U3,10.795,12.3825,270.0,top
U4,10.795,-15.24,90.0,top
C1,3.335,-0.317502,0,top
C2,-4.605,-5.715002,0,top
C3,5.875,5.714998,0,top
C4,-4.605,1.904998,0,top
C5,10.4775,14.9225,0,top
C6,10.4775,-18.415,180,top
R1,-4.1275,5.3975,90,top
R2,10.795,5.08,90,top
R3,5.17525,2.2225,90,top
R4,8.5725,5.08,90,top
R5,-4.445,-2.2225,90,top
R6,5.08,-5.3975,270,top
R7,9.2075,-5.3975,270,top
R8,6.6675,-5.3975,270,top
R9,8.5725,19.685,0,top
R10,13.335,-10.4775,270,top
R12,10.4775,7.62,45,top
R14,7.62,-8.89,90,top
R_LED1,8.5725,9.2075,180,top
R_LED2,9.2075,-8.89,270,top
U1,0.3175,3.81,270,top
U2,0.3175,-3.81,270,top
U3,10.795,12.3825,270,top
U4,10.795,-15.24,90,top
%% Cell type:code id: tags:
``` python
# Change these values to calculate the needed values
INPUTS = 8
OUTPUTS = 8
# Should output normalization be used? (Needs more opamps, ...)
NORMALIZATION = True
# Do you want to build an envelope as well?
ENVELOPES = False
# Do not edit below this Point unless you know what you are doing
requirements = {"inputs": INPUTS, "outputs": OUTPUTS}
data = {
"mami-input": {
"input-channels": 2,
"parts": [
{"MPN": "PJ301M-12", "n": 2},
{"MPN": "Subminiature On-Off-(On) Toggle switch", "n": 2},
]
},
"mami-output": {
"output-channels": 2,
"parts": [
{"MPN": "LME49720", "n": 2},
{"MPN": "100nF 0603 25V", "n": 4},
{"MPN": "100k 0805", "n": 6},
{"MPN": "100R 0805", "n": 2},
{"MPN": "PJ301M-12", "n": 2}
]
},
"mami-quad": {
"input-channels":2, "output-channels":2,
"parts": [
{"MPN": "P0915N-FC15BR100K", "n": 4},
{"MPN": "Knob", "n": 4},
{"MPN": "100k 0805", "n": 4}
]
},
"mami-env": {
"output-channels":2,
"parts": [
{"MPN": "100nF 0603 25V", "n": 4},
{"MPN": "PJ301M-12", "n": 2},
{"MPN": "TL074CD", "n": 2},
{"MPN": "100k 0805", "n": 8},
{"MPN": "200k 0805", "n": 6},
{"MPN": "20k 0805", "n": 2},
{"MPN": "1k 0805", "n": 2},
{"MPN": "470R 0805", "n": 2},
{"MPN": "1M 0805", "n": 2},
{"MPN": "1nF 0603", "n": 2},
{"MPN": "1uF 5mm lead spacing (e.g. MKS2C041001F00J)", "n": 2},
{"MPN": "LED 3mm", "n": 2},
{"MPN": "BAV199", "n": 4}
]
}
}
# If normalization is desired use this list of parts instead
if NORMALIZATION:
data["mami-output"] = {
"output-channels": 2,
"parts": [
{"MPN": "LME49720", "n": 3},
{"MPN": "100nF 0603 25V", "n": 6},
{"MPN": "100k 0805", "n": 12},
{"MPN": "100R 0805", "n": 2},
{"MPN": "PJ301M-12", "n": 2}
]
}
# Calculate how many PCBs are needed
n_input_modules = int(requirements["inputs"] / data["mami-input"]["input-channels"])
n_output_modules = int(requirements["outputs"] / data["mami-output"]["output-channels"])
n_env_modules = n_output_modules
n_quad_modules = int((requirements["inputs"] * requirements["outputs"]) / (data["mami-output"]["output-channels"] * data["mami-input"]["input-channels"]))
# Print the PCB
print("Needed for a {}x{} Matrix Mixer without envelopes".format(requirements["inputs"], requirements["outputs"]))
print("{}".format("="*50))
print("{0:>5}x MAMI-INPUT-Module".format(n_input_modules))
print("{0:>5}x MAMI-OUTPUT-Module".format(n_output_modules))
print("{0:>5}x MAMI-QUAD-Module".format(n_quad_modules))
if ENVELOPES:
print("{0:>5}x MAMI-ENV-Module".format(n_env_modules))
print()
# Collect all the parts
bom = {}
def get_parts(data, n_input_modules, n_quad_modules, n_output_modules, n_env_modules):
parts = []
for part in data["mami-input"]["parts"]*n_input_modules:
parts.append(part)
for part in data["mami-quad"]["parts"]*n_quad_modules:
parts.append(part)
for part in data["mami-output"]["parts"]*n_output_modules:
parts.append(part)
if ENVELOPES:
for part in data["mami-env"]["parts"]*n_env_modules:
parts.append(part)
return parts
for part in get_parts(data, n_input_modules, n_quad_modules, n_output_modules, n_env_modules):
if part["MPN"] in bom:
bom[part["MPN"]] += part["n"]
else:
bom[part["MPN"]] = part["n"]
# Print the BOM
print("Parts\n{}".format("="*50))
for key, value in bom.items():
print("{:>5}x {}".format(value, key))
# Print second variant
print()
print("="*80)
print()
envelopes = True
# Print the PCB
print("Needed for a {}x{} Matrix Mixer with envelopes".format(requirements["inputs"], requirements["outputs"]))
print("{}".format("="*50))
print("{0:>5}x MAMI-INPUT-Module".format(n_input_modules))
print("{0:>5}x MAMI-OUTPUT-Module".format(n_output_modules))
print("{0:>5}x MAMI-QUAD-Module".format(n_quad_modules))
if envelopes:
print("{0:>5}x MAMI-ENV-Module".format(n_env_modules))
print()
# Collect all the parts
bom = {}
def get_parts(data, n_input_modules, n_quad_modules, n_output_modules, n_env_modules):
parts = []
for part in data["mami-input"]["parts"]*n_input_modules:
parts.append(part)
for part in data["mami-quad"]["parts"]*n_quad_modules:
parts.append(part)
for part in data["mami-output"]["parts"]*n_output_modules:
parts.append(part)
if envelopes:
for part in data["mami-env"]["parts"]*n_env_modules:
parts.append(part)
return parts
for part in get_parts(data, n_input_modules, n_quad_modules, n_output_modules, n_env_modules):
if part["MPN"] in bom:
bom[part["MPN"]] += part["n"]
else:
bom[part["MPN"]] = part["n"]
# Print the BOM
print("Parts\n{}".format("="*50))
for key, value in bom.items():
print("{:>5}x {}".format(value, key))
```
%% Output
Needed for a 8x8 Matrix Mixer with envelopes
Needed for a 8x8 Matrix Mixer without envelopes
==================================================
4x MAMI-INPUT-Module
4x MAMI-OUTPUT-Module
16x MAMI-QUAD-Module
4x MAMI-ENV-Module
Parts
==================================================
24x PJ301M-12
16x PJ301M-12
8x Subminiature On-Off-(On) Toggle switch
64x P0915N-FC15BR100K
64x Knob
120x 100k 0805
8x LME49720
32x 100nF 0603 25V
112x 100k 0805
12x LME49720
24x 100nF 0603 25V
8x 100R 0805
8x TL074CD
24x 200k 0805
8x 20k 0805
8x 1k 0805
8x 470R 0805
8x 1M 0805
8x 1nF 0603
8x 1uF 5mm lead spacing (e.g. MKS2C041001F00J)
8x LED 3mm
16x BAV199
================================================================================
Needed for a 8x8 Matrix Mixer without envelopes
Needed for a 8x8 Matrix Mixer with envelopes
==================================================
4x MAMI-INPUT-Module
4x MAMI-OUTPUT-Module
16x MAMI-QUAD-Module
4x MAMI-ENV-Module
Parts
==================================================
16x PJ301M-12
24x PJ301M-12
8x Subminiature On-Off-(On) Toggle switch
64x P0915N-FC15BR100K
64x Knob
88x 100k 0805
8x LME49720
16x 100nF 0603 25V
144x 100k 0805
12x LME49720
40x 100nF 0603 25V
8x 100R 0805
8x TL074CD
24x 200k 0805
8x 20k 0805
8x 1k 0805
8x 470R 0805
8x 1M 0805
8x 1nF 0603
8x 1uF 5mm lead spacing (e.g. MKS2C041001F00J)
8x LED 3mm
16x BAV199
%% Cell type:code id: tags:
``` python
```
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755