Some checks failed
check / check (push) Has been cancelled
First commit of the repo. Contents beyond the v0.1 simulator and layout: - Full Pico 2 W firmware (firmware/app, drivers, engine port, host test). - BANK page and 404 mode A/B removed; learned pads play exactly what was learned. - 404/MiniFreak renamed to KIT/SYNTH throughout (jacks, code, sim, docs, layout labels; wiring rebuilt). - ROLL returns to page select after a re-roll; a freshly learned track turns on. - LCD contrast 66. - ROOT and SCALE pages: 21 scales, AUTO = the seed picks; global and sticky. Intended music change: the scale table grew from 8 to 21 and AUTO picks from all of them, so every seed's scale changed. Vectors regenerated with npm run vectors, plus new key-override cases. Flash record is now version 2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
85 lines
5.1 KiB
JavaScript
85 lines
5.1 KiB
JavaScript
/* Stripboard layout for Seedbox v0.1. Holes are [col,row], 0-based, seen from the COMPONENT side.
|
|
Copper strips run left to right along each row.
|
|
The Pico's pin 1 and 40 sit on the first strip (A), so its USB end is flush with the board edge. */
|
|
var LAYOUT=(function(){
|
|
var W=34, H=28;
|
|
var cuts=[];
|
|
function cut(c,r0,r1){ for(var r=r0;r<=r1;r++) cuts.push([c,r]); }
|
|
cut(15,0,19); // under the Pico: separates its left and right pin rows
|
|
cut(5,20,24); // opto: left pins / right pins, IN4 strip
|
|
cut(13,20,23); // opto area / MIDI OUT area (strip Y stays whole: it carries GP4)
|
|
cut(24,20,22); // MIDI OUT A / MIDI OUT B
|
|
cut(22,23,23); // strip X: GP0 side / KIT tip side, R4 lies across this cut
|
|
var LP=['GP0','GP1','GND','GP2','GP3','GP4','GP5','GND','GP6','GP7','GP8','GP9','GND','GP10','GP11','GP12','GP13','GND','GP14','GP15'];
|
|
var RP=['VBUS','VSYS','GND','3V3_EN','3V3','ADC_VREF','GP28','AGND','GP27','GP26','RUN','GP22','GND','GP21','GP20','GP19','GP18','GND','GP17','GP16'];
|
|
var pico={id:'pico',kind:'pico',pins:[]};
|
|
for(var i=0;i<20;i++){ pico.pins.push({h:[12,i],n:LP[i],num:i+1}); pico.pins.push({h:[19,i],n:RP[i],num:40-i}); }
|
|
var parts=[pico,
|
|
{id:'U1',kind:'dip8',label:'6N137',pins:[{h:[4,20],n:'1 NC'},{h:[4,21],n:'2 A'},{h:[4,22],n:'3 K'},{h:[4,23],n:'4 NC'},{h:[7,23],n:'5 GND'},{h:[7,22],n:'6 VO'},{h:[7,21],n:'7 VE'},{h:[7,20],n:'8 VCC'}]},
|
|
{id:'R1',kind:'res',label:'220 Ω',pins:[{h:[1,21]},{h:[1,24]}]},
|
|
{id:'D1',kind:'diode',label:'1N4148',pins:[{h:[3,21],n:'K'},{h:[3,22],n:'A'}]},
|
|
{id:'R2',kind:'res',label:'1 kΩ',pins:[{h:[9,22]},{h:[9,27]}]},
|
|
{id:'C1',kind:'cap',label:'100 nF',pins:[{h:[10,20]},{h:[10,23]}]},
|
|
{id:'R4',kind:'res',label:'10 Ω',pins:[{h:[20,23]},{h:[24,23]}]},
|
|
{id:'R5',kind:'res',label:'33 Ω ½ W',pins:[{h:[18,21]},{h:[18,27]}]},
|
|
{id:'R6',kind:'res',label:'10 Ω',pins:[{h:[27,20]},{h:[27,24]}]},
|
|
{id:'R7',kind:'res',label:'33 Ω ½ W',pins:[{h:[29,21]},{h:[29,27]}]}
|
|
];
|
|
var jumpers=[
|
|
{a:[33,0],b:[33,25],n:'5 V (VBUS) to the 5 V strip'},
|
|
{a:[31,4],b:[31,27],n:'3V3 to the 3V3 strip'},
|
|
{a:[32,17],b:[32,26],n:'GND to the GND strip'},
|
|
{a:[12,20],b:[12,25],n:'opto VCC to 5 V'},
|
|
{a:[9,20],b:[9,21],n:'opto enable (pin 7) to VCC (pin 8): the 6N137 output only works with pin 7 high'},
|
|
{a:[11,23],b:[11,26],n:'opto GND to GND'},
|
|
{a:[8,22],b:[8,1],n:'opto out to GP1 (MIDI RX), strip B'},
|
|
{a:[14,0],b:[14,23],n:'GP0 (TX KIT) to strip X (R4), straight down under the Pico between its headers'},
|
|
{a:[13,5],b:[13,24],n:'GP4 (TX SYNTH) to strip Y (R6), straight down under the Pico between its headers'}
|
|
];
|
|
/* Off-board wires. col = spool colour role. to = where the other end goes. */
|
|
var wires=[
|
|
// MIDI jacks: 3.5 mm TRS, Type A (tip = DIN pin 5, ring = pin 4, sleeve = pin 2)
|
|
{h:[0,24],col:'blue',to:'MIDI IN jack · ring (pin 4)'},
|
|
{h:[0,22],col:'blue',to:'MIDI IN jack · tip (pin 5)'},
|
|
{h:[25,23],col:'blue',to:'OUT KIT jack · tip (pin 5)'},
|
|
{h:[21,21],col:'red',to:'OUT KIT jack · ring (pin 4)'},
|
|
{h:[21,26],col:'black',to:'OUT KIT jack · sleeve (pin 2)'},
|
|
{h:[30,20],col:'blue',to:'OUT SYNTH jack · tip (pin 5)'},
|
|
{h:[30,21],col:'red',to:'OUT SYNTH jack · ring (pin 4)'},
|
|
{h:[30,26],col:'black',to:'OUT SYNTH jack · sleeve (pin 2)'},
|
|
// screen
|
|
{h:[26,13],col:'blue',to:'LCD · RST (pin 4)'},
|
|
{h:[26,18],col:'blue',to:'LCD · SCE (pin 3)'},
|
|
{h:[26,14],col:'blue',to:'LCD · D/C (pin 5)'},
|
|
{h:[26,15],col:'blue',to:'LCD · DN/MOSI (pin 6)'},
|
|
{h:[26,16],col:'blue',to:'LCD · SCLK (pin 7)'},
|
|
{h:[22,27],col:'red',to:'LCD · VCC (pin 1)'},
|
|
{h:[22,26],col:'black',to:'LCD · GND (pin 2)'},
|
|
{h:[21,27],col:'red',to:'LCD · LED (pin 8) through 330 Ω'},
|
|
// encoder
|
|
{h:[1,13],col:'green',to:'Encoder · SIA'},
|
|
{h:[1,14],col:'green',to:'Encoder · SIB'},
|
|
{h:[1,15],col:'green',to:'Encoder · SW'},
|
|
{h:[3,27],col:'red',to:'Encoder · VCC'},
|
|
{h:[3,26],col:'black',to:'Encoder · GND'},
|
|
// pots
|
|
{h:[26,9],col:'blue',to:'ENERGY pot · middle lug'},
|
|
{h:[26,8],col:'blue',to:'DRIFT pot · middle lug'},
|
|
{h:[24,27],col:'red',to:'Pots · right lugs (chain both)'},
|
|
{h:[26,7],col:'black',to:'Pots · left lugs (chain both)'},
|
|
// buttons
|
|
{h:[1,16],col:'yellow',to:'SEED · one lug'},
|
|
{h:[1,18],col:'yellow',to:'RUN toggle · middle lug'},
|
|
{h:[5,26],col:'black',to:'Panel ground bus · SEED other lug, RUN one outer lug'},
|
|
{h:[1,3],col:'yellow',to:'Matrix row 1 (KICK, KICK 2, SNARE)'},
|
|
{h:[1,4],col:'yellow',to:'Matrix row 2 (HAT, HAT 16, PERC, GHOST)'},
|
|
{h:[1,6],col:'yellow',to:'Matrix row 3 (BASS, MEL A, MEL B, PAD)'},
|
|
{h:[1,8],col:'green',to:'Matrix column 1 (KICK, HAT, BASS)'},
|
|
{h:[1,9],col:'green',to:'Matrix column 2 (KICK 2, HAT 16, MEL A)'},
|
|
{h:[1,10],col:'green',to:'Matrix column 3 (SNARE, PERC, MEL B)'},
|
|
{h:[1,11],col:'green',to:'Matrix column 4 (GHOST, PAD)'}
|
|
];
|
|
return {W:W,H:H,cuts:cuts,parts:parts,jumpers:jumpers,wires:wires};
|
|
})();
|
|
if(typeof module!=='undefined') module.exports=LAYOUT;
|