├── .gitignore ├── README.md ├── misc ├── eurorack-panel-dimension-helpers.svg └── panel-design-helpers.svg └── modules ├── adsr-envelope-generator ├── kicad │ ├── Bourns PTL.pretty │ │ ├── Bourns PTL30-X.kicad_mod │ │ └── Bourns-PTL30-X.kicad_mod │ ├── Bourns PTL30-X.kicad_mod │ ├── adsr-envelope-generator │ ├── adsr-envelope-generator-cache.lib │ ├── adsr-envelope-generator.kicad_pcb │ ├── adsr-envelope-generator.pro │ ├── adsr-envelope-generator.sch │ ├── fp-lib-table │ ├── led-pot.dcm │ └── led-pot.lib ├── panel │ ├── adsr-envelope-generator-panel-laser.svg │ └── adsr-envelope-generator-panel.svg └── slide-pot-info.txt ├── attenuators └── panel │ ├── attenuators-panel-laser.svg │ └── attenuators-panel.svg ├── audio-out └── panel │ ├── audio-out-panel-laser.svg │ └── audio-out-panel.svg ├── clock-generator ├── code │ ├── clock_generator.atsln │ └── clock_generator │ │ ├── MAX72S19.c │ │ ├── MAX72S19.h │ │ ├── clock_generator.cproj │ │ └── main.c ├── hardware.txt ├── kicad │ ├── LB303AK.pretty │ │ └── LB303AK.kicad_mod │ ├── Logic_CMOS_IEEE.lib │ ├── MAX7221.pretty │ │ ├── MAX7221-DIP.kicad_mod │ │ └── MAX7221-SOIC.kicad_mod │ ├── clock-generator-cache.lib │ ├── clock-generator-rescue.lib │ ├── clock-generator.kicad_pcb │ ├── clock-generator.pro │ ├── clock-generator.sch │ ├── fp-lib-table │ ├── lb303ak.dcm │ ├── lb303ak.lib │ ├── max7221.dcm │ └── max7221.lib ├── modeling │ └── arrow-button-cap │ │ ├── arrow-button-cap-scale-x10.skp │ │ └── arrow-button-cap-scale-x10.stl └── panel │ ├── clock-generator-panel-laser.pdf │ ├── clock-generator-panel-laser.svg │ └── clock-generator-panel.svg ├── cv-helper └── panel │ ├── cv-helper-panel-laser.svg │ └── cv-helper-panel.svg ├── distortion ├── kicad │ ├── Panelization.pretty │ │ ├── mouse-bite-1mm-slot.kicad_mod │ │ ├── mouse-bite-2.54mm-slot.kicad_mod │ │ └── mouse-bite-2mm-slot.kicad_mod │ ├── distortion-cache.lib │ ├── distortion.kicad_pcb │ ├── distortion.pro │ ├── distortion.sch │ └── fp-lib-table ├── panel │ ├── distortion-panel-laser.svg │ └── distortion-panel.svg ├── pcb mount pot info.txt └── simulation │ ├── distortion-falstad-zgadnijs-mod.txt │ ├── distortion-falstad.txt │ ├── full-circuit-falstad.txt │ └── pregain-falstad.txt ├── inverter ├── kicad │ ├── inverter-cache.lib │ ├── inverter.kicad_pcb │ ├── inverter.pro │ └── inverter.sch └── panel │ ├── inverter-panel-laser.svg │ └── inverter-panel.svg ├── midi-in ├── README.md ├── code │ └── midi-in │ │ └── midi-in.ino ├── eagle │ ├── cv-board │ │ ├── cv-board.brd │ │ ├── cv-board.brd.png │ │ ├── cv-board.sch │ │ └── cv-board.sch.png │ ├── display-board │ │ ├── detached-display-board.brd │ │ ├── detached-display-board.sch │ │ ├── display-board.brd │ │ ├── display-board.brd.png │ │ ├── display-board.sch │ │ └── display-board.sch.png │ └── midi-in-board │ │ ├── midi-in-board.brd │ │ ├── midi-in-board.brd.png │ │ ├── midi-in-board.sch │ │ └── midi-in-board.sch.png └── panel │ ├── midi-in-panel-laser.svg │ └── midi-in-panel.svg ├── mixer ├── eagle │ ├── mixer.brd │ └── mixer.sch └── panel │ ├── mixer-panel-laser.svg │ └── mixer-panel.svg ├── noise-generator ├── eagle │ ├── noise-generator.brd │ ├── noise-generator.brd.png │ ├── noise-generator.sch │ └── noise-generator.sch.png └── panel │ ├── noise-generator-panel-laser.svg │ └── noise-generator-panel.svg ├── power-distribution └── eagle │ ├── power-distribution.brd │ └── power-distribution.sch ├── power-helper └── panel │ ├── power-helper-panel-laser.svg │ └── power-helper-panel.svg ├── power-supply ├── README.md ├── eagle │ ├── power-supply.brd.png │ ├── power-supply.sch │ └── power-supply.sch.png └── simulations │ ├── .gitignore │ └── power-supply.asc ├── reverb ├── kicad │ ├── reverb-cache.lib │ ├── reverb.kicad_pcb │ ├── reverb.pro │ └── reverb.sch └── panel │ ├── reverb-panel-laser.svg │ └── reverb-panel.svg ├── sequencer ├── code │ └── main-arduino │ │ ├── MAX72S21.cpp │ │ ├── MAX72S21.h │ │ ├── MCP23S17.cpp │ │ ├── MCP23S17.h │ │ ├── MCP3202.cpp │ │ ├── MCP3202.h │ │ ├── MCP492X.cpp │ │ ├── MCP492X.h │ │ ├── io.cpp │ │ ├── io.h │ │ ├── main-arduino.ino │ │ ├── notemapper.cpp │ │ ├── notemapper.h │ │ ├── sequence.cpp │ │ ├── sequence.h │ │ ├── settings.cpp │ │ └── settings.h ├── kicad │ ├── 5GTH9.pretty │ │ └── 5GTH9.kicad_mod │ ├── 6-pin-momentary-push-button.pretty │ │ └── 6-pin-momentary-push-button.kicad_mod │ ├── Bourns PTL.pretty │ │ ├── Bourns PTL30-X.kicad_mod │ │ └── Bourns-PTL30-X.kicad_mod │ ├── CC04-41SURKWA.pretty │ │ └── CC04-41SURKWA.kicad_mod │ ├── MAX7221.pretty │ │ ├── MAX7221-DIP.kicad_mod │ │ └── MAX7221-SOIC.kicad_mod │ ├── MHS123K.pretty │ │ └── MHS123K.kicad_mod │ ├── fp-lib-table │ ├── max7221.dcm │ ├── max7221.lib │ ├── sequencer-cache.lib │ ├── sequencer-components.dcm │ ├── sequencer-components.lib │ ├── sequencer.kicad_pcb │ ├── sequencer.pro │ └── sequencer.sch └── panel │ ├── sequencer-panel-aligning.svg │ └── sequencer-panel.svg ├── vca ├── eagle │ ├── vca.brd │ ├── vca.brd.png │ ├── vca.sch │ └── vca.sch.png └── panel │ ├── vca-panel-laser.svg │ └── vca-panel.svg ├── vcf ├── README.md ├── eagle │ ├── vcf.brd │ ├── vcf.brd.png │ ├── vcf.sch │ └── vcf.sch.png └── panel │ ├── vcf-panel-laser.svg │ └── vcf-panel.svg └── vco ├── eagle ├── vco.brd ├── vco.brd.png ├── vco.sch └── vco.sch.png └── panel ├── vco-panel-laser.svg └── vco-panel.svg /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore list for Eagle, a PCB layout tool 2 | 3 | # Backup files 4 | *.s#? 5 | *.b#? 6 | *.l#? 7 | 8 | # Eagle project file 9 | # It contains a serial number and references to the file structure 10 | # on your computer. 11 | # comment the following line if you want to have your project file included. 12 | eagle.epf 13 | 14 | # CAM files 15 | *.$$$ 16 | *.cmp 17 | *.ly2 18 | *.l15 19 | *.sol 20 | *.plc 21 | *.stc 22 | *.sts 23 | *.crc 24 | *.crs 25 | 26 | *.dri 27 | *.drl 28 | *.gpi 29 | *.pls 30 | 31 | *.drd 32 | *.drd.* 33 | 34 | *.info 35 | 36 | *.eps 37 | *.skb 38 | 39 | Thumbs.db 40 | 41 | # For PCBs designed using KiCad: http://www.kicad-pcb.org/ 42 | 43 | # Temporary files 44 | *.000 45 | *.bak 46 | *.bck 47 | *.kicad_pcb-bak 48 | *~ 49 | _autosave-* 50 | *.tmp 51 | 52 | # Netlist files (exported from Eeschema) 53 | *.net 54 | 55 | # Autorouter files (exported from Pcbnew) 56 | .dsn 57 | 58 | # Exported BOM files 59 | *.xml 60 | *.csv 61 | 62 | # Atmel studio 63 | Debug/ 64 | Release/ 65 | .vs/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Modular Synthesizer 2 | 3 | My fiancee and I plan to build a modular synthesizer, for fun. Here's a repository to hold all kinds of stuff to do with that. I imagine it'll hold the following 4 | 5 | - Schematic designs 6 | - PCB designs derived from those schematic design 7 | - Some 3D modeling for related hardware 8 | - Any microcontroller code 9 | -------------------------------------------------------------------------------- /modules/adsr-envelope-generator/kicad/Bourns PTL.pretty/Bourns PTL30-X.kicad_mod: -------------------------------------------------------------------------------- 1 | (module "Bourns PTL30-X" (layer F.Cu) (tedit 583F5135) 2 | (fp_text reference REF** (at 0 51) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value "Bourns PTL30-X" (at 0 -59) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start -1 -18.25) (end 1 -18.25) (layer F.SilkS) (width 0.15)) 9 | (fp_line (start 1 -18.25) (end 1 -12.75) (layer F.SilkS) (width 0.15)) 10 | (fp_line (start 1 -12.75) (end -1 -12.75) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start -1 -12.75) (end -1 -18.25) (layer F.SilkS) (width 0.15)) 12 | (fp_line (start -1.5 18.5) (end 1.5 18.5) (layer F.SilkS) (width 0.15)) 13 | (fp_line (start 1.5 18.5) (end 1.5 -18.5) (layer F.SilkS) (width 0.15)) 14 | (fp_line (start 1.5 -18.5) (end -1.5 -18.5) (layer F.SilkS) (width 0.15)) 15 | (fp_line (start -1.5 -18.5) (end -1.5 18.5) (layer F.SilkS) (width 0.15)) 16 | (fp_line (start -4.5 22.5) (end 4.5 22.5) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 4.5 22.5) (end 4.5 -22.5) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 4.5 -22.5) (end -4.5 -22.5) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start -4.5 -22.5) (end -4.5 22.5) (layer F.SilkS) (width 0.15)) 20 | (pad 1 thru_hole circle (at -1.25 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 21 | (pad 2 thru_hole circle (at -3.75 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 22 | (pad L thru_hole circle (at 1.25 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 23 | (pad E thru_hole circle (at 3.75 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 24 | (pad 3 thru_hole circle (at -1.25 -20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 25 | (pad B thru_hole circle (at 3.75 -20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 26 | ) 27 | -------------------------------------------------------------------------------- /modules/adsr-envelope-generator/kicad/Bourns PTL.pretty/Bourns-PTL30-X.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Bourns-PTL30-X (layer F.Cu) (tedit 58DFD629) 2 | (fp_text reference REF** (at 0 24) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value "Bourns PTL30-X" (at 0 -24) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start -1 -18.25) (end 1 -18.25) (layer F.SilkS) (width 0.15)) 9 | (fp_line (start 1 -18.25) (end 1 -12.75) (layer F.SilkS) (width 0.15)) 10 | (fp_line (start 1 -12.75) (end -1 -12.75) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start -1 -12.75) (end -1 -18.25) (layer F.SilkS) (width 0.15)) 12 | (fp_line (start -1.5 18.5) (end 1.5 18.5) (layer F.SilkS) (width 0.15)) 13 | (fp_line (start 1.5 18.5) (end 1.5 -18.5) (layer F.SilkS) (width 0.15)) 14 | (fp_line (start 1.5 -18.5) (end -1.5 -18.5) (layer F.SilkS) (width 0.15)) 15 | (fp_line (start -1.5 -18.5) (end -1.5 18.5) (layer F.SilkS) (width 0.15)) 16 | (fp_line (start -4.5 22.5) (end 4.5 22.5) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 4.5 22.5) (end 4.5 -22.5) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 4.5 -22.5) (end -4.5 -22.5) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start -4.5 -22.5) (end -4.5 22.5) (layer F.SilkS) (width 0.15)) 20 | (pad 1 thru_hole circle (at -1.25 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 21 | (pad 2 thru_hole circle (at -3.75 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 22 | (pad L thru_hole circle (at 1.25 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 23 | (pad E thru_hole circle (at 3.75 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 24 | (pad 3 thru_hole circle (at -1.25 -20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 25 | (pad B thru_hole circle (at 3.75 -20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 26 | ) 27 | -------------------------------------------------------------------------------- /modules/adsr-envelope-generator/kicad/Bourns PTL30-X.kicad_mod: -------------------------------------------------------------------------------- 1 | (module "Bourns PTL30-X" (layer F.Cu) (tedit 583F5135) 2 | (fp_text reference REF** (at 0 51) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value "Bourns PTL30-X" (at 0 -59) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start -1 -18.25) (end 1 -18.25) (layer F.SilkS) (width 0.15)) 9 | (fp_line (start 1 -18.25) (end 1 -12.75) (layer F.SilkS) (width 0.15)) 10 | (fp_line (start 1 -12.75) (end -1 -12.75) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start -1 -12.75) (end -1 -18.25) (layer F.SilkS) (width 0.15)) 12 | (fp_line (start -1.5 18.5) (end 1.5 18.5) (layer F.SilkS) (width 0.15)) 13 | (fp_line (start 1.5 18.5) (end 1.5 -18.5) (layer F.SilkS) (width 0.15)) 14 | (fp_line (start 1.5 -18.5) (end -1.5 -18.5) (layer F.SilkS) (width 0.15)) 15 | (fp_line (start -1.5 -18.5) (end -1.5 18.5) (layer F.SilkS) (width 0.15)) 16 | (fp_line (start -4.5 22.5) (end 4.5 22.5) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 4.5 22.5) (end 4.5 -22.5) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 4.5 -22.5) (end -4.5 -22.5) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start -4.5 -22.5) (end -4.5 22.5) (layer F.SilkS) (width 0.15)) 20 | (pad 1 thru_hole circle (at -1.25 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 21 | (pad 2 thru_hole circle (at -3.75 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 22 | (pad L thru_hole circle (at 1.25 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 23 | (pad E thru_hole circle (at 3.75 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 24 | (pad 3 thru_hole circle (at -1.25 -20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 25 | (pad B thru_hole circle (at 3.75 -20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 26 | ) 27 | -------------------------------------------------------------------------------- /modules/adsr-envelope-generator/kicad/adsr-envelope-generator: -------------------------------------------------------------------------------- 1 | Source,C:/Users/Mich/repos/modular-synth/modules/adsr-envelope-generator/kicad2/adsr-envelope-generator2.sch 2 | Kicad Rev,Eeschema 4.0.4-stable 3 | Generated Date,25/04/2017 08:12:47 4 | 5 | Title,ADSR Envelope Generator 6 | Company,Michael Duerincx 7 | Revision,2 8 | Date Issue,2017-04-01 9 | Comment,A switch selects between 3 possible time ranges. 10 | Comment,This version adds LED cycle stage indication, auto-retrigger, and trigger out. 11 | Comment,Original by Ray Wilson 12 | 13 | Reference,Value,Library,Library Ref 14 | R9,10K,device,R 15 | R5,1K,device,R 16 | C2,100n,device,C 17 | R10,10K,device,R 18 | R8,1K,device,R 19 | C3,100n,device,C 20 | U3,40106,cmos4000,40106 21 | U2,TL974,linear,TL074 22 | R12,1M,device,R 23 | C4,100p,device,C 24 | R13,1M,device,R 25 | C5,100p,device,C 26 | R11,22K,device,R 27 | R4,33K,device,R 28 | C1,100n,device,C 29 | R7,22K,device,R 30 | R6,22K,device,R 31 | R2,10K,device,R 32 | R3,10K,device,R 33 | D1,1N4148,device,D 34 | D2,1N4148,device,D 35 | D3,1N4148,device,D 36 | D4,1N4148,device,D 37 | R15,10K,device,R 38 | R16,10K,device,R 39 | C7,10n,device,C 40 | C8,10n,device,C 41 | R17,100K,device,R 42 | U4,4001,cmos4000,4001 43 | D5,1N4148,device,D 44 | R18,10K,device,R 45 | C11,1n,device,C 46 | R19,100K,device,R 47 | D6,1N4148,device,D 48 | U5,TL974,linear,TL074 49 | R21,10K,device,R 50 | R22,33K,device,R 51 | C14,100n,device,C 52 | R20,1M,device,R 53 | RV4,100K,led-pot,LED-POT 54 | U1,4066,cmos4000,4066 55 | RV3,100K,led-pot,LED-POT 56 | RV1,100K,led-pot,LED-POT 57 | RV2,100K,led-pot,LED-POT 58 | R1,100R,device,R 59 | R14,100R,device,R 60 | C6,3.3u,device,CP1 61 | C9,100u,device,CP1 62 | P3,CONN_01X03,conn,CONN_01X03 63 | C10,47u,device,CP1 64 | R23,100K,device,R 65 | RV5,10K,device,POT 66 | R24,1M,device,R 67 | Q2,MMBT3904,transistors,MMBT3904 68 | R31,220R,device,R 69 | Q3,MMBT3904,transistors,MMBT3904 70 | R32,220R,device,R 71 | Q4,MMBT3904,transistors,MMBT3904 72 | R33,220R,device,R 73 | Q5,MMBT3904,transistors,MMBT3904 74 | R34,220R,device,R 75 | R27,10K,device,R 76 | R28,10K,device,R 77 | R29,10K,device,R 78 | D8,1N4148,device,D 79 | D9,1N4148,device,D 80 | D7,1N4148,device,D 81 | R30,10K,device,R 82 | D10,1N4148,device,D 83 | D11,1N4148,device,D 84 | Q1,MMBT3904,transistors,MMBT3904 85 | R25,10K,device,R 86 | C21,10n,device,C 87 | R26,100K,device,R 88 | C12,470u,device,CP 89 | C13,470u,device,CP 90 | C15,10u,device,CP 91 | C16,10u,device,CP 92 | C17,10u,device,CP 93 | C18,10u,device,CP 94 | C19,100n,device,C 95 | C20,100n,device,C 96 | C22,100n,device,C 97 | P4,CONN_01X03,conn,CONN_01X03 98 | P2,CONN_01X02,conn,CONN_01X02 99 | P1,CONN_01X02,conn,CONN_01X02 100 | P5,CONN_01X03,conn,CONN_01X03 101 | P6,CONN_01X02,conn,CONN_01X02 102 | -------------------------------------------------------------------------------- /modules/adsr-envelope-generator/kicad/adsr-envelope-generator-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # 4001 5 | # 6 | DEF 4001 U 0 30 Y Y 4 F N 7 | F0 "U" 0 50 50 H V C CNN 8 | F1 "4001" 0 -50 50 H V C CNN 9 | F2 "" 0 0 60 H I C CNN 10 | F3 "" 0 0 60 H I C CNN 11 | DRAW 12 | X VSS 7 -200 -200 0 U 40 40 0 0 W N 13 | X VDD 14 -200 200 0 U 40 40 0 0 W N 14 | A -470 0 262 495 -495 0 1 0 N -300 199 -300 -198 15 | A -2 126 326 -897 -225 0 1 0 N 0 -199 299 2 16 | A 4 -120 320 906 221 0 1 0 N 2 200 300 0 17 | P 2 0 1 0 -300 -200 0 -200 N 18 | P 2 0 1 0 -300 200 0 200 N 19 | X ~ 1 -600 100 370 R 50 50 1 1 I 20 | X ~ 2 -600 -100 370 R 50 50 1 1 I 21 | X ~ 3 600 0 300 L 50 50 1 1 O I 22 | X ~ 4 600 0 300 L 50 50 2 1 O I 23 | X ~ 5 -600 100 370 R 50 50 2 1 I 24 | X ~ 6 -600 -100 370 R 50 50 2 1 I 25 | X ~ 8 -600 100 370 R 50 50 3 1 I 26 | X ~ 9 -600 -100 370 R 50 50 3 1 I 27 | X ~ 10 600 0 300 L 50 50 3 1 O I 28 | X ~ 11 600 0 300 L 50 50 4 1 O I 29 | X ~ 12 -600 100 370 R 50 50 4 1 I 30 | X ~ 13 -600 -100 370 R 50 50 4 1 I 31 | A 100 0 200 896 -896 0 2 0 N 101 200 101 -199 32 | P 4 0 2 0 100 200 -300 200 -300 -200 100 -200 N 33 | X ~ 1 -600 100 300 R 50 50 1 2 I I 34 | X ~ 2 -600 -100 300 R 50 50 1 2 I I 35 | X ~ 3 600 0 300 L 50 50 1 2 O 36 | X ~ 4 600 0 300 L 50 50 2 2 O 37 | X ~ 5 -600 100 300 R 50 50 2 2 I I 38 | X ~ 6 -600 -100 300 R 50 50 2 2 I I 39 | X ~ 8 -600 100 300 R 50 50 3 2 I I 40 | X ~ 9 -600 -100 300 R 50 50 3 2 I I 41 | X ~ 10 600 0 300 L 50 50 3 2 O 42 | X ~ 11 600 0 300 L 50 50 4 2 O 43 | X ~ 12 -600 100 300 R 50 50 4 2 I I 44 | X ~ 13 -600 -100 300 R 50 50 4 2 I I 45 | ENDDRAW 46 | ENDDEF 47 | # 48 | # 40106 49 | # 50 | DEF 40106 U 0 40 Y N 6 F N 51 | F0 "U" 100 150 50 H V L CNN 52 | F1 "40106" 50 -150 50 H V L CNN 53 | F2 "" 0 0 60 H I C CNN 54 | F3 "" 0 0 60 H I C CNN 55 | DRAW 56 | P 4 0 0 0 -20 50 -60 -50 -100 -50 -100 -50 N 57 | P 5 0 0 0 10 50 -60 50 -100 -50 -130 -50 -130 -50 N 58 | P 2 0 1 0 -200 -200 -200 200 N 59 | P 2 0 1 0 -200 200 200 0 N 60 | P 2 0 1 0 200 0 -200 -200 N 61 | X In 1 -500 0 300 R 50 50 1 1 I 62 | X Out 2 500 0 300 L 50 50 1 1 O I 63 | X VSS 7 -100 -150 0 U 40 40 1 1 W N 64 | X VDD 14 -100 150 0 D 40 40 1 1 W N 65 | X In 3 -500 0 300 R 50 50 2 1 I 66 | X Out 4 500 0 300 L 50 50 2 1 O I 67 | X VSS 7 -100 -150 0 U 50 40 2 1 W N 68 | X VDD 14 -100 150 0 D 50 40 2 1 W N 69 | X In 5 -500 0 300 R 50 50 3 1 I 70 | X Out 6 500 0 300 L 50 50 3 1 O I 71 | X VSS 7 -100 -150 0 U 50 40 3 1 W N 72 | X VDD 14 -100 150 0 D 50 40 3 1 W N 73 | X VSS 7 -100 -150 0 U 50 40 4 1 W N 74 | X Out 8 500 0 300 L 50 50 4 1 O I 75 | X In 9 -500 0 300 R 50 50 4 1 I 76 | X VDD 14 -100 150 0 D 50 40 4 1 W N 77 | X VSS 7 -100 -150 0 U 50 40 5 1 W N 78 | X Out 10 500 0 300 L 50 50 5 1 O I 79 | X In 11 -500 0 300 R 50 50 5 1 I 80 | X VDD 14 -100 150 0 D 50 40 5 1 W N 81 | X VSS 7 -100 -150 0 U 50 40 6 1 W N 82 | X Out 12 500 0 300 L 50 50 6 1 O I 83 | X In 13 -500 0 300 R 50 50 6 1 I 84 | X VDD 14 -100 150 0 D 50 40 6 1 W N 85 | P 2 0 2 0 -200 -200 -200 200 N 86 | P 2 0 2 0 -200 200 200 0 N 87 | P 2 0 2 0 200 0 -200 -200 N 88 | X In 1 -500 0 300 R 50 50 1 2 I I 89 | X Out 2 500 0 300 L 50 50 1 2 O 90 | X VSS 7 -100 -150 0 U 40 40 1 2 W N 91 | X VDD 14 -100 150 0 D 40 40 1 2 W N 92 | X In 3 -500 0 300 R 50 50 2 2 I 93 | X Out 4 500 0 300 L 50 50 2 2 O 94 | X VSS 7 -100 -150 0 U 50 40 2 2 W N 95 | X VDD 14 -100 150 0 D 50 40 2 2 W N 96 | X In 5 -500 0 300 R 50 50 3 2 I 97 | X Out 6 500 0 300 L 50 50 3 2 O 98 | X VSS 7 -100 -150 0 U 50 40 3 2 W N 99 | X VDD 14 -100 150 0 D 50 40 3 2 W N 100 | X VSS 7 -100 -150 0 U 50 40 4 2 W N 101 | X Out 8 500 0 300 L 50 50 4 2 O 102 | X In 9 -500 0 300 R 50 50 4 2 I 103 | X VDD 14 -100 150 0 D 50 40 4 2 W N 104 | X VSS 7 -100 -150 0 U 50 40 5 2 W N 105 | X Out 10 500 0 300 L 50 50 5 2 O 106 | X In 11 -500 0 300 R 50 50 5 2 I 107 | X VDD 14 -100 150 0 D 50 40 5 2 W N 108 | X VSS 7 -100 -150 0 U 50 40 6 2 W N 109 | X Out 12 500 0 300 L 50 50 6 2 O 110 | X In 13 -500 0 300 R 50 50 6 2 I 111 | X VDD 14 -100 150 0 D 50 40 6 2 W N 112 | ENDDRAW 113 | ENDDEF 114 | # 115 | # 4016 116 | # 117 | DEF 4016 U 0 0 Y Y 4 F N 118 | F0 "U" 200 -149 50 H V C CNN 119 | F1 "4016" 200 150 50 H V C CNN 120 | F2 "" 0 0 60 H I C CNN 121 | F3 "" 0 0 60 H I C CNN 122 | ALIAS 4066 123 | DRAW 124 | P 3 0 1 0 -100 -150 0 -50 0 -50 N 125 | P 4 0 1 0 -100 0 100 100 100 -100 -100 0 N 126 | P 4 0 1 0 -100 100 100 0 -100 -100 -100 100 N 127 | X V- 7 0 -250 200 U 30 30 0 1 W 128 | X V+ 14 0 250 200 D 30 30 0 1 W 129 | X I/O 1 -300 0 200 R 40 40 1 1 P 130 | X O/I 2 300 0 200 L 40 40 1 1 P 131 | X ON 13 -300 -150 200 R 40 40 1 1 I 132 | X O/I 3 300 0 200 L 40 40 2 1 P 133 | X I/O 4 -300 0 200 R 40 40 2 1 P 134 | X ON 5 -300 -150 200 R 40 40 2 1 I 135 | X ON 6 -300 -150 200 R 40 40 3 1 I 136 | X I/O 8 -300 0 200 R 40 40 3 1 P 137 | X O/I 9 300 0 200 L 40 40 3 1 P 138 | X O/I 10 300 0 200 L 40 40 4 1 P 139 | X I/O 11 -300 0 200 R 40 40 4 1 P 140 | X ON 12 -300 -150 200 R 40 40 4 1 I 141 | ENDDRAW 142 | ENDDEF 143 | # 144 | # C 145 | # 146 | DEF C C 0 10 N Y 1 F N 147 | F0 "C" 25 100 50 H V L CNN 148 | F1 "C" 25 -100 50 H V L CNN 149 | F2 "" 38 -150 50 H V C CNN 150 | F3 "" 0 0 50 H V C CNN 151 | $FPLIST 152 | C? 153 | C_????_* 154 | C_???? 155 | SMD*_c 156 | Capacitor* 157 | $ENDFPLIST 158 | DRAW 159 | P 2 0 1 20 -80 -30 80 -30 N 160 | P 2 0 1 20 -80 30 80 30 N 161 | X ~ 1 0 150 110 D 40 40 1 1 P 162 | X ~ 2 0 -150 110 U 40 40 1 1 P 163 | ENDDRAW 164 | ENDDEF 165 | # 166 | # CONN_01X02 167 | # 168 | DEF CONN_01X02 P 0 40 Y N 1 F N 169 | F0 "P" 0 150 50 H V C CNN 170 | F1 "CONN_01X02" 100 0 50 V V C CNN 171 | F2 "" 0 0 50 H V C CNN 172 | F3 "" 0 0 50 H V C CNN 173 | $FPLIST 174 | Pin_Header_Straight_1X02 175 | Pin_Header_Angled_1X02 176 | Socket_Strip_Straight_1X02 177 | Socket_Strip_Angled_1X02 178 | $ENDFPLIST 179 | DRAW 180 | S -50 -45 10 -55 0 1 0 N 181 | S -50 55 10 45 0 1 0 N 182 | S -50 100 50 -100 0 1 0 N 183 | X P1 1 -200 50 150 R 50 50 1 1 P 184 | X P2 2 -200 -50 150 R 50 50 1 1 P 185 | ENDDRAW 186 | ENDDEF 187 | # 188 | # CONN_01X03 189 | # 190 | DEF CONN_01X03 P 0 40 Y N 1 F N 191 | F0 "P" 0 200 50 H V C CNN 192 | F1 "CONN_01X03" 100 0 50 V V C CNN 193 | F2 "" 0 0 50 H V C CNN 194 | F3 "" 0 0 50 H V C CNN 195 | $FPLIST 196 | Pin_Header_Straight_1X03 197 | Pin_Header_Angled_1X03 198 | Socket_Strip_Straight_1X03 199 | Socket_Strip_Angled_1X03 200 | $ENDFPLIST 201 | DRAW 202 | S -50 -95 10 -105 0 1 0 N 203 | S -50 5 10 -5 0 1 0 N 204 | S -50 105 10 95 0 1 0 N 205 | S -50 150 50 -150 0 1 0 N 206 | X P1 1 -200 100 150 R 50 50 1 1 P 207 | X P2 2 -200 0 150 R 50 50 1 1 P 208 | X P3 3 -200 -100 150 R 50 50 1 1 P 209 | ENDDRAW 210 | ENDDEF 211 | # 212 | # CP 213 | # 214 | DEF CP C 0 10 N Y 1 F N 215 | F0 "C" 25 100 50 H V L CNN 216 | F1 "CP" 25 -100 50 H V L CNN 217 | F2 "" 38 -150 50 H V C CNN 218 | F3 "" 0 0 50 H V C CNN 219 | $FPLIST 220 | CP* 221 | C_Axial* 222 | C_Radial* 223 | TantalC* 224 | C*elec 225 | c_elec* 226 | SMD*_Pol 227 | $ENDFPLIST 228 | DRAW 229 | S -90 20 -90 40 0 1 0 N 230 | S -90 20 90 20 0 1 0 N 231 | S 90 -20 -90 -40 0 1 0 F 232 | S 90 40 -90 40 0 1 0 N 233 | S 90 40 90 20 0 1 0 N 234 | P 2 0 1 0 -70 90 -30 90 N 235 | P 2 0 1 0 -50 110 -50 70 N 236 | X ~ 1 0 150 110 D 40 40 1 1 P 237 | X ~ 2 0 -150 110 U 40 40 1 1 P 238 | ENDDRAW 239 | ENDDEF 240 | # 241 | # CP1 242 | # 243 | DEF CP1 C 0 10 N N 1 F N 244 | F0 "C" 25 100 50 H V L CNN 245 | F1 "CP1" 25 -100 50 H V L CNN 246 | F2 "" 0 0 50 H V C CNN 247 | F3 "" 0 0 50 H V C CNN 248 | $FPLIST 249 | SMD*_Pol 250 | C_Axial* 251 | C_Radial* 252 | c_elec* 253 | C*elec 254 | TantalC* 255 | CP* 256 | $ENDFPLIST 257 | DRAW 258 | A 0 -150 128 1287 513 0 1 20 N -80 -50 80 -50 259 | P 2 0 1 20 -80 30 80 30 N 260 | P 2 0 1 0 -70 90 -30 90 N 261 | P 2 0 1 0 -50 70 -50 110 N 262 | X ~ 1 0 150 110 D 40 40 1 1 P 263 | X ~ 2 0 -150 130 U 40 40 1 1 P 264 | ENDDRAW 265 | ENDDEF 266 | # 267 | # D 268 | # 269 | DEF D D 0 40 N N 1 F N 270 | F0 "D" 0 100 50 H V C CNN 271 | F1 "D" 0 -100 50 H V C CNN 272 | F2 "" 0 0 50 H V C CNN 273 | F3 "" 0 0 50 H V C CNN 274 | $FPLIST 275 | Diode_* 276 | D-Pak_TO252AA 277 | *SingleDiode 278 | *_Diode_* 279 | *SingleDiode* 280 | $ENDFPLIST 281 | DRAW 282 | P 2 0 1 6 -50 50 -50 -50 N 283 | P 3 0 1 0 50 50 -50 0 50 -50 F 284 | X K 1 -150 0 100 R 50 50 1 1 P 285 | X A 2 150 0 100 L 50 50 1 1 P 286 | ENDDRAW 287 | ENDDEF 288 | # 289 | # GND 290 | # 291 | DEF GND #PWR 0 0 Y Y 1 F P 292 | F0 "#PWR" 0 -250 50 H I C CNN 293 | F1 "GND" 0 -150 50 H V C CNN 294 | F2 "" 0 0 50 H V C CNN 295 | F3 "" 0 0 50 H V C CNN 296 | DRAW 297 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 298 | X GND 1 0 0 0 D 50 50 1 1 W N 299 | ENDDRAW 300 | ENDDEF 301 | # 302 | # LED-POT 303 | # 304 | DEF LED-POT RV 0 40 Y N 1 F N 305 | F0 "RV" 0 0 50 H V C CNN 306 | F1 "LED-POT" 0 -100 50 H V C CNN 307 | F2 "" 0 0 50 H V C CNN 308 | F3 "" 0 0 50 H V C CNN 309 | DRAW 310 | S -100 40 100 -40 0 1 0 N 311 | P 2 0 1 0 50 -200 50 -300 N 312 | P 2 0 1 0 75 -290 105 -320 N 313 | P 2 0 1 0 90 -270 120 -300 N 314 | P 2 0 1 0 105 -320 90 -315 N 315 | P 2 0 1 0 105 -320 100 -305 N 316 | P 2 0 1 0 120 -300 105 -295 N 317 | P 2 0 1 0 120 -300 115 -285 N 318 | P 3 0 1 0 0 40 -20 60 20 60 F 319 | P 4 0 1 0 -50 -200 -50 -300 50 -250 -50 -200 F 320 | X 1 1 -150 0 50 R 40 40 1 1 P 321 | X 2 2 0 150 100 D 40 40 1 1 P 322 | X 3 3 150 0 50 L 40 40 1 1 P 323 | X B B -150 -250 100 R 50 50 1 1 I 324 | X E E 150 -250 100 L 50 50 1 1 I 325 | ENDDRAW 326 | ENDDEF 327 | # 328 | # LM2902N 329 | # 330 | DEF LM2902N U 0 20 Y Y 4 F N 331 | F0 "U" 0 200 50 H V L CNN 332 | F1 "LM2902N" 0 -200 50 H V L CNN 333 | F2 "" -50 100 50 H V C CNN 334 | F3 "" 50 200 50 H V C CNN 335 | ALIAS LM324 TLC274 TL074 LM324N LM324AN MCP6004 336 | $FPLIST 337 | SOIC* 338 | DIP* 339 | TSSOP* 340 | SSOP* 341 | MSOP* 342 | $ENDFPLIST 343 | DRAW 344 | P 4 0 1 10 -200 200 200 0 -200 -200 -200 200 f 345 | X V+ 4 -100 300 150 D 50 50 0 1 W 346 | X V- 11 -100 -300 150 U 50 50 0 1 W 347 | X ~ 1 300 0 100 L 50 50 1 1 O 348 | X - 2 -300 -100 100 R 50 50 1 1 I 349 | X + 3 -300 100 100 R 50 50 1 1 I 350 | X + 5 -300 100 100 R 50 50 2 1 I 351 | X - 6 -300 -100 100 R 50 50 2 1 I 352 | X ~ 7 300 0 100 L 50 50 2 1 O 353 | X ~ 8 300 0 100 L 50 50 3 1 O 354 | X - 9 -300 -100 100 R 50 50 3 1 I 355 | X + 10 -300 100 100 R 50 50 3 1 I 356 | X + 12 -300 100 100 R 50 50 4 1 I 357 | X - 13 -300 -100 100 R 50 50 4 1 I 358 | X ~ 14 300 0 100 L 50 50 4 1 O 359 | ENDDRAW 360 | ENDDEF 361 | # 362 | # MMBT3904 363 | # 364 | DEF MMBT3904 Q 0 0 Y Y 1 F N 365 | F0 "Q" 200 75 50 H V L CNN 366 | F1 "MMBT3904" 200 0 50 H V L CNN 367 | F2 "SOT-23" 200 -75 50 H V L CIN 368 | F3 "" 0 0 50 H V L CNN 369 | $FPLIST 370 | SOT-23* 371 | $ENDFPLIST 372 | DRAW 373 | C 50 0 111 0 1 10 N 374 | P 2 0 1 0 0 0 25 0 N 375 | P 2 0 1 0 25 25 100 100 N 376 | P 3 0 1 0 25 -25 100 -100 100 -100 N 377 | P 3 0 1 20 25 75 25 -75 25 -75 N 378 | P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F 379 | X B 1 -200 0 200 R 50 50 1 1 I 380 | X E 2 100 -200 100 U 50 50 1 1 P 381 | X C 3 100 200 100 D 50 50 1 1 P 382 | ENDDRAW 383 | ENDDEF 384 | # 385 | # POT 386 | # 387 | DEF POT RV 0 40 Y N 1 F N 388 | F0 "RV" 0 -80 50 H V C CNN 389 | F1 "POT" 0 0 50 H V C CNN 390 | F2 "" 0 0 50 H V C CNN 391 | F3 "" 0 0 50 H V C CNN 392 | DRAW 393 | S -100 40 100 -40 0 1 0 N 394 | P 3 0 1 0 0 40 -20 60 20 60 F 395 | X 1 1 -150 0 50 R 40 40 1 1 P 396 | X 2 2 0 150 100 D 40 40 1 1 P 397 | X 3 3 150 0 50 L 40 40 1 1 P 398 | ENDDRAW 399 | ENDDEF 400 | # 401 | # PWR_FLAG 402 | # 403 | DEF PWR_FLAG #FLG 0 0 N N 1 F P 404 | F0 "#FLG" 0 95 50 H I C CNN 405 | F1 "PWR_FLAG" 0 180 50 H V C CNN 406 | F2 "" 0 0 50 H V C CNN 407 | F3 "" 0 0 50 H V C CNN 408 | DRAW 409 | X pwr 1 0 0 0 U 50 50 0 0 w 410 | P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N 411 | ENDDRAW 412 | ENDDEF 413 | # 414 | # R 415 | # 416 | DEF R R 0 0 N Y 1 F N 417 | F0 "R" 80 0 50 V V C CNN 418 | F1 "R" 0 0 50 V V C CNN 419 | F2 "" -70 0 50 V V C CNN 420 | F3 "" 0 0 50 H V C CNN 421 | $FPLIST 422 | R_* 423 | Resistor_* 424 | $ENDFPLIST 425 | DRAW 426 | S -40 -100 40 100 0 1 10 N 427 | X ~ 1 0 150 50 D 50 50 1 1 P 428 | X ~ 2 0 -150 50 U 50 50 1 1 P 429 | ENDDRAW 430 | ENDDEF 431 | # 432 | # VCC 433 | # 434 | DEF VCC #PWR 0 0 Y Y 1 F P 435 | F0 "#PWR" 0 -150 50 H I C CNN 436 | F1 "VCC" 0 150 50 H V C CNN 437 | F2 "" 0 0 50 H V C CNN 438 | F3 "" 0 0 50 H V C CNN 439 | DRAW 440 | C 0 75 25 0 1 0 N 441 | P 2 0 1 0 0 0 0 50 N 442 | X VCC 1 0 0 0 U 50 50 1 1 W N 443 | ENDDRAW 444 | ENDDEF 445 | # 446 | # VEE 447 | # 448 | DEF VEE #PWR 0 0 Y Y 1 F P 449 | F0 "#PWR" 0 -150 50 H I C CNN 450 | F1 "VEE" 0 150 50 H V C CNN 451 | F2 "" 0 0 50 H V C CNN 452 | F3 "" 0 0 50 H V C CNN 453 | DRAW 454 | C 0 75 25 0 1 0 N 455 | P 2 0 1 0 0 0 0 50 N 456 | X VEE 1 0 0 0 U 50 50 1 1 W N 457 | ENDDRAW 458 | ENDDEF 459 | # 460 | #End Library 461 | -------------------------------------------------------------------------------- /modules/adsr-envelope-generator/kicad/adsr-envelope-generator.pro: -------------------------------------------------------------------------------- 1 | update=15/04/2017 11:50:01 2 | version=1 3 | last_client=kicad 4 | [pcbnew] 5 | version=1 6 | LastNetListRead= 7 | UseCmpFile=1 8 | PadDrill=0.600000000000 9 | PadDrillOvalY=0.600000000000 10 | PadSizeH=1.500000000000 11 | PadSizeV=1.500000000000 12 | PcbTextSizeV=1.500000000000 13 | PcbTextSizeH=1.500000000000 14 | PcbTextThickness=0.300000000000 15 | ModuleTextSizeV=1.000000000000 16 | ModuleTextSizeH=1.000000000000 17 | ModuleTextSizeThickness=0.150000000000 18 | SolderMaskClearance=0.000000000000 19 | SolderMaskMinWidth=0.000000000000 20 | DrawSegmentWidth=0.200000000000 21 | BoardOutlineThickness=0.100000000000 22 | ModuleOutlineThickness=0.150000000000 23 | [cvpcb] 24 | version=1 25 | NetIExt=net 26 | [general] 27 | version=1 28 | [eeschema] 29 | version=1 30 | LibDir=../kicad 31 | [eeschema/libraries] 32 | LibName1=power 33 | LibName2=device 34 | LibName3=transistors 35 | LibName4=conn 36 | LibName5=linear 37 | LibName6=regul 38 | LibName7=74xx 39 | LibName8=cmos4000 40 | LibName9=adc-dac 41 | LibName10=memory 42 | LibName11=xilinx 43 | LibName12=microcontrollers 44 | LibName13=dsp 45 | LibName14=microchip 46 | LibName15=analog_switches 47 | LibName16=motorola 48 | LibName17=texas 49 | LibName18=intel 50 | LibName19=audio 51 | LibName20=interface 52 | LibName21=digital-audio 53 | LibName22=philips 54 | LibName23=display 55 | LibName24=cypress 56 | LibName25=siliconi 57 | LibName26=opto 58 | LibName27=atmel 59 | LibName28=contrib 60 | LibName29=valves 61 | LibName30=led-pot 62 | [schematic_editor] 63 | version=1 64 | PageLayoutDescrFile= 65 | PlotDirectoryName= 66 | SubpartIdSeparator=0 67 | SubpartFirstId=65 68 | NetFmtName= 69 | SpiceForceRefPrefix=0 70 | SpiceUseNetNumbers=0 71 | LabSize=60 72 | -------------------------------------------------------------------------------- /modules/adsr-envelope-generator/kicad/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name "Bourns PTL")(type KiCad)(uri "$(KIPRJMOD)\\Bourns PTL.pretty")(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /modules/adsr-envelope-generator/kicad/led-pot.dcm: -------------------------------------------------------------------------------- 1 | EESchema-DOCLIB Version 2.0 2 | # 3 | $CMP LED-POT 4 | D Potentiometer with LED 5 | K Potentiometer LED Slide 6 | $ENDCMP 7 | # 8 | #End Doc Library 9 | -------------------------------------------------------------------------------- /modules/adsr-envelope-generator/kicad/led-pot.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # LED-POT 5 | # 6 | DEF LED-POT RV 0 40 Y N 1 F N 7 | F0 "RV" 0 0 50 H V C CNN 8 | F1 "LED-POT" 0 -100 50 H V C CNN 9 | F2 "" 0 0 50 H V C CNN 10 | F3 "" 0 0 50 H V C CNN 11 | DRAW 12 | S -100 40 100 -40 0 1 0 N 13 | P 2 0 1 0 50 -200 50 -300 N 14 | P 2 0 1 0 75 -290 105 -320 N 15 | P 2 0 1 0 90 -270 120 -300 N 16 | P 2 0 1 0 105 -320 90 -315 N 17 | P 2 0 1 0 105 -320 100 -305 N 18 | P 2 0 1 0 120 -300 105 -295 N 19 | P 2 0 1 0 120 -300 115 -285 N 20 | P 3 0 1 0 0 40 -20 60 20 60 F 21 | P 4 0 1 0 -50 -200 -50 -300 50 -250 -50 -200 F 22 | X 1 1 -150 0 50 R 40 40 1 1 P 23 | X 2 2 0 150 100 D 40 40 1 1 P 24 | X 3 3 150 0 50 L 40 40 1 1 P 25 | X B B -150 -250 100 R 50 50 1 1 I 26 | X E E 150 -250 100 L 50 50 1 1 I 27 | ENDDRAW 28 | ENDDEF 29 | # 30 | #End Library 31 | -------------------------------------------------------------------------------- /modules/adsr-envelope-generator/slide-pot-info.txt: -------------------------------------------------------------------------------- 1 | Bourns PTL30-15O0-104B2 2 | 30mm travel, 15mm lever length, orange LED, no center detent, 100K ohm, linear response 3 | 4 | -------------------------------------------------------------------------------- /modules/clock-generator/code/clock_generator.atsln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Atmel Studio Solution File, Format Version 11.00 4 | VisualStudioVersion = 14.0.23107.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "clock_generator", "clock_generator\clock_generator.cproj", "{DCE6C7E3-EE26-4D79-826B-08594B9AD897}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|AVR = Debug|AVR 11 | Release|AVR = Release|AVR 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.ActiveCfg = Debug|AVR 15 | {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Debug|AVR.Build.0 = Debug|AVR 16 | {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.ActiveCfg = Release|AVR 17 | {DCE6C7E3-EE26-4D79-826B-08594B9AD897}.Release|AVR.Build.0 = Release|AVR 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /modules/clock-generator/code/clock_generator/MAX72S19.c: -------------------------------------------------------------------------------- 1 | /* 2 | * MAX72S19.c 3 | * 4 | * Created: 17/11/2017 12:44:51 5 | * Author: Mich 6 | */ 7 | 8 | #include "MAX72S19.h" 9 | #define _BV(bit) (1 << (bit)) 10 | #define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) 11 | 12 | static uint8_t _pinChipSelect; 13 | static uint8_t _pinDataOut; 14 | static uint8_t _pinClock; 15 | 16 | static uint8_t _mapChar(char inputChar); 17 | static void _beginTransmission(); 18 | static void _endTransmission(); 19 | static void _setRegister(uint8_t reg, uint8_t data); 20 | static void _shiftOut(uint8_t data); 21 | 22 | void displaySetup(uint8_t pinChipSelect, uint8_t pinDataOut, uint8_t pinClock) { 23 | _pinChipSelect = pinChipSelect; 24 | _pinDataOut = pinDataOut; 25 | _pinClock = pinClock; 26 | 27 | DDRA |= _BV(_pinChipSelect) | _BV(_pinDataOut) | _BV(_pinClock); 28 | PORTA &= ~(_BV(_pinDataOut) | _BV(_pinClock)); 29 | PORTA |= _BV(_pinChipSelect); 30 | } 31 | 32 | 33 | void displaySetLED(uint8_t row, uint8_t column, bool on) { 34 | // TODO 35 | } 36 | 37 | void displaySetRow(uint8_t row, uint8_t states) { 38 | // TODO 39 | } 40 | 41 | void displaySetColumn(uint8_t column, uint8_t states) { 42 | // TODO 43 | } 44 | 45 | void displayClear() { 46 | for (uint8_t i = 0; i < MAX_DIGITS; i++) { 47 | _setRegister(REG_DIGIT0 + i, 0x00); 48 | } 49 | } 50 | 51 | void displayWrite(uint8_t reg, uint8_t value) { 52 | _setRegister(reg, value); 53 | } 54 | 55 | void displayWriteChar(uint8_t digitIndex, char character, bool dotOn) { 56 | digitIndex = constrain(digitIndex, 0, 7); 57 | uint8_t value = _mapChar(character); 58 | 59 | if (dotOn) { 60 | value |= 0b10000000; 61 | } 62 | 63 | _setRegister(REG_DIGIT0 + digitIndex, value); 64 | } 65 | 66 | void displayWriteNumber(uint8_t digitIndex, uint8_t number) { 67 | number = constrain(number, 0, 9); 68 | displayWriteChar(digitIndex, '0' + number, false); 69 | } 70 | 71 | void displayPrint(uint8_t startDigitIndex, char characters[]) { 72 | uint8_t curDigit = constrain(startDigitIndex, 0, 7); 73 | uint8_t charIndex = 0; 74 | char curChar = characters[charIndex]; 75 | 76 | while (curDigit < MAX_DIGITS * 2) { 77 | if (curChar == '\0') break; 78 | bool curCharDot = characters[charIndex + 1] == '.'; 79 | displayWriteChar(curDigit++, curChar, curCharDot); 80 | if (curCharDot) ++charIndex; 81 | curChar = characters[++charIndex]; 82 | } 83 | } 84 | 85 | void displaySetDecodeMode(uint8_t modes) { 86 | _setRegister(REG_DECODEMODE, modes); 87 | } 88 | 89 | void displaySetIntensity(uint8_t intensity) { 90 | _setRegister(REG_INTENSITY, constrain(intensity, 0x0, 0xF)); 91 | } 92 | 93 | void displaySetScanLimit(uint8_t scanLimit) { 94 | _setRegister(REG_SCANLIMIT, constrain(scanLimit, 0x0, 0xF)); 95 | } 96 | 97 | void displayStartDisplayTest() { 98 | _setRegister(REG_DISPLAYTEST, 1); 99 | } 100 | 101 | void displayStopDisplayTest() { 102 | _setRegister(REG_DISPLAYTEST, 0); 103 | } 104 | 105 | void displayShutdown() { 106 | _setRegister(REG_SHUTDOWN, 0); 107 | } 108 | 109 | void displayActivate() { 110 | _setRegister(REG_SHUTDOWN, 1); 111 | } 112 | 113 | // Private methods 114 | 115 | static uint8_t _mapChar(char inputChar) { 116 | switch (inputChar) { 117 | // Segments legend: 118 | // _______ 119 | // / A / 120 | // F / / B 121 | // /_______/ 122 | // / G / 123 | // E / / C 124 | // /_______/ * dp 125 | // D 126 | 127 | // dpABCDEFG 128 | case '0': return 0b01111110; 129 | case '1': return 0b00110000; 130 | case '2': return 0b01101101; 131 | case '3': return 0b01111001; 132 | case '4': return 0b00110011; 133 | case '5': return 0b01011011; 134 | case '6': return 0b01011111; 135 | case '7': return 0b01110000; 136 | case '8': return 0b01111111; 137 | case '9': return 0b01111011; 138 | default: return 0b00000000; 139 | } 140 | } 141 | 142 | static void _beginTransmission() { 143 | PORTA &= ~(_BV(_pinChipSelect) | _BV(_pinClock)); 144 | } 145 | 146 | static void _endTransmission() { 147 | PORTA |= _BV(_pinChipSelect); 148 | PORTA &= ~_BV(_pinClock); 149 | } 150 | 151 | static void _setRegister(uint8_t reg, uint8_t data) { 152 | _beginTransmission(); 153 | _shiftOut(reg); 154 | _shiftOut(data); 155 | _endTransmission(); 156 | } 157 | 158 | static void _shiftOut(uint8_t data) { 159 | for (uint8_t i = 0; i < 8; i++) { 160 | uint8_t val = !!(data & _BV(7 - i)); 161 | 162 | if (val) { 163 | PORTA |= _BV(_pinDataOut); 164 | } else { 165 | PORTA &= ~_BV(_pinDataOut); 166 | } 167 | 168 | PORTA |= _BV(_pinClock); 169 | // TODO If this appears to be too fast, add a delay here 170 | PORTA &= ~_BV(_pinClock); 171 | } 172 | } -------------------------------------------------------------------------------- /modules/clock-generator/code/clock_generator/MAX72S19.h: -------------------------------------------------------------------------------- 1 | /* 2 | * MAX72S19.h 3 | * 4 | * Created: 17/11/2017 13:03:14 5 | * Author: Mich 6 | */ 7 | 8 | #include 9 | #include 10 | 11 | #ifndef MAX72S19_H_ 12 | #define MAX72S19_H_ 13 | 14 | #define REG_NOOP 0x00 15 | #define REG_DIGIT0 0x01 16 | #define REG_DIGIT1 0x02 17 | #define REG_DIGIT2 0x03 18 | #define REG_DIGIT3 0x04 19 | #define REG_DIGIT4 0x05 20 | #define REG_DIGIT5 0x06 21 | #define REG_DIGIT6 0x07 22 | #define REG_DIGIT7 0x08 23 | #define REG_DECODEMODE 0x09 24 | #define REG_INTENSITY 0x0A 25 | #define REG_SCANLIMIT 0x0B 26 | #define REG_SHUTDOWN 0x0C 27 | #define REG_DISPLAYTEST 0x0F 28 | 29 | #define MAX_DIGITS 8 30 | 31 | void displaySetup(uint8_t pinChipSelect, uint8_t pinDataOut, uint8_t pinClock); 32 | void displaySetLED(uint8_t row, uint8_t column, bool on); 33 | void displaySetRow(uint8_t row, uint8_t states); 34 | void displaySetColumn(uint8_t column, uint8_t states); 35 | void displayClear(); 36 | void displayWrite(uint8_t reg, uint8_t value); 37 | void displayWriteChar(uint8_t digitIndex, char character, bool dotOn); 38 | void displayWriteNumber(uint8_t digitIndex, uint8_t number); 39 | void displayPrint(uint8_t startDigitIndex, char characters[]); 40 | void displaySetDecodeMode(uint8_t modes); 41 | void displaySetIntensity(uint8_t intensity); 42 | void displaySetScanLimit(uint8_t scanLimit); 43 | void displayStartDisplayTest(); 44 | void displayStopDisplayTest(); 45 | void displayShutdown(); 46 | void displayActivate(); 47 | 48 | 49 | #endif /* MAX72S19_H_ */ -------------------------------------------------------------------------------- /modules/clock-generator/code/clock_generator/clock_generator.cproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 2.0 5 | 7.0 6 | com.Atmel.AVRGCC8.C 7 | dce6c7e3-ee26-4d79-826b-08594b9ad897 8 | ATtiny84 9 | none 10 | Executable 11 | C 12 | $(MSBuildProjectName) 13 | .elf 14 | $(MSBuildProjectDirectory)\$(Configuration) 15 | clocktest 16 | clock_generator 17 | clocktest 18 | Native 19 | true 20 | false 21 | true 22 | true 23 | 0x20000000 24 | 25 | true 26 | exception_table 27 | 2 28 | 0 29 | 0 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | com.atmel.avrdbg.tool.ispmk2 44 | 0000B0822857 45 | 0x1E930C 46 | ISP 47 | 125000 48 | 49 | 50 | 51 | 125000 52 | 53 | ISP 54 | 55 | com.atmel.avrdbg.tool.ispmk2 56 | 0000B0822857 57 | AVRISP mkII 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | com.atmel.avrdbg.tool.simulator 67 | 68 | 69 | Simulator 70 | 71 | 72 | 73 | 74 | 75 | -mmcu=attiny84 -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\gcc\dev\attiny84" 76 | True 77 | True 78 | True 79 | True 80 | False 81 | True 82 | True 83 | 84 | 85 | NDEBUG 86 | 87 | 88 | 89 | 90 | %24(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\include 91 | 92 | 93 | Optimize for size (-Os) 94 | True 95 | True 96 | True 97 | 98 | 99 | libm 100 | 101 | 102 | 103 | 104 | %24(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\include 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | -mmcu=attiny84 -B "%24(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\gcc\dev\attiny84" 114 | True 115 | True 116 | True 117 | True 118 | False 119 | True 120 | True 121 | 122 | 123 | DEBUG 124 | 125 | 126 | 127 | 128 | %24(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\include 129 | 130 | 131 | Optimize (-O1) 132 | True 133 | True 134 | Default (-g2) 135 | True 136 | 137 | 138 | libm 139 | 140 | 141 | 142 | 143 | %24(PackRepoDir)\atmel\ATtiny_DFP\1.3.147\include 144 | 145 | 146 | Default (-Wa,-g) 147 | 148 | 149 | 150 | 151 | 152 | compile 153 | 154 | 155 | compile 156 | 157 | 158 | compile 159 | 160 | 161 | 162 | -------------------------------------------------------------------------------- /modules/clock-generator/code/clock_generator/main.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | // Needs to be defined before including util/delay, or it will overwrite its own 8 | #define F_CPU 16000000UL 9 | #include 10 | 11 | #include "MAX72S19.h" 12 | 13 | #define _BV(bit) (1 << (bit)) 14 | #define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt))) 15 | 16 | #define PPQ 24 // pulses per quarter note, from MIDI 17 | 18 | #define PIN_32TH_OUT PINA0 19 | #define PIN_PPQ_OUT PINA7 20 | 21 | // Serial interface to MAX72S19 22 | #define PIN_DISPLAY_CLK PINA4 23 | #define PIN_DISPLAY_DATA_OUT PINA6 24 | #define PIN_DISPLAY_CS PINA3 25 | 26 | #define PIN_BUTTON_UP PINA2 27 | #define PIN_BUTTON_DOWN PINA1 28 | 29 | #define MIN_TEMPO 20 30 | #define DEFAULT_TEMPO 120 31 | #define MAX_TEMPO 300 32 | 33 | #define MAIN_LOOP_TICK_TIME_MS 50 34 | #define DEBOUNCE_TICKS 1 35 | 36 | #define TICKS_TIL_REPEAT 10 37 | #define TICKS_TIL_FAST_REPEAT 50 38 | 39 | #define TEMPO_SAVE_DELAY_TICKS 600 // 30 seconds 40 | #define TEMPO_EEPROM_ADDRESS 0 41 | 42 | volatile long pulseCount = 0; 43 | 44 | // Main loop ticks 45 | bool evenTick; 46 | 47 | volatile bool output32th; 48 | volatile bool ppqOn = true; 49 | 50 | volatile unsigned short int tempo = 0; 51 | volatile unsigned short int eepromTempo; 52 | 53 | volatile uint8_t portACache; 54 | 55 | volatile int buttonUpTicksHeld; 56 | volatile int buttonDownTicksHeld; 57 | 58 | // Used for debounce timekeeping and "button held" timekeeping 59 | volatile unsigned long mainLoopTicks; 60 | 61 | // To ensure we're not constantly writing the EEPROM 62 | volatile unsigned long tempoLastUpdated; 63 | 64 | // Debouncing buttons 65 | volatile unsigned long debounceLastPressed; 66 | 67 | void internalTimerTick(); 68 | unsigned long calcFreqForTimer(int); 69 | void configureTimerForFrequency(unsigned long); 70 | void displayNumber(int); 71 | void scanButtons(bool); 72 | unsigned short int loadTempo(); 73 | void saveTempo(); 74 | void updateTempo(unsigned short int); 75 | 76 | char* itoa(int, char[]); 77 | char* pad(char[], uint8_t); 78 | void buttonUpPressed(); 79 | void buttonDownPressed(); 80 | bool debounce(); 81 | 82 | // Handle button press interrupts 83 | // Data sheet table 9.1, PCINT0_vect is the vector for pin change interrupts 0 (port A) 84 | ISR(PCINT0_vect) { 85 | for (uint8_t i = 0; i < 8; i++) { 86 | if ((PINA & _BV(i)) != (portACache & _BV(i))) { 87 | portACache = PINA; 88 | bool direction = !!(PINA & _BV(i)); 89 | // only care about down flanks 90 | // TODO: better readable system to handle all these 91 | if (direction) { 92 | switch (i) { 93 | case PIN_BUTTON_UP: buttonUpTicksHeld = 0; break;// buttonUpPressed(); 94 | case PIN_BUTTON_DOWN: buttonDownTicksHeld = 0; break;return buttonDownPressed(); 95 | } 96 | return; 97 | } 98 | 99 | switch (i) { 100 | case PIN_BUTTON_UP: return buttonUpPressed(); 101 | case PIN_BUTTON_DOWN: return buttonDownPressed(); 102 | } 103 | 104 | break; 105 | } 106 | } 107 | 108 | portACache = PINA; 109 | } 110 | 111 | ISR(TIM1_COMPA_vect) { 112 | internalTimerTick(); 113 | } 114 | 115 | int main(void) 116 | { 117 | // Configure outputs: PIN_LED, PIN_PPQ 118 | DDRA |= _BV(PIN_32TH_OUT) | _BV(PIN_PPQ_OUT); 119 | 120 | // Configure inputs: PIN_BUTTON_DOWN, PIN_BUTTON_UP 121 | DDRA &= ~(_BV(PIN_BUTTON_DOWN) | _BV(PIN_BUTTON_UP)); 122 | // Set input puts as pull-ups 123 | PORTA |= (_BV(PIN_BUTTON_DOWN) | _BV(PIN_BUTTON_UP)); 124 | 125 | portACache = PINA; 126 | 127 | // Pin change interrupts 128 | // Data sheet section 9.3.2 129 | // using pins in port A for interrupts, so setting bit PCIE0 130 | GIMSK |= _BV(PCIE0); 131 | // Data sheet section 9.3.5 132 | // Note: interrupt numbers happen to match the pin numbers on the ATtiny84 133 | // If porting to a different chip, ensure you have the right bits to map to 134 | // port pins 135 | PCMSK0 |= _BV(PIN_BUTTON_UP) | _BV(PIN_BUTTON_DOWN); 136 | 137 | // Configure the display 138 | displaySetup(PIN_DISPLAY_CS, PIN_DISPLAY_DATA_OUT, PIN_DISPLAY_CLK); 139 | displaySetDecodeMode(0x00); 140 | displaySetIntensity(0xF); 141 | displaySetScanLimit(3); 142 | displayClear(); 143 | displayActivate(); 144 | 145 | // Timer interrupt setup 146 | // Set up CTC mode (clear on compare) 147 | // This ensures the counter register gets cleared (reset to 0) when it matches the compare register 148 | TCCR1B |= _BV(WGM12); 149 | // Enable interrupt on comparison timer 1, comparison A 150 | TIMSK1 |= _BV(OCIE1A); 151 | 152 | // globally enable interrupts 153 | sei(); 154 | 155 | updateTempo(loadTempo()); 156 | 157 | while (1) 158 | { 159 | mainLoopTicks++; 160 | evenTick = !evenTick; 161 | scanButtons(evenTick); 162 | if (evenTick) saveTempo(); 163 | _delay_ms(MAIN_LOOP_TICK_TIME_MS); 164 | } 165 | } 166 | 167 | // Tempo Read/write/update 168 | 169 | unsigned short int loadTempo() { 170 | eepromTempo = eeprom_read_word((uint16_t*)TEMPO_EEPROM_ADDRESS); 171 | 172 | if (eepromTempo < MIN_TEMPO || eepromTempo > MAX_TEMPO) eepromTempo = DEFAULT_TEMPO; 173 | return eepromTempo; 174 | } 175 | 176 | // Saves tempo to eeprom 177 | void saveTempo() { 178 | if (tempo == eepromTempo) return; 179 | if (mainLoopTicks - tempoLastUpdated < TEMPO_SAVE_DELAY_TICKS) return; 180 | eepromTempo = tempo; 181 | eeprom_write_word((uint16_t*)TEMPO_EEPROM_ADDRESS, tempo); 182 | } 183 | 184 | void updateTempo(unsigned short int newTempo) { 185 | newTempo = constrain(newTempo, MIN_TEMPO, MAX_TEMPO); 186 | 187 | if (tempo == newTempo) return; 188 | 189 | tempo = newTempo; 190 | 191 | tempoLastUpdated = mainLoopTicks; 192 | 193 | configureTimerForFrequency(calcFreqForTimer(tempo)); 194 | 195 | displayNumber(tempo); 196 | } 197 | 198 | // Button handling 199 | 200 | void buttonUpPressed() { 201 | // Get rid of hardware jitter 202 | if (debounce()) return; 203 | 204 | // If we were already holding the button, don't have interrupts cause 205 | // further tempo updates, the scanButtons() loop will take care of 206 | // repeating normally 207 | if (!!buttonUpTicksHeld) return; 208 | updateTempo(tempo + 1); 209 | } 210 | 211 | void buttonDownPressed() { 212 | if (debounce()) return; 213 | if (!!buttonDownTicksHeld) return; 214 | updateTempo(tempo - 1); 215 | } 216 | 217 | // Handles buttons being held, for automatic repeating of moving tempo up/down, 218 | // or resettings to default 219 | void scanButtons(bool even) { 220 | bool upPressed = !(PINA & _BV(PIN_BUTTON_UP)); 221 | bool downPressed = !(PINA & _BV(PIN_BUTTON_DOWN)); 222 | 223 | // If neither are held, reset how long we've held them 224 | if (!upPressed) buttonUpTicksHeld = 0; 225 | if (!downPressed) buttonDownTicksHeld = 0; 226 | 227 | // No buttons pressed? Nothing left to do 228 | if (!(upPressed || downPressed)) return; 229 | 230 | // If both buttons are pressed, and they've been held long enough, 231 | // reset to default. Increment baked into the condition 232 | if (upPressed && downPressed) { 233 | if (++buttonUpTicksHeld >= TICKS_TIL_REPEAT && 234 | ++buttonDownTicksHeld >= TICKS_TIL_REPEAT) { 235 | buttonUpTicksHeld = 0; 236 | buttonDownTicksHeld = 0; 237 | updateTempo(DEFAULT_TEMPO); 238 | } 239 | 240 | return; 241 | } 242 | 243 | // If up is held, determine how fast to update etc 244 | if (upPressed) { 245 | ++buttonUpTicksHeld; 246 | if (buttonUpTicksHeld >= TICKS_TIL_FAST_REPEAT) { 247 | updateTempo(tempo + 1); 248 | buttonUpTicksHeld = TICKS_TIL_FAST_REPEAT; 249 | } else if (buttonUpTicksHeld >= TICKS_TIL_REPEAT && even) { 250 | updateTempo(tempo + 1); 251 | } 252 | } 253 | 254 | if (downPressed) { 255 | ++buttonDownTicksHeld; 256 | if (buttonDownTicksHeld >= TICKS_TIL_FAST_REPEAT) { 257 | updateTempo(tempo - 1); 258 | buttonDownTicksHeld = TICKS_TIL_FAST_REPEAT; 259 | } else if (buttonDownTicksHeld >= TICKS_TIL_REPEAT && even) { 260 | updateTempo(tempo - 1); 261 | } 262 | } 263 | } 264 | 265 | // uC Timer configuration / handling 266 | 267 | unsigned long calcFreqForTimer(int bpm) { 268 | // Times 2 so we have double the frequency of PPQ pulses 269 | // Allow to toggle the PPQ output on and off 270 | // 60 as in seconds to a minute 271 | return (unsigned long)((float)(bpm * PPQ * 2) / (float)60); 272 | } 273 | 274 | 275 | // Change pre-scaler and compare value for achieving the frequency we want 276 | void configureTimerForFrequency(unsigned long frequency) { 277 | unsigned char clockSelectBits = 0; 278 | const long resolution = 0x10000; 279 | long cycles = F_CPU / frequency; 280 | 281 | // Taken from TimerOne source 282 | if (cycles < resolution) { 283 | // No pre-scale, full clock speed 284 | clockSelectBits = _BV(CS10); 285 | } else if((cycles >>= 3) < resolution) { 286 | // Pre-scale by /8 287 | clockSelectBits = _BV(CS11); 288 | } else if((cycles >>= 3) < resolution) { 289 | // Pre-scale byte /64 290 | clockSelectBits = _BV(CS11) | _BV(CS10); 291 | } else if((cycles >>= 2) < resolution) { 292 | // Pre-scale by /256 293 | clockSelectBits = _BV(CS12); 294 | } else if((cycles >>= 2) < resolution) { 295 | // Pre-scale by /1024 296 | clockSelectBits = _BV(CS12) | _BV(CS10); 297 | } else { 298 | // Out of bounds, set to maximum pre-scale and cycles. 299 | cycles = resolution, 300 | clockSelectBits = _BV(CS12) | _BV(CS10); 301 | } 302 | 303 | // Backup interrupt settings register 304 | unsigned char oldSREG = SREG; 305 | 306 | // Disable interrupts while we update counter-related registers 307 | cli(); 308 | // Clear pre-scaling-related bits before rewriting them 309 | TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12)); 310 | TCCR1B |= clockSelectBits; 311 | // Set the compare value 312 | OCR1A = cycles - 1; 313 | // Re-enable interrupts by restoring interrupt setting register 314 | SREG = oldSREG; 315 | } 316 | 317 | // Timer interrupt triggered 318 | void internalTimerTick() { 319 | // Toggle PPQ output 320 | ppqOn = !ppqOn; 321 | 322 | if (ppqOn) PORTA |= _BV(PIN_PPQ_OUT); 323 | else PORTA &= ~_BV(PIN_PPQ_OUT); 324 | 325 | // Increment pulse counter for secondary output that only happens every 4th note 326 | pulseCount++; 327 | 328 | if (pulseCount >= PPQ / 8) { 329 | pulseCount = 0; 330 | output32th = !output32th; 331 | if (output32th) PORTA |= _BV(PIN_32TH_OUT); 332 | else PORTA &= ~_BV(PIN_32TH_OUT); 333 | } 334 | } 335 | 336 | // Display helpers 337 | 338 | void displayNumber(int number) { 339 | char str[4]; 340 | itoa(number, str); 341 | pad(str, 3); 342 | displayPrint(0, str); 343 | } 344 | 345 | // Convert an integer to a character array 346 | char* itoa(int i, char b[]){ 347 | char const digit[] = "0123456789"; 348 | 349 | char* p = b; 350 | int shifter = i; 351 | 352 | // Count how many chars we'll need to represent this number; 353 | // advancing the pointer to where the null terminator goes 354 | do { 355 | ++p; 356 | shifter /= 10; 357 | } while(shifter); 358 | 359 | *p = '\0'; 360 | 361 | // Iterate over the digits, starting with the least significant digit 362 | // Grab char for the digit 363 | 364 | do { 365 | *--p = digit[i % 10]; 366 | i /= 10; 367 | } while(i); 368 | 369 | return b; 370 | } 371 | 372 | // Pad start of string with spaces to achieve given length 373 | char* pad(char in[], uint8_t len) { 374 | in[len] = '\0'; 375 | uint8_t existingLen = strlen(in); 376 | uint8_t diff = len - existingLen; 377 | 378 | uint8_t i = len - 1; 379 | 380 | do { 381 | in[i] = i >= diff ? in[i - diff] : ' '; 382 | } while (i-- > 0); 383 | return in; 384 | } 385 | 386 | // Button helpers 387 | 388 | bool debounce() { 389 | unsigned long now = mainLoopTicks; 390 | 391 | if (now - debounceLastPressed >= DEBOUNCE_TICKS) { 392 | debounceLastPressed = now; 393 | return false; 394 | } 395 | 396 | return true; 397 | } 398 | -------------------------------------------------------------------------------- /modules/clock-generator/hardware.txt: -------------------------------------------------------------------------------- 1 | hardware choices: 2 | 3 | Clock divider: 4 | CD40103 seems like a good counter for dividing the clock up for extra outputs 5 | 6 | ISP connecter: 7 | http://uk.rs-online.com/web/p/pcb-headers/8323705/ -------------------------------------------------------------------------------- /modules/clock-generator/kicad/LB303AK.pretty/LB303AK.kicad_mod: -------------------------------------------------------------------------------- 1 | (module LB303AK (layer F.Cu) (tedit 5A1069E9) 2 | (fp_text reference REF** (at 0.5 7.75) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value LB303AK (at 0.5 -7.5) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_circle (center 7 2) (end 7 2.25) (layer F.SilkS) (width 0.15)) 9 | (fp_circle (center 2 2) (end 2 2.25) (layer F.SilkS) (width 0.15)) 10 | (fp_circle (center -3 2) (end -3 2.25) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start 6.25 0) (end 6.25 2.25) (layer F.SilkS) (width 0.15)) 12 | (fp_line (start 6.25 2.25) (end 3.75 2.25) (layer F.SilkS) (width 0.15)) 13 | (fp_line (start 3.75 2.25) (end 3.75 0) (layer F.SilkS) (width 0.15)) 14 | (fp_line (start 3.75 -2.25) (end 6.25 -2.25) (layer F.SilkS) (width 0.15)) 15 | (fp_line (start 6.25 -2.25) (end 6.25 0) (layer F.SilkS) (width 0.15)) 16 | (fp_line (start 6.25 0) (end 3.75 0) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 3.75 0) (end 3.75 -2.25) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start -1.25 0) (end -1.25 -2.25) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start 1.25 0) (end -1.25 0) (layer F.SilkS) (width 0.15)) 20 | (fp_line (start 1.25 -2.25) (end 1.25 0) (layer F.SilkS) (width 0.15)) 21 | (fp_line (start -1.25 -2.25) (end 1.25 -2.25) (layer F.SilkS) (width 0.15)) 22 | (fp_line (start -1.25 2.25) (end -1.25 0) (layer F.SilkS) (width 0.15)) 23 | (fp_line (start 1.25 2.25) (end -1.25 2.25) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 1.25 0) (end 1.25 2.25) (layer F.SilkS) (width 0.15)) 25 | (fp_line (start -3.75 0) (end -3.75 2.25) (layer F.SilkS) (width 0.15)) 26 | (fp_line (start -3.75 2.25) (end -6.25 2.25) (layer F.SilkS) (width 0.15)) 27 | (fp_line (start -6.25 2.25) (end -6.25 0) (layer F.SilkS) (width 0.15)) 28 | (fp_line (start -6.25 -2.25) (end -3.75 -2.25) (layer F.SilkS) (width 0.15)) 29 | (fp_line (start -3.75 -2.25) (end -3.75 0) (layer F.SilkS) (width 0.15)) 30 | (fp_line (start -3.75 0) (end -6.25 0) (layer F.SilkS) (width 0.15)) 31 | (fp_line (start -6.25 0) (end -6.25 -2.25) (layer F.SilkS) (width 0.15)) 32 | (fp_line (start -10.9 6.65) (end 11.1 6.65) (layer F.SilkS) (width 0.15)) 33 | (fp_line (start 11.1 6.65) (end 11.1 -6.35) (layer F.SilkS) (width 0.15)) 34 | (fp_line (start -10.9 -6.35) (end 11.1 -6.35) (layer F.SilkS) (width 0.15)) 35 | (fp_line (start -10.9 6.65) (end -10.9 -6.35) (layer F.SilkS) (width 0.15)) 36 | (pad 1 thru_hole rect (at -6.25 4.75) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) 37 | (pad 2 thru_hole circle (at -3.71 4.75) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) 38 | (pad 3 thru_hole circle (at -1.17 4.75) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) 39 | (pad 4 thru_hole circle (at 1.37 4.75) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) 40 | (pad 5 thru_hole circle (at 3.91 4.75) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) 41 | (pad 6 thru_hole circle (at 6.45 4.75) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) 42 | (pad 7 thru_hole circle (at 6.45 -4.45) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) 43 | (pad 8 thru_hole circle (at 3.91 -4.45) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) 44 | (pad 9 thru_hole circle (at 1.37 -4.45) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) 45 | (pad 10 thru_hole circle (at -1.17 -4.45) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) 46 | (pad 11 thru_hole circle (at -3.71 -4.45) (size 1.524 1.524) (drill 0.762) (layers *.Cu *.Mask)) 47 | ) 48 | -------------------------------------------------------------------------------- /modules/clock-generator/kicad/MAX7221.pretty/MAX7221-DIP.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Housings_DIP:DIP-22_W7.62mm_LongPads (layer F.Cu) (tedit 59C78D6B) 2 | (descr "22-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils), LongPads") 3 | (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil LongPads") 4 | (fp_text reference REF** (at 3.81 -2.33) (layer F.SilkS) 5 | (effects (font (size 1 1) (thickness 0.15))) 6 | ) 7 | (fp_text value DIP-22_W7.62mm_LongPads (at 3.81 27.73) (layer F.Fab) 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | ) 10 | (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) 11 | (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) 12 | (fp_line (start 6.985 -1.27) (end 6.985 26.67) (layer F.Fab) (width 0.1)) 13 | (fp_line (start 6.985 26.67) (end 0.635 26.67) (layer F.Fab) (width 0.1)) 14 | (fp_line (start 0.635 26.67) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) 15 | (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) 16 | (fp_line (start 2.81 -1.33) (end 1.56 -1.33) (layer F.SilkS) (width 0.12)) 17 | (fp_line (start 1.56 -1.33) (end 1.56 26.73) (layer F.SilkS) (width 0.12)) 18 | (fp_line (start 1.56 26.73) (end 6.06 26.73) (layer F.SilkS) (width 0.12)) 19 | (fp_line (start 6.06 26.73) (end 6.06 -1.33) (layer F.SilkS) (width 0.12)) 20 | (fp_line (start 6.06 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) 21 | (fp_line (start -1.45 -1.55) (end -1.45 26.95) (layer F.CrtYd) (width 0.05)) 22 | (fp_line (start -1.45 26.95) (end 9.1 26.95) (layer F.CrtYd) (width 0.05)) 23 | (fp_line (start 9.1 26.95) (end 9.1 -1.55) (layer F.CrtYd) (width 0.05)) 24 | (fp_line (start 9.1 -1.55) (end -1.45 -1.55) (layer F.CrtYd) (width 0.05)) 25 | (fp_text user %R (at 3.81 12.7) (layer F.Fab) 26 | (effects (font (size 1 1) (thickness 0.15))) 27 | ) 28 | (pad 1 thru_hole rect (at 0 0) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 29 | (pad 12 thru_hole oval (at 7.62 25.4) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 30 | (pad 2 thru_hole oval (at 0 2.54) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 31 | (pad 13 thru_hole oval (at 7.62 22.86) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 32 | (pad 3 thru_hole oval (at 0 5.08) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 33 | (pad 14 thru_hole oval (at 7.62 20.32) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 34 | (pad 4 thru_hole oval (at 0 7.62) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 35 | (pad 15 thru_hole oval (at 7.62 17.78) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 36 | (pad 5 thru_hole oval (at 0 10.16) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 37 | (pad 16 thru_hole oval (at 7.62 15.24) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 38 | (pad 6 thru_hole oval (at 0 12.7) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 39 | (pad 17 thru_hole oval (at 7.62 12.7) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 40 | (pad 7 thru_hole oval (at 0 15.24) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 41 | (pad 18 thru_hole oval (at 7.62 10.16) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 42 | (pad 8 thru_hole oval (at 0 17.78) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 43 | (pad 19 thru_hole oval (at 7.62 7.62) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 44 | (pad 9 thru_hole oval (at 0 20.32) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 45 | (pad 20 thru_hole oval (at 7.62 5.08) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 46 | (pad 10 thru_hole oval (at 0 22.86) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 47 | (pad 21 thru_hole oval (at 7.62 2.54) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 48 | (pad 11 thru_hole oval (at 0 25.4) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 49 | (pad 22 thru_hole oval (at 7.62 0) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 50 | (model ${KISYS3DMOD}/Housings_DIP.3dshapes/DIP-22_W7.62mm.wrl 51 | (at (xyz 0 0 0)) 52 | (scale (xyz 1 1 1)) 53 | (rotate (xyz 0 0 0)) 54 | ) 55 | ) 56 | -------------------------------------------------------------------------------- /modules/clock-generator/kicad/MAX7221.pretty/MAX7221-SOIC.kicad_mod: -------------------------------------------------------------------------------- 1 | (module MAX7221-SOIC (layer F.Cu) (tedit 5A103A72) 2 | (descr "24-Lead Plastic Small Outline (SO) - Wide, 7.50 mm Body [SOIC] (see Microchip Packaging Specification 00000049BS.pdf)") 3 | (tags "SOIC 1.27") 4 | (attr smd) 5 | (fp_text reference REF** (at 0 -8.8) (layer F.SilkS) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_text value MAX7221 (at 0 8.8) (layer F.Fab) 9 | (effects (font (size 1 1) (thickness 0.15))) 10 | ) 11 | (fp_text user %R (at 0 0) (layer F.Fab) 12 | (effects (font (size 1 1) (thickness 0.15))) 13 | ) 14 | (fp_line (start -2.75 -7.7) (end 3.75 -7.7) (layer F.Fab) (width 0.15)) 15 | (fp_line (start 3.75 -7.7) (end 3.75 7.7) (layer F.Fab) (width 0.15)) 16 | (fp_line (start 3.75 7.7) (end -3.75 7.7) (layer F.Fab) (width 0.15)) 17 | (fp_line (start -3.75 7.7) (end -3.75 -6.7) (layer F.Fab) (width 0.15)) 18 | (fp_line (start -3.75 -6.7) (end -2.75 -7.7) (layer F.Fab) (width 0.15)) 19 | (fp_line (start -5.95 -8.05) (end -5.95 8.05) (layer F.CrtYd) (width 0.05)) 20 | (fp_line (start 5.95 -8.05) (end 5.95 8.05) (layer F.CrtYd) (width 0.05)) 21 | (fp_line (start -5.95 -8.05) (end 5.95 -8.05) (layer F.CrtYd) (width 0.05)) 22 | (fp_line (start -5.95 8.05) (end 5.95 8.05) (layer F.CrtYd) (width 0.05)) 23 | (fp_line (start -3.875 -7.875) (end -3.875 -7.6) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 3.875 -7.875) (end 3.875 -7.51) (layer F.SilkS) (width 0.15)) 25 | (fp_line (start 3.875 7.875) (end 3.875 7.51) (layer F.SilkS) (width 0.15)) 26 | (fp_line (start -3.875 7.875) (end -3.875 7.51) (layer F.SilkS) (width 0.15)) 27 | (fp_line (start -3.875 -7.875) (end 3.875 -7.875) (layer F.SilkS) (width 0.15)) 28 | (fp_line (start -3.875 7.875) (end 3.875 7.875) (layer F.SilkS) (width 0.15)) 29 | (fp_line (start -3.875 -7.6) (end -5.7 -7.6) (layer F.SilkS) (width 0.15)) 30 | (pad 1 smd rect (at -4.7 -6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 31 | (pad 2 smd rect (at -4.7 -5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 32 | (pad 3 smd rect (at -4.7 -4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 33 | (pad 4 smd rect (at -4.7 -3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 34 | (pad 5 smd rect (at -4.7 -1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 35 | (pad 6 smd rect (at -4.7 -0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 36 | (pad 7 smd rect (at -4.7 0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 37 | (pad 8 smd rect (at -4.7 1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 38 | (pad 9 smd rect (at -4.7 3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 39 | (pad 10 smd rect (at -4.7 4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 40 | (pad 11 smd rect (at -4.7 5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 41 | (pad 12 smd rect (at -4.7 6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 42 | (pad 13 smd rect (at 4.7 6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 43 | (pad 14 smd rect (at 4.7 5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 44 | (pad 15 smd rect (at 4.7 4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 45 | (pad 16 smd rect (at 4.7 3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 46 | (pad 17 smd rect (at 4.7 1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 47 | (pad 18 smd rect (at 4.7 0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 48 | (pad 19 smd rect (at 4.7 -0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 49 | (pad 20 smd rect (at 4.7 -1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 50 | (pad 21 smd rect (at 4.7 -3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 51 | (pad 22 smd rect (at 4.7 -4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 52 | (pad 23 smd rect (at 4.7 -5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 53 | (pad 24 smd rect (at 4.7 -6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 54 | (model ${KISYS3DMOD}/Housings_SOIC.3dshapes/SOIC-24W_7.5x15.4mm_Pitch1.27mm.wrl 55 | (at (xyz 0 0 0)) 56 | (scale (xyz 1 1 1)) 57 | (rotate (xyz 0 0 0)) 58 | ) 59 | ) 60 | -------------------------------------------------------------------------------- /modules/clock-generator/kicad/clock-generator-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # 4024 5 | # 6 | DEF 4024 U 0 30 Y Y 1 F N 7 | F0 "U" 200 450 50 H V C CNN 8 | F1 "4024" 400 -400 50 H V C CNN 9 | F2 "" 0 0 60 H I C CNN 10 | F3 "" 0 0 60 H I C CNN 11 | DRAW 12 | S -250 400 250 -300 0 0 0 N 13 | X VSS 7 0 -300 0 U 50 50 0 0 W 14 | X VDD 14 0 400 0 D 50 50 0 0 W 15 | X ~CLK 1 -550 200 300 R 50 50 1 1 I IC 16 | X MR 2 -550 50 300 R 50 50 1 1 I 17 | X Q6 3 550 -250 300 L 50 50 1 1 O 18 | X Q5 4 550 -150 300 L 50 50 1 1 O 19 | X Q4 5 550 -50 300 L 50 50 1 1 O 20 | X Q3 6 550 50 300 L 50 50 1 1 O 21 | X Q2 9 550 150 300 L 50 50 1 1 O 22 | X Q1 11 550 250 300 L 50 50 1 1 O 23 | X Q0 12 550 350 300 L 50 50 1 1 O 24 | ENDDRAW 25 | ENDDEF 26 | # 27 | # ATTINY24-SS 28 | # 29 | DEF ATTINY24-SS IC 0 40 Y Y 1 F N 30 | F0 "IC" -850 750 50 H V C CNN 31 | F1 "ATTINY24-SS" 700 -750 50 H V C CNN 32 | F2 "SO14" 0 -200 50 H V C CIN 33 | F3 "" 0 0 50 H V C CNN 34 | ALIAS ATTINY44-S ATTINY84-S 35 | DRAW 36 | S 900 700 -900 -700 0 1 10 f 37 | X VCC 1 -1050 600 150 R 40 40 1 1 W 38 | X (PCINT8/CLKI/XTAL1)PB0 2 1050 -300 150 L 40 40 1 1 B 39 | X (PCINT9/XTAL2)PB1 3 1050 -400 150 L 40 40 1 1 B 40 | X (PCINT11/dW/~RESET~)PB3 4 1050 -600 150 L 40 40 1 1 B 41 | X (PCINT10/CKOUT/OC0A/INT0)PB2 5 1050 -500 150 L 40 40 1 1 B 42 | X (PCINT7/ICP/OC0B/ADC7)PA7 6 1050 -100 150 L 40 40 1 1 B 43 | X (PCINT6/SDA/DI/MOSI/OC1A/ADC6)PA6 7 1050 0 150 L 40 40 1 1 B 44 | X (PCINT5/DO/MISO/OC1B/ADC5)PA5 8 1050 100 150 L 40 40 1 1 B 45 | X (PCINT4/USCK/SCL/T1/ADC4)PA4 9 1050 200 150 L 40 40 1 1 B 46 | X (PCINT3/T0/ADC3)PA3 10 1050 300 150 L 40 40 1 1 B 47 | X (PCINT2/AIN1/ADC2)PA2 11 1050 400 150 L 40 40 1 1 B 48 | X (PCINT1/AIN0/ADC1)PA1 12 1050 500 150 L 40 40 1 1 B 49 | X (PCINT0/AREF/ADC0)PA0 13 1050 600 150 L 40 40 1 1 B 50 | X GND 14 -1050 -600 150 R 40 40 1 1 W 51 | ENDDRAW 52 | ENDDEF 53 | # 54 | # C 55 | # 56 | DEF C C 0 10 N Y 1 F N 57 | F0 "C" 25 100 50 H V L CNN 58 | F1 "C" 25 -100 50 H V L CNN 59 | F2 "" 38 -150 50 H V C CNN 60 | F3 "" 0 0 50 H V C CNN 61 | $FPLIST 62 | C? 63 | C_????_* 64 | C_???? 65 | SMD*_c 66 | Capacitor* 67 | $ENDFPLIST 68 | DRAW 69 | P 2 0 1 20 -80 -30 80 -30 N 70 | P 2 0 1 20 -80 30 80 30 N 71 | X ~ 1 0 150 110 D 40 40 1 1 P 72 | X ~ 2 0 -150 110 U 40 40 1 1 P 73 | ENDDRAW 74 | ENDDEF 75 | # 76 | # CONN_01X03 77 | # 78 | DEF CONN_01X03 P 0 40 Y N 1 F N 79 | F0 "P" 0 200 50 H V C CNN 80 | F1 "CONN_01X03" 100 0 50 V V C CNN 81 | F2 "" 0 0 50 H V C CNN 82 | F3 "" 0 0 50 H V C CNN 83 | $FPLIST 84 | Pin_Header_Straight_1X03 85 | Pin_Header_Angled_1X03 86 | Socket_Strip_Straight_1X03 87 | Socket_Strip_Angled_1X03 88 | $ENDFPLIST 89 | DRAW 90 | S -50 -95 10 -105 0 1 0 N 91 | S -50 5 10 -5 0 1 0 N 92 | S -50 105 10 95 0 1 0 N 93 | S -50 150 50 -150 0 1 0 N 94 | X P1 1 -200 100 150 R 50 50 1 1 P 95 | X P2 2 -200 0 150 R 50 50 1 1 P 96 | X P3 3 -200 -100 150 R 50 50 1 1 P 97 | ENDDRAW 98 | ENDDEF 99 | # 100 | # CONN_01X09 101 | # 102 | DEF CONN_01X09 P 0 40 Y N 1 F N 103 | F0 "P" 0 500 50 H V C CNN 104 | F1 "CONN_01X09" 100 0 50 V V C CNN 105 | F2 "" 0 0 50 H V C CNN 106 | F3 "" 0 0 50 H V C CNN 107 | $FPLIST 108 | Pin_Header_Straight_1X09 109 | Pin_Header_Angled_1X09 110 | Socket_Strip_Straight_1X09 111 | Socket_Strip_Angled_1X09 112 | $ENDFPLIST 113 | DRAW 114 | S -50 -395 10 -405 0 1 0 N 115 | S -50 -295 10 -305 0 1 0 N 116 | S -50 -195 10 -205 0 1 0 N 117 | S -50 -95 10 -105 0 1 0 N 118 | S -50 5 10 -5 0 1 0 N 119 | S -50 105 10 95 0 1 0 N 120 | S -50 205 10 195 0 1 0 N 121 | S -50 305 10 295 0 1 0 N 122 | S -50 405 10 395 0 1 0 N 123 | S -50 450 50 -450 0 1 0 N 124 | X P1 1 -200 400 150 R 50 50 1 1 P 125 | X P2 2 -200 300 150 R 50 50 1 1 P 126 | X P3 3 -200 200 150 R 50 50 1 1 P 127 | X P4 4 -200 100 150 R 50 50 1 1 P 128 | X P5 5 -200 0 150 R 50 50 1 1 P 129 | X P6 6 -200 -100 150 R 50 50 1 1 P 130 | X P7 7 -200 -200 150 R 50 50 1 1 P 131 | X P8 8 -200 -300 150 R 50 50 1 1 P 132 | X P9 9 -200 -400 150 R 50 50 1 1 P 133 | ENDDRAW 134 | ENDDEF 135 | # 136 | # CONN_02X03 137 | # 138 | DEF CONN_02X03 P 0 1 Y N 1 F N 139 | F0 "P" 0 200 50 H V C CNN 140 | F1 "CONN_02X03" 0 -200 50 H V C CNN 141 | F2 "" 0 -1200 50 H V C CNN 142 | F3 "" 0 -1200 50 H V C CNN 143 | $FPLIST 144 | Pin_Header_Straight_2X03 145 | Pin_Header_Angled_2X03 146 | Socket_Strip_Straight_2X03 147 | Socket_Strip_Angled_2X03 148 | $ENDFPLIST 149 | DRAW 150 | S -100 -95 -50 -105 0 1 0 N 151 | S -100 5 -50 -5 0 1 0 N 152 | S -100 105 -50 95 0 1 0 N 153 | S -100 150 100 -150 0 1 0 N 154 | S 50 -95 100 -105 0 1 0 N 155 | S 50 5 100 -5 0 1 0 N 156 | S 50 105 100 95 0 1 0 N 157 | X P1 1 -250 100 150 R 50 50 1 1 P 158 | X P2 2 250 100 150 L 50 50 1 1 P 159 | X P3 3 -250 0 150 R 50 50 1 1 P 160 | X P4 4 250 0 150 L 50 50 1 1 P 161 | X P5 5 -250 -100 150 R 50 50 1 1 P 162 | X P6 6 250 -100 150 L 50 50 1 1 P 163 | ENDDRAW 164 | ENDDEF 165 | # 166 | # CP 167 | # 168 | DEF CP C 0 10 N Y 1 F N 169 | F0 "C" 25 100 50 H V L CNN 170 | F1 "CP" 25 -100 50 H V L CNN 171 | F2 "" 38 -150 50 H V C CNN 172 | F3 "" 0 0 50 H V C CNN 173 | $FPLIST 174 | CP* 175 | C_Axial* 176 | C_Radial* 177 | TantalC* 178 | C*elec 179 | c_elec* 180 | SMD*_Pol 181 | $ENDFPLIST 182 | DRAW 183 | S -90 20 -90 40 0 1 0 N 184 | S -90 20 90 20 0 1 0 N 185 | S 90 -20 -90 -40 0 1 0 F 186 | S 90 40 -90 40 0 1 0 N 187 | S 90 40 90 20 0 1 0 N 188 | P 2 0 1 0 -70 90 -30 90 N 189 | P 2 0 1 0 -50 110 -50 70 N 190 | X ~ 1 0 150 110 D 40 40 1 1 P 191 | X ~ 2 0 -150 110 U 40 40 1 1 P 192 | ENDDRAW 193 | ENDDEF 194 | # 195 | # Crystal 196 | # 197 | DEF Crystal Y 0 40 N N 1 F N 198 | F0 "Y" 0 150 50 H V C CNN 199 | F1 "Crystal" 0 -150 50 H V C CNN 200 | F2 "" 0 0 50 H V C CNN 201 | F3 "" 0 0 50 H V C CNN 202 | $FPLIST 203 | Crystal_* 204 | $ENDFPLIST 205 | DRAW 206 | S -50 100 50 -100 0 1 12 N 207 | P 2 0 1 12 -100 -50 -100 50 N 208 | P 2 0 1 12 100 -50 100 50 N 209 | X 1 1 -150 0 50 R 40 40 1 1 P 210 | X 2 2 150 0 50 L 40 40 1 1 P 211 | ENDDRAW 212 | ENDDEF 213 | # 214 | # GND 215 | # 216 | DEF GND #PWR 0 0 Y Y 1 F P 217 | F0 "#PWR" 0 -250 50 H I C CNN 218 | F1 "GND" 0 -150 50 H V C CNN 219 | F2 "" 0 0 50 H V C CNN 220 | F3 "" 0 0 50 H V C CNN 221 | DRAW 222 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 223 | X GND 1 0 0 0 D 50 50 1 1 W N 224 | ENDDRAW 225 | ENDDEF 226 | # 227 | # LB303AK 228 | # 229 | DEF LB303AK LD 0 40 Y Y 1 F N 230 | F0 "LD" -375 425 60 H V C CNN 231 | F1 "LB303AK" 425 25 60 V V C CNN 232 | F2 "" 125 250 60 H I C CNN 233 | F3 "" 125 250 60 H I C CNN 234 | DRAW 235 | C -200 -50 25 0 1 5 N 236 | C 50 -50 25 0 1 5 N 237 | C 300 -50 25 0 1 5 N 238 | S -450 -300 350 350 0 1 0 N 239 | S -400 -75 -250 175 0 1 5 N 240 | S -150 -75 0 175 0 1 5 N 241 | S 100 -75 250 175 0 1 5 N 242 | P 2 0 1 5 -250 50 -400 50 N 243 | P 2 0 1 5 0 50 -150 50 N 244 | P 2 0 1 5 100 50 250 50 N 245 | X SEG_C 1 -200 -500 200 U 50 50 1 1 P 246 | X DIG_1 2 100 550 200 D 50 50 1 1 P 247 | X SEG_D 3 -100 -500 200 U 50 50 1 1 P 248 | X DIG_2 4 0 550 200 D 50 50 1 1 P 249 | X DIG_3 5 -100 550 200 D 50 50 1 1 P 250 | X SEG_DP 6 300 -500 200 U 50 50 1 1 P 251 | X SEG_B 7 -300 -500 200 U 50 50 1 1 P 252 | X SEG_F 8 100 -500 200 U 50 50 1 1 P 253 | X SEG_A 9 -400 -500 200 U 50 50 1 1 P 254 | X SEG_E 10 0 -500 200 U 50 50 1 1 P 255 | X SEG_G 11 200 -500 200 U 50 50 1 1 P 256 | ENDDRAW 257 | ENDDEF 258 | # 259 | # LED 260 | # 261 | DEF LED D 0 40 Y N 1 F N 262 | F0 "D" 0 100 50 H V C CNN 263 | F1 "LED" 0 -100 50 H V C CNN 264 | F2 "" 0 0 50 H V C CNN 265 | F3 "" 0 0 50 H V C CNN 266 | $FPLIST 267 | LED-* 268 | LED_* 269 | $ENDFPLIST 270 | DRAW 271 | P 2 0 1 0 -50 50 -50 -50 N 272 | P 3 0 1 0 -80 -25 -125 -65 -120 -40 N 273 | P 3 0 1 0 -65 -40 -110 -80 -105 -55 N 274 | P 3 0 1 0 50 50 -50 0 50 -50 F 275 | X K 1 -200 0 150 R 40 40 1 1 P 276 | X A 2 200 0 150 L 40 40 1 1 P 277 | ENDDRAW 278 | ENDDEF 279 | # 280 | # MAX7221 281 | # 282 | DEF MAX7221 U 0 40 Y Y 1 F N 283 | F0 "U" -575 -450 60 H V C CNN 284 | F1 "MAX7221" 0 1350 60 H V C CNN 285 | F2 "" 0 425 60 H I C CNN 286 | F3 "" 0 425 60 H I C CNN 287 | DRAW 288 | S -300 1050 300 -1150 0 1 0 N 289 | X DIN 1 -500 150 200 R 50 50 1 1 I 290 | X DIG_0 2 500 850 200 L 50 50 1 1 P 291 | X DIG_4 3 500 450 200 L 50 50 1 1 P 292 | X GND 4 0 -1350 200 U 50 50 1 1 W 293 | X DIG_6 5 500 250 200 L 50 50 1 1 P 294 | X DIG_2 6 500 650 200 L 50 50 1 1 P 295 | X DIG_3 7 500 550 200 L 50 50 1 1 P 296 | X DIG_7 8 500 150 200 L 50 50 1 1 P 297 | X GND 9 -500 -950 200 R 50 50 1 1 W 298 | X DIG_5 10 500 350 200 L 50 50 1 1 P 299 | X SEG_C 20 500 -250 200 L 50 50 1 1 P 300 | X DIG_1 11 500 750 200 L 50 50 1 1 P 301 | X SEG_E 21 500 -450 200 L 50 50 1 1 P 302 | X CS 12 -500 50 200 R 50 50 1 1 I I 303 | X SEG_DP 22 500 -750 200 L 50 50 1 1 P 304 | X CLK 13 -500 -50 200 R 50 50 1 1 I C 305 | X SEG_D 23 500 -350 200 L 50 50 1 1 P 306 | X SEG_A 14 500 -50 200 L 50 50 1 1 P 307 | X D_OUT 24 500 -950 200 L 50 50 1 1 O 308 | X SEG_F 15 500 -550 200 L 50 50 1 1 P 309 | X SEG_B 16 500 -150 200 L 50 50 1 1 P 310 | X SEG_G 17 500 -650 200 L 50 50 1 1 P 311 | X ISET 18 -500 850 200 R 50 50 1 1 P 312 | X V+ 19 0 1250 200 D 50 50 1 1 W 313 | ENDDRAW 314 | ENDDEF 315 | # 316 | # PWR_FLAG 317 | # 318 | DEF PWR_FLAG #FLG 0 0 N N 1 F P 319 | F0 "#FLG" 0 95 50 H I C CNN 320 | F1 "PWR_FLAG" 0 180 50 H V C CNN 321 | F2 "" 0 0 50 H V C CNN 322 | F3 "" 0 0 50 H V C CNN 323 | DRAW 324 | X pwr 1 0 0 0 U 50 50 0 0 w 325 | P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N 326 | ENDDRAW 327 | ENDDEF 328 | # 329 | # Q_NPN_BEC 330 | # 331 | DEF Q_NPN_BEC Q 0 0 Y N 1 F N 332 | F0 "Q" 300 50 50 H V R CNN 333 | F1 "Q_NPN_BEC" 600 -50 50 H V R CNN 334 | F2 "" 200 100 50 H V C CNN 335 | F3 "" 0 0 50 H V C CNN 336 | DRAW 337 | C 50 0 111 0 1 10 N 338 | P 2 0 1 0 25 25 100 100 N 339 | P 3 0 1 0 25 -25 100 -100 100 -100 N 340 | P 3 0 1 20 25 75 25 -75 25 -75 N 341 | P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F 342 | X B 1 -200 0 225 R 50 50 1 1 I 343 | X E 2 100 -200 100 U 50 50 1 1 P 344 | X C 3 100 200 100 D 50 50 1 1 P 345 | ENDDRAW 346 | ENDDEF 347 | # 348 | # R 349 | # 350 | DEF R R 0 0 N Y 1 F N 351 | F0 "R" 80 0 50 V V C CNN 352 | F1 "R" 0 0 50 V V C CNN 353 | F2 "" -70 0 50 V V C CNN 354 | F3 "" 0 0 50 H V C CNN 355 | $FPLIST 356 | R_* 357 | Resistor_* 358 | $ENDFPLIST 359 | DRAW 360 | S -40 -100 40 100 0 1 10 N 361 | X ~ 1 0 150 50 D 50 50 1 1 P 362 | X ~ 2 0 -150 50 U 50 50 1 1 P 363 | ENDDRAW 364 | ENDDEF 365 | # 366 | # SW_PUSH 367 | # 368 | DEF SW_PUSH SW 0 40 N N 1 F N 369 | F0 "SW" 150 110 50 H V C CNN 370 | F1 "SW_PUSH" 0 -80 50 H V C CNN 371 | F2 "" 0 0 50 H V C CNN 372 | F3 "" 0 0 50 H V C CNN 373 | DRAW 374 | S -170 50 170 60 0 1 0 N 375 | P 4 0 1 0 -40 60 -30 90 30 90 40 60 N 376 | X 1 1 -300 0 200 R 50 50 0 1 P I 377 | X 2 2 300 0 200 L 50 50 0 1 P I 378 | ENDDRAW 379 | ENDDEF 380 | # 381 | # VCC 382 | # 383 | DEF VCC #PWR 0 0 Y Y 1 F P 384 | F0 "#PWR" 0 -150 50 H I C CNN 385 | F1 "VCC" 0 150 50 H V C CNN 386 | F2 "" 0 0 50 H V C CNN 387 | F3 "" 0 0 50 H V C CNN 388 | DRAW 389 | C 0 75 25 0 1 0 N 390 | P 2 0 1 0 0 0 0 50 N 391 | X VCC 1 0 0 0 U 50 50 1 1 W N 392 | ENDDRAW 393 | ENDDEF 394 | # 395 | #End Library 396 | -------------------------------------------------------------------------------- /modules/clock-generator/kicad/clock-generator-rescue.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # MAX7221-RESCUE-clock-generator 5 | # 6 | DEF MAX7221-RESCUE-clock-generator U 0 40 Y Y 1 F N 7 | F0 "U" -575 -150 60 H V C CNN 8 | F1 "MAX7221-RESCUE-clock-generator" 0 1600 60 H V C CNN 9 | F2 "" 0 675 60 H I C CNN 10 | F3 "" 0 675 60 H I C CNN 11 | DRAW 12 | S -275 1300 275 -1275 0 1 0 N 13 | X DIN 1 -475 250 200 R 50 50 1 1 I 14 | X DIG_0 2 475 1125 200 L 50 50 1 1 P 15 | X DIG_4 3 475 625 200 L 50 50 1 1 P 16 | X GND 4 0 -1475 200 U 50 50 1 1 W 17 | X DIG_6 5 475 375 200 L 50 50 1 1 P 18 | X DIG_2 6 475 875 200 L 50 50 1 1 P 19 | X DIG_3 7 475 750 200 L 50 50 1 1 P 20 | X DIG_7 8 475 250 200 L 50 50 1 1 P 21 | X GND 9 -475 -1100 200 R 50 50 1 1 W 22 | X DIG_5 10 475 500 200 L 50 50 1 1 P 23 | X SEG_C 20 475 -250 200 L 50 50 1 1 P 24 | X DIG_1 11 475 1000 200 L 50 50 1 1 P 25 | X SEG_E 21 475 -500 200 L 50 50 1 1 P 26 | X CS 12 -475 125 200 R 50 50 1 1 I I 27 | X SEG_DP 22 475 -875 200 L 50 50 1 1 P 28 | X CLK 13 -475 0 200 R 50 50 1 1 I C 29 | X SEG_D 23 475 -375 200 L 50 50 1 1 P 30 | X SEG_A 14 475 0 200 L 50 50 1 1 P 31 | X D_OUT 24 475 -1100 200 L 50 50 1 1 O 32 | X SEG_F 15 475 -625 200 L 50 50 1 1 P 33 | X SEG_B 16 475 -125 200 L 50 50 1 1 P 34 | X SEG_G 17 475 -750 200 L 50 50 1 1 P 35 | X ISET 18 -475 1125 200 R 50 50 1 1 W 36 | X V+ 19 0 1500 200 D 50 50 1 1 W 37 | ENDDRAW 38 | ENDDEF 39 | # 40 | #End Library 41 | -------------------------------------------------------------------------------- /modules/clock-generator/kicad/clock-generator.pro: -------------------------------------------------------------------------------- 1 | update=18/11/2017 14:47:17 2 | version=1 3 | last_client=kicad 4 | [pcbnew] 5 | version=1 6 | LastNetListRead= 7 | UseCmpFile=1 8 | PadDrill=0.600000000000 9 | PadDrillOvalY=0.600000000000 10 | PadSizeH=1.500000000000 11 | PadSizeV=1.500000000000 12 | PcbTextSizeV=1.500000000000 13 | PcbTextSizeH=1.500000000000 14 | PcbTextThickness=0.300000000000 15 | ModuleTextSizeV=1.000000000000 16 | ModuleTextSizeH=1.000000000000 17 | ModuleTextSizeThickness=0.150000000000 18 | SolderMaskClearance=0.000000000000 19 | SolderMaskMinWidth=0.000000000000 20 | DrawSegmentWidth=0.200000000000 21 | BoardOutlineThickness=0.100000000000 22 | ModuleOutlineThickness=0.150000000000 23 | [cvpcb] 24 | version=1 25 | NetIExt=net 26 | [general] 27 | version=1 28 | [eeschema] 29 | version=1 30 | LibDir= 31 | [eeschema/libraries] 32 | LibName1=clock-generator-rescue 33 | LibName2=power 34 | LibName3=device 35 | LibName4=transistors 36 | LibName5=conn 37 | LibName6=linear 38 | LibName7=regul 39 | LibName8=74xx 40 | LibName9=cmos4000 41 | LibName10=adc-dac 42 | LibName11=memory 43 | LibName12=xilinx 44 | LibName13=microcontrollers 45 | LibName14=dsp 46 | LibName15=microchip 47 | LibName16=analog_switches 48 | LibName17=motorola 49 | LibName18=texas 50 | LibName19=intel 51 | LibName20=audio 52 | LibName21=interface 53 | LibName22=digital-audio 54 | LibName23=philips 55 | LibName24=display 56 | LibName25=cypress 57 | LibName26=siliconi 58 | LibName27=opto 59 | LibName28=atmel 60 | LibName29=contrib 61 | LibName30=valves 62 | LibName31=max7221 63 | LibName32=Logic_CMOS_IEEE 64 | LibName33=lb303ak 65 | -------------------------------------------------------------------------------- /modules/clock-generator/kicad/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name MAX7221)(type KiCad)(uri "$(KIPRJMOD)\\MAX7221.pretty")(options "")(descr "")) 3 | (lib (name LB303AK)(type KiCad)(uri "$(KIPRJMOD)\\LB303AK.pretty")(options "")(descr "")) 4 | ) 5 | -------------------------------------------------------------------------------- /modules/clock-generator/kicad/lb303ak.dcm: -------------------------------------------------------------------------------- 1 | EESchema-DOCLIB Version 2.0 2 | # 3 | #End Doc Library 4 | -------------------------------------------------------------------------------- /modules/clock-generator/kicad/lb303ak.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # LB303AK 5 | # 6 | DEF LB303AK LD 0 40 Y Y 1 F N 7 | F0 "LD" -375 425 60 H V C CNN 8 | F1 "LB303AK" 425 25 60 V V C CNN 9 | F2 "" 125 250 60 H I C CNN 10 | F3 "" 125 250 60 H I C CNN 11 | DRAW 12 | C -200 -50 25 0 1 5 N 13 | C 50 -50 25 0 1 5 N 14 | C 300 -50 25 0 1 5 N 15 | S -450 -300 350 350 0 1 0 N 16 | S -400 -75 -250 175 0 1 5 N 17 | S -150 -75 0 175 0 1 5 N 18 | S 100 -75 250 175 0 1 5 N 19 | P 2 0 1 5 -250 50 -400 50 N 20 | P 2 0 1 5 0 50 -150 50 N 21 | P 2 0 1 5 100 50 250 50 N 22 | X SEG_C 1 -200 -500 200 U 50 50 1 1 P 23 | X DIG_1 2 100 550 200 D 50 50 1 1 P 24 | X SEG_D 3 -100 -500 200 U 50 50 1 1 P 25 | X DIG_2 4 0 550 200 D 50 50 1 1 P 26 | X DIG_3 5 -100 550 200 D 50 50 1 1 P 27 | X SEG_DP 6 300 -500 200 U 50 50 1 1 P 28 | X SEG_B 7 -300 -500 200 U 50 50 1 1 P 29 | X SEG_F 8 100 -500 200 U 50 50 1 1 P 30 | X SEG_A 9 -400 -500 200 U 50 50 1 1 P 31 | X SEG_E 10 0 -500 200 U 50 50 1 1 P 32 | X SEG_G 11 200 -500 200 U 50 50 1 1 P 33 | ENDDRAW 34 | ENDDEF 35 | # 36 | #End Library 37 | -------------------------------------------------------------------------------- /modules/clock-generator/kicad/max7221.dcm: -------------------------------------------------------------------------------- 1 | EESchema-DOCLIB Version 2.0 2 | # 3 | #End Doc Library 4 | -------------------------------------------------------------------------------- /modules/clock-generator/kicad/max7221.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # MAX7221 5 | # 6 | DEF MAX7221 U 0 40 Y Y 1 F N 7 | F0 "U" -575 -450 60 H V C CNN 8 | F1 "MAX7221" 0 1350 60 H V C CNN 9 | F2 "" 0 425 60 H I C CNN 10 | F3 "" 0 425 60 H I C CNN 11 | DRAW 12 | S -300 1050 300 -1150 0 1 0 N 13 | X DIN 1 -500 150 200 R 50 50 1 1 I 14 | X DIG_0 2 500 850 200 L 50 50 1 1 P 15 | X DIG_4 3 500 450 200 L 50 50 1 1 P 16 | X GND 4 0 -1350 200 U 50 50 1 1 W 17 | X DIG_6 5 500 250 200 L 50 50 1 1 P 18 | X DIG_2 6 500 650 200 L 50 50 1 1 P 19 | X DIG_3 7 500 550 200 L 50 50 1 1 P 20 | X DIG_7 8 500 150 200 L 50 50 1 1 P 21 | X GND 9 -500 -950 200 R 50 50 1 1 W 22 | X DIG_5 10 500 350 200 L 50 50 1 1 P 23 | X SEG_C 20 500 -250 200 L 50 50 1 1 P 24 | X DIG_1 11 500 750 200 L 50 50 1 1 P 25 | X SEG_E 21 500 -450 200 L 50 50 1 1 P 26 | X CS 12 -500 50 200 R 50 50 1 1 I I 27 | X SEG_DP 22 500 -750 200 L 50 50 1 1 P 28 | X CLK 13 -500 -50 200 R 50 50 1 1 I C 29 | X SEG_D 23 500 -350 200 L 50 50 1 1 P 30 | X SEG_A 14 500 -50 200 L 50 50 1 1 P 31 | X D_OUT 24 500 -950 200 L 50 50 1 1 O 32 | X SEG_F 15 500 -550 200 L 50 50 1 1 P 33 | X SEG_B 16 500 -150 200 L 50 50 1 1 P 34 | X SEG_G 17 500 -650 200 L 50 50 1 1 P 35 | X ISET 18 -500 850 200 R 50 50 1 1 P 36 | X V+ 19 0 1250 200 D 50 50 1 1 W 37 | ENDDRAW 38 | ENDDEF 39 | # 40 | #End Library 41 | -------------------------------------------------------------------------------- /modules/clock-generator/modeling/arrow-button-cap/arrow-button-cap-scale-x10.skp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/clock-generator/modeling/arrow-button-cap/arrow-button-cap-scale-x10.skp -------------------------------------------------------------------------------- /modules/clock-generator/panel/clock-generator-panel-laser.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/clock-generator/panel/clock-generator-panel-laser.pdf -------------------------------------------------------------------------------- /modules/distortion/kicad/Panelization.pretty/mouse-bite-1mm-slot.kicad_mod: -------------------------------------------------------------------------------- 1 | (module mouse-bite-1mm-slot (layer F.Cu) (tedit 551DB9EF) 2 | (fp_text reference mouse-bite-1mm-slot (at 0 -2) (layer F.SilkS) hide 3 | (effects (font (size 1 1) (thickness 0.2))) 4 | ) 5 | (fp_text value VAL** (at 0 2.1) (layer F.SilkS) hide 6 | (effects (font (size 1 1) (thickness 0.2))) 7 | ) 8 | (fp_circle (center 1.5 0) (end 1.56 0) (layer Dwgs.User) (width 0.05)) 9 | (fp_circle (center -1.5 0) (end -1.44 0) (layer Dwgs.User) (width 0.05)) 10 | (fp_arc (start 1.5 0) (end 1.5 0.5) (angle 180) (layer F.SilkS) (width 0.1)) 11 | (fp_arc (start -1.5 0) (end -1.5 -0.5) (angle 180) (layer F.SilkS) (width 0.1)) 12 | (fp_line (start -1.5 0) (end -1.5 0) (layer Eco1.User) (width 1)) 13 | (fp_line (start 1.5 0) (end 1.5 0) (layer Eco1.User) (width 1)) 14 | (pad "" np_thru_hole circle (at 0.35 -1) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 15 | (pad "" np_thru_hole circle (at -1.15 0.75) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 16 | (pad "" np_thru_hole circle (at 1.15 0.75) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 17 | (pad "" np_thru_hole circle (at -1.15 -0.75) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 18 | (pad "" np_thru_hole circle (at -0.35 -1) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 19 | (pad "" np_thru_hole circle (at 1.15 -0.75) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 20 | (pad "" np_thru_hole circle (at -0.35 1) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 21 | (pad "" np_thru_hole circle (at 0.35 1) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 22 | ) 23 | -------------------------------------------------------------------------------- /modules/distortion/kicad/Panelization.pretty/mouse-bite-2.54mm-slot.kicad_mod: -------------------------------------------------------------------------------- 1 | (module mouse-bite-2.54mm-slot (layer F.Cu) (tedit 551DB929) 2 | (fp_text reference mouse-bite-2.54mm-slot (at 0 -2) (layer F.SilkS) hide 3 | (effects (font (size 1 1) (thickness 0.2))) 4 | ) 5 | (fp_text value VAL** (at 0 2.1) (layer F.SilkS) hide 6 | (effects (font (size 1 1) (thickness 0.2))) 7 | ) 8 | (fp_line (start -2.33 0) (end -2.33 0) (layer Eco1.User) (width 2.54)) 9 | (fp_line (start 2.33 0) (end 2.33 0) (layer Eco1.User) (width 2.54)) 10 | (fp_arc (start 2.33 0) (end 2.33 1.27) (angle 180) (layer F.SilkS) (width 0.1)) 11 | (fp_circle (center 2.33 0) (end 2.33 -0.06) (layer Dwgs.User) (width 0.05)) 12 | (fp_circle (center -2.33 0) (end -2.27 0) (layer Dwgs.User) (width 0.05)) 13 | (fp_arc (start -2.33 0) (end -2.33 1.27) (angle -180) (layer F.SilkS) (width 0.1)) 14 | (pad "" np_thru_hole circle (at 0 -1.1) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 15 | (pad "" np_thru_hole circle (at 0 1.1) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 16 | (pad "" np_thru_hole circle (at 0.8 -1.1) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 17 | (pad "" np_thru_hole circle (at -0.8 -1.1) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 18 | (pad "" np_thru_hole circle (at -0.8 1.1) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 19 | (pad "" np_thru_hole circle (at 0.8 1.1) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 20 | ) 21 | -------------------------------------------------------------------------------- /modules/distortion/kicad/Panelization.pretty/mouse-bite-2mm-slot.kicad_mod: -------------------------------------------------------------------------------- 1 | (module mouse-bite-2mm-slot (layer F.Cu) (tedit 551DB891) 2 | (fp_text reference mouse-bite-2mm-slot (at 0 -2) (layer F.SilkS) hide 3 | (effects (font (size 1 1) (thickness 0.2))) 4 | ) 5 | (fp_text value VAL** (at 0 2.1) (layer F.SilkS) hide 6 | (effects (font (size 1 1) (thickness 0.2))) 7 | ) 8 | (fp_arc (start -2 0) (end -2 -1) (angle 180) (layer F.SilkS) (width 0.1)) 9 | (fp_arc (start 2 0) (end 2 1) (angle 180) (layer F.SilkS) (width 0.1)) 10 | (fp_circle (center 2 0) (end 2.06 0) (layer Dwgs.User) (width 0.05)) 11 | (fp_circle (center -2 0) (end -2 -0.06) (layer Dwgs.User) (width 0.05)) 12 | (fp_line (start -2 0) (end -2 0) (layer Eco1.User) (width 2)) 13 | (fp_line (start 2 0) (end 2 0) (layer Eco1.User) (width 2)) 14 | (pad "" np_thru_hole circle (at 0 -0.75) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 15 | (pad "" np_thru_hole circle (at 0 0.75) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 16 | (pad "" np_thru_hole circle (at 0.75 -0.75) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 17 | (pad "" np_thru_hole circle (at -0.75 -0.75) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 18 | (pad "" np_thru_hole circle (at -0.75 0.75) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 19 | (pad "" np_thru_hole circle (at 0.75 0.75) (size 0.5 0.5) (drill 0.5) (layers *.Cu *.Mask)) 20 | ) 21 | -------------------------------------------------------------------------------- /modules/distortion/kicad/distortion-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # 4016 5 | # 6 | DEF 4016 U 0 0 Y Y 4 F N 7 | F0 "U" 200 -149 50 H V C CNN 8 | F1 "4016" 200 150 50 H V C CNN 9 | F2 "" 0 0 60 H I C CNN 10 | F3 "" 0 0 60 H I C CNN 11 | ALIAS 4066 12 | DRAW 13 | P 3 0 1 0 -100 -150 0 -50 0 -50 N 14 | P 4 0 1 0 -100 0 100 100 100 -100 -100 0 N 15 | P 4 0 1 0 -100 100 100 0 -100 -100 -100 100 N 16 | X V- 7 0 -250 200 U 30 30 0 1 W 17 | X V+ 14 0 250 200 D 30 30 0 1 W 18 | X I/O 1 -300 0 200 R 40 40 1 1 P 19 | X O/I 2 300 0 200 L 40 40 1 1 P 20 | X ON 13 -300 -150 200 R 40 40 1 1 I 21 | X O/I 3 300 0 200 L 40 40 2 1 P 22 | X I/O 4 -300 0 200 R 40 40 2 1 P 23 | X ON 5 -300 -150 200 R 40 40 2 1 I 24 | X ON 6 -300 -150 200 R 40 40 3 1 I 25 | X I/O 8 -300 0 200 R 40 40 3 1 P 26 | X O/I 9 300 0 200 L 40 40 3 1 P 27 | X O/I 10 300 0 200 L 40 40 4 1 P 28 | X I/O 11 -300 0 200 R 40 40 4 1 P 29 | X ON 12 -300 -150 200 R 40 40 4 1 I 30 | ENDDRAW 31 | ENDDEF 32 | # 33 | # C 34 | # 35 | DEF C C 0 10 N Y 1 F N 36 | F0 "C" 25 100 50 H V L CNN 37 | F1 "C" 25 -100 50 H V L CNN 38 | F2 "" 38 -150 50 H V C CNN 39 | F3 "" 0 0 50 H V C CNN 40 | $FPLIST 41 | C? 42 | C_????_* 43 | C_???? 44 | SMD*_c 45 | Capacitor* 46 | $ENDFPLIST 47 | DRAW 48 | P 2 0 1 20 -80 -30 80 -30 N 49 | P 2 0 1 20 -80 30 80 30 N 50 | X ~ 1 0 150 110 D 40 40 1 1 P 51 | X ~ 2 0 -150 110 U 40 40 1 1 P 52 | ENDDRAW 53 | ENDDEF 54 | # 55 | # CONN_01X03 56 | # 57 | DEF CONN_01X03 P 0 40 Y N 1 F N 58 | F0 "P" 0 200 50 H V C CNN 59 | F1 "CONN_01X03" 100 0 50 V V C CNN 60 | F2 "" 0 0 50 H V C CNN 61 | F3 "" 0 0 50 H V C CNN 62 | $FPLIST 63 | Pin_Header_Straight_1X03 64 | Pin_Header_Angled_1X03 65 | Socket_Strip_Straight_1X03 66 | Socket_Strip_Angled_1X03 67 | $ENDFPLIST 68 | DRAW 69 | S -50 -95 10 -105 0 1 0 N 70 | S -50 5 10 -5 0 1 0 N 71 | S -50 105 10 95 0 1 0 N 72 | S -50 150 50 -150 0 1 0 N 73 | X P1 1 -200 100 150 R 50 50 1 1 P 74 | X P2 2 -200 0 150 R 50 50 1 1 P 75 | X P3 3 -200 -100 150 R 50 50 1 1 P 76 | ENDDRAW 77 | ENDDEF 78 | # 79 | # CP 80 | # 81 | DEF CP C 0 10 N Y 1 F N 82 | F0 "C" 25 100 50 H V L CNN 83 | F1 "CP" 25 -100 50 H V L CNN 84 | F2 "" 38 -150 50 H V C CNN 85 | F3 "" 0 0 50 H V C CNN 86 | $FPLIST 87 | CP* 88 | C_Axial* 89 | C_Radial* 90 | TantalC* 91 | C*elec 92 | c_elec* 93 | SMD*_Pol 94 | $ENDFPLIST 95 | DRAW 96 | S -90 20 -90 40 0 1 0 N 97 | S -90 20 90 20 0 1 0 N 98 | S 90 -20 -90 -40 0 1 0 F 99 | S 90 40 -90 40 0 1 0 N 100 | S 90 40 90 20 0 1 0 N 101 | P 2 0 1 0 -70 90 -30 90 N 102 | P 2 0 1 0 -50 110 -50 70 N 103 | X ~ 1 0 150 110 D 40 40 1 1 P 104 | X ~ 2 0 -150 110 U 40 40 1 1 P 105 | ENDDRAW 106 | ENDDEF 107 | # 108 | # D 109 | # 110 | DEF D D 0 40 N N 1 F N 111 | F0 "D" 0 100 50 H V C CNN 112 | F1 "D" 0 -100 50 H V C CNN 113 | F2 "" 0 0 50 H V C CNN 114 | F3 "" 0 0 50 H V C CNN 115 | $FPLIST 116 | Diode_* 117 | D-Pak_TO252AA 118 | *SingleDiode 119 | *_Diode_* 120 | *SingleDiode* 121 | $ENDFPLIST 122 | DRAW 123 | P 2 0 1 6 -50 50 -50 -50 N 124 | P 3 0 1 0 50 50 -50 0 50 -50 F 125 | X K 1 -150 0 100 R 50 50 1 1 P 126 | X A 2 150 0 100 L 50 50 1 1 P 127 | ENDDRAW 128 | ENDDEF 129 | # 130 | # GND 131 | # 132 | DEF GND #PWR 0 0 Y Y 1 F P 133 | F0 "#PWR" 0 -250 50 H I C CNN 134 | F1 "GND" 0 -150 50 H V C CNN 135 | F2 "" 0 0 50 H V C CNN 136 | F3 "" 0 0 50 H V C CNN 137 | DRAW 138 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 139 | X GND 1 0 0 0 D 50 50 1 1 W N 140 | ENDDRAW 141 | ENDDEF 142 | # 143 | # GNDA 144 | # 145 | DEF GNDA #PWR 0 0 Y Y 1 F P 146 | F0 "#PWR" 0 -250 50 H I C CNN 147 | F1 "GNDA" 0 -150 50 H V C CNN 148 | F2 "" 0 0 50 H V C CNN 149 | F3 "" 0 0 50 H V C CNN 150 | DRAW 151 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 152 | X GNDA 1 0 0 0 D 50 50 1 1 W N 153 | ENDDRAW 154 | ENDDEF 155 | # 156 | # LM2902N 157 | # 158 | DEF LM2902N U 0 20 Y Y 4 F N 159 | F0 "U" 0 200 50 H V L CNN 160 | F1 "LM2902N" 0 -200 50 H V L CNN 161 | F2 "" -50 100 50 H V C CNN 162 | F3 "" 50 200 50 H V C CNN 163 | ALIAS LM324 TLC274 TL074 LM324N LM324AN MCP6004 164 | $FPLIST 165 | SOIC* 166 | DIP* 167 | TSSOP* 168 | SSOP* 169 | MSOP* 170 | $ENDFPLIST 171 | DRAW 172 | P 4 0 1 10 -200 200 200 0 -200 -200 -200 200 f 173 | X V+ 4 -100 300 150 D 50 50 0 1 W 174 | X V- 11 -100 -300 150 U 50 50 0 1 W 175 | X ~ 1 300 0 100 L 50 50 1 1 O 176 | X - 2 -300 -100 100 R 50 50 1 1 I 177 | X + 3 -300 100 100 R 50 50 1 1 I 178 | X + 5 -300 100 100 R 50 50 2 1 I 179 | X - 6 -300 -100 100 R 50 50 2 1 I 180 | X ~ 7 300 0 100 L 50 50 2 1 O 181 | X ~ 8 300 0 100 L 50 50 3 1 O 182 | X - 9 -300 -100 100 R 50 50 3 1 I 183 | X + 10 -300 100 100 R 50 50 3 1 I 184 | X + 12 -300 100 100 R 50 50 4 1 I 185 | X - 13 -300 -100 100 R 50 50 4 1 I 186 | X ~ 14 300 0 100 L 50 50 4 1 O 187 | ENDDRAW 188 | ENDDEF 189 | # 190 | # LM358 191 | # 192 | DEF LM358 U 0 20 Y Y 2 F N 193 | F0 "U" 0 200 50 H V L CNN 194 | F1 "LM358" 0 -200 50 H V L CNN 195 | F2 "" 0 0 50 H V C CNN 196 | F3 "" 0 0 50 H V C CNN 197 | ALIAS LMC6062 LMC6082 LM358N TL072 TL082 NE5532 4558 198 | $FPLIST 199 | SOIC* 200 | DIP* 201 | TSSOP* 202 | TO-99* 203 | DSBGA* 204 | $ENDFPLIST 205 | DRAW 206 | P 4 0 1 10 -200 200 200 0 -200 -200 -200 200 f 207 | X V- 4 -100 -300 150 U 50 50 0 1 W 208 | X V+ 8 -100 300 150 D 50 50 0 1 W 209 | X ~ 1 300 0 100 L 50 50 1 1 O 210 | X - 2 -300 -100 100 R 50 50 1 1 I 211 | X + 3 -300 100 100 R 50 50 1 1 I 212 | X + 5 -300 100 100 R 50 50 2 1 I 213 | X - 6 -300 -100 100 R 50 50 2 1 I 214 | X ~ 7 300 0 100 L 50 50 2 1 O 215 | ENDDRAW 216 | ENDDEF 217 | # 218 | # POT 219 | # 220 | DEF POT RV 0 40 Y N 1 F N 221 | F0 "RV" 0 -80 50 H V C CNN 222 | F1 "POT" 0 0 50 H V C CNN 223 | F2 "" 0 0 50 H V C CNN 224 | F3 "" 0 0 50 H V C CNN 225 | DRAW 226 | S -100 40 100 -40 0 1 0 N 227 | P 3 0 1 0 0 40 -20 60 20 60 F 228 | X 1 1 -150 0 50 R 40 40 1 1 P 229 | X 2 2 0 150 100 D 40 40 1 1 P 230 | X 3 3 150 0 50 L 40 40 1 1 P 231 | ENDDRAW 232 | ENDDEF 233 | # 234 | # PWR_FLAG 235 | # 236 | DEF PWR_FLAG #FLG 0 0 N N 1 F P 237 | F0 "#FLG" 0 95 50 H I C CNN 238 | F1 "PWR_FLAG" 0 180 50 H V C CNN 239 | F2 "" 0 0 50 H V C CNN 240 | F3 "" 0 0 50 H V C CNN 241 | DRAW 242 | X pwr 1 0 0 0 U 50 50 0 0 w 243 | P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N 244 | ENDDRAW 245 | ENDDEF 246 | # 247 | # R 248 | # 249 | DEF R R 0 0 N Y 1 F N 250 | F0 "R" 80 0 50 V V C CNN 251 | F1 "R" 0 0 50 V V C CNN 252 | F2 "" -70 0 50 V V C CNN 253 | F3 "" 0 0 50 H V C CNN 254 | $FPLIST 255 | R_* 256 | Resistor_* 257 | $ENDFPLIST 258 | DRAW 259 | S -40 -100 40 100 0 1 10 N 260 | X ~ 1 0 150 50 D 50 50 1 1 P 261 | X ~ 2 0 -150 50 U 50 50 1 1 P 262 | ENDDRAW 263 | ENDDEF 264 | # 265 | # VCC 266 | # 267 | DEF VCC #PWR 0 0 Y Y 1 F P 268 | F0 "#PWR" 0 -150 50 H I C CNN 269 | F1 "VCC" 0 150 50 H V C CNN 270 | F2 "" 0 0 50 H V C CNN 271 | F3 "" 0 0 50 H V C CNN 272 | DRAW 273 | C 0 75 25 0 1 0 N 274 | P 2 0 1 0 0 0 0 50 N 275 | X VCC 1 0 0 0 U 50 50 1 1 W N 276 | ENDDRAW 277 | ENDDEF 278 | # 279 | # VEE 280 | # 281 | DEF VEE #PWR 0 0 Y Y 1 F P 282 | F0 "#PWR" 0 -150 50 H I C CNN 283 | F1 "VEE" 0 150 50 H V C CNN 284 | F2 "" 0 0 50 H V C CNN 285 | F3 "" 0 0 50 H V C CNN 286 | DRAW 287 | C 0 75 25 0 1 0 N 288 | P 2 0 1 0 0 0 0 50 N 289 | X VEE 1 0 0 0 U 50 50 1 1 W N 290 | ENDDRAW 291 | ENDDEF 292 | # 293 | #End Library 294 | -------------------------------------------------------------------------------- /modules/distortion/kicad/distortion.pro: -------------------------------------------------------------------------------- 1 | update=30/07/2017 12:54:21 2 | version=1 3 | last_client=kicad 4 | [pcbnew] 5 | version=1 6 | LastNetListRead= 7 | UseCmpFile=1 8 | PadDrill=0.600000000000 9 | PadDrillOvalY=0.600000000000 10 | PadSizeH=1.500000000000 11 | PadSizeV=1.500000000000 12 | PcbTextSizeV=1.500000000000 13 | PcbTextSizeH=1.500000000000 14 | PcbTextThickness=0.300000000000 15 | ModuleTextSizeV=1.000000000000 16 | ModuleTextSizeH=1.000000000000 17 | ModuleTextSizeThickness=0.150000000000 18 | SolderMaskClearance=0.000000000000 19 | SolderMaskMinWidth=0.000000000000 20 | DrawSegmentWidth=0.200000000000 21 | BoardOutlineThickness=0.100000000000 22 | ModuleOutlineThickness=0.150000000000 23 | [cvpcb] 24 | version=1 25 | NetIExt=net 26 | [eeschema] 27 | version=1 28 | LibDir= 29 | [eeschema/libraries] 30 | LibName1=power 31 | LibName2=device 32 | LibName3=transistors 33 | LibName4=conn 34 | LibName5=linear 35 | LibName6=regul 36 | LibName7=74xx 37 | LibName8=cmos4000 38 | LibName9=adc-dac 39 | LibName10=memory 40 | LibName11=xilinx 41 | LibName12=microcontrollers 42 | LibName13=dsp 43 | LibName14=microchip 44 | LibName15=analog_switches 45 | LibName16=motorola 46 | LibName17=texas 47 | LibName18=intel 48 | LibName19=audio 49 | LibName20=interface 50 | LibName21=digital-audio 51 | LibName22=philips 52 | LibName23=display 53 | LibName24=cypress 54 | LibName25=siliconi 55 | LibName26=opto 56 | LibName27=atmel 57 | LibName28=contrib 58 | LibName29=valves 59 | [general] 60 | version=1 61 | -------------------------------------------------------------------------------- /modules/distortion/kicad/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name Panelization)(type KiCad)(uri "$(KIPRJMOD)\\Panelization.pretty")(options "")(descr "")) 3 | ) 4 | -------------------------------------------------------------------------------- /modules/distortion/pcb mount pot info.txt: -------------------------------------------------------------------------------- 1 | Bourns PTV09 Series 2 | 3 | PTV09A-4020U-B104 4 | 5 | 4 = Horizontal / Rear mount, bushingless 6 | 0 = No detent 7 | 20 = 20mm shaft length 8 | U = Insulated knurled 40 teeth with indicating dent 9 | B = linear 10 | 104 = 100k resistance 11 | 12 | -------------------------------------------------------------------------------- /modules/distortion/simulation/distortion-falstad-zgadnijs-mod.txt: -------------------------------------------------------------------------------- 1 | $ 1 0.000005 21.593987231061412 86 5 43 2 | v -320 176 -320 288 0 1 20 3 0 0 0.5 3 | g -320 288 -320 304 0 4 | 207 -320 176 -320 128 0 Signal input 5 | v -320 -64 -320 -128 0 0 40 2 0 0 0.5 6 | g -320 -64 -320 -32 0 7 | w -320 -128 -272 -128 0 8 | 207 -320 -128 -320 -176 0 Threshold 9 | a -192 -112 -96 -112 0 4.7 -4.7 1000000 0.000019999600008002717 0 10 | g -192 -96 -192 -80 0 11 | r -272 -128 -192 -128 0 100000 12 | r -192 -176 -96 -176 0 100000 13 | w -192 -176 -192 -128 0 14 | w -96 -176 -96 -112 0 15 | w -272 32 -272 -128 0 16 | a -224 16 -128 16 0 4.7 -4.7 1000000 1.999980000199998 2 17 | w -272 32 -224 32 0 18 | w -224 0 -224 -32 0 19 | w -224 -32 -128 -32 0 20 | w -128 -32 -128 16 0 21 | w -128 16 -128 112 0 22 | a -80 128 16 128 0 4.7 -4.7 1000000 1.999980000199998 -0.1074194140038287 23 | w -80 144 -80 176 0 24 | w -80 208 -80 176 0 25 | w -80 112 -128 112 0 26 | w -80 240 -96 240 0 27 | d 16 128 96 128 1 0.805904783 28 | d 16 224 96 224 1 0.805904783 29 | r -80 176 -208 176 0 100000 30 | w -208 176 -320 176 0 31 | r 384 336 288 336 0 50000 32 | r 288 304 384 304 0 50000 33 | w 528 304 528 336 0 34 | w 288 336 -208 336 0 35 | w -208 336 -208 176 0 36 | r 96 224 96 288 0 100000 37 | g 96 288 96 304 0 38 | w 96 128 144 128 0 39 | r 144 128 144 192 0 100000 40 | g 144 192 144 208 0 41 | 159 288 208 288 272 0 20 10000000000 42 | 159 224 240 224 304 0 20 10000000000 43 | w 272 240 256 240 0 44 | w 256 240 256 128 0 45 | w 256 128 144 128 0 46 | w 208 272 192 272 0 47 | w 192 272 192 224 0 48 | w 192 224 96 224 0 49 | a -80 224 16 224 0 4.7 -4.7 1000000 -0.1074194140038287 -1.9999600008002716 50 | 207 704 352 768 352 0 Output 51 | a 528 352 624 352 1 4.7 -4.7 1000000 -0.10741608488215389 -0.1074171590430027 52 | w 528 368 528 416 0 53 | w 528 416 624 416 0 54 | w 624 416 624 352 0 55 | w 288 -144 288 208 0 56 | w -16 64 -208 64 0 57 | w -208 64 -208 176 0 58 | w 288 -208 288 -144 0 59 | a 176 -208 272 -208 0 4.7 -4.7 1000000 1.0216261580513872 1.9999800001999983 60 | r 176 -272 272 -272 0 300000 61 | w 176 -272 176 -224 0 62 | w 272 -272 272 -208 0 63 | r 80 -224 176 -224 0 50000 64 | w 272 -208 288 -208 0 65 | w 160 -192 176 -192 0 66 | w -48 -32 -128 -32 0 67 | w -16 -224 80 -224 0 68 | w -48 -32 -48 -192 0 69 | w -48 -192 80 -192 0 70 | r 80 -192 160 -192 0 100000 71 | w -96 -112 -96 -48 0 72 | w -96 -48 -96 240 0 73 | w 224 240 224 48 0 74 | w 224 -64 224 48 0 75 | r 128 -112 224 -112 0 300000 76 | w 224 -112 224 -64 0 77 | w 128 -112 128 -80 0 78 | r 128 -80 64 -80 0 50000 79 | w 64 -80 -16 -80 0 80 | r 128 -48 64 -48 0 100000 81 | w -96 -48 64 -48 0 82 | w 288 272 288 304 0 83 | w 288 304 224 304 0 84 | a 128 -64 224 -64 0 4.7 -4.7 1000000 -1.3224581665355601 -1.999960000790881 85 | 174 448 288 448 352 0 100000 0.45050000000000007 Resistance 86 | w 528 304 464 304 0 87 | w 464 320 464 304 0 88 | w 448 288 384 288 0 89 | w 384 288 384 304 0 90 | w 448 352 384 352 0 91 | w 384 336 384 352 0 92 | 174 -16 -176 -16 -112 0 100000 0.42080000000000006 Resistance 93 | w -16 -176 -16 -224 0 94 | w -16 -112 -16 -80 0 95 | w -16 64 0 64 0 96 | w 0 -144 16 -144 0 97 | w 16 -144 16 64 0 98 | w 16 64 0 64 0 99 | 209 624 352 704 352 0 0.000001 -5.491579413430259e-13 1 100 | o 0 64 0 4098 5 0.00009765625 0 2 0 3 101 | o 48 64 0 4099 5 0.00009765625 1 2 48 3 102 | -------------------------------------------------------------------------------- /modules/distortion/simulation/distortion-falstad.txt: -------------------------------------------------------------------------------- 1 | $ 1 0.000005 21.593987231061412 86 5 43 2 | v -320 176 -320 288 0 1 20 3 0 0 0.5 3 | g -320 288 -320 304 0 4 | 207 -320 176 -320 128 0 Signal input 5 | v -320 -64 -320 -128 0 0 40 2 0 0 0.5 6 | g -320 -64 -320 -32 0 7 | w -320 -128 -272 -128 0 8 | 207 -320 -128 -320 -176 0 Threshold 9 | a -192 -112 -96 -112 0 4.7 -4.7 1000000 0.000019999600008002717 0 10 | g -192 -96 -192 -80 0 11 | r -272 -128 -192 -128 0 100000 12 | r -192 -176 -96 -176 0 100000 13 | w -192 -176 -192 -128 0 14 | w -96 -176 -96 -112 0 15 | w -272 32 -272 -128 0 16 | a -224 16 -128 16 0 4.7 -4.7 1000000 1.999980000199998 2 17 | w -272 32 -224 32 0 18 | w -224 0 -224 -32 0 19 | w -224 -32 -128 -32 0 20 | w -128 -32 -128 16 0 21 | w -128 16 -128 112 0 22 | a -80 128 16 128 0 4.7 -4.7 1000000 1.999980000199998 2.8364178309026045 23 | w -80 144 -80 176 0 24 | w -80 208 -80 176 0 25 | w -80 112 -128 112 0 26 | w -80 240 -96 240 0 27 | d 16 128 96 128 1 0.805904783 28 | d 16 224 96 224 1 0.805904783 29 | r -80 176 -208 176 0 100000 30 | w -208 176 -320 176 0 31 | r 384 336 288 336 0 100000 32 | r 288 304 384 304 0 100000 33 | w 384 304 384 336 0 34 | w 288 336 -208 336 0 35 | w -208 336 -208 176 0 36 | r 96 224 96 288 0 100000 37 | g 96 288 96 304 0 38 | w 96 128 144 128 0 39 | r 144 128 144 192 0 100000 40 | g 144 192 144 208 0 41 | 159 288 208 288 272 0 20 10000000000 42 | 159 224 240 224 304 0 20 10000000000 43 | w 272 240 256 240 0 44 | w 256 240 256 128 0 45 | w 256 128 144 128 0 46 | w 208 272 192 272 0 47 | w 192 272 192 224 0 48 | w 192 224 96 224 0 49 | a -80 224 16 224 0 4.7 -4.7 1000000 2.8364178309026045 -1.9999600008002716 50 | 207 480 352 544 352 0 Output 51 | a 384 352 480 352 1 4.7 -4.7 1000000 1.1637079843034115 1.1637196213832546 52 | w 384 368 384 416 0 53 | w 384 416 480 416 0 54 | w 480 416 480 352 0 55 | w 288 -144 288 208 0 56 | w -16 64 -208 64 0 57 | w -208 64 -208 176 0 58 | w 288 -208 288 -144 0 59 | a 176 -208 272 -208 0 4.7 -4.7 1000000 1.999985093331192 1.9999800001999983 60 | r 176 -272 272 -272 0 300000 61 | w 176 -272 176 -224 0 62 | w 272 -272 272 -208 0 63 | r 80 -224 176 -224 0 100000 64 | w 272 -208 288 -208 0 65 | w 160 -192 176 -192 0 66 | w -48 -32 -128 -32 0 67 | w -16 -80 -16 -224 0 68 | w -16 -224 80 -224 0 69 | w -48 -32 -48 -192 0 70 | w -48 -192 80 -192 0 71 | r 80 -192 160 -192 0 100000 72 | w -16 -80 -16 64 0 73 | w -96 -112 -96 -48 0 74 | w -96 -48 -96 240 0 75 | w 224 240 224 48 0 76 | w 224 -64 224 48 0 77 | r 128 -112 224 -112 0 300000 78 | w 224 -112 224 -64 0 79 | w 128 -112 128 -80 0 80 | r 128 -80 64 -80 0 100000 81 | w 64 -80 -16 -80 0 82 | r 128 -48 64 -48 0 100000 83 | w -96 -48 64 -48 0 84 | w 288 272 288 304 0 85 | w 288 304 224 304 0 86 | a 128 -64 224 -64 0 4.7 -4.7 1000000 0.9522395693530334 -1.9999600008056089 87 | o 0 64 0 4098 5 0.00009765625 0 2 0 3 88 | o 48 64 0 4099 5 0.00009765625 1 2 48 3 89 | -------------------------------------------------------------------------------- /modules/distortion/simulation/full-circuit-falstad.txt: -------------------------------------------------------------------------------- 1 | $ 1 0.000005 21.593987231061412 86 5 43 2 | v -192 224 -192 336 0 1 20 2.5 0 0 0.5 3 | g -192 336 -192 368 0 4 | 207 -192 224 -192 176 0 Signal input 5 | v -64 0 -64 -64 0 0 40 0 0 0 0.5 6 | g -64 0 -64 32 0 7 | w 16 -64 48 -64 0 8 | 207 16 -64 16 -112 0 Threshold 9 | a 176 -48 272 -48 0 4.7 -4.7 1000000 0.000021622248460673175 0 10 | g 176 -32 176 -16 0 11 | r 48 -64 176 -64 0 100000 12 | r 176 -112 272 -112 0 47000 13 | w 176 -112 176 -64 0 14 | w 272 -112 272 -48 0 15 | a 144 80 240 80 0 4.7 -4.7 1000000 -0.000021621816024364192 0 16 | w 144 64 144 32 0 17 | w 240 32 240 80 0 18 | w 240 80 240 176 0 19 | a 288 192 384 192 0 4.7 -4.7 1000000 2.1621816024364193 1.6603304911029673 20 | w 288 208 288 240 0 21 | w 288 272 288 240 0 22 | w 288 176 240 176 0 23 | w 288 304 272 304 0 24 | d 384 192 464 192 1 0.805904783 25 | d 384 288 464 288 1 0.805904783 26 | r 288 240 160 240 0 100000 27 | w 160 240 96 240 0 28 | r 752 400 656 400 0 47000 29 | r 656 368 752 368 0 47000 30 | w 896 368 896 400 0 31 | w 656 400 160 400 0 32 | w 160 400 160 240 0 33 | r 464 288 464 352 0 100000 34 | g 464 352 464 368 0 35 | w 464 192 512 192 0 36 | r 512 192 512 256 0 100000 37 | g 512 256 512 272 0 38 | 159 656 272 656 336 0 20 10000000000 39 | 159 592 304 592 368 0 20 10000000000 40 | w 640 304 624 304 0 41 | w 624 304 624 192 0 42 | w 624 192 512 192 0 43 | w 576 336 560 336 0 44 | w 560 336 560 288 0 45 | w 560 288 464 288 0 46 | a 288 288 384 288 0 4.7 -4.7 1000000 1.6603304911029673 -2.1622248460673177 47 | 207 1344 464 1408 464 0 Output 48 | a 896 416 992 416 1 3.7 -3.7 1000000 1.660264887641781 1.6602814902906573 49 | w 896 432 896 480 0 50 | w 896 480 992 480 0 51 | w 992 480 992 416 0 52 | w 656 -80 656 272 0 53 | w 352 128 160 128 0 54 | w 160 128 160 240 0 55 | w 656 -144 656 -80 0 56 | a 544 -144 640 -144 0 3.7 -3.7 1000000 2.1621503746790682 2.16218160243391 57 | r 544 -208 640 -208 0 180000 58 | w 544 -208 544 -160 0 59 | w 640 -208 640 -144 0 60 | r 448 -160 544 -160 0 47000 61 | w 640 -144 656 -144 0 62 | w 528 -128 544 -128 0 63 | w 320 32 240 32 0 64 | w 352 -160 448 -160 0 65 | w 320 32 320 -128 0 66 | w 320 -128 448 -128 0 67 | r 448 -128 528 -128 0 100000 68 | w 272 -48 272 16 0 69 | w 272 16 272 304 0 70 | w 592 304 592 112 0 71 | w 592 0 592 112 0 72 | r 496 -48 592 -48 0 180000 73 | w 592 -48 592 0 0 74 | w 496 -48 496 -16 0 75 | r 496 -16 432 -16 0 47000 76 | w 432 -16 352 -16 0 77 | r 496 16 432 16 0 100000 78 | w 272 16 432 16 0 79 | w 656 336 656 368 0 80 | w 656 368 592 368 0 81 | a 496 0 592 0 0 3.7 -3.7 1000000 -0.25377215427508265 -2.1622248460696567 82 | 174 816 352 816 416 0 100000 0.21290000000000003 Depth 83 | w 896 368 832 368 0 84 | w 832 384 832 368 0 85 | w 816 352 752 352 0 86 | w 752 352 752 368 0 87 | w 816 416 752 416 0 88 | w 752 400 752 416 0 89 | 174 352 -112 352 -48 0 100000 0.47030000000000005 Symmetry 90 | w 352 -112 352 -160 0 91 | w 352 -48 352 -16 0 92 | w 352 128 368 128 0 93 | w 368 -80 384 -80 0 94 | w 384 -80 384 128 0 95 | w 384 128 368 128 0 96 | 174 -64 -128 -32 -192 0 47000 0.7673000000000001 Threshold pot 97 | g -64 -128 -64 -112 0 98 | R -64 -192 -64 -224 0 0 40 5 0 0 0.5 99 | r 48 -160 176 -160 0 75000 100 | w -32 -160 48 -160 0 101 | w 176 -112 176 -160 0 102 | r 144 32 240 32 0 100000 103 | w 272 16 80 16 0 104 | w 80 16 80 32 0 105 | r 80 32 144 32 0 100000 106 | g 144 96 144 112 0 107 | 368 320 32 352 32 0 0 108 | 174 -16 -64 -16 16 0 100000 0.47030000000000005 Threshold Depth 109 | w 16 -64 16 -16 0 110 | w 16 -16 0 -16 0 111 | g -16 32 -16 48 0 112 | w -16 -64 -64 -64 0 113 | 174 -144 224 -144 320 0 100000 0.47030000000000005 Pre Gain 114 | w -192 224 -144 224 0 115 | w -144 320 -144 336 0 116 | w -144 336 -192 336 0 117 | r -128 272 -64 272 0 100000 118 | a -64 288 32 288 0 3.7 -3.7 1000000 -0.00001660330491107089 0 119 | g -64 304 -64 320 0 120 | r -64 224 32 224 0 330000 121 | w -64 224 -64 272 0 122 | w 32 224 32 288 0 123 | w 32 224 96 224 0 124 | w 96 224 96 240 0 125 | 174 1072 480 1088 416 0 100000 0.32180000000000003 Post gain 126 | g 1072 480 1072 512 0 127 | w 992 416 1072 416 0 128 | r 1088 448 1152 448 0 100000 129 | a 1152 464 1248 464 0 3.7 -3.7 1000000 0.000014471938356809895 0 130 | r 1152 384 1248 384 0 330000 131 | w 1152 384 1152 448 0 132 | w 1248 384 1248 464 0 133 | g 1152 480 1152 512 0 134 | c 1248 464 1296 464 0 0.000001 -6.155076448521868e-13 135 | r 1296 464 1344 464 0 1000 136 | o 0 64 0 4098 5 0.00009765625 0 2 0 3 137 | o 45 64 0 4099 5 0.00009765625 1 2 45 3 138 | -------------------------------------------------------------------------------- /modules/distortion/simulation/pregain-falstad.txt: -------------------------------------------------------------------------------- 1 | $ 1 0.000005 10.20027730826997 50 5 43 2 | 174 64 176 96 240 0 1000 0.5 Resistance 3 | g 64 240 64 256 0 4 | r 96 208 144 208 0 100000 5 | r 144 176 224 176 0 470000 6 | w 144 176 144 208 0 7 | w 224 176 224 224 0 8 | g 144 240 144 256 0 9 | a 144 224 224 224 0 4.7 -4.7 1000000 0 0 10 | w 64 176 64 144 0 11 | v 16 256 16 176 0 1 40 1 0 0 0.5 12 | w 16 176 64 176 0 13 | g 16 256 16 272 0 14 | 207 64 144 64 112 0 Vin 15 | 207 224 224 256 224 0 Vout 16 | -------------------------------------------------------------------------------- /modules/inverter/kicad/inverter-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # CONN_01X02 5 | # 6 | DEF CONN_01X02 P 0 40 Y N 1 F N 7 | F0 "P" 0 150 50 H V C CNN 8 | F1 "CONN_01X02" 100 0 50 V V C CNN 9 | F2 "" 0 0 50 H V C CNN 10 | F3 "" 0 0 50 H V C CNN 11 | $FPLIST 12 | Pin_Header_Straight_1X02 13 | Pin_Header_Angled_1X02 14 | Socket_Strip_Straight_1X02 15 | Socket_Strip_Angled_1X02 16 | $ENDFPLIST 17 | DRAW 18 | S -50 -45 10 -55 0 1 0 N 19 | S -50 55 10 45 0 1 0 N 20 | S -50 100 50 -100 0 1 0 N 21 | X P1 1 -200 50 150 R 50 50 1 1 P 22 | X P2 2 -200 -50 150 R 50 50 1 1 P 23 | ENDDRAW 24 | ENDDEF 25 | # 26 | # CONN_01X03 27 | # 28 | DEF CONN_01X03 P 0 40 Y N 1 F N 29 | F0 "P" 0 200 50 H V C CNN 30 | F1 "CONN_01X03" 100 0 50 V V C CNN 31 | F2 "" 0 0 50 H V C CNN 32 | F3 "" 0 0 50 H V C CNN 33 | $FPLIST 34 | Pin_Header_Straight_1X03 35 | Pin_Header_Angled_1X03 36 | Socket_Strip_Straight_1X03 37 | Socket_Strip_Angled_1X03 38 | $ENDFPLIST 39 | DRAW 40 | S -50 -95 10 -105 0 1 0 N 41 | S -50 5 10 -5 0 1 0 N 42 | S -50 105 10 95 0 1 0 N 43 | S -50 150 50 -150 0 1 0 N 44 | X P1 1 -200 100 150 R 50 50 1 1 P 45 | X P2 2 -200 0 150 R 50 50 1 1 P 46 | X P3 3 -200 -100 150 R 50 50 1 1 P 47 | ENDDRAW 48 | ENDDEF 49 | # 50 | # CP 51 | # 52 | DEF CP C 0 10 N Y 1 F N 53 | F0 "C" 25 100 50 H V L CNN 54 | F1 "CP" 25 -100 50 H V L CNN 55 | F2 "" 38 -150 50 H V C CNN 56 | F3 "" 0 0 50 H V C CNN 57 | $FPLIST 58 | CP* 59 | C_Axial* 60 | C_Radial* 61 | TantalC* 62 | C*elec 63 | c_elec* 64 | SMD*_Pol 65 | $ENDFPLIST 66 | DRAW 67 | S -90 20 -90 40 0 1 0 N 68 | S -90 20 90 20 0 1 0 N 69 | S 90 -20 -90 -40 0 1 0 F 70 | S 90 40 -90 40 0 1 0 N 71 | S 90 40 90 20 0 1 0 N 72 | P 2 0 1 0 -70 90 -30 90 N 73 | P 2 0 1 0 -50 110 -50 70 N 74 | X ~ 1 0 150 110 D 40 40 1 1 P 75 | X ~ 2 0 -150 110 U 40 40 1 1 P 76 | ENDDRAW 77 | ENDDEF 78 | # 79 | # GND 80 | # 81 | DEF GND #PWR 0 0 Y Y 1 F P 82 | F0 "#PWR" 0 -250 50 H I C CNN 83 | F1 "GND" 0 -150 50 H V C CNN 84 | F2 "" 0 0 50 H V C CNN 85 | F3 "" 0 0 50 H V C CNN 86 | DRAW 87 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 88 | X GND 1 0 0 0 D 50 50 1 1 W N 89 | ENDDRAW 90 | ENDDEF 91 | # 92 | # LM2902N 93 | # 94 | DEF LM2902N U 0 20 Y Y 4 F N 95 | F0 "U" 0 200 50 H V L CNN 96 | F1 "LM2902N" 0 -200 50 H V L CNN 97 | F2 "" -50 100 50 H V C CNN 98 | F3 "" 50 200 50 H V C CNN 99 | ALIAS LM324 TLC274 TL074 LM324N LM324AN MCP6004 100 | $FPLIST 101 | SOIC* 102 | DIP* 103 | TSSOP* 104 | SSOP* 105 | MSOP* 106 | $ENDFPLIST 107 | DRAW 108 | P 4 0 1 10 -200 200 200 0 -200 -200 -200 200 f 109 | X V+ 4 -100 300 150 D 50 50 0 1 W 110 | X V- 11 -100 -300 150 U 50 50 0 1 W 111 | X ~ 1 300 0 100 L 50 50 1 1 O 112 | X - 2 -300 -100 100 R 50 50 1 1 I 113 | X + 3 -300 100 100 R 50 50 1 1 I 114 | X + 5 -300 100 100 R 50 50 2 1 I 115 | X - 6 -300 -100 100 R 50 50 2 1 I 116 | X ~ 7 300 0 100 L 50 50 2 1 O 117 | X ~ 8 300 0 100 L 50 50 3 1 O 118 | X - 9 -300 -100 100 R 50 50 3 1 I 119 | X + 10 -300 100 100 R 50 50 3 1 I 120 | X + 12 -300 100 100 R 50 50 4 1 I 121 | X - 13 -300 -100 100 R 50 50 4 1 I 122 | X ~ 14 300 0 100 L 50 50 4 1 O 123 | ENDDRAW 124 | ENDDEF 125 | # 126 | # PWR_FLAG 127 | # 128 | DEF PWR_FLAG #FLG 0 0 N N 1 F P 129 | F0 "#FLG" 0 95 50 H I C CNN 130 | F1 "PWR_FLAG" 0 180 50 H V C CNN 131 | F2 "" 0 0 50 H V C CNN 132 | F3 "" 0 0 50 H V C CNN 133 | DRAW 134 | X pwr 1 0 0 0 U 50 50 0 0 w 135 | P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N 136 | ENDDRAW 137 | ENDDEF 138 | # 139 | # Q_NPN_EBC 140 | # 141 | DEF Q_NPN_EBC Q 0 0 Y N 1 F N 142 | F0 "Q" 300 50 50 H V R CNN 143 | F1 "Q_NPN_EBC" 600 -50 50 H V R CNN 144 | F2 "" 200 100 50 H V C CNN 145 | F3 "" 0 0 50 H V C CNN 146 | DRAW 147 | C 50 0 111 0 1 10 N 148 | P 2 0 1 0 25 25 100 100 N 149 | P 3 0 1 0 25 -25 100 -100 100 -100 N 150 | P 3 0 1 20 25 75 25 -75 25 -75 N 151 | P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F 152 | X E 1 100 -200 100 U 50 50 1 1 P 153 | X B 2 -200 0 225 R 50 50 1 1 P 154 | X C 3 100 200 100 D 50 50 1 1 P 155 | ENDDRAW 156 | ENDDEF 157 | # 158 | # R 159 | # 160 | DEF R R 0 0 N Y 1 F N 161 | F0 "R" 80 0 50 V V C CNN 162 | F1 "R" 0 0 50 V V C CNN 163 | F2 "" -70 0 50 V V C CNN 164 | F3 "" 0 0 50 H V C CNN 165 | $FPLIST 166 | R_* 167 | Resistor_* 168 | $ENDFPLIST 169 | DRAW 170 | S -40 -100 40 100 0 1 10 N 171 | X ~ 1 0 150 50 D 50 50 1 1 P 172 | X ~ 2 0 -150 50 U 50 50 1 1 P 173 | ENDDRAW 174 | ENDDEF 175 | # 176 | # VCC 177 | # 178 | DEF VCC #PWR 0 0 Y Y 1 F P 179 | F0 "#PWR" 0 -150 50 H I C CNN 180 | F1 "VCC" 0 150 50 H V C CNN 181 | F2 "" 0 0 50 H V C CNN 182 | F3 "" 0 0 50 H V C CNN 183 | DRAW 184 | C 0 75 25 0 1 0 N 185 | P 2 0 1 0 0 0 0 50 N 186 | X VCC 1 0 0 0 U 50 50 1 1 W N 187 | ENDDRAW 188 | ENDDEF 189 | # 190 | # VEE 191 | # 192 | DEF VEE #PWR 0 0 Y Y 1 F P 193 | F0 "#PWR" 0 -150 50 H I C CNN 194 | F1 "VEE" 0 150 50 H V C CNN 195 | F2 "" 0 0 50 H V C CNN 196 | F3 "" 0 0 50 H V C CNN 197 | DRAW 198 | C 0 75 25 0 1 0 N 199 | P 2 0 1 0 0 0 0 50 N 200 | X VEE 1 0 0 0 U 50 50 1 1 W N 201 | ENDDRAW 202 | ENDDEF 203 | # 204 | #End Library 205 | -------------------------------------------------------------------------------- /modules/inverter/kicad/inverter.pro: -------------------------------------------------------------------------------- 1 | update=11/06/2017 11:15:21 2 | version=1 3 | last_client=kicad 4 | [pcbnew] 5 | version=1 6 | LastNetListRead= 7 | UseCmpFile=1 8 | PadDrill=0.600000000000 9 | PadDrillOvalY=0.600000000000 10 | PadSizeH=1.500000000000 11 | PadSizeV=1.500000000000 12 | PcbTextSizeV=1.500000000000 13 | PcbTextSizeH=1.500000000000 14 | PcbTextThickness=0.300000000000 15 | ModuleTextSizeV=1.000000000000 16 | ModuleTextSizeH=1.000000000000 17 | ModuleTextSizeThickness=0.150000000000 18 | SolderMaskClearance=0.000000000000 19 | SolderMaskMinWidth=0.000000000000 20 | DrawSegmentWidth=0.200000000000 21 | BoardOutlineThickness=0.100000000000 22 | ModuleOutlineThickness=0.150000000000 23 | [cvpcb] 24 | version=1 25 | NetIExt=net 26 | [eeschema] 27 | version=1 28 | LibDir= 29 | [eeschema/libraries] 30 | LibName1=power 31 | LibName2=device 32 | LibName3=transistors 33 | LibName4=conn 34 | LibName5=linear 35 | LibName6=regul 36 | LibName7=74xx 37 | LibName8=cmos4000 38 | LibName9=adc-dac 39 | LibName10=memory 40 | LibName11=xilinx 41 | LibName12=microcontrollers 42 | LibName13=dsp 43 | LibName14=microchip 44 | LibName15=analog_switches 45 | LibName16=motorola 46 | LibName17=texas 47 | LibName18=intel 48 | LibName19=audio 49 | LibName20=interface 50 | LibName21=digital-audio 51 | LibName22=philips 52 | LibName23=display 53 | LibName24=cypress 54 | LibName25=siliconi 55 | LibName26=opto 56 | LibName27=atmel 57 | LibName28=contrib 58 | LibName29=valves 59 | [general] 60 | version=1 61 | -------------------------------------------------------------------------------- /modules/midi-in/README.md: -------------------------------------------------------------------------------- 1 | # MIDI in module 2 | 3 | ## Printed circuit boards 4 | 5 | ### Display board 6 | 7 | #### Dimensions 8 | 9 | Board width: 101.6mm (4") 10 | Board height: 63.5mm (2.5") 11 | 12 | Screw diameter: 3mm 13 | 14 | Screw positions from bottom left (X,Y): 15 | 16 | - 5.08mm, 5.08mm 17 | - 5.08mm, 58.42mm 18 | - 96.52mm, 58.42mm 19 | - 96.52mm, 5.08mm 20 | 21 | Summarized, the 4 screws are offset 5.08mm (.2") from the sides. 22 | 23 | This makes them span a rectangle of 81.28mm x 43.18mm (3.2" x 1.7") 24 | 25 | #### Part list 26 | 27 | - R1-16: 220 Ohm 1/8W, 5% tolerance resistor 28 | - R17, R18: 10 KOhm 1/8W, 5% tolerance resistor 29 | - T1: BC547C NPN Transistor 30 | - C1: 100 nF ceramic capacitor (can be replaced with electrolytic too) 31 | - D1, D2: TDSG5150 or equivalent Common Anode 7 segment display 32 | - V1, V2: 74595 8-bit shift register 33 | - SV1: Standard .100" pitch pin header, or leave empty to solder wires directly to board 34 | 35 | 36 | #### Description 37 | 38 | The display board houses two 7-segment LED displays, to display the currently selected MIDI channel. 39 | 40 | The shift registers on the board keep hold of the digits being displayed, and are fed data by the microcontroller on the main board. 41 | 42 | R1-16 are current-limiting resistors for each of the 8 LEDs per display. 43 | 44 | The transistor circuit connected to the shift registers' reset pins causes the registers to reset when the circuit is being powered up. The registers' reset pin needs to be held low (0V) in order to reset. On power-up, C1 has no charge. A current will flow "through" C1 and R18 (10K), causing a voltage drop across R18. Having the voltage drop across R18 brings the point connected to the reset pins (junction between R18 and C1) to 0V, resetting the shift registers. Once the capacitor is charged enough, the voltage drop has shifted to be across C1, and the reset pins are back to 5V, meaning the registers are no longer being reset. Normal operation can begin. 45 | 46 | [Fun fact: while writing that power-up description I noticed I designed it wrong in the schematic: I'd be shorting VCC to GND through T1, blowing up the transistor. Documenting is good.] 47 | 48 | 49 | ### MIDI In board 50 | 51 | #### Dimensions (identical to display board) 52 | 53 | Board width: 101.6mm (4") 54 | Board height: 63.5mm (2.5") 55 | 56 | Screw diameter: 3mm 57 | 58 | Screw positions from bottom left (X,Y): 59 | 60 | - 5.08mm, 5.08mm 61 | - 5.08mm, 58.42mm 62 | - 96.52mm, 58.42mm 63 | - 96.52mm, 5.08mm 64 | 65 | Summarized, the 4 screws are offset 5.08mm (.2") from the sides. 66 | 67 | This makes them span a rectangle of 81.28mm x 43.18mm (3.2" x 1.7") 68 | 69 | #### Part list 70 | 71 | - R1: 1 KOhm 1/8W, 5% tolerance resistor 72 | - R2, R3, R5: 220 Ohm 1/8W, 5% tolerance resistor 73 | - R4, R8-12: 10 KOhm 1/8W, 5% tolerance resistor 74 | - D1: 1N4148 Diode 75 | - C1-6: 100 nF ceramic capacitor 76 | - OK1: 6N137 optocoupler (Should be able to drop in 6N138 or 6N139 without further changes) 77 | - IC1: LM358 Dual single-supply opamp (even though we're only using one) 78 | - SV1, SV2: Standard .100" 12-pin female pin header 79 | - X1, X6: .200" pitch connector, or leave empty to solder wires directly to board 80 | - X2-4, JP1: .100" pitch connector, or leave empty to solder wires directly to board 81 | 82 | #### Description 83 | 84 | The MIDI in board uses an opto-coupler (OK1) to electrically isolate the MIDI input signal from our circuit. Its input is buffered through an opamp (IC1) and connected back to the MIDI Thru connector, to allow daisy-chaining. 85 | 86 | The circuit houses an Arduino Pro Micro, plugged into female pin headers SV1 and SV2. The filtered MIDI signal (serial data) is fed into the RX pin of the Arduino. The Arduino is programmed to only listen to one of the available MIDI channels, and the selected channel is to be displayed on 7-segment displays. The software listens for MIDI status messages, and updates 7 outputs 87 | based on this data. 88 | 89 | The 7 segment displays are on the display board where shift registers drive them. The serial data is clocked through by the Arduino, and is hooked up through connector X5. 90 | 91 | There is an input for a momentary push button (push to make contact), which lets you change the MIDI channel listened for. Pushing the button shorts the relevant pin to ground, where it's normally high at 5V. 92 | 93 | The main outputs are the logic "gate" and "trigger", and the analog "FreqCV". Gate is high as long as at least one note is pressed. Trigger pulses high for 1ms whenever a new note is pressed. These are intended to be used by envelope generators later. FreqCV is destined for an analog voltage where a difference of 1V represents a difference of 1 octave in sound frequency. At the output here though, it's still just in the arduino's output range of 0-5V. 94 | 95 | Further, there are 4 additional analog outputs, MOD1-4. They also come out as 0-5V from this board. 96 | 97 | All the analog outputs on here come from a pulse width modulation (PWM) signal generated by the arduino. A passive low pass filter comprised of a 100nF capacitor and a 10K resistor is connected to each of them, to normalize the PWM to an analog voltage. 98 | 99 | All these outputs will be connected to the CV (control voltage) board, where the voltage ranges get scaled to appropriate levels (including fine-tuning through trimpots). -------------------------------------------------------------------------------- /modules/midi-in/eagle/cv-board/cv-board.brd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/midi-in/eagle/cv-board/cv-board.brd.png -------------------------------------------------------------------------------- /modules/midi-in/eagle/cv-board/cv-board.sch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/midi-in/eagle/cv-board/cv-board.sch.png -------------------------------------------------------------------------------- /modules/midi-in/eagle/display-board/display-board.brd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/midi-in/eagle/display-board/display-board.brd.png -------------------------------------------------------------------------------- /modules/midi-in/eagle/display-board/display-board.sch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/midi-in/eagle/display-board/display-board.sch.png -------------------------------------------------------------------------------- /modules/midi-in/eagle/midi-in-board/midi-in-board.brd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/midi-in/eagle/midi-in-board/midi-in-board.brd.png -------------------------------------------------------------------------------- /modules/midi-in/eagle/midi-in-board/midi-in-board.sch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/midi-in/eagle/midi-in-board/midi-in-board.sch.png -------------------------------------------------------------------------------- /modules/noise-generator/eagle/noise-generator.brd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/noise-generator/eagle/noise-generator.brd.png -------------------------------------------------------------------------------- /modules/noise-generator/eagle/noise-generator.sch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/noise-generator/eagle/noise-generator.sch.png -------------------------------------------------------------------------------- /modules/power-supply/README.md: -------------------------------------------------------------------------------- 1 | # Modular Synth Power Supply 2 | 3 | This power supply is meant to power the whole thing. I threw some arbitrary and not so arbitrary numbers at what I want from it. 4 | 5 | ## Requirements: 6 | 7 | - Symmetrical supply (audio needs positive and negative voltages) 8 | - Voltages: -5V and +5V (5V seems like a good number to also power microcontrollers and various ICs) 9 | - Max output current: 5A on each side, so a combined 10A. (This probably massively overshoots what will actually be required, given that actual audio power amplification for speakers is not in the scope of the project. Better to have more available than too little, though.) 10 | 11 | ## Parts 12 | 13 | ### Parts on PCB 14 | 15 | The part labels here refer to parts as seen on the schematic (power-supply.sch or power-supply.sch.png) 16 | 17 | - J1, J2: 3-way PCB mount terminal block; 3.5mm pin pitch 18 | - B1: GBPC1506W Rectifier bridge 19 | - C1, C2: Electrolytic capacitor, rated at 4700uF, 16V 20 | - C3, C4: Electrolyic capacitor, rated at 0.33uF, 16V (or more) 21 | - C5, C6: Capacitor, 0.1uF 22 | - R1, R2: Resistor, 3 Ohms, 5% tolerance or better, 3W 23 | - IC1: LM7805 - Positive linear voltage regulator 24 | - IC2: LM7905 - Negative linear voltage regulator 25 | - Q1: MJL1302A - High power PNP transistor (massive amount of headroom on this one) 26 | - Q2: MJL3281A - High power NPN transistor (massive amount of headroom on this one) 27 | 28 | ### External parts (not on schematic) 29 | 30 | - TF1: Transformer, 50VA or higher, dual output transformer (6V per output) 31 | - J3: Male panel-mount IEC connector, optionally with a power switch, preferrably with built-in fuse 32 | 33 | ## Wiring 34 | 35 | TF1's two outputs should be connected in series. The connecting midpoint should be connected to J1-2 on the PCB (TF Mid), the two other remaining secondary pins of the transformer should be connected to J1-1 and J1-2. 36 | 37 | The primary winding of TF1 should be connected to the neutral and live terminals of the IEC connector. 38 | 39 | J2 should be wired to the array of banana sockets to be built into the synth enclosure. Preferable colouring: +5V = red, 0V (GND) = black, -5V = blue. I will probably put them left to right: blue, black, red. 40 | 41 | [TODO: add a wiring diagram image here] 42 | 43 | ## Acknowledgements 44 | 45 | The method for allowing more current while using 78XX and 79XX (each of which normally delivers 1-1.5A max) was taken from the Fairchild 78xx datasheet. ([Datasheet](http://pdf.datasheetcatalog.com/datasheets/228/390068_DS.pdf) - Page 23, Figure 12) 46 | 47 | This method was also [suggested](https://www.reddit.com/r/AskElectronics/comments/3ef350/is_there_a_negative_equivalent_of_the_lm338/ctecdds) by reddit user "Linker3000". 48 | 49 | The transistors Q1 and Q2 (MJL1302A and MJL3281A) were [suggested](https://www.reddit.com/r/AskElectronics/comments/3ef350/is_there_a_negative_equivalent_of_the_lm338/ctei40j) by reddit user "fatangaboo". 50 | 51 | Thanks, r/AskElectronics! 52 | -------------------------------------------------------------------------------- /modules/power-supply/eagle/power-supply.brd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/power-supply/eagle/power-supply.brd.png -------------------------------------------------------------------------------- /modules/power-supply/eagle/power-supply.sch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/power-supply/eagle/power-supply.sch.png -------------------------------------------------------------------------------- /modules/power-supply/simulations/.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | *.raw 3 | -------------------------------------------------------------------------------- /modules/power-supply/simulations/power-supply.asc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/power-supply/simulations/power-supply.asc -------------------------------------------------------------------------------- /modules/reverb/kicad/reverb-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # C 5 | # 6 | DEF C C 0 10 N Y 1 F N 7 | F0 "C" 25 100 50 H V L CNN 8 | F1 "C" 25 -100 50 H V L CNN 9 | F2 "" 38 -150 50 H V C CNN 10 | F3 "" 0 0 50 H V C CNN 11 | $FPLIST 12 | C? 13 | C_????_* 14 | C_???? 15 | SMD*_c 16 | Capacitor* 17 | $ENDFPLIST 18 | DRAW 19 | P 2 0 1 20 -80 -30 80 -30 N 20 | P 2 0 1 20 -80 30 80 30 N 21 | X ~ 1 0 150 110 D 40 40 1 1 P 22 | X ~ 2 0 -150 110 U 40 40 1 1 P 23 | ENDDRAW 24 | ENDDEF 25 | # 26 | # CONN_01X02 27 | # 28 | DEF CONN_01X02 P 0 40 Y N 1 F N 29 | F0 "P" 0 150 50 H V C CNN 30 | F1 "CONN_01X02" 100 0 50 V V C CNN 31 | F2 "" 0 0 50 H V C CNN 32 | F3 "" 0 0 50 H V C CNN 33 | $FPLIST 34 | Pin_Header_Straight_1X02 35 | Pin_Header_Angled_1X02 36 | Socket_Strip_Straight_1X02 37 | Socket_Strip_Angled_1X02 38 | $ENDFPLIST 39 | DRAW 40 | S -50 -45 10 -55 0 1 0 N 41 | S -50 55 10 45 0 1 0 N 42 | S -50 100 50 -100 0 1 0 N 43 | X P1 1 -200 50 150 R 50 50 1 1 P 44 | X P2 2 -200 -50 150 R 50 50 1 1 P 45 | ENDDRAW 46 | ENDDEF 47 | # 48 | # CONN_01X03 49 | # 50 | DEF CONN_01X03 P 0 40 Y N 1 F N 51 | F0 "P" 0 200 50 H V C CNN 52 | F1 "CONN_01X03" 100 0 50 V V C CNN 53 | F2 "" 0 0 50 H V C CNN 54 | F3 "" 0 0 50 H V C CNN 55 | $FPLIST 56 | Pin_Header_Straight_1X03 57 | Pin_Header_Angled_1X03 58 | Socket_Strip_Straight_1X03 59 | Socket_Strip_Angled_1X03 60 | $ENDFPLIST 61 | DRAW 62 | S -50 -95 10 -105 0 1 0 N 63 | S -50 5 10 -5 0 1 0 N 64 | S -50 105 10 95 0 1 0 N 65 | S -50 150 50 -150 0 1 0 N 66 | X P1 1 -200 100 150 R 50 50 1 1 P 67 | X P2 2 -200 0 150 R 50 50 1 1 P 68 | X P3 3 -200 -100 150 R 50 50 1 1 P 69 | ENDDRAW 70 | ENDDEF 71 | # 72 | # CP 73 | # 74 | DEF CP C 0 10 N Y 1 F N 75 | F0 "C" 25 100 50 H V L CNN 76 | F1 "CP" 25 -100 50 H V L CNN 77 | F2 "" 38 -150 50 H V C CNN 78 | F3 "" 0 0 50 H V C CNN 79 | $FPLIST 80 | CP* 81 | C_Axial* 82 | C_Radial* 83 | TantalC* 84 | C*elec 85 | c_elec* 86 | SMD*_Pol 87 | $ENDFPLIST 88 | DRAW 89 | S -90 20 -90 40 0 1 0 N 90 | S -90 20 90 20 0 1 0 N 91 | S 90 -20 -90 -40 0 1 0 F 92 | S 90 40 -90 40 0 1 0 N 93 | S 90 40 90 20 0 1 0 N 94 | P 2 0 1 0 -70 90 -30 90 N 95 | P 2 0 1 0 -50 110 -50 70 N 96 | X ~ 1 0 150 110 D 40 40 1 1 P 97 | X ~ 2 0 -150 110 U 40 40 1 1 P 98 | ENDDRAW 99 | ENDDEF 100 | # 101 | # D 102 | # 103 | DEF D D 0 40 N N 1 F N 104 | F0 "D" 0 100 50 H V C CNN 105 | F1 "D" 0 -100 50 H V C CNN 106 | F2 "" 0 0 50 H V C CNN 107 | F3 "" 0 0 50 H V C CNN 108 | $FPLIST 109 | Diode_* 110 | D-Pak_TO252AA 111 | *SingleDiode 112 | *_Diode_* 113 | *SingleDiode* 114 | $ENDFPLIST 115 | DRAW 116 | P 2 0 1 6 -50 50 -50 -50 N 117 | P 3 0 1 0 50 50 -50 0 50 -50 F 118 | X K 1 -150 0 100 R 50 50 1 1 P 119 | X A 2 150 0 100 L 50 50 1 1 P 120 | ENDDRAW 121 | ENDDEF 122 | # 123 | # GND 124 | # 125 | DEF GND #PWR 0 0 Y Y 1 F P 126 | F0 "#PWR" 0 -250 50 H I C CNN 127 | F1 "GND" 0 -150 50 H V C CNN 128 | F2 "" 0 0 50 H V C CNN 129 | F3 "" 0 0 50 H V C CNN 130 | DRAW 131 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 132 | X GND 1 0 0 0 D 50 50 1 1 W N 133 | ENDDRAW 134 | ENDDEF 135 | # 136 | # LM13700 137 | # 138 | DEF LM13700 U 0 40 Y N 4 F N 139 | F0 "U" 150 200 50 H V C CNN 140 | F1 "LM13700" 200 -200 50 H V C CNN 141 | F2 "" -100 25 50 H V C CNN 142 | F3 "" -100 25 50 H V C CNN 143 | ALIAS LM13600 144 | $FPLIST 145 | DIP-16* 146 | $ENDFPLIST 147 | DRAW 148 | X V- 6 0 -300 100 U 50 50 0 1 W 149 | X V+ 11 0 300 100 D 50 50 0 1 W 150 | C 250 0 25 1 1 0 N 151 | C 275 0 25 1 1 0 N 152 | T 0 -75 -100 50 0 1 1 + Normal 0 C C 153 | T 0 -75 100 50 0 1 1 - Normal 0 C C 154 | P 2 1 1 0 -75 75 -25 75 N 155 | P 2 1 1 0 -50 -25 -50 25 N 156 | P 2 1 1 0 -25 -75 -75 -75 N 157 | P 2 1 1 0 0 -200 0 -125 N 158 | P 2 1 1 0 0 200 0 125 N 159 | P 3 1 1 0 275 -25 275 -100 300 -100 N 160 | P 4 1 1 0 -75 -25 -25 -25 -50 -75 -75 -25 F 161 | P 4 1 1 0 -75 25 -25 25 -50 75 -75 25 F 162 | P 4 1 1 10 225 0 -100 -175 -100 175 225 0 f 163 | X OUTPUT 12 400 0 100 L 50 50 1 1 O 164 | X INPUT(-) 13 -200 100 100 R 50 50 1 1 I 165 | X INPUT(+) 14 -200 -100 100 R 50 50 1 1 I 166 | X DIODE_BIAS 15 -200 0 100 R 50 50 1 1 I 167 | X AMP_BIAS_INPUT 16 400 -100 100 L 50 50 1 1 I 168 | S -100 100 100 -100 2 1 10 f 169 | P 2 2 1 0 -200 0 -100 0 N 170 | P 2 2 1 0 -50 0 0 -25 N 171 | P 2 2 1 0 -50 50 0 75 N 172 | P 2 2 1 0 -50 75 -50 -25 N 173 | P 2 2 1 0 0 -200 0 -100 N 174 | P 2 2 1 0 0 -50 50 -75 N 175 | P 2 2 1 0 0 0 50 25 N 176 | P 2 2 1 0 0 25 0 -75 N 177 | P 2 2 1 0 0 200 0 100 N 178 | P 2 2 1 0 200 0 100 0 N 179 | P 4 2 1 0 0 -25 -25 0 -25 -25 0 -25 F 180 | P 4 2 1 0 50 -75 25 -50 25 -75 50 -75 F 181 | X BUFFER_OUTPUT 9 300 0 100 L 50 50 2 1 O 182 | X BUFFER_INPUT 10 -300 0 100 R 50 50 2 1 I 183 | C 250 0 25 3 1 0 N 184 | C 275 0 25 3 1 0 N 185 | T 0 -75 -100 50 0 3 1 + Normal 0 C C 186 | T 0 -75 100 50 0 3 1 - Normal 0 C C 187 | P 2 3 1 0 -75 75 -25 75 N 188 | P 2 3 1 0 -50 -25 -50 25 N 189 | P 2 3 1 0 -25 -75 -75 -75 N 190 | P 2 3 1 0 0 -200 0 -125 N 191 | P 2 3 1 0 0 200 0 125 N 192 | P 3 3 1 0 275 -25 275 -100 300 -100 N 193 | P 4 3 1 0 -75 -25 -25 -25 -50 -75 -75 -25 F 194 | P 4 3 1 0 -75 25 -25 25 -50 75 -75 25 F 195 | P 4 3 1 10 225 0 -100 -175 -100 175 225 0 f 196 | X AMP_BIAS_INPUT 1 400 -100 100 L 50 50 3 1 I 197 | X DIODE_BIAS 2 -200 0 100 R 50 50 3 1 I 198 | X INPUT(+) 3 -200 -100 100 R 50 50 3 1 I 199 | X INPUT(-) 4 -200 100 100 R 50 50 3 1 I 200 | X OUTPUT 5 400 0 100 L 50 50 3 1 O 201 | S -100 100 100 -100 4 1 10 f 202 | P 2 4 1 0 -200 0 -100 0 N 203 | P 2 4 1 0 -50 0 0 -25 N 204 | P 2 4 1 0 -50 50 0 75 N 205 | P 2 4 1 0 -50 75 -50 -25 N 206 | P 2 4 1 0 0 -200 0 -100 N 207 | P 2 4 1 0 0 -50 50 -75 N 208 | P 2 4 1 0 0 0 50 25 N 209 | P 2 4 1 0 0 25 0 -75 N 210 | P 2 4 1 0 0 200 0 100 N 211 | P 2 4 1 0 200 0 100 0 N 212 | P 4 4 1 0 0 -25 -25 0 -25 -25 0 -25 F 213 | P 4 4 1 0 50 -75 25 -50 25 -75 50 -75 F 214 | X BUFFER_INPUT 7 -300 0 100 R 50 50 4 1 I 215 | X BUFFER_OUTPUT 8 300 0 100 L 50 50 4 1 O 216 | ENDDRAW 217 | ENDDEF 218 | # 219 | # LM2902N 220 | # 221 | DEF LM2902N U 0 20 Y Y 4 F N 222 | F0 "U" 0 200 50 H V L CNN 223 | F1 "LM2902N" 0 -200 50 H V L CNN 224 | F2 "" -50 100 50 H V C CNN 225 | F3 "" 50 200 50 H V C CNN 226 | ALIAS LM324 TLC274 TL074 LM324N LM324AN MCP6004 227 | $FPLIST 228 | SOIC* 229 | DIP* 230 | TSSOP* 231 | SSOP* 232 | MSOP* 233 | $ENDFPLIST 234 | DRAW 235 | P 4 0 1 10 -200 200 200 0 -200 -200 -200 200 f 236 | X V+ 4 -100 300 150 D 50 50 0 1 W 237 | X V- 11 -100 -300 150 U 50 50 0 1 W 238 | X ~ 1 300 0 100 L 50 50 1 1 O 239 | X - 2 -300 -100 100 R 50 50 1 1 I 240 | X + 3 -300 100 100 R 50 50 1 1 I 241 | X + 5 -300 100 100 R 50 50 2 1 I 242 | X - 6 -300 -100 100 R 50 50 2 1 I 243 | X ~ 7 300 0 100 L 50 50 2 1 O 244 | X ~ 8 300 0 100 L 50 50 3 1 O 245 | X - 9 -300 -100 100 R 50 50 3 1 I 246 | X + 10 -300 100 100 R 50 50 3 1 I 247 | X + 12 -300 100 100 R 50 50 4 1 I 248 | X - 13 -300 -100 100 R 50 50 4 1 I 249 | X ~ 14 300 0 100 L 50 50 4 1 O 250 | ENDDRAW 251 | ENDDEF 252 | # 253 | # LM386 254 | # 255 | DEF LM386 U 0 10 Y Y 1 F N 256 | F0 "U" 50 300 50 H V L CNN 257 | F1 "LM386" 50 200 50 H V L CNN 258 | F2 "" 100 100 50 H V C CNN 259 | F3 "" 200 200 50 H V C CNN 260 | $FPLIST 261 | DIP* 262 | MSOP* 263 | SOIC* 264 | $ENDFPLIST 265 | DRAW 266 | P 2 0 1 6 0 -150 0 -100 N 267 | P 2 0 1 6 0 150 0 100 N 268 | P 3 0 1 6 100 -150 100 -125 50 -75 N 269 | P 4 0 1 10 200 0 -200 200 -200 -200 200 0 f 270 | X ~ 1 0 -300 150 U 50 50 1 1 I 271 | X - 2 -300 -100 100 R 50 50 1 1 I 272 | X + 3 -300 100 100 R 50 50 1 1 I 273 | X Gnd 4 -100 -300 150 U 50 50 1 1 W 274 | X ~ 5 300 0 100 L 50 50 1 1 O 275 | X V+ 6 -100 300 150 D 50 50 1 1 W 276 | X ~ 7 0 300 150 D 50 50 1 1 I 277 | X ~ 8 100 -300 150 U 50 50 1 1 I 278 | ENDDRAW 279 | ENDDEF 280 | # 281 | # PWR_FLAG 282 | # 283 | DEF PWR_FLAG #FLG 0 0 N N 1 F P 284 | F0 "#FLG" 0 95 50 H I C CNN 285 | F1 "PWR_FLAG" 0 180 50 H V C CNN 286 | F2 "" 0 0 50 H V C CNN 287 | F3 "" 0 0 50 H V C CNN 288 | DRAW 289 | X pwr 1 0 0 0 U 50 50 0 0 w 290 | P 6 0 1 0 0 0 0 50 -75 100 0 150 75 100 0 50 N 291 | ENDDRAW 292 | ENDDEF 293 | # 294 | # Q_PNP_EBC 295 | # 296 | DEF Q_PNP_EBC Q 0 0 Y N 1 F N 297 | F0 "Q" 300 50 50 H V R CNN 298 | F1 "Q_PNP_EBC" 600 -50 50 H V R CNN 299 | F2 "" 200 100 50 H V C CNN 300 | F3 "" 0 0 50 H V C CNN 301 | DRAW 302 | C 50 0 111 0 1 10 N 303 | P 2 0 1 0 25 25 100 100 N 304 | P 3 0 1 0 25 -25 100 -100 100 -100 N 305 | P 3 0 1 20 25 75 25 -75 25 -75 N 306 | P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F 307 | X E 1 100 -200 100 U 50 50 1 1 P 308 | X B 2 -200 0 225 R 50 50 1 1 I 309 | X C 3 100 200 100 D 50 50 1 1 P 310 | ENDDRAW 311 | ENDDEF 312 | # 313 | # R 314 | # 315 | DEF R R 0 0 N Y 1 F N 316 | F0 "R" 80 0 50 V V C CNN 317 | F1 "R" 0 0 50 V V C CNN 318 | F2 "" -70 0 50 V V C CNN 319 | F3 "" 0 0 50 H V C CNN 320 | $FPLIST 321 | R_* 322 | Resistor_* 323 | $ENDFPLIST 324 | DRAW 325 | S -40 -100 40 100 0 1 10 N 326 | X ~ 1 0 150 50 D 50 50 1 1 P 327 | X ~ 2 0 -150 50 U 50 50 1 1 P 328 | ENDDRAW 329 | ENDDEF 330 | # 331 | # VCC 332 | # 333 | DEF VCC #PWR 0 0 Y Y 1 F P 334 | F0 "#PWR" 0 -150 50 H I C CNN 335 | F1 "VCC" 0 150 50 H V C CNN 336 | F2 "" 0 0 50 H V C CNN 337 | F3 "" 0 0 50 H V C CNN 338 | DRAW 339 | C 0 75 25 0 1 0 N 340 | P 2 0 1 0 0 0 0 50 N 341 | X VCC 1 0 0 0 U 50 50 1 1 W N 342 | ENDDRAW 343 | ENDDEF 344 | # 345 | # VEE 346 | # 347 | DEF VEE #PWR 0 0 Y Y 1 F P 348 | F0 "#PWR" 0 -150 50 H I C CNN 349 | F1 "VEE" 0 150 50 H V C CNN 350 | F2 "" 0 0 50 H V C CNN 351 | F3 "" 0 0 50 H V C CNN 352 | DRAW 353 | C 0 75 25 0 1 0 N 354 | P 2 0 1 0 0 0 0 50 N 355 | X VEE 1 0 0 0 U 50 50 1 1 W N 356 | ENDDRAW 357 | ENDDEF 358 | # 359 | #End Library 360 | -------------------------------------------------------------------------------- /modules/reverb/kicad/reverb.pro: -------------------------------------------------------------------------------- 1 | update=29/05/2017 19:03:35 2 | version=1 3 | last_client=kicad 4 | [pcbnew] 5 | version=1 6 | LastNetListRead= 7 | UseCmpFile=1 8 | PadDrill=0.600000000000 9 | PadDrillOvalY=0.600000000000 10 | PadSizeH=1.500000000000 11 | PadSizeV=1.500000000000 12 | PcbTextSizeV=1.500000000000 13 | PcbTextSizeH=1.500000000000 14 | PcbTextThickness=0.300000000000 15 | ModuleTextSizeV=1.000000000000 16 | ModuleTextSizeH=1.000000000000 17 | ModuleTextSizeThickness=0.150000000000 18 | SolderMaskClearance=0.000000000000 19 | SolderMaskMinWidth=0.000000000000 20 | DrawSegmentWidth=0.200000000000 21 | BoardOutlineThickness=0.100000000000 22 | ModuleOutlineThickness=0.150000000000 23 | [cvpcb] 24 | version=1 25 | NetIExt=net 26 | [eeschema] 27 | version=1 28 | LibDir= 29 | [eeschema/libraries] 30 | LibName1=power 31 | LibName2=device 32 | LibName3=transistors 33 | LibName4=conn 34 | LibName5=linear 35 | LibName6=regul 36 | LibName7=74xx 37 | LibName8=cmos4000 38 | LibName9=adc-dac 39 | LibName10=memory 40 | LibName11=xilinx 41 | LibName12=microcontrollers 42 | LibName13=dsp 43 | LibName14=microchip 44 | LibName15=analog_switches 45 | LibName16=motorola 46 | LibName17=texas 47 | LibName18=intel 48 | LibName19=audio 49 | LibName20=interface 50 | LibName21=digital-audio 51 | LibName22=philips 52 | LibName23=display 53 | LibName24=cypress 54 | LibName25=siliconi 55 | LibName26=opto 56 | LibName27=atmel 57 | LibName28=contrib 58 | LibName29=valves 59 | [general] 60 | version=1 61 | -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/MAX72S21.cpp: -------------------------------------------------------------------------------- 1 | #include "MAX72S21.h" 2 | 3 | MAX72S21::MAX72S21(uint8_t pinChipSelect) { 4 | _pinChipSelect = pinChipSelect; 5 | 6 | // Init cache 7 | for (uint8_t i = 0; i < MAX_DIGITS; i++) _displayCache[i] = 0xFF; 8 | } 9 | 10 | void MAX72S21::begin() { 11 | ::pinMode(_pinChipSelect, OUTPUT); 12 | ::digitalWrite(_pinChipSelect, 1); 13 | SPI.begin(); 14 | _spiSettings = SPISettings(10000000, MSBFIRST, SPI_MODE2); 15 | } 16 | 17 | void MAX72S21::setLED(uint8_t row, uint8_t column, bool on) { 18 | row = constrain(row, 0, MAX_ROWS - 1); 19 | column = constrain(column, 0, MAX_COLUMNS - 1); 20 | 21 | uint8_t newRowValue = _displayCache[row]; 22 | 23 | if (on) { 24 | newRowValue |= (1 << column); 25 | } else { 26 | newRowValue &= ~(1 << column); 27 | } 28 | 29 | setRow(row, newRowValue); 30 | } 31 | 32 | void MAX72S21::setRow(uint8_t row, uint8_t states) { 33 | row = constrain(row, 0, MAX_ROWS - 1); 34 | 35 | if (_displayCache[row] != states) { 36 | _setRegister(row + REG_DIGIT0, states); 37 | } 38 | } 39 | 40 | void MAX72S21::setColumn(uint8_t column, uint8_t states) { 41 | column = constrain(column, 0, MAX_COLUMNS); 42 | 43 | for (uint8_t i = 0; i < MAX_ROWS; i++) { 44 | setLED(i, column, (states & (1 << i))); 45 | } 46 | } 47 | 48 | void MAX72S21::clear() { 49 | for (uint8_t i = 0; i < MAX_DIGITS; i++) { 50 | _setRegister(REG_DIGIT0 + i, 0x00); 51 | } 52 | } 53 | 54 | void MAX72S21::write(uint8_t reg, uint8_t value) { 55 | _setRegister(reg, value); 56 | } 57 | 58 | void MAX72S21::writeChar(uint8_t digitIndex, char character, bool dotOn) { 59 | digitIndex = constrain(digitIndex, 0, 7); 60 | uint8_t value = _mapChar(character); 61 | 62 | if (dotOn) { 63 | value |= B10000000; 64 | } 65 | 66 | _setRegister(REG_DIGIT0 + digitIndex, value); 67 | } 68 | 69 | void MAX72S21::writeChar(uint8_t digitIndex, char character) { 70 | writeChar(digitIndex, character, false); 71 | } 72 | 73 | void MAX72S21::writeNumber(uint8_t digitIndex, uint8_t number) { 74 | number = constrain(number, 0, 9); 75 | writeChar(digitIndex, '0' + number); 76 | } 77 | 78 | void MAX72S21::print(uint8_t startDigitIndex, String text) { 79 | uint8_t curDigit = constrain(startDigitIndex, 0, 7); 80 | uint8_t charIndex = 0; 81 | char curChar = text[charIndex]; 82 | 83 | while (curDigit < MAX_DIGITS * 2) { 84 | if (curChar == '\0') break; 85 | bool curCharDot = text[charIndex + 1] == '.'; 86 | writeChar(curDigit++, curChar, curCharDot); 87 | if (curCharDot) ++charIndex; 88 | curChar = text[++charIndex]; 89 | } 90 | } 91 | 92 | void MAX72S21::setDecodeMode(uint8_t modes) { 93 | _setRegister(REG_DECODEMODE, modes); 94 | } 95 | 96 | void MAX72S21::setIntensity(uint8_t intensity) { 97 | _setRegister(REG_INTENSITY, constrain(intensity, 0x0, 0xF)); 98 | } 99 | 100 | void MAX72S21::setScanLimit(uint8_t scanLimit) { 101 | _setRegister(REG_SCANLIMIT, constrain(scanLimit, 0x0, 0xF)); 102 | } 103 | 104 | void MAX72S21::startDisplayTest() { 105 | _setRegister(REG_DISPLAYTEST, 1); 106 | } 107 | 108 | void MAX72S21::stopDisplayTest() { 109 | _setRegister(REG_DISPLAYTEST, 0); 110 | } 111 | 112 | void MAX72S21::shutdown() { 113 | _setRegister(REG_SHUTDOWN, 0); 114 | } 115 | 116 | void MAX72S21::activate() { 117 | _setRegister(REG_SHUTDOWN, 1); 118 | } 119 | 120 | // Private method 121 | 122 | uint8_t MAX72S21::_mapChar(char inputChar) { 123 | switch (inputChar) { 124 | // Segments legend: 125 | // _______ 126 | // / A / 127 | // F / / B 128 | // /_______/ 129 | // / G / 130 | // E / / C 131 | // /_______/ * dp 132 | // D 133 | 134 | // dpABCDEFG 135 | case '0': return B01111110; 136 | case '1': return B00110000; 137 | case '2': return B01101101; 138 | case '3': return B01111001; 139 | case '4': return B00110011; 140 | case '5': return B01011011; 141 | case '6': return B01011111; 142 | case '7': return B01110000; 143 | case '8': return B01111111; 144 | case '9': return B01111011; 145 | case 'a': 146 | case 'A': return B01110111; 147 | case 'b': 148 | case 'B': return B00011111; 149 | case 'c': return B00001101; 150 | case 'C': return B01001110; 151 | case 'd': 152 | case 'D': return B00111101; 153 | case 'e': 154 | case 'E': return B01001111; 155 | case 'f': 156 | case 'F': return B01000111; 157 | case 'g': 158 | case 'G': return B01011110; 159 | case 'h': 160 | case 'H': return B00010111; 161 | case 'i': return B00000100; 162 | case 'I': return B00000110; 163 | case 'j': return B00011000; 164 | case 'J': return B00111000; 165 | case 'k': 166 | case 'K': return B00000111; 167 | case 'l': 168 | case 'L': return B00001110; 169 | case 'm': 170 | case 'M': return B01110110; 171 | case 'n': 172 | case 'N': return B00010101; 173 | case 'o': return B00011101; 174 | case 'O': return B01111110; 175 | case 'p': 176 | case 'P': return B01100111; 177 | case 'q': 178 | case 'Q': return B01110011; 179 | case 'r': return B00000101; 180 | case 'R': return B10000110; 181 | case 's': 182 | case 'S': return B01011011; 183 | case 't': 184 | case 'T': return B00001111; 185 | case 'u': 186 | case 'U': return B00111110; 187 | case 'v': 188 | case 'V': return B00011100; 189 | case 'w': 190 | case 'W': return B00101010; 191 | case 'x': 192 | case 'X': return B00110111; 193 | case 'y': 194 | case 'Y': return B00111011; 195 | case 'z': 196 | case 'Z': return B01101001; 197 | case '-': return B00000001; 198 | case '_': return B00001000; 199 | case '.': return B10000000; 200 | case '/': return B00100100; 201 | case ' ': 202 | default: return B00000000; 203 | } 204 | } 205 | 206 | void MAX72S21::_beginTransmission() { 207 | ::digitalWrite(_pinChipSelect, 0); 208 | SPI.beginTransaction(_spiSettings); 209 | } 210 | 211 | void MAX72S21::_endTransmission() { 212 | SPI.endTransaction(); 213 | ::digitalWrite(_pinChipSelect, 1); 214 | } 215 | 216 | void MAX72S21::_setRegister(uint8_t reg, uint8_t data) { 217 | if (reg >= MIN_DISPLAY_REG && reg <= MAX_DISPLAY_REG) { 218 | // If we're not updating, we don't need to initiate SPI communication 219 | if (_displayCache[reg - REG_DIGIT0] == data) { 220 | return; 221 | } 222 | 223 | // Store in display cache 224 | _displayCache[reg - REG_DIGIT0] = data; 225 | } 226 | 227 | _beginTransmission(); 228 | 229 | SPI.transfer(reg); 230 | SPI.transfer(data); 231 | 232 | _endTransmission(); 233 | } 234 | -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/MAX72S21.h: -------------------------------------------------------------------------------- 1 | /* 2 | * MAX72S21 8x8 matrix / 8 digit 7 segment display driver library 3 | * By MichD 4 | */ 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | #ifndef MAX72S21_h // Ensure we're not double-defining the library if it was already included 12 | #define MAX72S21_h 13 | 14 | // Register addresses as defined in datasheet 15 | 16 | #define REG_NOOP 0x00 17 | #define REG_DIGIT0 0x01 18 | #define REG_DIGIT1 0x02 19 | #define REG_DIGIT2 0x03 20 | #define REG_DIGIT3 0x04 21 | #define REG_DIGIT4 0x05 22 | #define REG_DIGIT5 0x06 23 | #define REG_DIGIT6 0x07 24 | #define REG_DIGIT7 0x08 25 | #define REG_DECODEMODE 0x09 26 | #define REG_INTENSITY 0x0A 27 | #define REG_SCANLIMIT 0x0B 28 | #define REG_SHUTDOWN 0x0C 29 | #define REG_DISPLAYTEST 0x0F 30 | 31 | #define MIN_DISPLAY_REG REG_DIGIT0 32 | #define MAX_DISPLAY_REG REG_DIGIT7 33 | 34 | #define MAX_DIGITS 8 35 | #define MAX_ROWS MAX_DIGITS 36 | #define NUM_SEGMENTS 8 37 | #define MAX_COLUMNS NUM_SEGMENTS 38 | 39 | class MAX72S21 { 40 | public: 41 | MAX72S21(uint8_t); // Constructor, takes chip select pin 42 | void begin(); // Start the SPI bug 43 | 44 | // Set a specific LED on or off 45 | // column (0-7), row (0,7), on/off 46 | void setLED(uint8_t, uint8_t, bool); 47 | 48 | // Set the values for a row of LEDs 49 | // row index (0-7) 50 | // Bits for each LED on the row 51 | void setRow(uint8_t, uint8_t); 52 | 53 | // Set the values for a column of LEDs 54 | // colum index (0-7) 55 | // Bits for each LED on the column 56 | void setColumn(uint8_t, uint8_t); 57 | 58 | // Clears the entire display (turn all LEDs off) 59 | void clear(); 60 | 61 | // direct raw write 62 | void write(uint8_t, uint8_t); 63 | 64 | // Writes a character to a given digit 65 | // digit index (0-7) 66 | // Character to write (A-Z, 0-9) 67 | // Dot on/off 68 | // Note: not all characters in the latin alphabet can be 69 | // properly displayed on a 7 segment display. 70 | void writeChar(uint8_t, char, bool); 71 | 72 | // Shorthand for writeChar without a dot. 73 | void writeChar(uint8_t, char); 74 | 75 | // Writes a single digit number to a given digit index 76 | void writeNumber(uint8_t, uint8_t); 77 | 78 | // Writes a character array starting from a given digit index 79 | // Starting index (0-7) 80 | // Array of characters to write (A-Z, 0-9) 81 | // This will stop when end of String is detected, 82 | // or when we run of out digits, whichever comes first 83 | // Note: not all characters in the latin alphabet can be 84 | // properly displayed on a 7 segment display. 85 | void print(uint8_t, String); 86 | 87 | // Sets whether to use the builtin decoder for each digit 88 | void setDecodeMode(uint8_t); 89 | 90 | // Sets the intensity of the display, in a range of 0-15 91 | // 0 is not off, it is minimum intensity. 92 | void setIntensity(uint8_t); 93 | 94 | // Sets how many digits are being used 95 | // If you're only using, say, 4 digits, setting the scan limit to 4 96 | // will improve brightness of those digits as the multiplexer doesn't 97 | // iterate over the unused digits. 98 | void setScanLimit(uint8_t); 99 | 100 | // Overrides all other settings and turns on all LEDs to full brightness 101 | void startDisplayTest(); 102 | 103 | // End display test mode, reverting back to other settings and data 104 | void stopDisplayTest(); 105 | 106 | void shutdown(); 107 | 108 | void activate(); 109 | 110 | private: 111 | uint8_t _displayCache[MAX_DIGITS]; 112 | uint8_t _pinChipSelect; 113 | SPISettings _spiSettings; 114 | void _beginTransmission(); 115 | void _endTransmission(); 116 | void _transmitSetRegister(uint8_t, uint8_t); 117 | void _setRegister(uint8_t, uint8_t); 118 | uint8_t _mapChar(char); 119 | }; 120 | 121 | #endif // MAX72S21_h -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/MCP23S17.h: -------------------------------------------------------------------------------- 1 | /* 2 | MCP23S17.h Version 0.2 3 | Microchip MCP23S17 SPI I/O Expander Class for Arduino 4 | Created by Cort Buffington & Keith Neufeld 5 | March, 2011 6 | January, 2013 7 | January, 2015 8 | February, 2016 9 | 10 | Modifications by Michael Duerinckx (MichD) 11 | 12 | Features Implemented (by word and bit): 13 | I/O Direction 14 | Pull-up on/off 15 | Input inversion 16 | Output write 17 | Input read 18 | 19 | Interrupt features are not implemented in this version 20 | byte based (portA, portB) functions are not implemented in this version 21 | 22 | NOTE: Addresses below are only valid when IOCON.BANK=0 (register addressing mode) 23 | This means one of the control register values can change register addresses! 24 | The default values is 0, so that's how we're using it. 25 | 26 | All registers except ICON (0xA and 0xB) are paired as A/B for each 8-bit GPIO port. 27 | Comments identify the port's name, and notes on how it is used. 28 | 29 | *THIS CLASS ENABLES THE ADDRESS PINS ON ALL CHIPS ON THE BUS WHEN THE FIRST CHIP OBJECT IS INSTANTIATED! 30 | 31 | USAGE: All Read/Write functions except wordWrite are implemented in two different ways. 32 | Individual pin values are set by referencing "pin #" and On/Off, Input/Output or High/Low where 33 | portA represents pins 0-7 and portB 8-15. So to set the most significant bit of portB, set pin # 15. 34 | To Read/Write the values for the entire chip at once, a word mode is supported buy passing a 35 | single argument to the function as 0x(portB)(portA). I/O mode Output is represented by 0. 36 | The wordWrite function was to be used internally, but was made public for advanced users to have 37 | direct and more efficient control by writing a value to a specific register pair. 38 | 39 | Code: 40 | 41 | Outside any method, instantiate the class: 42 | 43 | ``` 44 | MCP23S17 PortExpander(address, chipSelectPin); 45 | ``` 46 | 47 | in setup(): 48 | 49 | ``` 50 | PortExpander.begin(); 51 | // Set up your pin modes and any other config, see public methods for details 52 | ``` 53 | 54 | Using attachInterrupt: 55 | 56 | in your sketch's setup(), add the following: 57 | `attachInterrupt(INTERRUPT_PIN, processPortExpanderInterrupt, FALLING);` 58 | 59 | Add a fuction `processPortExpanderInterrupt` as follows: 60 | 61 | ``` 62 | void processPortExpanderInterrup() { 63 | PortExpander.processInterrupt(); 64 | } 65 | ``` 66 | 67 | Then, also in setup(), you can attach interrupts to individual pins: 68 | ``` 69 | PortExpander.attachInterrupt(pin, onSomeInputChange, RISING); 70 | ``` 71 | 72 | and make sure to declare onSomeInputChange: 73 | ``` 74 | void onSomeInputChange() { 75 | Called on a rising flank from that pin 76 | } 77 | ``` 78 | 79 | VERSION RELESE NOTES: 80 | V0.2 81 | Changed direct manipulation of pin 10 on ATMega168/328 via "PORTB" to use digitalWrite on an arbitrary 82 | SlaveSelect pin passed to the object through the constructor 83 | */ 84 | 85 | #ifndef MCP23S17_h 86 | #define MCP23S17_h 87 | 88 | // REGISTERS ARE DEFINED HERE SO THAT THEY MAY BE USED IN THE MAIN PROGRAM 89 | 90 | #define IODIRA (0x00) // MCP23x17 I/O Direction Register 91 | #define IODIRB (0x01) // 1 = Input (default), 0 = Output 92 | 93 | #define IPOLA (0x02) // MCP23x17 Input Polarity Register 94 | #define IPOLB (0x03) // 0 = Normal (default)(low reads as 0), 1 = Inverted (low reads as 1) 95 | 96 | #define GPINTENA (0x04) // MCP23x17 Interrupt on Change Pin Assignements 97 | #define GPINTENB (0x05) // 0 = No Interrupt on Change (default), 1 = Interrupt on Change 98 | 99 | #define DEFVALA (0x06) // MCP23x17 Default Compare Register for Interrupt on Change 100 | #define DEFVALB (0x07) // Opposite of what is here will trigger an interrupt (default = 0) 101 | 102 | #define INTCONA (0x08) // MCP23x17 Interrupt on Change Control Register 103 | #define INTCONB (0x09) // 1 = pin is compared to DEFVAL, 0 = pin is compared to previous state (default) 104 | 105 | #define IOCON (0x0A) // MCP23x17 Configuration Register 106 | // (0x0B) // Also Configuration Register 107 | 108 | #define GPPUA (0x0C) // MCP23x17 Weak Pull-Up Resistor Register 109 | #define GPPUB (0x0D) // INPUT ONLY: 0 = No Internal 100k Pull-Up (default) 1 = Internal 100k Pull-Up 110 | 111 | #define INTFA (0x0E) // MCP23x17 Interrupt Flag Register 112 | #define INTFB (0x0F) // READ ONLY: 1 = This Pin Triggered the Interrupt 113 | 114 | #define INTCAPA (0x10) // MCP23x17 Interrupt Captured Value for Port Register 115 | #define INTCAPB (0x11) // READ ONLY: State of the Pin at the Time the Interrupt Occurred 116 | 117 | #define GPIOA (0x12) // MCP23x17 GPIO Port Register 118 | #define GPIOB (0x13) // Value on the Port - Writing Sets Bits in the Output Latch 119 | 120 | #define OLATA (0x14) // MCP23x17 Output Latch Register 121 | #define OLATB (0x15) // 1 = Latch High, 0 = Latch Low (default) Reading Returns Latch State, Not Port Value! 122 | 123 | #include 124 | #include 125 | 126 | class MCP23S17 { 127 | 128 | typedef void (*InterruptHandler)(); 129 | 130 | public: 131 | // Constructor to instantiate a discrete IC as an object: 132 | // address 0-7 133 | // chipSelect pin 134 | MCP23S17(uint8_t, uint8_t); 135 | 136 | // Start the SPI Bus 137 | void begin(); 138 | 139 | // Typically only used internally, but allows the user to write any register pair if needed, so it's public 140 | void wordWrite(uint8_t, uint16_t); 141 | 142 | // Typically only used internally, but allows the user to write any register if needed, so it's public 143 | void byteWrite(uint8_t, uint8_t); 144 | 145 | // Sets the mode (input or output) of a single I/O pin 146 | // Pin number, input (1) / output (0) 147 | void pinMode(uint8_t, bool); 148 | 149 | // Sets the mode (input or output) of all I/O pins at once 150 | void pinMode(uint16_t); 151 | 152 | // Selects internal 100k input pull-up of a single I/O pin 153 | // Pin number, pull-up enabled (1) / disabled (0) 154 | void pullupMode(uint8_t, bool); 155 | 156 | // Selects internal 100k input pull-up of all I/O pins at once 157 | void pullupMode(uint16_t); 158 | 159 | // Selects input state inversion of a single I/O pin (writing 1 turns on inversion) 160 | // Pin number, invert enabled (1) / disabled (0) 161 | void inputInvert(uint8_t, bool); 162 | 163 | // Selects input state inversion of all I/O pins at once (writing a 1 turns on inversion) 164 | void inputInvert(uint16_t); 165 | 166 | // Sets a single pin to trigger interrupts when it changes 167 | void interruptOnChange(uint8_t, bool); 168 | 169 | // Configures which pins should trigger an interrupt when changed 170 | void interruptOnChange(uint16_t); 171 | 172 | // Configures for a single pin whether to compare to default value or just change 173 | // to trigger an interrupt 174 | void interruptCompareToDefault(uint8_t, bool); 175 | 176 | // Configures which pins should compare to default value or just change 177 | // to trigger an interrupt 178 | void interruptCompareToDefault(uint16_t); 179 | 180 | // Sets the default to compare to to trigger an interrupt, for a given pin 181 | void interruptSetDefault(uint8_t, bool); 182 | 183 | // Sets all the defaults to compare to trigger interrupts in one fell swoop 184 | void interruptSetDefault(uint16_t); 185 | 186 | // Sets an individual output pin HIGH or LOW 187 | void digitalWrite(uint8_t, bool); 188 | 189 | // Sets all output pins at once. If some pins are configured as input, those bits will be ignored on write 190 | void digitalWrite(uint16_t); 191 | 192 | // Reads an individual input pin 193 | bool digitalRead(uint8_t); 194 | 195 | // Reads an individual register and returns the byte. Argument is the register address 196 | uint8_t byteRead(uint8_t); 197 | 198 | // Reads all input pins at once. Be sure it ignore the value of pins configured as output! 199 | uint16_t digitalRead(); 200 | 201 | // Return an individual input pin from cached value - not using SPI to read up to date value 202 | bool digitalReadCache(uint8_t); 203 | 204 | // Return all input pins at once from cache 205 | uint16_t digitalReadCache(); 206 | 207 | // Attach an interrupt handler to a pin, using same modes are on Arduino's version 208 | // pin number, handler function, CHANGE / FALLING / RISING 209 | void attachInterrupt(uint8_t, InterruptHandler, int mode); 210 | 211 | // Remove an interrupt handler from a pin 212 | void detachInterrupt(uint8_t); 213 | 214 | // Handle interrupt from main program 215 | void processInterrupt(); 216 | 217 | private: 218 | // 3-bit address of the MCP23S17 in use 219 | uint8_t _address; 220 | 221 | // Slave-select pin 222 | uint8_t _ss; 223 | 224 | // Settings to use for SPI transmissions, initialized in begin() 225 | SPISettings _spiSettings; 226 | 227 | // Caches the mode (input/output) configuration of I/O pins 228 | uint16_t _modeCache; 229 | 230 | // Caches the internal pull-up configuration of input pins (values persist across mode changes) 231 | uint16_t _pullupCache; 232 | 233 | // Caches the input pin inversion selection (values persist across mode changes) 234 | uint16_t _invertCache; 235 | 236 | // Caches the interrupt-on-change selections 237 | uint16_t _interruptOnChangeCache; 238 | 239 | // Caches the interrupt comparison mode selections 240 | // If a bit here is 1, it compares to the default values rather than on change 241 | uint16_t _interruptCompareToDefaultCache; 242 | 243 | // Caches the default values compared to for triggering interrupts 244 | // These are only relevant for pins where we're comparing to default value 245 | uint16_t _interruptCompareDefaultsCache; 246 | 247 | // The MCP23S17 functionality for compare to default is a bit undesirable 248 | // in that it keeps the interrupt active until conditions change, rather 249 | // than just on change, so we're doing what it's meant to do, locally. 250 | // Each bit here indicates whether to compare whether we've changed values, 251 | // and whether that's a change from the default 252 | uint16_t _interruptLocalCompareToDefault; 253 | 254 | uint16_t _interruptLocalCompareDefaults; 255 | 256 | // Caches the output pin state of pins 257 | uint16_t _outputCache; 258 | 259 | // Caches input pins whenever they are read, so they can be retrieved from cache directly 260 | uint16_t _inputCache; 261 | 262 | // Function pointers to interrupt handlers for each pin 263 | InterruptHandler _interruptHandlers[16]; 264 | 265 | // Internal helpers to start/end transmission 266 | void _beginTransmission(); 267 | void _endTransmission(); 268 | 269 | // Helper to check whether pin is in range 270 | bool _isValidPin(uint8_t); 271 | 272 | // Helper for common action of setting one bit in a word 273 | // Input word, 1-indexed bit, new value for that bit 274 | // variable is passed by reference, this will modify the given variable 275 | void _toggleBit(uint16_t &, uint8_t, bool); 276 | 277 | // Returns the state of a single bit from a word 278 | // bit is 1-indexed 279 | bool _getBit(uint16_t, uint8_t); 280 | 281 | // Helper for _interruptHandler, determines 1-index pin number that caused interrupt 282 | // With some nice optimizations, like not bothering to request the seconds 283 | // (B) register if the A register was non-zero 284 | uint8_t _getInterruptCausingPin(); 285 | }; 286 | 287 | #endif //MCP23S17 288 | -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/MCP3202.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "MCP3202.h" 3 | 4 | MCP3202::MCP3202(uint8_t pinChipSelect) { 5 | _pinChipSelect = pinChipSelect; 6 | } 7 | 8 | void MCP3202::begin() { 9 | ::pinMode(_pinChipSelect, OUTPUT); 10 | ::digitalWrite(_pinChipSelect, 1); 11 | SPI.begin(); 12 | _spiSettings = SPISettings(18000000, MSBFIRST, SPI_MODE0); 13 | } 14 | 15 | uint16_t MCP3202::analogRead(bool channel) { 16 | return _read(1, channel); 17 | } 18 | 19 | uint16_t MCP3202::analogReadDifferential(bool sign) { 20 | return _read(0, sign); 21 | } 22 | 23 | uint16_t MCP3202::_read(bool singleOrDiff, bool oddOrSign) { 24 | // See MCB3202 datasheet page 13 ("5. Serial Communications") for details 25 | uint8_t commandBits = B00001001; // Leading zeroes, 2 config bits, MSBFIRST 26 | 27 | commandBits |= singleOrDiff << 2; 28 | commandBits |= oddOrSign << 1; 29 | 30 | _beginTransmission(); 31 | 32 | // Transfer command bits (with leading 0s as we work in bytes) 33 | SPI.transfer(commandBits); 34 | // Get most significant 7 bits - 7 because the first one (MSB) is a null bit 35 | uint16_t msbits7 = SPI.transfer(0) & 0b01111111; 36 | // Get leas significant 5 bits (and 3 extra bits we'll discard) 37 | uint16_t lsbbits5 = SPI.transfer(0) & 0b11111000; 38 | 39 | _endTransmission(); 40 | 41 | // Return the compound result 42 | // Shift msbits7 5 bits to the right to make room for the least significant bits 43 | // Shift least significant bits 3 to the right to get rid of extra bits and move 44 | // the ones we want to the right place 45 | // then OR them together to form a 12 bit number 46 | return (msbits7 << 5) | (lsbbits5 >> 3); 47 | } 48 | 49 | void MCP3202::_beginTransmission() { 50 | ::digitalWrite(_pinChipSelect, 0); 51 | SPI.beginTransaction(_spiSettings); 52 | } 53 | 54 | void MCP3202::_endTransmission() { 55 | SPI.endTransaction(); 56 | ::digitalWrite(_pinChipSelect, 1); 57 | } 58 | -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/MCP3202.h: -------------------------------------------------------------------------------- 1 | /* 2 | * MCP3202 dual channel ADC Library 3 | * By MichD 4 | */ 5 | 6 | #include 7 | #include 8 | 9 | #ifndef MCP3202_h 10 | #define MCP3202_h 11 | 12 | class MCP3202 { 13 | public: 14 | // Constructor, takes chip select pin 15 | MCP3202(uint8_t); 16 | 17 | // Start the SPI bus 18 | void begin(); 19 | 20 | // Read value from a single channel; 0 = channel 0, 1 = channel 1 21 | uint16_t analogRead(bool); 22 | 23 | // Read value in pseudodifferential mode, selecting sign 24 | uint16_t analogReadDifferential(bool); 25 | 26 | private: 27 | uint8_t _pinChipSelect; 28 | SPISettings _spiSettings; 29 | uint16_t _read(bool, bool); 30 | void _beginTransmission(); 31 | void _endTransmission(); 32 | }; 33 | 34 | #endif // MCP3202_h 35 | -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/MCP492X.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "MCP492X.h" 3 | 4 | MCP492X::MCP492X(uint8_t pinChipSelect) { 5 | _pinChipSelect = pinChipSelect; 6 | } 7 | 8 | void MCP492X::begin() { 9 | ::pinMode(_pinChipSelect, OUTPUT); 10 | ::digitalWrite(_pinChipSelect, 1); 11 | SPI.begin(); 12 | _spiSettings = SPISettings(20000000, MSBFIRST, SPI_MODE0); 13 | } 14 | 15 | void MCP492X::analogWrite(uint16_t value) { 16 | analogWrite(0, value); 17 | } 18 | 19 | // Only applies to MCP4922 20 | void MCP492X::analogWrite(bool odd, uint16_t value) { 21 | analogWrite( 22 | odd, // Pass channel 23 | 0, // Not buffered, 24 | 1, // Gain mode 1x (0 = 2x) 25 | 1, // Don't shut down output 26 | value); 27 | } 28 | 29 | // If you want full control, this method lets you set all config bits 30 | // See MCP492X datasheet page 18 ("5.0 Serial interface") for details 31 | void MCP492X::analogWrite( 32 | bool odd, bool buffered, bool gain, bool active, uint16_t value) { 33 | 34 | uint8_t configBits = odd << 3 | buffered << 2 | gain << 1 | active; 35 | 36 | // Compose the first byte to send to the DAC: 37 | // the 4 control bits, and the 4 most significant bits of the value 38 | uint8_t firstByte = configBits << 4 | (value & 0xF00) >> 8; 39 | // Second byte is the lower 8 bits of the value 40 | uint8_t secondByte = value & 0xFF; 41 | 42 | _beginTransmission(); 43 | SPI.transfer(firstByte); 44 | SPI.transfer(secondByte); 45 | _endTransmission(); 46 | } 47 | 48 | void MCP492X::_beginTransmission() { 49 | ::digitalWrite(_pinChipSelect, 0); 50 | SPI.beginTransaction(_spiSettings); 51 | } 52 | 53 | void MCP492X::_endTransmission() { 54 | SPI.endTransaction(); 55 | ::digitalWrite(_pinChipSelect, 1); 56 | } -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/MCP492X.h: -------------------------------------------------------------------------------- 1 | /* 2 | * MCP4921/MCP4922 12 bit DAC Library 3 | * By MichD 4 | * 5 | * The Microchip MCP4921 and MCP4922 are 12 bit digital to analog converters 6 | * with an SPI interface. The MCP4921 has one DAC output, the MCP4922 has two. 7 | * 8 | * This library is built around the Arduino default SPI library and uses the 9 | * designated SPI pins, in addition to a configurable chip select pin, passed 10 | * in the constructor. 11 | * Look up the designated pins for your arduino board, and wire up as follows: 12 | * 13 | * | Arduino | MCP492X | MCP4921 pin | MCP4922 pin | 14 | * |---------|-----------|-------------|-------------| 15 | * | SCK | SCK | 3 | 4 | 16 | * | MOSI | SDI | 4 | 5 | 17 | * | your CS | CS | 2 | 3 | 18 | * 19 | * Where "your CS" is whichever pin you'd like to use as chip select on 20 | * your arduino board. 21 | */ 22 | 23 | #include 24 | #include 25 | 26 | // Ensure we don't double-define the functionality 27 | #ifndef MCP492X_h 28 | #define MCP492X_h 29 | 30 | class MCP492X { 31 | public: 32 | // Constructor, takes the chip select pin 33 | // Use outside any functions: 34 | // `MCP492X myDac(pinNumber);` 35 | MCP492X(uint8_t); 36 | 37 | // Initilize, starts the SPI bus. Call in setup() 38 | // Example: 39 | // ``` 40 | // void setup() { 41 | // myDac.begin(); 42 | // } 43 | // 44 | void begin(); 45 | 46 | // Writes a 12 bit value to the output. 47 | // If on the MCP4922, defaults to DAC output 0 (A). 48 | // Example: 49 | // ``` 50 | // myDac.analogWrite(1234); 51 | // ``` 52 | void analogWrite(uint16_t); // Write a 12 bit value 53 | 54 | // Writes a 12 bit value to a given DAC output (0 or 1 / A or B) 55 | // Param 1 = DAC selection 56 | // Param 2 = 12 bit value 57 | // Example: 58 | // ``` 59 | // myDac.analogWrite(1, 4095); 60 | // ``` 61 | void analogWrite(bool, uint16_t); // Write a 12 bit value to a specific output (only MCP4922) 62 | 63 | // Writes a 12 bit value to a given DAC output (0 or 1 / A or B), 64 | // and allows setting every config bit individually. 65 | // Param 1 = DAC selection 66 | // Param 2 = buffer input 67 | // Param 2 = gain mode (1 = 1x, 0 = 2x) 68 | // Param 3 = shut down output (1 = active, 0 = shutdown) 69 | // Param 4 = 12 bit value 70 | // Example: 71 | // ``` 72 | // myDac.analogWrite(1, 0, 1, 1, 2480); 73 | // ``` 74 | void analogWrite(bool, bool, bool, bool, uint16_t); // Full control over control bits 75 | 76 | private: 77 | // Internal fields/methods you should not need to worry about. 78 | // Holds onto the chip select pin number 79 | uint8_t _pinChipSelect; 80 | 81 | // SPI settings for this chip, set up in begin() 82 | SPISettings _spiSettings; 83 | 84 | // Internal helpers to start/end transmission 85 | void _beginTransmission(); 86 | void _endTransmission(); 87 | }; 88 | 89 | #endif // MCP921X_h -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/io.h: -------------------------------------------------------------------------------- 1 | #ifndef MODULE_IO_H 2 | #define MODULE_IO_H 3 | 4 | // Chip select pins for the various SPI devices being used 5 | #define PIN_SPI_CS_ADC 6 6 | #define PIN_SPI_CS_DAC A2 7 | #define PIN_SPI_CS_PORTEXP A0 8 | #define PIN_SPI_CS_DISP 9 9 | 10 | #define PIN_EXTERNAL_CLOCK 7 11 | 12 | #define PIN_RUNNING_INDICATOR 8 13 | #define PIN_GATE_OUT 10 14 | #define PIN_TRIGGER_OUT 2 15 | #define PIN_ROUTE_CHAINED_OUTPUT 1 16 | #define PIN_ENABLE_SLIDE_OUTPUT 0 17 | 18 | #define PIN_STEP_ADDR_A A1 19 | #define PIN_STEP_ADDR_B A3 20 | #define PIN_STEP_ADDR_C 4 21 | #define PIN_STEP_ENABLE 5 22 | 23 | #define PIN_PORTEXP_INTERRUPT 3 24 | 25 | #define PORTEXP_PIN_GATE_MODE_SELECT_BUTTON 9 26 | #define PORTEXP_PIN_REPEAT_SELECT_BUTTON 10 27 | #define PORTEXP_PIN_SEQUENCE_MODE_SELECT_BUTTON 11 28 | #define PORTEXP_PIN_RUN_MODE_BUTTON 12 29 | #define PORTEXP_PIN_SCALE_BUTTON 13 30 | #define PORTEXP_PIN_RESET_BUTTON 14 31 | #define PORTEXP_PIN_LOAD_BUTTON 15 32 | #define PORTEXP_PIN_SAVE_BUTTON 16 33 | #define PORTEXP_PIN_UP_ARROW 1 34 | #define PORTEXP_PIN_DOWN_ARROW 2 35 | #define PORTEXP_PIN_PARAM_SELECT_A 3 36 | #define PORTEXP_PIN_PARAM_SELECT_B 4 37 | #define PORTEXP_PIN_CHAIN_INPUT 5 38 | #define PORTEXP_PIN_CHAIN_OUTPUT 6 39 | #define PORTEXP_PIN_SLIDE_BUTTON 7 40 | 41 | #define PORTEXP_NUM_PINS 16 42 | 43 | #define PORT_EXPANDER_CHANNEL 0 44 | 45 | #define DEBOUNCE_TIME_MS 100 46 | 47 | #define PARAM_MIN_NOTE 0b01 48 | #define PARAM_MAX_NOTE 0b11 49 | #define PARAM_TIME_DIVIDER 0b10 50 | 51 | // Least significant byte describes bits to be written to a row 52 | // Most significat bits describe which row to use 53 | // Split up accordingly 54 | #define LED_INDICATOR_NONE 0x400 // None of those LEDs on 55 | #define LED_INDICATOR_STEP_NOTE 0x440 56 | #define LED_INDICATOR_MAX_NOTE 0x420 57 | #define LED_INDICATOR_MIN_NOTE 0x410 58 | 59 | #define ADC_CV_CHANNEL 0 60 | #define ADC_STEP_CHANNEL 1 61 | 62 | #define ADC_RESOLUTION_BIT 12 63 | #define DAC_RESOLUTION_BIT 12 64 | 65 | #define DAC_CENTER_VALUE 2048 66 | #define ADC_MAX 4096 67 | #define DAC_MAX 4096 68 | 69 | #define NUM_STEPS 8 70 | 71 | // There are only 7 possible tasks, and none may be duplicated in the queue 72 | #define MAX_TASK_QUEUE_LENGTH 7 73 | #define DISPLAY_STRING_LENGTH 5 // 1 for the null terminator 74 | 75 | #include 76 | #include 77 | #include 78 | 79 | #include "MAX72S21.h" // Display driver 80 | #include "MCP23S17.h" // Port expander 81 | #include "MCP3202.h" // ADC 82 | #include "MCP492X.h" // DAC 83 | 84 | /* 85 | * MCP23S17 pin number mapping: 86 | * A0 - 1 | B0 - 9 87 | * A1 - 2 | B1 - 10 88 | * A2 - 3 | B2 - 11 89 | * A3 - 4 | B3 - 12 90 | * A4 - 5 | B4 - 13 91 | * A5 - 6 | B5 - 14 92 | * A6 - 7 | B6 - 15 93 | * A7 - 8 | B7 - 16 94 | * 95 | * When writing a word: order is MSB B7-B0 A7-A0 LSB 96 | */ 97 | 98 | /* SPI pins on pro micro for reference: 99 | * MOSI: 16 100 | * MISO: 14 101 | * SCK: 15 102 | */ 103 | 104 | enum Tasks { 105 | BLANK, 106 | READ_ADC, 107 | READ_SELECTED_STEP, 108 | WRITE_DAC, 109 | READ_PORTEXP, 110 | PROCESS_PORTEXP_INTERRUPT, 111 | WRITE_DISPLAY, 112 | WRITE_LEDS 113 | }; 114 | 115 | enum LEDs { 116 | INDICATOR_NONE, 117 | INDICATOR_STEP_NOTE, 118 | INDICATOR_MIN_NOTE, 119 | INDICATOR_MAX_NOTE 120 | }; 121 | 122 | 123 | typedef void (*AdcReadHandler)(unsigned int); 124 | typedef void (*ButtonPressedHandler)(void); 125 | typedef void (*ArrowButtonPressedHandler)(bool); 126 | typedef void (*TickHandler)(void); 127 | typedef void (*PinChangedHandler)(bool); 128 | 129 | class IO { 130 | public: 131 | static void init(); 132 | 133 | static void setGate(bool); 134 | 135 | static void setTrigger(bool); 136 | 137 | // When set to true, multiplexers are set to output 138 | // pitch/velocity/gate/trigger from the chain input 139 | // instead of from the local sequencer 140 | static void setUseChainedRouting(bool); 141 | 142 | static void setRunningIndicator(bool); 143 | 144 | // Drive multiplexers and decoder for selecting the current step 145 | static void setStep(uint8_t); 146 | 147 | // write to DAC (SPI) 148 | static void setPitch(uint16_t); 149 | 150 | // Read from the ADC, processing the result with a handler function 151 | static void readAdc(AdcReadHandler); 152 | 153 | // Routinely read port expander values 154 | static void readPortExp(); 155 | 156 | // Read the cached data from port expander 157 | static uint16_t readPortExpCache(); 158 | 159 | static bool getPortExpPin(uint8_t); 160 | 161 | static uint8_t getSelectedParam(); 162 | 163 | // Read and derive the pressed step from the ADC 164 | // The step buttons are set up as a little keyboard, resistors between them 165 | // We read an ADC value to figure out which one's pressed, if any 166 | static void readSelectedStep(); 167 | 168 | static uint8_t getSelectedStep(); 169 | 170 | // Note: very limiting but should cover needs pretty well for now 171 | // Write 4 characters to the display 172 | static void writeDisplay(String); 173 | 174 | // Writes one of a configuration of LEDs 175 | // This is an enum which covers needs for now (light one out of a set of 3) 176 | // but could be updated to take a uint16_t instead to cover LED_INDICATOR_* 177 | // constant formats directly 178 | static void writeLeds(LEDs); 179 | 180 | static void setChainOut(bool); 181 | static bool getChainOut(); 182 | 183 | static void setSlideEnabled(bool); 184 | 185 | // Assign button press handlers 186 | static void onSequenceModeButtonPressed(ButtonPressedHandler); 187 | static void onGateButtonPressed(ButtonPressedHandler); 188 | static void onRepeatButtonPressed(ButtonPressedHandler); 189 | static void onRunModeButtonPressed(ButtonPressedHandler); 190 | static void onScaleButtonPressed(ButtonPressedHandler); 191 | static void onResetButtonPressed(ButtonPressedHandler); 192 | static void onLoadButtonPressed(ButtonPressedHandler); 193 | static void onSaveButtonPressed(ButtonPressedHandler); 194 | static void onSlideButtonPressed(ButtonPressedHandler); 195 | static void onMinNoteArrowButtonPressed(ArrowButtonPressedHandler); 196 | static void onMaxNoteArrowButtonPressed(ArrowButtonPressedHandler); 197 | static void onTimeDivisionArrowButtonPressed(ArrowButtonPressedHandler); 198 | static void onChainInputChanged(PinChangedHandler); 199 | 200 | // External clock tick handler 201 | static void onExternalClockTick(TickHandler); 202 | 203 | private: 204 | static void _queueTask(Tasks); 205 | static void _processQueuedTask(); 206 | static void _taskFinished(); 207 | static void _taskQueueInsertAt(Tasks, uint8_t); 208 | static bool _taskQueueContainsTask(Tasks); 209 | static void _executeTask(Tasks); 210 | static void _taskReadAdc(); 211 | static void _taskReadSelectedStep(); 212 | static void _taskWriteDac(); 213 | static void _taskReadPortExp(); 214 | static void _taskProcessPortExpInterrupt(); 215 | static void _taskWriteDisplay(); 216 | static void _taskWriteLeds(); 217 | 218 | static void _processPortExpanderInterrupt(); 219 | static void _processRunStopPressedInterrupt(); 220 | static void _processExternalClockTick(); 221 | static bool _debounceButton(uint8_t); 222 | 223 | static void _internalHandleSequenceModeButtonPressed(); 224 | static void _internalHandleGateButtonPressed(); 225 | static void _internalHandleRepeatButtonPressed(); 226 | static void _internalHandleRunModeButtonPressed(); 227 | static void _internalHandleScaleButtonPressed(); 228 | static void _internalHandleResetButtonPressed(); 229 | static void _internalHandleLoadButtonPressed(); 230 | static void _internalHandleSaveButtonPressed(); 231 | static void _internalHandleSlideButtonPressed(); 232 | 233 | 234 | static void _setupArrowButtonHandler(); 235 | static void _internalHandleUpArrowButtonPressed(); 236 | static void _internalHandleDownArrowButtonPressed(); 237 | static void _handleArrowButtonPressed(bool); 238 | 239 | static void _internalHandleChainInputChanged(); 240 | 241 | static void _noopArrowButtonPressedHandler(bool); 242 | 243 | volatile static bool _spiBusy; 244 | volatile static Tasks _taskQueue[MAX_TASK_QUEUE_LENGTH]; 245 | volatile static uint8_t _taskQueueLength; 246 | volatile static unsigned int _queuedDacValue; 247 | volatile static uint8_t _cachedSelectedStep; 248 | static const unsigned int _stepSize = (ADC_MAX - 8) / (NUM_STEPS + 1); 249 | static const unsigned int _halfStepSize = _stepSize / 2; 250 | static String _queuedDisplayValue; 251 | static uint16_t _queuedLedsValue; 252 | static AdcReadHandler _adcReadHandler; 253 | static bool _arrowButtonHandlerSetup; 254 | volatile static bool _chainOutputCache; 255 | volatile static uint32_t _debounceLastPressed[PORTEXP_NUM_PINS]; 256 | 257 | static ButtonPressedHandler _sequenceModeButtonPressedHandler; 258 | static ButtonPressedHandler _gateButtonPressedHandler; 259 | static ButtonPressedHandler _repeatButtonPressedHandler; 260 | static ButtonPressedHandler _runModeButtonPressedHandler; 261 | static ButtonPressedHandler _scaleButtonPressedHandler; 262 | static ButtonPressedHandler _resetButtonPressedHandler; 263 | static ButtonPressedHandler _loadButtonPressedHandler; 264 | static ButtonPressedHandler _saveButtonPressedHandler; 265 | static ButtonPressedHandler _slideButtonPressedHandler; 266 | 267 | static ArrowButtonPressedHandler _minNoteArrowButtonPressedHandler; 268 | static ArrowButtonPressedHandler _maxNoteArrowButtonPressedHandler; 269 | static ArrowButtonPressedHandler _timeDivisionArrowButtonPressedHandler; 270 | 271 | static PinChangedHandler _chainInputChangedHandler; 272 | 273 | static TickHandler _externalClockTickHandler; 274 | 275 | static MAX72S21 _display; 276 | static MCP23S17 _portExp; 277 | static MCP3202 _adc; 278 | static MCP492X _dac; 279 | }; 280 | 281 | #endif // MODULE_IO_H 282 | -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/notemapper.cpp: -------------------------------------------------------------------------------- 1 | #include "notemapper.h" 2 | 3 | uint16_t NoteMapper::_noteOutputValues[NOTE_RANGE]; 4 | volatile uint8_t NoteMapper::_selectedScale = SCALE_CHROMATIC; 5 | volatile uint8_t NoteMapper::_rangeMinNote = DEFAULT_MIN_NOTE; 6 | volatile uint8_t NoteMapper::_rangeMaxNote = DEFAULT_MAX_NOTE; 7 | 8 | void NoteMapper::init() { 9 | double noteStep = (double)DAC_MAX / (double)(NOTE_RANGE - 1); 10 | 11 | for (uint8_t i = 0; i < NOTE_RANGE; i++) { 12 | _noteOutputValues[i] = (uint16_t)round(noteStep * (double)i); 13 | } 14 | } 15 | 16 | uint8_t NoteMapper::mapToNote(uint16_t input) { 17 | uint8_t note = (uint8_t)( 18 | ((double)input / (double)ADC_MAX) * 19 | (_rangeMaxNote - _rangeMinNote + 1) + _rangeMinNote 20 | ); 21 | 22 | uint8_t baseNote = note % 12; 23 | uint8_t mappedBaseNote = _getClosest(baseNote, _getScale(_selectedScale)); 24 | 25 | return note - baseNote + mappedBaseNote; 26 | } 27 | 28 | uint16_t NoteMapper::getNoteOutput(uint8_t note) { 29 | note = constrain(note, 0, NOTE_RANGE -1); 30 | return _noteOutputValues[note]; 31 | } 32 | 33 | String NoteMapper::getNoteText(uint8_t note) { 34 | String octaveText = String(((note + MIN_NOTE_MIDI) / 12)); 35 | uint8_t baseNote = note % 12; 36 | 37 | switch (baseNote) { 38 | case 0: return "C " + octaveText; 39 | case 1: return "Db " + octaveText; 40 | case 2: return "D " + octaveText; 41 | case 3: return "Eb " + octaveText; 42 | case 4: return "E " + octaveText; 43 | case 5: return "F " + octaveText; 44 | case 6: return "Gb " + octaveText; 45 | case 7: return "G " + octaveText; 46 | case 8: return "Ab " + octaveText; 47 | case 9: return "A " + octaveText; 48 | case 10: return "Bb " + octaveText; 49 | case 11: return "B " + octaveText; 50 | default: return "----"; 51 | } 52 | } 53 | 54 | String NoteMapper::getScaleText(uint8_t scale) { 55 | switch (scale) { 56 | case SCALE_C_MAJOR: return "CMaj"; 57 | case SCALE_PENTATONIC: return "PENT"; 58 | case SCALE_BLUES: return "BLUE"; 59 | case SCALE_HEXATONIC: return "HEXA"; 60 | case SCALE_CHROMATIC: 61 | default: 62 | return "Chro"; 63 | } 64 | } 65 | 66 | uint8_t NoteMapper::cycleMinNote(bool up) { 67 | if (up) { 68 | if (_rangeMinNote < NOTE_RANGE) _rangeMinNote++; 69 | } else { 70 | if (_rangeMinNote > 0) _rangeMinNote--; 71 | } 72 | 73 | return _rangeMinNote; 74 | } 75 | 76 | uint8_t NoteMapper::cycleMaxNote(bool up) { 77 | if (up) { 78 | if (_rangeMaxNote < NOTE_RANGE) _rangeMaxNote++; 79 | } else { 80 | if (_rangeMaxNote > 0) _rangeMaxNote--; 81 | } 82 | 83 | return _rangeMaxNote; 84 | } 85 | 86 | uint8_t NoteMapper::cycleScale() { 87 | uint8_t nextScale = _selectedScale + 1; 88 | if (nextScale > MAX_SCALE) nextScale = 0; 89 | _selectedScale = nextScale; 90 | return nextScale; 91 | } 92 | 93 | void NoteMapper::collectSettings(Settings *settingsToSave) { 94 | settingsToSave->scale = _selectedScale; 95 | settingsToSave->minNote = _rangeMinNote; 96 | settingsToSave->maxNote = _rangeMaxNote; 97 | } 98 | 99 | void NoteMapper::loadFromSettings(Settings *settings) { 100 | _selectedScale = constrain(settings->scale, 0, MAX_SCALE); 101 | _rangeMinNote = constrain(settings->minNote, 0, NOTE_RANGE); 102 | _rangeMaxNote = constrain(settings->maxNote, _rangeMinNote, NOTE_RANGE); 103 | } 104 | 105 | uint8_t* NoteMapper::_getScale(uint8_t scaleIndex) { 106 | static uint8_t chromaticScale[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, SCALE_TERMINATOR }; 107 | static uint8_t cMajorScale[] = { 0, 2, 4, 5, 7, 9, 11, SCALE_TERMINATOR }; 108 | static uint8_t pentatonicScale[] = { 1, 3, 6, 8, 10, SCALE_TERMINATOR }; 109 | static uint8_t bluesScale[] = { 1, 3, 6, 8, 9, 10, SCALE_TERMINATOR }; 110 | static uint8_t hexatonicScale[] = { 0, 2, 4, 6, 8, 10, SCALE_TERMINATOR }; 111 | 112 | switch (scaleIndex) { 113 | case SCALE_CHROMATIC: return chromaticScale; 114 | case SCALE_C_MAJOR: return cMajorScale; 115 | case SCALE_PENTATONIC: return pentatonicScale; 116 | case SCALE_BLUES: return bluesScale; 117 | case SCALE_HEXATONIC: return hexatonicScale; 118 | default: return chromaticScale; 119 | } 120 | } 121 | 122 | uint8_t NoteMapper::_getClosest(uint8_t baseNote, uint8_t *scale) { 123 | baseNote = constrain(baseNote, 0, 12); 124 | uint8_t i = 0; 125 | 126 | while (baseNote > *(scale + i) && *(scale + i) != SCALE_TERMINATOR) i++; 127 | 128 | if (*(scale + i) == SCALE_TERMINATOR) { 129 | return baseNote; 130 | } 131 | 132 | // If we have an identical match, return base note as is 133 | if (baseNote == *(scale + i)) return baseNote; 134 | 135 | // If the very first note in the scale was higher than our baseNote, return that note 136 | if (i == 0) return *scale; 137 | 138 | // Otherwise, determine whether the note above or under is closer, and return closest 139 | if ((baseNote - *(scale + i - 1)) < (*(scale + i) - baseNote)) { 140 | return *(scale + i - 1); 141 | } else { 142 | return *(scale + i); 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/notemapper.h: -------------------------------------------------------------------------------- 1 | #ifndef NOTEMAPPER_H 2 | #define NOTEMAPPER_H 3 | 4 | #ifndef ADC_MAX 5 | #define ADC_MAX 4096 6 | #endif // ADC_MAX 7 | 8 | #ifndef DAC_MAX 9 | #define DAC_MAX 4096 10 | #endif // DAC_MAX 11 | 12 | #define MIN_NOTE_MIDI 24 // C2 13 | #define MAX_NOTE_MIDI 108 // C9 14 | #define NOTE_RANGE 84 15 | 16 | #define DEFAULT_MIN_NOTE 12 17 | #define DEFAULT_MAX_NOTE 36 18 | 19 | #define SCALE_CHROMATIC 0 20 | #define SCALE_C_MAJOR 1 21 | #define SCALE_PENTATONIC 2 22 | #define SCALE_BLUES 3 23 | #define SCALE_HEXATONIC 4 24 | 25 | #define MAX_SCALE 4 26 | 27 | #define SCALE_TERMINATOR 0xFF 28 | 29 | #include "settings.h" 30 | #include 31 | #include 32 | #include 33 | 34 | class NoteMapper { 35 | public: 36 | static void init(); 37 | // Maps a ADC reading to a note base on current range and such 38 | static uint8_t mapToNote(uint16_t); 39 | 40 | static uint16_t getNoteOutput(uint8_t); 41 | 42 | // Builds a String representation of a note, for display 43 | static String getNoteText(uint8_t); 44 | 45 | // String representation of a scale, for display 46 | static String getScaleText(uint8_t); 47 | 48 | // Sets the min note up or down, and returns the new min note 49 | static uint8_t cycleMinNote(bool); 50 | 51 | // Sets the max note up or down, and returns the new max note 52 | static uint8_t cycleMaxNote(bool); 53 | 54 | // Cycles to the next defined scale and returns the scale identifier 55 | static uint8_t cycleScale(); 56 | 57 | // Writes notemapper's settings to the given settings struct 58 | static void collectSettings(Settings *settingsToSave); 59 | 60 | // Given settings struct, changes local settings to the provided ones 61 | static void loadFromSettings(Settings *settings); 62 | 63 | private: 64 | static uint8_t* _getScale(uint8_t); 65 | static uint8_t _getClosest(uint8_t, uint8_t*); 66 | static uint16_t _noteOutputValues[]; 67 | static volatile uint8_t _selectedScale; 68 | static volatile uint8_t _rangeMinNote; 69 | static volatile uint8_t _rangeMaxNote; 70 | }; 71 | 72 | #endif // NOTEMAPPER_H 73 | -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/sequence.h: -------------------------------------------------------------------------------- 1 | #ifndef MODULE_SEQUENCE_H 2 | #define MODULE_SEQUENCE_H 3 | 4 | #define PPQ 24 // Pulses per quarter note, like in MIDI 5 | #define MIN_TIME_DIVIDER 1 6 | #define MAX_TIME_DIVIDER 16 7 | #define DEFAULT_TIME_DIVIDER 16 8 | 9 | // Don't change this; rest of code is not set up for different value. 10 | // It is only here to clarify the meaning of the number 8 in the code. 11 | #ifndef NUM_STEPS 12 | #define NUM_STEPS 8 13 | #endif 14 | 15 | // Sequence modes 16 | #define SEQUENCE_MODE_FORWARD 0 17 | #define SEQUENCE_MODE_REVERSE 1 18 | #define SEQUENCE_MODE_BACK_AND_FORTH 2 19 | #define SEQUENCE_MODE_ALT_FORWARD 3 20 | #define SEQUENCE_MODE_ALT_REVERSE 4 21 | #define SEQUENCE_MODE_ALT_BACK_AND_FORTH_A 5 22 | #define SEQUENCE_MODE_ALT_BACK_AND_FORTH_B 6 23 | #define SEQUENCE_MODE_RANDOM 7 24 | 25 | #define MIN_SEQUENCE_MODE 0 26 | #define MAX_SEQUENCE_MODE 8 27 | 28 | // Gate modes 29 | #define GATE_MODE_HALF_STEP 0 30 | #define GATE_MODE_FULL_STEP 1 31 | #define GATE_MODE_REPEAT_HALF 2 32 | #define GATE_MODE_REPEAT_FULL 3 33 | #define GATE_MODE_SILENT 4 34 | #define MAX_GATE_MODE_VALUE 4 35 | 36 | #define MIN_STEP_REPEAT 0 37 | #define MAX_STEP_REPEAT 8 38 | 39 | #define MAX_SEQUENCE_LENGTH 16 40 | #define SEQUENCE_TERMINATOR 0xFF 41 | #define SEQUENCE_RANDOM_STEP 0xEE 42 | 43 | // Shorthand 44 | #define SEQ_RS SEQUENCE_RANDOM_STEP 45 | 46 | #include "settings.h" 47 | #include 48 | #include 49 | 50 | enum RunModes { 51 | // Not moving on on tick(), doesn't respond to chainTrigger() 52 | NOT_RUNNING, 53 | // Moves on every tick(), switches to WAITING on sequence end if chained 54 | RUNNING, 55 | // Will switch to RUNNING on chainTrigger() 56 | WAITING 57 | }; 58 | 59 | typedef void (*BoolChangedHandler)(bool); 60 | typedef void (*ByteChangedHandler)(uint8_t); 61 | typedef void (*EventHandler)(void); 62 | 63 | // Sequence deals with everything to do with actual sequencing, that is, 64 | // figuring out which step is active, which is next, managing the gate 65 | class Sequence { 66 | public: 67 | // Initializes values 68 | static void init(); 69 | 70 | // Called every pulse (as in PPQ), will advance sequence when needed 71 | static void tick(); 72 | 73 | // Called on a positive flank of the chain input, 74 | // if sequencer is in waiting mode, this sets it to running 75 | static void chainTrigger(); 76 | 77 | // Toggle running, stop if running, start if not running 78 | static void toggleRunMode(); 79 | 80 | static bool getChained(); 81 | static void setChained(bool); 82 | 83 | // Accessor to see whether the sequence is currently started 84 | static bool isRunning(); 85 | 86 | // Set the sequence mode to one of the SEQUENCE_MODE_ constants 87 | static uint8_t setSequenceMode(uint8_t); 88 | 89 | // Manually selects the active step 90 | static void selectStep(uint8_t); 91 | 92 | // Retrieve the currently selected step 93 | static uint8_t getSelectedStep(); 94 | 95 | // Manually set the gate signal. This will get overridden by what the 96 | // sequence dictates when it's running 97 | static void setGate(bool); 98 | 99 | // Sets the time divider, that is, the musical length of 1 step 100 | // For instance the value 8 would be 1 eight note 101 | static void setTimeDivider(uint8_t); 102 | 103 | static uint8_t cycleTimeDivider(bool); 104 | 105 | // Change gate mode per step, directly, or by cycling 106 | static uint8_t setGateModeForStep(uint8_t step, uint8_t gateMode); 107 | static uint8_t cycleGateModeForStep(uint8_t step); 108 | 109 | // Change step repetition count, directly, or by cycling 110 | static uint8_t setStepRepeatForStep(uint8_t step, uint8_t repetitions); 111 | static uint8_t cycleStepRepeatForStep(uint8_t step); 112 | 113 | static bool getSlideEnabledForStep(uint8_t step); 114 | static void setSlideEnabledForStep(uint8_t step, bool on); 115 | 116 | // Writes Sequence's local settings to teh given settings struct 117 | static void collectSettings(Settings *settingsToSave); 118 | 119 | // Given settings struct, changes local settings to the provided ones 120 | static void loadFromSettings(Settings *settings); 121 | 122 | // Event handlers 123 | static void onRunningIndicatorChange(BoolChangedHandler); 124 | // Distinct from onRunningIndicatorChange 125 | static void onRunningChange(BoolChangedHandler); 126 | static void onGateChange(BoolChangedHandler); 127 | static void onTriggerChange(BoolChangedHandler); 128 | static void onSlideChange(BoolChangedHandler); 129 | static void onSelectedStepChange(ByteChangedHandler); 130 | static void onSequenceEnd(EventHandler); 131 | 132 | private: 133 | static const uint8_t _sequences[][MAX_SEQUENCE_LENGTH + 1]; 134 | static volatile uint8_t _selectedSequence[MAX_SEQUENCE_LENGTH + 1]; 135 | static volatile uint8_t _indexInSequence; 136 | static volatile uint8_t _currentStep; 137 | static volatile uint8_t _currentStepRepetition; 138 | static volatile uint8_t _sequenceMode; 139 | static volatile uint8_t _gateMode[NUM_STEPS]; 140 | static volatile uint8_t _stepRepeat[NUM_STEPS]; 141 | static volatile uint8_t _stepSlide; 142 | static volatile uint8_t _timeDivider; 143 | static volatile uint32_t _pulsesPerSubstep; 144 | static volatile bool _firstHalfOfStep; 145 | static volatile uint32_t _internalTicks; 146 | static volatile RunModes _runMode; 147 | static volatile bool _running; 148 | static volatile bool _runningIndicator; 149 | static volatile bool _gate; 150 | static volatile bool _trigger; 151 | static volatile bool _chained; 152 | static BoolChangedHandler _onRunningIndicatorChangedHandler; 153 | static BoolChangedHandler _onRunningChangedHandler; 154 | static BoolChangedHandler _onGateChangedHandler; 155 | static BoolChangedHandler _onTriggerChangedHandler; 156 | static ByteChangedHandler _onSelectedStepChangedHandler; 157 | static EventHandler _onSequenceEndedHandler; 158 | static void _setRunningIndicator(bool); 159 | static void _setRunning(bool); 160 | static void _selectStep(uint8_t); 161 | static void _setTrigger(bool); 162 | static void _advanceSubStep(); 163 | static void _advanceSequence(); 164 | static bool _isOnLastStep(); 165 | static void _initSequence(uint8_t); 166 | static uint8_t _generateRandomStep(uint8_t); 167 | static void _resetSequencePosition(); 168 | }; 169 | 170 | #endif // MODULE_SEQUENCE_H 171 | -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/settings.cpp: -------------------------------------------------------------------------------- 1 | #include "settings.h" 2 | #include 3 | 4 | // Byte written before the area taken by the actual settings 5 | // If this byte is present at the correct address, the following 6 | // address spaces contain a patch 7 | #define SETTING_INDEX_HAS_VALUE_INDICATOR 0b10101010 8 | 9 | Settings SettingsManager::defaultSettings = { 10 | gateModes: { 0, 0, 0, 0, 0, 0, 0, 0 }, 11 | stepRepeat: { 1, 1, 1, 1, 1, 1, 1, 1 }, 12 | stepSlide: 0b00000000, 13 | scale: 0, 14 | minNote: 12, 15 | maxNote: 36, 16 | timeDivider: 16, 17 | sequenceMode: 0 18 | }; 19 | 20 | // Load settings from EEPROM, given a slot index (0-NUM_STEPS) 21 | Settings SettingsManager::load(uint8_t index) { 22 | // Don't try to retrieve settings that can't exist. 23 | // Instead of constraining to an existing one and getting unexpected results, 24 | // return default settings instead. 25 | // Note: The slots are 1-indexed when using step buttons; if none is specified 26 | // slot 0 is used. This is good for comparing patches and not accidentally 27 | // overwriting patch 1. 28 | if (index > NUM_STEPS) return defaultSettings; 29 | 30 | // Located stating address, based on size of Settings struct + 1 for 31 | // "contains patch" indicator value 32 | uint16_t address = index * (sizeof(Settings) + 1); 33 | 34 | // If our magic value wasn't found, there are no settings here, 35 | // return default settings instead 36 | if (EEPROM.read(address) != SETTING_INDEX_HAS_VALUE_INDICATOR) { 37 | return defaultSettings; 38 | } 39 | 40 | Settings loadedSettings; 41 | 42 | // Read the gate mode batch 43 | for (uint8_t i = 0; i < NUM_STEPS; i++) { 44 | loadedSettings.gateModes[i] = EEPROM.read(++address); 45 | } 46 | 47 | // Read the step repeat bytes 48 | for (uint8_t i = 0; i < NUM_STEPS; i++) { 49 | loadedSettings.stepRepeat[i] = EEPROM.read(++address); 50 | } 51 | 52 | loadedSettings.stepSlide = EEPROM.read(++address); 53 | 54 | // Read the remaining, simply settings 55 | loadedSettings.scale = EEPROM.read(++address); 56 | loadedSettings.minNote = EEPROM.read(++address); 57 | loadedSettings.maxNote = EEPROM.read(++address); 58 | loadedSettings.timeDivider = EEPROM.read(++address); 59 | loadedSettings.sequenceMode = EEPROM.read(++address); 60 | 61 | return loadedSettings; 62 | } 63 | 64 | void SettingsManager::save(Settings settings, uint8_t index) { 65 | // Don't attempt to save if index is out of bounds. 66 | // Note: The slots are 1-indexed when using step buttons; if none is specified 67 | // slot 0 is used. This is good for comparing patches and not accidentally 68 | // overwriting patch 1. 69 | if (index > NUM_STEPS) return; 70 | 71 | uint16_t address = index * (sizeof(Settings) + 1); 72 | 73 | // Write our indicator, indicating that a valid set of settings comes after 74 | EEPROM.write(address, SETTING_INDEX_HAS_VALUE_INDICATOR); 75 | 76 | for (uint8_t i = 0; i < NUM_STEPS; i++) { 77 | EEPROM.write(++address, settings.gateModes[i]); 78 | } 79 | 80 | for (uint8_t i = 0; i < NUM_STEPS; i++) { 81 | EEPROM.write(++address, settings.stepRepeat[i]); 82 | } 83 | 84 | EEPROM.write(++address, settings.stepSlide); 85 | 86 | EEPROM.write(++address, settings.scale); 87 | EEPROM.write(++address, settings.minNote); 88 | EEPROM.write(++address, settings.maxNote); 89 | EEPROM.write(++address, settings.timeDivider); 90 | EEPROM.write(++address, settings.sequenceMode); 91 | } 92 | -------------------------------------------------------------------------------- /modules/sequencer/code/main-arduino/settings.h: -------------------------------------------------------------------------------- 1 | #ifndef SETTINGS_H 2 | #define SETTINGS_H 3 | 4 | #ifndef NUM_STEPS 5 | #define NUM_STEPS 8 6 | #endif 7 | 8 | #include 9 | 10 | // Container for all the settings that can be changed in Sequence and NoteMapper 11 | struct Settings { 12 | // Gate mode, one for each step, see Sequence GATE_MODE_x constants 13 | uint8_t gateModes[NUM_STEPS]; 14 | 15 | // Step repetitions, one for each step 16 | uint8_t stepRepeat[NUM_STEPS]; 17 | 18 | // Slide enabled, per step 19 | uint8_t stepSlide; 20 | 21 | // Musical scale, one of the NoteMapper SCALE_x constants 22 | // Used for mapping to desired notes from pot values 23 | uint8_t scale; 24 | 25 | // Notemapper minimum note, sets the minumum note that can be reached with 26 | // the step pots 27 | uint8_t minNote; 28 | 29 | // Notemapper maximum note, sets the maximum note that can be reached with 30 | // the step pots 31 | uint8_t maxNote; 32 | 33 | // Timing divider (1/x) - should only be 1,2,4,8, or 16 34 | // This means one step lasts for this long musically 1/4 would be 1 beat 35 | uint8_t timeDivider; 36 | 37 | // Sequencer sequence mode, one of the 8 SEQUENCE_MODE constants 38 | // Refers to the order in which the steps are played; there are 8 modes, 0-7 39 | uint8_t sequenceMode; 40 | }; 41 | 42 | class SettingsManager { 43 | public: 44 | // Settings loaded upon powerup 45 | static Settings defaultSettings; 46 | // Load settings from a given slot in eeprom (0-7 and return as the struct) 47 | static Settings load(uint8_t); 48 | // Save given settings to a given slot in eeprom 49 | static void save(Settings, uint8_t); 50 | }; 51 | 52 | #endif // SETTINGS_H 53 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/5GTH9.pretty/5GTH9.kicad_mod: -------------------------------------------------------------------------------- 1 | (module 5GTH9 (layer F.Cu) (tedit 5A8024E9) 2 | (fp_text reference REF** (at 0 7.62) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value 5GTH9 (at 0 -7.62) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_circle (center 0 0) (end 2.125 0.025) (layer F.SilkS) (width 0.15)) 9 | (fp_line (start 5.15 -5.15) (end -5.15 -5.15) (layer F.SilkS) (width 0.15)) 10 | (fp_line (start -5.15 -5.15) (end -5.15 5.15) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start -5.15 5.15) (end 5.15 5.15) (layer F.SilkS) (width 0.15)) 12 | (fp_line (start 5.15 5.15) (end 5.15 -5.15) (layer F.SilkS) (width 0.15)) 13 | (pad 4 thru_hole circle (at -5.08 3.81) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 14 | (pad 3 thru_hole circle (at 5.08 3.81) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 15 | (pad 1 thru_hole circle (at 5.08 -3.81) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 16 | (pad 2 thru_hole circle (at -5.08 -3.81) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 17 | ) 18 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/6-pin-momentary-push-button.pretty/6-pin-momentary-push-button.kicad_mod: -------------------------------------------------------------------------------- 1 | (module 6-pin-momentary-push-button (layer F.Cu) (tedit 5A7F6756) 2 | (fp_text reference REF** (at 0.5 5.5) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value 6-pin-momentary-push-button (at 0.5 -6) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start -1 -1.5) (end 1 -1.5) (layer F.SilkS) (width 0.1)) 9 | (fp_line (start 1 -1.5) (end 1 1.5) (layer F.SilkS) (width 0.1)) 10 | (fp_line (start 1 1.5) (end -1 1.5) (layer F.SilkS) (width 0.1)) 11 | (fp_line (start -1 1.5) (end -1 -1.5) (layer F.SilkS) (width 0.1)) 12 | (fp_line (start -1.905 -1.905) (end 1.905 -1.905) (layer F.SilkS) (width 0.1)) 13 | (fp_line (start 1.905 -1.905) (end 1.905 1.905) (layer F.SilkS) (width 0.1)) 14 | (fp_line (start 1.905 1.905) (end -1.905 1.905) (layer F.SilkS) (width 0.1)) 15 | (fp_line (start -1.905 1.905) (end -1.905 -1.905) (layer F.SilkS) (width 0.1)) 16 | (fp_line (start -4.25 -4.25) (end 4.25 -4.25) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 4.25 -4.25) (end 4.25 4.25) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 4.25 4.25) (end -4.25 4.25) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start -4.25 4.25) (end -4.25 -4.25) (layer F.SilkS) (width 0.15)) 20 | (pad 2 thru_hole circle (at 0 2.54) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 21 | (pad 1 thru_hole circle (at -2.54 2.54) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 22 | (pad 3 thru_hole circle (at 2.54 2.54) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 23 | (pad 6 thru_hole circle (at -2.54 -2.54) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 24 | (pad 5 thru_hole circle (at 0 -2.54) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 25 | (pad 4 thru_hole circle (at 2.54 -2.54) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 26 | ) 27 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/Bourns PTL.pretty/Bourns PTL30-X.kicad_mod: -------------------------------------------------------------------------------- 1 | (module "Bourns PTL30-X" (layer F.Cu) (tedit 583F5135) 2 | (fp_text reference REF** (at 0 51) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value "Bourns PTL30-X" (at 0 -59) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start -1 -18.25) (end 1 -18.25) (layer F.SilkS) (width 0.15)) 9 | (fp_line (start 1 -18.25) (end 1 -12.75) (layer F.SilkS) (width 0.15)) 10 | (fp_line (start 1 -12.75) (end -1 -12.75) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start -1 -12.75) (end -1 -18.25) (layer F.SilkS) (width 0.15)) 12 | (fp_line (start -1.5 18.5) (end 1.5 18.5) (layer F.SilkS) (width 0.15)) 13 | (fp_line (start 1.5 18.5) (end 1.5 -18.5) (layer F.SilkS) (width 0.15)) 14 | (fp_line (start 1.5 -18.5) (end -1.5 -18.5) (layer F.SilkS) (width 0.15)) 15 | (fp_line (start -1.5 -18.5) (end -1.5 18.5) (layer F.SilkS) (width 0.15)) 16 | (fp_line (start -4.5 22.5) (end 4.5 22.5) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 4.5 22.5) (end 4.5 -22.5) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 4.5 -22.5) (end -4.5 -22.5) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start -4.5 -22.5) (end -4.5 22.5) (layer F.SilkS) (width 0.15)) 20 | (pad 1 thru_hole circle (at -1.25 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 21 | (pad 2 thru_hole circle (at -3.75 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 22 | (pad L thru_hole circle (at 1.25 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 23 | (pad E thru_hole circle (at 3.75 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 24 | (pad 3 thru_hole circle (at -1.25 -20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 25 | (pad B thru_hole circle (at 3.75 -20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 26 | ) 27 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/Bourns PTL.pretty/Bourns-PTL30-X.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Bourns-PTL30-X (layer F.Cu) (tedit 58DFD629) 2 | (fp_text reference REF** (at 0 24) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value "Bourns PTL30-X" (at 0 -24) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start -1 -18.25) (end 1 -18.25) (layer F.SilkS) (width 0.15)) 9 | (fp_line (start 1 -18.25) (end 1 -12.75) (layer F.SilkS) (width 0.15)) 10 | (fp_line (start 1 -12.75) (end -1 -12.75) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start -1 -12.75) (end -1 -18.25) (layer F.SilkS) (width 0.15)) 12 | (fp_line (start -1.5 18.5) (end 1.5 18.5) (layer F.SilkS) (width 0.15)) 13 | (fp_line (start 1.5 18.5) (end 1.5 -18.5) (layer F.SilkS) (width 0.15)) 14 | (fp_line (start 1.5 -18.5) (end -1.5 -18.5) (layer F.SilkS) (width 0.15)) 15 | (fp_line (start -1.5 -18.5) (end -1.5 18.5) (layer F.SilkS) (width 0.15)) 16 | (fp_line (start -4.5 22.5) (end 4.5 22.5) (layer F.SilkS) (width 0.15)) 17 | (fp_line (start 4.5 22.5) (end 4.5 -22.5) (layer F.SilkS) (width 0.15)) 18 | (fp_line (start 4.5 -22.5) (end -4.5 -22.5) (layer F.SilkS) (width 0.15)) 19 | (fp_line (start -4.5 -22.5) (end -4.5 22.5) (layer F.SilkS) (width 0.15)) 20 | (pad 1 thru_hole circle (at -1.25 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 21 | (pad 2 thru_hole circle (at -3.75 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 22 | (pad L thru_hole circle (at 1.25 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 23 | (pad E thru_hole circle (at 3.75 20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 24 | (pad 3 thru_hole circle (at -1.25 -20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 25 | (pad B thru_hole circle (at 3.75 -20) (size 1.65 1.65) (drill 0.75) (layers *.Cu *.Mask)) 26 | ) 27 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/CC04-41SURKWA.pretty/CC04-41SURKWA.kicad_mod: -------------------------------------------------------------------------------- 1 | (module CC04-41SURKWA (layer F.Cu) (tedit 5A7F0F51) 2 | (fp_text reference REF** (at 0 17.5) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value CC04-41SURKWA (at 0 -25.4) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start 2 -5) (end 7.4 -5) (layer F.SilkS) (width 0.1)) 9 | (fp_line (start 7.6 -4.8) (end 7.1 -0.2) (layer F.SilkS) (width 0.1)) 10 | (fp_line (start 1.6 0) (end 6.9 0) (layer F.SilkS) (width 0.1)) 11 | (fp_line (start 1.8 -4.8) (end 1.4 -0.2) (layer F.SilkS) (width 0.1)) 12 | (fp_line (start 1.4 0.2) (end 1.1 4.7) (layer F.SilkS) (width 0.1)) 13 | (fp_line (start 7.1 0.2) (end 6.7 4.7) (layer F.SilkS) (width 0.1)) 14 | (fp_line (start 1.3 4.8) (end 6.5 4.8) (layer F.SilkS) (width 0.1)) 15 | (fp_circle (center 7.6 4.4) (end 7.6 4.8) (layer F.SilkS) (width 0.1)) 16 | (fp_circle (center 17.6 4.4) (end 17.6 4.8) (layer F.SilkS) (width 0.1)) 17 | (fp_line (start 11.3 4.8) (end 16.5 4.8) (layer F.SilkS) (width 0.1)) 18 | (fp_line (start 17.1 0.2) (end 16.7 4.7) (layer F.SilkS) (width 0.1)) 19 | (fp_line (start 11.4 0.2) (end 11.1 4.7) (layer F.SilkS) (width 0.1)) 20 | (fp_line (start 11.8 -4.8) (end 11.4 -0.2) (layer F.SilkS) (width 0.1)) 21 | (fp_line (start 11.6 0) (end 16.9 0) (layer F.SilkS) (width 0.1)) 22 | (fp_line (start 17.6 -4.8) (end 17.1 -0.2) (layer F.SilkS) (width 0.1)) 23 | (fp_line (start 12 -5) (end 17.4 -5) (layer F.SilkS) (width 0.1)) 24 | (fp_line (start -7 -5) (end -1.6 -5) (layer F.SilkS) (width 0.1)) 25 | (fp_line (start -1.4 -4.8) (end -1.9 -0.2) (layer F.SilkS) (width 0.1)) 26 | (fp_line (start -7.4 0) (end -2.1 0) (layer F.SilkS) (width 0.1)) 27 | (fp_line (start -7.2 -4.8) (end -7.6 -0.2) (layer F.SilkS) (width 0.1)) 28 | (fp_line (start -7.6 0.2) (end -7.9 4.7) (layer F.SilkS) (width 0.1)) 29 | (fp_line (start -1.9 0.2) (end -2.3 4.7) (layer F.SilkS) (width 0.1)) 30 | (fp_line (start -7.7 4.8) (end -2.5 4.8) (layer F.SilkS) (width 0.1)) 31 | (fp_circle (center -1.4 4.4) (end -1.4 4.8) (layer F.SilkS) (width 0.1)) 32 | (fp_circle (center -11.4 4.4) (end -11.4 4.8) (layer F.SilkS) (width 0.1)) 33 | (fp_line (start -17.7 4.8) (end -12.5 4.8) (layer F.SilkS) (width 0.1)) 34 | (fp_line (start -11.9 0.2) (end -12.3 4.7) (layer F.SilkS) (width 0.1)) 35 | (fp_line (start -17.6 0.2) (end -17.9 4.7) (layer F.SilkS) (width 0.1)) 36 | (fp_line (start -17.2 -4.8) (end -17.6 -0.2) (layer F.SilkS) (width 0.1)) 37 | (fp_line (start -17.4 0) (end -12.1 0) (layer F.SilkS) (width 0.1)) 38 | (fp_line (start -11.4 -4.8) (end -11.9 -0.2) (layer F.SilkS) (width 0.1)) 39 | (fp_line (start -17 -5) (end -11.6 -5) (layer F.SilkS) (width 0.1)) 40 | (fp_line (start -20.2 -8) (end 20.2 -8) (layer F.SilkS) (width 0.15)) 41 | (fp_line (start 20.2 -8) (end 20.2 8) (layer F.SilkS) (width 0.15)) 42 | (fp_line (start 20.2 8) (end -20.2 8) (layer F.SilkS) (width 0.15)) 43 | (fp_line (start -20.2 8) (end -20.2 -8) (layer F.SilkS) (width 0.15)) 44 | (pad 1 thru_hole circle (at -15.24 6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 45 | (pad 2 thru_hole circle (at -12.7 6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 46 | (pad 3 thru_hole circle (at -10.16 6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 47 | (pad 4 thru_hole circle (at -7.62 6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 48 | (pad 5 thru_hole circle (at -5.08 6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 49 | (pad 6 thru_hole circle (at 5.08 6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 50 | (pad 7 thru_hole circle (at 7.62 6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 51 | (pad 8 thru_hole circle (at 10.16 6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 52 | (pad 9 thru_hole circle (at 12.7 6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 53 | (pad 10 thru_hole circle (at 15.24 6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 54 | (pad 11 thru_hole circle (at 15.24 -6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 55 | (pad 12 thru_hole circle (at 12.7 -6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 56 | (pad 13 thru_hole circle (at 10.16 -6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 57 | (pad 14 thru_hole circle (at 7.62 -6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 58 | (pad 15 thru_hole circle (at 5.08 -6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 59 | (pad 16 thru_hole circle (at -5.08 -6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 60 | (pad 17 thru_hole circle (at -7.62 -6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 61 | (pad 18 thru_hole circle (at -10.16 -6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 62 | (pad 19 thru_hole circle (at -12.7 -6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 63 | (pad 20 thru_hole circle (at -15.24 -6.35) (size 2 2) (drill 1) (layers *.Cu *.Mask)) 64 | ) 65 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/MAX7221.pretty/MAX7221-DIP.kicad_mod: -------------------------------------------------------------------------------- 1 | (module Housings_DIP:DIP-22_W7.62mm_LongPads (layer F.Cu) (tedit 59C78D6B) 2 | (descr "22-lead though-hole mounted DIP package, row spacing 7.62 mm (300 mils), LongPads") 3 | (tags "THT DIP DIL PDIP 2.54mm 7.62mm 300mil LongPads") 4 | (fp_text reference REF** (at 3.81 -2.33) (layer F.SilkS) 5 | (effects (font (size 1 1) (thickness 0.15))) 6 | ) 7 | (fp_text value DIP-22_W7.62mm_LongPads (at 3.81 27.73) (layer F.Fab) 8 | (effects (font (size 1 1) (thickness 0.15))) 9 | ) 10 | (fp_arc (start 3.81 -1.33) (end 2.81 -1.33) (angle -180) (layer F.SilkS) (width 0.12)) 11 | (fp_line (start 1.635 -1.27) (end 6.985 -1.27) (layer F.Fab) (width 0.1)) 12 | (fp_line (start 6.985 -1.27) (end 6.985 26.67) (layer F.Fab) (width 0.1)) 13 | (fp_line (start 6.985 26.67) (end 0.635 26.67) (layer F.Fab) (width 0.1)) 14 | (fp_line (start 0.635 26.67) (end 0.635 -0.27) (layer F.Fab) (width 0.1)) 15 | (fp_line (start 0.635 -0.27) (end 1.635 -1.27) (layer F.Fab) (width 0.1)) 16 | (fp_line (start 2.81 -1.33) (end 1.56 -1.33) (layer F.SilkS) (width 0.12)) 17 | (fp_line (start 1.56 -1.33) (end 1.56 26.73) (layer F.SilkS) (width 0.12)) 18 | (fp_line (start 1.56 26.73) (end 6.06 26.73) (layer F.SilkS) (width 0.12)) 19 | (fp_line (start 6.06 26.73) (end 6.06 -1.33) (layer F.SilkS) (width 0.12)) 20 | (fp_line (start 6.06 -1.33) (end 4.81 -1.33) (layer F.SilkS) (width 0.12)) 21 | (fp_line (start -1.45 -1.55) (end -1.45 26.95) (layer F.CrtYd) (width 0.05)) 22 | (fp_line (start -1.45 26.95) (end 9.1 26.95) (layer F.CrtYd) (width 0.05)) 23 | (fp_line (start 9.1 26.95) (end 9.1 -1.55) (layer F.CrtYd) (width 0.05)) 24 | (fp_line (start 9.1 -1.55) (end -1.45 -1.55) (layer F.CrtYd) (width 0.05)) 25 | (fp_text user %R (at 3.81 12.7) (layer F.Fab) 26 | (effects (font (size 1 1) (thickness 0.15))) 27 | ) 28 | (pad 1 thru_hole rect (at 0 0) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 29 | (pad 12 thru_hole oval (at 7.62 25.4) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 30 | (pad 2 thru_hole oval (at 0 2.54) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 31 | (pad 13 thru_hole oval (at 7.62 22.86) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 32 | (pad 3 thru_hole oval (at 0 5.08) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 33 | (pad 14 thru_hole oval (at 7.62 20.32) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 34 | (pad 4 thru_hole oval (at 0 7.62) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 35 | (pad 15 thru_hole oval (at 7.62 17.78) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 36 | (pad 5 thru_hole oval (at 0 10.16) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 37 | (pad 16 thru_hole oval (at 7.62 15.24) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 38 | (pad 6 thru_hole oval (at 0 12.7) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 39 | (pad 17 thru_hole oval (at 7.62 12.7) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 40 | (pad 7 thru_hole oval (at 0 15.24) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 41 | (pad 18 thru_hole oval (at 7.62 10.16) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 42 | (pad 8 thru_hole oval (at 0 17.78) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 43 | (pad 19 thru_hole oval (at 7.62 7.62) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 44 | (pad 9 thru_hole oval (at 0 20.32) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 45 | (pad 20 thru_hole oval (at 7.62 5.08) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 46 | (pad 10 thru_hole oval (at 0 22.86) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 47 | (pad 21 thru_hole oval (at 7.62 2.54) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 48 | (pad 11 thru_hole oval (at 0 25.4) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 49 | (pad 22 thru_hole oval (at 7.62 0) (size 2.4 1.6) (drill 0.8) (layers *.Cu *.Mask)) 50 | (model ${KISYS3DMOD}/Housings_DIP.3dshapes/DIP-22_W7.62mm.wrl 51 | (at (xyz 0 0 0)) 52 | (scale (xyz 1 1 1)) 53 | (rotate (xyz 0 0 0)) 54 | ) 55 | ) 56 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/MAX7221.pretty/MAX7221-SOIC.kicad_mod: -------------------------------------------------------------------------------- 1 | (module MAX7221-SOIC (layer F.Cu) (tedit 5A103A72) 2 | (descr "24-Lead Plastic Small Outline (SO) - Wide, 7.50 mm Body [SOIC] (see Microchip Packaging Specification 00000049BS.pdf)") 3 | (tags "SOIC 1.27") 4 | (attr smd) 5 | (fp_text reference REF** (at 0 -8.8) (layer F.SilkS) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_text value MAX7221 (at 0 8.8) (layer F.Fab) 9 | (effects (font (size 1 1) (thickness 0.15))) 10 | ) 11 | (fp_text user %R (at 0 0) (layer F.Fab) 12 | (effects (font (size 1 1) (thickness 0.15))) 13 | ) 14 | (fp_line (start -2.75 -7.7) (end 3.75 -7.7) (layer F.Fab) (width 0.15)) 15 | (fp_line (start 3.75 -7.7) (end 3.75 7.7) (layer F.Fab) (width 0.15)) 16 | (fp_line (start 3.75 7.7) (end -3.75 7.7) (layer F.Fab) (width 0.15)) 17 | (fp_line (start -3.75 7.7) (end -3.75 -6.7) (layer F.Fab) (width 0.15)) 18 | (fp_line (start -3.75 -6.7) (end -2.75 -7.7) (layer F.Fab) (width 0.15)) 19 | (fp_line (start -5.95 -8.05) (end -5.95 8.05) (layer F.CrtYd) (width 0.05)) 20 | (fp_line (start 5.95 -8.05) (end 5.95 8.05) (layer F.CrtYd) (width 0.05)) 21 | (fp_line (start -5.95 -8.05) (end 5.95 -8.05) (layer F.CrtYd) (width 0.05)) 22 | (fp_line (start -5.95 8.05) (end 5.95 8.05) (layer F.CrtYd) (width 0.05)) 23 | (fp_line (start -3.875 -7.875) (end -3.875 -7.6) (layer F.SilkS) (width 0.15)) 24 | (fp_line (start 3.875 -7.875) (end 3.875 -7.51) (layer F.SilkS) (width 0.15)) 25 | (fp_line (start 3.875 7.875) (end 3.875 7.51) (layer F.SilkS) (width 0.15)) 26 | (fp_line (start -3.875 7.875) (end -3.875 7.51) (layer F.SilkS) (width 0.15)) 27 | (fp_line (start -3.875 -7.875) (end 3.875 -7.875) (layer F.SilkS) (width 0.15)) 28 | (fp_line (start -3.875 7.875) (end 3.875 7.875) (layer F.SilkS) (width 0.15)) 29 | (fp_line (start -3.875 -7.6) (end -5.7 -7.6) (layer F.SilkS) (width 0.15)) 30 | (pad 1 smd rect (at -4.7 -6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 31 | (pad 2 smd rect (at -4.7 -5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 32 | (pad 3 smd rect (at -4.7 -4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 33 | (pad 4 smd rect (at -4.7 -3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 34 | (pad 5 smd rect (at -4.7 -1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 35 | (pad 6 smd rect (at -4.7 -0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 36 | (pad 7 smd rect (at -4.7 0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 37 | (pad 8 smd rect (at -4.7 1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 38 | (pad 9 smd rect (at -4.7 3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 39 | (pad 10 smd rect (at -4.7 4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 40 | (pad 11 smd rect (at -4.7 5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 41 | (pad 12 smd rect (at -4.7 6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 42 | (pad 13 smd rect (at 4.7 6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 43 | (pad 14 smd rect (at 4.7 5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 44 | (pad 15 smd rect (at 4.7 4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 45 | (pad 16 smd rect (at 4.7 3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 46 | (pad 17 smd rect (at 4.7 1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 47 | (pad 18 smd rect (at 4.7 0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 48 | (pad 19 smd rect (at 4.7 -0.635) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 49 | (pad 20 smd rect (at 4.7 -1.905) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 50 | (pad 21 smd rect (at 4.7 -3.175) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 51 | (pad 22 smd rect (at 4.7 -4.445) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 52 | (pad 23 smd rect (at 4.7 -5.715) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 53 | (pad 24 smd rect (at 4.7 -6.985) (size 2 0.6) (layers F.Cu F.Paste F.Mask)) 54 | (model ${KISYS3DMOD}/Housings_SOIC.3dshapes/SOIC-24W_7.5x15.4mm_Pitch1.27mm.wrl 55 | (at (xyz 0 0 0)) 56 | (scale (xyz 1 1 1)) 57 | (rotate (xyz 0 0 0)) 58 | ) 59 | ) 60 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/MHS123K.pretty/MHS123K.kicad_mod: -------------------------------------------------------------------------------- 1 | (module MHS123K (layer F.Cu) (tedit 5A801E8D) 2 | (fp_text reference REF** (at -0.1 9.8) (layer F.SilkS) 3 | (effects (font (size 1 1) (thickness 0.15))) 4 | ) 5 | (fp_text value MHS123K (at -0.5 -9.9) (layer F.Fab) 6 | (effects (font (size 1 1) (thickness 0.15))) 7 | ) 8 | (fp_line (start 2.15 -8) (end -4.65 -8) (layer F.SilkS) (width 0.15)) 9 | (fp_line (start -4.65 -8) (end -4.65 8) (layer F.SilkS) (width 0.15)) 10 | (fp_line (start -4.65 8) (end 2.15 8) (layer F.SilkS) (width 0.15)) 11 | (fp_line (start 2.15 8) (end 2.15 -8) (layer F.SilkS) (width 0.15)) 12 | (pad 2 thru_hole circle (at 0 0) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 13 | (pad 3 thru_hole circle (at 0 -4) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 14 | (pad 1 thru_hole circle (at 0 4) (size 1.7 1.7) (drill 0.9) (layers *.Cu *.Mask)) 15 | (pad "" np_thru_hole circle (at 1.9 -7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask)) 16 | (pad "" np_thru_hole circle (at -4.5 7.5) (size 2 2) (drill 1.4) (layers *.Cu *.Mask)) 17 | ) 18 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/fp-lib-table: -------------------------------------------------------------------------------- 1 | (fp_lib_table 2 | (lib (name CC04-41SURKWA)(type KiCad)(uri "$(KIPRJMOD)\\CC04-41SURKWA.pretty")(options "")(descr "")) 3 | (lib (name "Bourns PTL")(type KiCad)(uri "$(KIPRJMOD)\\Bourns PTL.pretty")(options "")(descr "")) 4 | (lib (name 6-pin-momentary-push-button)(type KiCad)(uri "$(KIPRJMOD)\\6-pin-momentary-push-button.pretty")(options "")(descr "")) 5 | (lib (name MHS123K)(type KiCad)(uri "$(KIPRJMOD)\\MHS123K.pretty")(options "")(descr "")) 6 | (lib (name 5GTH9)(type KiCad)(uri "$(KIPRJMOD)\\5GTH9.pretty")(options "")(descr "")) 7 | ) 8 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/max7221.dcm: -------------------------------------------------------------------------------- 1 | EESchema-DOCLIB Version 2.0 2 | # 3 | #End Doc Library 4 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/max7221.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.3 2 | #encoding utf-8 3 | # 4 | # MAX7221 5 | # 6 | DEF MAX7221 U 0 40 Y Y 1 F N 7 | F0 "U" -575 -450 60 H V C CNN 8 | F1 "MAX7221" 0 1350 60 H V C CNN 9 | F2 "" 0 425 60 H I C CNN 10 | F3 "" 0 425 60 H I C CNN 11 | DRAW 12 | S -300 1050 300 -1150 0 1 0 N 13 | X DIN 1 -500 150 200 R 50 50 1 1 I 14 | X DIG_0 2 500 850 200 L 50 50 1 1 P 15 | X DIG_4 3 500 450 200 L 50 50 1 1 P 16 | X GND 4 0 -1350 200 U 50 50 1 1 W 17 | X DIG_6 5 500 250 200 L 50 50 1 1 P 18 | X DIG_2 6 500 650 200 L 50 50 1 1 P 19 | X DIG_3 7 500 550 200 L 50 50 1 1 P 20 | X DIG_7 8 500 150 200 L 50 50 1 1 P 21 | X GND 9 -500 -950 200 R 50 50 1 1 W 22 | X DIG_5 10 500 350 200 L 50 50 1 1 P 23 | X SEG_C 20 500 -250 200 L 50 50 1 1 P 24 | X DIG_1 11 500 750 200 L 50 50 1 1 P 25 | X SEG_E 21 500 -450 200 L 50 50 1 1 P 26 | X CS 12 -500 50 200 R 50 50 1 1 I I 27 | X SEG_DP 22 500 -750 200 L 50 50 1 1 P 28 | X CLK 13 -500 -50 200 R 50 50 1 1 I C 29 | X SEG_D 23 500 -350 200 L 50 50 1 1 P 30 | X SEG_A 14 500 -50 200 L 50 50 1 1 P 31 | X D_OUT 24 500 -950 200 L 50 50 1 1 O 32 | X SEG_F 15 500 -550 200 L 50 50 1 1 P 33 | X SEG_B 16 500 -150 200 L 50 50 1 1 P 34 | X SEG_G 17 500 -650 200 L 50 50 1 1 P 35 | X ISET 18 -500 850 200 R 50 50 1 1 P 36 | X V+ 19 0 1250 200 D 50 50 1 1 W 37 | ENDDRAW 38 | ENDDEF 39 | # 40 | #End Library 41 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/sequencer-components.dcm: -------------------------------------------------------------------------------- 1 | EESchema-DOCLIB Version 2.0 2 | # 3 | $CMP 4051 4 | D Analog Multiplexer 8 to 1 lins 5 | K CMOS MUX MUX8 6 | $ENDCMP 7 | # 8 | $CMP CC04-41SURKWA 9 | D Kingbright 4 x 7-segment common cathode display 10 | K 7 SEGMENTS 4 display 11 | F http://docs-europe.electrocomponents.com/webdocs/13c8/0900766b813c8656.pdf 12 | $ENDCMP 13 | # 14 | $CMP CD4051 15 | D Analog Multiplexer 8 to 1 lins 16 | K CMOS MUX MUX8 17 | $ENDCMP 18 | # 19 | $CMP LED-BUTTON 20 | D Normally open momentary switch with built-in LED 21 | K LED Push Button SPST Switch 22 | $ENDCMP 23 | # 24 | $CMP LED-POT 25 | D Potentiometer with LED 26 | K Potentiometer LED Slide 27 | $ENDCMP 28 | # 29 | $CMP MAX7221 30 | D Serially Interfaced, 8-Digit LED Display Driver 31 | K SPI 7-segment LED 32 | F https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf 33 | $ENDCMP 34 | # 35 | $CMP MC14551B 36 | D Quad 2-channel Analog Multiplexer/demultiplexer 37 | K Multiplexer Demultiplexer 38 | F http://www.onsemi.com/pub/Collateral/MC14551B-D.PDF 39 | $ENDCMP 40 | # 41 | $CMP MCP23S17 42 | D 16-Bit I/O Expander with Serial Interface 43 | K I/O GPIO 44 | F http://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf 45 | $ENDCMP 46 | # 47 | $CMP MCP3202 48 | D Dual Channel 12-Bit A/D Converter with SPI Serial Interface 49 | K ADC SPI 50 | F http://ww1.microchip.com/downloads/en/DeviceDoc/21034F.pdf 51 | $ENDCMP 52 | # 53 | $CMP SW_PUSH_DPDT 54 | D Double Pole Dpuble Throw (DPDT) Push Switch 55 | K switch push button 56 | $ENDCMP 57 | # 58 | $CMP TS12A4517 59 | D Dual supply, low on-state resistoance SPST CMOS analog switch 60 | K CMOS SWITCH 61 | F http://www.ti.com/lit/ds/symlink/ts12a4516.pdf 62 | $ENDCMP 63 | # 64 | #End Doc Library 65 | -------------------------------------------------------------------------------- /modules/sequencer/kicad/sequencer.pro: -------------------------------------------------------------------------------- 1 | update=27/01/2018 16:36:42 2 | version=1 3 | last_client=kicad 4 | [pcbnew] 5 | version=1 6 | LastNetListRead= 7 | UseCmpFile=1 8 | PadDrill=0.600000000000 9 | PadDrillOvalY=0.600000000000 10 | PadSizeH=1.500000000000 11 | PadSizeV=1.500000000000 12 | PcbTextSizeV=1.500000000000 13 | PcbTextSizeH=1.500000000000 14 | PcbTextThickness=0.300000000000 15 | ModuleTextSizeV=1.000000000000 16 | ModuleTextSizeH=1.000000000000 17 | ModuleTextSizeThickness=0.150000000000 18 | SolderMaskClearance=0.000000000000 19 | SolderMaskMinWidth=0.000000000000 20 | DrawSegmentWidth=0.200000000000 21 | BoardOutlineThickness=0.100000000000 22 | ModuleOutlineThickness=0.150000000000 23 | [cvpcb] 24 | version=1 25 | NetIExt=net 26 | [general] 27 | version=1 28 | [eeschema] 29 | version=1 30 | LibDir= 31 | [eeschema/libraries] 32 | LibName1=power 33 | LibName2=device 34 | LibName3=transistors 35 | LibName4=conn 36 | LibName5=linear 37 | LibName6=regul 38 | LibName7=74xx 39 | LibName8=cmos4000 40 | LibName9=adc-dac 41 | LibName10=memory 42 | LibName11=xilinx 43 | LibName12=microcontrollers 44 | LibName13=dsp 45 | LibName14=microchip 46 | LibName15=analog_switches 47 | LibName16=motorola 48 | LibName17=texas 49 | LibName18=intel 50 | LibName19=audio 51 | LibName20=interface 52 | LibName21=digital-audio 53 | LibName22=philips 54 | LibName23=display 55 | LibName24=cypress 56 | LibName25=siliconi 57 | LibName26=opto 58 | LibName27=atmel 59 | LibName28=contrib 60 | LibName29=valves 61 | LibName30=max7221 62 | LibName31=sequencer-components 63 | -------------------------------------------------------------------------------- /modules/vca/eagle/vca.brd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/vca/eagle/vca.brd.png -------------------------------------------------------------------------------- /modules/vca/eagle/vca.sch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/vca/eagle/vca.sch.png -------------------------------------------------------------------------------- /modules/vcf/README.md: -------------------------------------------------------------------------------- 1 | # VCF (Voltage controlled filter) 2 | 3 | This is [Thomas Henry's VCF-1](http://www.birthofasynth.com/Thomas_Henry/Pages/VCF-1.html), with minor value changes to accomodate my power supply voltage, plus adding some inputs. 4 | 5 | TODO: more info -------------------------------------------------------------------------------- /modules/vcf/eagle/vcf.brd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/vcf/eagle/vcf.brd.png -------------------------------------------------------------------------------- /modules/vcf/eagle/vcf.sch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/vcf/eagle/vcf.sch.png -------------------------------------------------------------------------------- /modules/vco/eagle/vco.brd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/vco/eagle/vco.brd.png -------------------------------------------------------------------------------- /modules/vco/eagle/vco.sch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michd/modular-synth/2bbffcf698ff90e32cc55a847da06fbd7218e96f/modules/vco/eagle/vco.sch.png --------------------------------------------------------------------------------