**** 18.02.2005 - V000 19.10.2006 - V001 Siemens Sinamics motor controller ordered for motor control on PIC-specs. - second ideas 08.11.2006 - lookups checked against g_indep.dll where the lookup algorithms reside. 18.07.2007 - revision. Start new hardware design, using dsPIC 19.07.2007 - pic pinning toegevoegd voor midhub board rev 3. 20.07.2007 - display funkties toegevoegd in PIC2 (dsPIC) 25.07.2007 - Siemens motor controller programmed. 26.07.2007 - valve lookups added. 27.07.2007 - first programming session 28.07.2007 - update midi channel : 14 (0-15) basisstemming sousafoon: 22 (Si b) frekwentie = 29.1352367133525Hz PIC1: [midi-hub board.] *********************** 2 analog outs: 1 for motor control (PWM) : mapping op midi controller 1 (wind) X17 - 2 1 used as motor on off switch : X17-3 (mapping op midi controller 66) 6 bits (standard weidmueller outputs) ventielen: v1 (middelste ventiel): -1 halve toon (@X11, 2-3) v2 (rechterventiel) : -2 halve tonen (@X12, 2-3) v3 (linkerventiel) : -4 halve tonen (@X15, 2-3) - bidirectional. Note range: 12 - 47 ventiel lookup: [empirical] dit is de default. (kontroller 13, value: 0) De lookup kan gewijzigd worden met kontroller 13 (zie verder) konnektor X11 2-3 X12 2-3 X15 2-3 pic pins 16 15 21 22 14 11 noot v1 -v1 v2 -v2 v3 -v3 12 1 0 1 0 1 0 13 1 0 1 0 1 0 14 1 0 1 0 1 0 15 1 0 1 0 1 0 16 0 1 1 0 1 0 17 1 0 1 0 1 0 18 1 0 1 0 0 1 19 1 0 1 0 1 0 20 0 1 1 0 1 0 21 1 0 1 0 0 1 22 1 0 1 0 0 1 23 1 0 1 0 0 1 24 1 0 1 0 1 0 25 0 1 1 0 0 1 26 1 0 1 0 0 1 27 1 0 1 0 0 1 28 1 0 1 0 1 0 29 0 1 1 0 1 0 30 1 0 1 0 1 0 31 1 0 1 0 1 0 32 1 0 1 0 1 0 33 1 0 1 0 1 0 34 1 0 1 0 0 1 35 1 0 0 1 1 0 36 1 0 1 0 0 1 37 1 0 1 0 1 0 38 1 0 1 0 1 0 39 1 0 1 0 0 1 40 1 0 1 0 1 0 41 0 1 1 0 1 0 42 1 0 0 1 1 0 43 1 0 0 1 1 0 44 1 0 1 0 0 1 45 1 0 1 0 1 0 46 1 0 1 0 1 0 47 1 0 1 0 1 0 Tweede lookup table: (acoustic theory) - kontroller 13, value = 1 konnektor X11 2-3 X12 2-3 X15 2-3 pic pins 16 15 21 22 14 11 noot v1 -v1 v2 -v2 v3 -v3 note= 12 0 1 0 1 0 1 valves: 0 0 0 note= 13 0 1 0 1 0 1 valves: 0 0 0 note= 14 0 1 0 1 0 1 valves: 0 0 0 note= 15 1 0 1 0 1 0 valves: 1 1 1 note= 16 0 1 1 0 1 0 valves: 1 1 0 note= 17 1 0 0 1 1 0 valves: 1 0 1 note= 18 0 1 0 1 1 0 valves: 1 0 0 note= 19 1 0 1 0 0 1 valves: 0 1 1 note= 20 0 1 1 0 0 1 valves: 0 1 0 note= 21 1 0 0 1 0 1 valves: 0 0 1 note= 22 0 1 0 1 0 1 valves: 0 0 0 note= 23 0 1 1 0 1 0 valves: 1 1 0 note= 24 1 0 0 1 1 0 valves: 1 0 1 note= 25 0 1 0 1 1 0 valves: 1 0 0 note= 26 1 0 1 0 0 1 valves: 0 1 1 note= 27 1 0 1 0 1 0 valves: 1 1 1 note= 28 0 1 1 0 1 0 valves: 1 1 0 note= 29 1 0 0 1 1 0 valves: 1 0 1 note= 30 0 1 0 1 1 0 valves: 1 0 0 note= 31 1 0 1 0 0 1 valves: 0 1 1 note= 32 0 1 1 0 0 1 valves: 0 1 0 note= 33 1 0 0 1 0 1 valves: 0 0 1 note= 34 0 1 0 1 0 1 valves: 0 0 0 note= 35 0 1 1 0 1 0 valves: 1 1 0 note= 36 1 0 0 1 1 0 valves: 1 0 1 note= 37 0 1 0 1 1 0 valves: 1 0 0 note= 38 1 0 1 0 0 1 valves: 0 1 1 note= 39 0 1 1 0 0 1 valves: 0 1 0 note= 40 1 0 0 1 0 1 valves: 0 0 1 note= 41 0 1 0 1 0 1 valves: 0 0 0 note= 42 0 1 0 1 1 0 valves: 1 0 0 note= 43 1 0 1 0 0 1 valves: 0 1 1 note= 44 0 1 1 0 0 1 valves: 0 1 0 note= 45 1 0 0 1 0 1 valves: 0 0 1 note= 46 0 1 0 1 0 1 valves: 0 0 0 note= 47 0 1 1 0 1 0 valves: 1 1 0 Bij ontvangst van een note off commando binnen het tessituurbereik (12-47), moeten alle uitgangen nul worden. Bij ontvangst van noten buiten de tessituur moeten alle uitgangen eveneens nul worden. Bij ontvangst van midi kontroller 123 (all notes off) eveneens. op experimenteerveld: 1 bit voor voetje (pulse output, with velo) (midi noot 48) - X16-6 pic pin 2 2 bits voor licht (midi noten 49-50) X16-1 en X16-2: pic pins 7 en 6 (ON/OFF) 1 bit voor logos display (midi noot 51) X16-3: pic pin 5 (ON/OFF) Note/ventiel mapping stuurbaar via controller: Controller 13: 0 = standard mapping (as implemented in GMT,2003) all bits = 0 1 = teoretical map (according to Tuba courses) bit 0 set 2 = mapping table 3 bit 1 set 3 = mapping table 4 bit 0 and 1 set bit2 = not used bit3 = set if you want to use bit mapping of valves: if bit3 is set and all lower bits are 0 then: bit4 = 1/2t ventiel on if set (v1) bit5 = 1t ventiel on if set (V2) bit6 = 2t ventiel on if set (V3) Note: if controller 13 value >= 8, note on commands should not have any effect on the valve bits, since in that case the user is supposed to send the valve combinations prior to sending the the on command. Also, different valve combinations can be sent whilst a note is sounding, leading to coloring effects and extended techniques. Note-off commands however should always zero all bit outputs for the valves. PIC2: DS-PIC tone generator *************************** We gebruiken twee outputs: PIC pinnen 26 en 24. Voor noten buiten het tessituurbereik (12-47) moeten beide outputs altijd NUL zijn. Wanneer controller 66 NUL is, mogen geen tonen gegenereerd worden. Bij note-off, moeten beide outputs eveneens NUL zijn. Te genereren midi noten: 12 - 47 Reagerend op midi note on + velo/ note off Pitchbend: te implementeren met een bereik van +/- een halve toon (kwarttoon ook aanvaardbaar) noteer: status (224+k), lsb, msb signed!!! msb >= 64 is dus een verhoging van de frekwentie met msb - 64 msb <64 is een verlaging met ABS(msb-64) De`pitchbend waarde moet gereset worden bij elke nieuwe noot of note off. Controller 7: amplitude begrenzing (max. bereik voor de velo's) Controller 20: tuning : -50 cents to + 50 cents - default must be 440Hz Controller 21: Attack amplitude (kan ook op velo gemapt worden, wanneer ctrl 7 als volume controller werkt) Parameters: amplitude: gemapt op midi-velocity (de default scaling moet afnemen met stijgende toonhoogte, a rato van -6dB per oktaaf, een implementatie met +6dB boven de amplitude instelling van ctrl7. gedurende 100ms zou erg goed zijn.). wave- symmetry (onafhankelijk van toonhoogte) Sys-ex programmeerbare lookups: noot: max.velo(amplitude): wave-symmetry: 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 Display functions: ****************** 2 4-bit nibbles worden gebrukt voor de aansturing van twee grote 7-segment displays. De funktionaliteit van deze displays wordt ingesteld met controller 14: value 0: de displays tonen de gegenereerde midi noot (msb - lsb) - dit is de default instelling. value 1: de displays tonen de waarde aangegeven met controller 15 (0-99) value 2: het msb display toont de waarde ingesteld met controller 16 (0-15) het lsb display toont de waarde ingesteld met controller 17 (0-15) value 3: de displays zijn gedoofd. (beide nibbles, alle bits hoog) In de hardware pasten we twee BCD naar 7-segment decoders toe. ************************************************************************************ Technische hardware notas: - voedingsspanning bidirectionele elektromagneten ventielen: 24V - voedingsspanning displays: 24V - voedingsspanning analoge power op-amp:-17V/+17V symmetrisch. - voedingsspanning Logos display: 6V non stabilised. ************************************************************************************ Valve lookups: [as in the 2003 version of So] So valve combination lookup tables valves are code bit 0 = -1/2 valve, bit 1 = -1 valve, bit 2 = -2 valve. Values based on acoustic theory: note= 12 f= 16.351598739624 valves: 0 0 0 v-min: 5 v-max: 90 note= 13 f= 17.3239153984036 valves: 0 0 0 v-min: 5 v-max: 96 note= 14 f= 18.3540490144113 valves: 0 0 0 v-min: 5 v-max: 64 note= 15 f= 19.4454375628304 valves: 1 1 1 v-min: 5 v-max: 48 note= 16 f= 20.6017234514868 valves: 1 1 0 v-min: 5 v-max: 48 note= 17 f= 21.8267656770466 valves: 1 0 1 v-min: 5 v-max: 64 note= 18 f= 23.1246527040591 valves: 1 0 0 v-min: 5 v-max: 64 note= 19 f= 24.4997161098265 valves: 0 1 1 v-min: 5 v-max: 64 note= 20 f= 25.956545040641 valves: 0 1 0 v-min: 5 v-max: 96 note= 21 f= 27.500001527634 valves: 0 0 1 v-min: 5 v-max: 64 note= 22 f= 29.1352367133525 valves: 0 0 0 v-min: 5 v-max: 92 note= 23 f= 30.8677080432189 valves: 1 1 0 v-min: 5 v-max: 64 note= 24 f= 32.703197479248 valves: 1 0 1 v-min: 5 v-max: 64 note= 25 f= 34.6478307968072 valves: 1 0 0 v-min: 5 v-max: 64 note= 26 f= 36.7080980288227 valves: 0 1 1 v-min: 5 v-max: 64 note= 27 f= 38.8908751256608 valves: 1 1 1 v-min: 5 v-max: 64 note= 28 f= 41.2034469029736 valves: 1 1 0 v-min: 5 v-max: 64 note= 29 f= 43.6535313540933 valves: 1 0 1 v-min: 5 v-max: 64 note= 30 f= 46.2493054081182 valves: 1 0 0 v-min: 5 v-max: 64 note= 31 f= 48.999432219653 valves: 0 1 1 v-min: 5 v-max: 64 note= 32 f= 51.9130900812821 valves: 0 1 0 v-min: 5 v-max: 64 note= 33 f= 55.000003055268 valves: 0 0 1 v-min: 5 v-max: 92 note= 34 f= 58.2704734267049 valves: 0 0 0 v-min: 5 v-max: 92 note= 35 f= 61.7354160864379 valves: 1 1 0 v-min: 5 v-max: 92 note= 36 f= 65.4063949584961 valves: 1 0 1 v-min: 5 v-max: 92 note= 37 f= 69.2956615936145 valves: 1 0 0 v-min: 5 v-max: 96 note= 38 f= 73.4161960576454 valves: 0 1 1 v-min: 5 v-max: 72 note= 39 f= 77.7817502513216 valves: 0 1 0 v-min: 5 v-max: 54 note= 40 f= 82.4068938059471 valves: 0 0 1 v-min: 5 v-max: 25 note= 41 f= 87.3070627081866 valves: 0 0 0 v-min: 5 v-max: 19 note= 42 f= 92.4986108162364 valves: 1 0 0 v-min: 5 v-max: 20 note= 43 f= 97.998864439306 valves: 0 1 1 v-min: 5 v-max: 20 note= 44 f= 103.826180162564 valves: 0 1 0 v-min: 5 v-max: 18 note= 45 f= 110.000006110536 valves: 0 0 1 v-min: 5 v-max: 10 note= 46 f= 116.54094685341 valves: 0 0 0 v-min: 5 v-max: 10 note= 47 f= 123.470832172876 valves: 1 1 0 v-min: 5 v-max: 6 Empirical values for robot: note= 12 f= 16.351598739624 valves: 1 1 1 v-min: 5 v-max: 90 note= 13 f= 17.3239153984036 valves: 1 1 1 v-min: 5 v-max: 96 note= 14 f= 18.3540490144113 valves: 1 1 1 v-min: 5 v-max: 64 note= 15 f= 19.4454375628304 valves: 1 1 1 v-min: 5 v-max: 48 note= 16 f= 20.6017234514868 valves: 1 1 0 v-min: 5 v-max: 48 note= 17 f= 21.8267656770466 valves: 1 1 1 v-min: 5 v-max: 64 note= 18 f= 23.1246527040591 valves: 0 1 1 v-min: 5 v-max: 64 note= 19 f= 24.4997161098265 valves: 1 1 1 v-min: 5 v-max: 64 note= 20 f= 25.956545040641 valves: 1 1 0 v-min: 5 v-max: 96 note= 21 f= 27.500001527634 valves: 0 1 1 v-min: 5 v-max: 64 note= 22 f= 29.1352367133525 valves: 0 1 1 v-min: 5 v-max: 92 note= 23 f= 30.8677080432189 valves: 0 1 1 v-min: 5 v-max: 64 note= 24 f= 32.703197479248 valves: 1 1 1 v-min: 5 v-max: 64 note= 25 f= 34.6478307968072 valves: 0 1 0 v-min: 5 v-max: 64 note= 26 f= 36.7080980288227 valves: 0 1 1 v-min: 5 v-max: 64 note= 27 f= 38.8908751256608 valves: 0 1 1 v-min: 5 v-max: 64 note= 28 f= 41.2034469029736 valves: 1 1 1 v-min: 5 v-max: 64 note= 29 f= 43.6535313540933 valves: 1 1 0 v-min: 5 v-max: 64 note= 30 f= 46.2493054081182 valves: 1 1 1 v-min: 5 v-max: 64 note= 31 f= 48.999432219653 valves: 1 1 1 v-min: 5 v-max: 64 note= 32 f= 51.9130900812821 valves: 1 1 1 v-min: 5 v-max: 64 note= 33 f= 55.000003055268 valves: 1 1 1 v-min: 5 v-max: 92 note= 34 f= 58.2704734267049 valves: 0 1 1 v-min: 5 v-max: 92 note= 35 f= 61.7354160864379 valves: 1 0 1 v-min: 5 v-max: 92 note= 36 f= 65.4063949584961 valves: 0 1 1 v-min: 5 v-max: 92 note= 37 f= 69.2956615936145 valves: 1 1 1 v-min: 5 v-max: 96 note= 38 f= 73.4161960576454 valves: 1 1 1 v-min: 5 v-max: 72 note= 39 f= 77.7817502513216 valves: 0 1 1 v-min: 5 v-max: 54 note= 40 f= 82.4068938059471 valves: 1 1 1 v-min: 5 v-max: 25 note= 41 f= 87.3070627081866 valves: 1 1 0 v-min: 5 v-max: 19 note= 42 f= 92.4986108162364 valves: 1 0 1 v-min: 5 v-max: 20 note= 43 f= 97.998864439306 valves: 1 0 1 v-min: 5 v-max: 20 note= 44 f= 103.826180162564 valves: 0 1 1 v-min: 5 v-max: 18 note= 45 f= 110.000006110536 valves: 1 1 1 v-min: 5 v-max: 10 note= 46 f= 116.54094685341 valves: 1 1 1 v-min: 5 v-max: 10 note= 47 f= 123.470832172876 valves: 1 1 1 v-min: 5 v-max: 6 Controller 20: Tuning. Defaults to 0, for an A=440Hz tuning. The tuning can only be raised. Controller 21: Sets the amount of second partial in the driving waveform Controller 22: Sets the amount of third partial in the driving waveform. per noot pgm 120-126 cc7 velo cc18 cc21 cc22 fr 8 bytes per noot 64*8 = 512 bytes pp 6 pgms * porta eruit * sysex * additieve synth