'**************************************************************** '* Name : Bello_Pulse2.BAS * '* Author : Godfried-Willem RAES * '* Notice : Copyleft (c) 2015 Logosoft Public Domain * '* Date : 07.04.2015 / 03.06.2015 / 16.06.2015 / 27.06.2015 * '* Version : 2.1 * '* Notes : using priority timers and loopcounter * '**************************************************************** '20.03.2015: This code should have two main loops: powerdown_loop and active_loop '21.03.2015: powerdown loop added. '26.03.2015: mapping for the puls board '31.03.2015: Further development of firmware ' this is the model for pulse board 1 ' serving 220V, 110V and 24V bells ' Tested on the led test board under GMT and firmware uploaded. '31.03.2015: Mapping adapted to board 2 ' all bells on this board work on 12V '01.04.2015: Tested on the robot, note 77 burned out... ' no bug here... ' the non-playing note 81 was a typing error here though. '02.04.2015: New version uploaded. '07.04.2015: individual velo scaling lookups added. ' This is on the limit of variable space for this pic '13.04.2015: Keypressure settings reset on powerdown added '02.06.2015: Bell for note 73 added in robot. Coding updated accordingly. ' recompiled and uploaded in chip. '03.06.2015: Nothing seems to work anymore... ' checking the GMT testcode. ' Maybe due to changes in the Proton compiler? '04.06.2015: Coding rewritten ' Now the velo pulses work again even with the repeats off. ' Code is still around the edge of what can done on the PIC ' Still cause of the shaky behaviour of the note repetitions not found. '05.06.2015: New version of manual under study... ' seems now 32-bit arrays are supported. '06.06.2015: Timer reads modified. Now this at least works... ' repeats still not working. ' anomaly in the behaviour of note 70 (Out0) '09.06.2015: repetition rates recalculated for a range 1Hz to 30Hz ' still not working properly... '10.06.2015: attempt to use a sort procedure to check only for the first timer event. ' sofar, this does not seem to solve the bug. ' for some values of rate it works o.k. ' we have serious reasons tot suspect a compiler bug. ' This version sofar, seems to be the best. ' the repeats remain unreliable. ' We have no explanation for the deviant behaviour of PortA.0 ' For further dev. start from this file. '11.06.2015: Gosubs Sorttimers added in note-on procedure '12.06.2015: experiment with sorting the timervals continuously... ' this causes the loopspeed to rise to >50us. ' still well above the midi speed (335us at neck to neck) ' Now resort only when needed. Loopspeed back to 6us. ' repeats still not working. '13.06.2015: Must be a compiler bug... (dword handling) ' under some conditions we can get out0 to oscilate at 273, or 538 Hz ' often, out0 remains stuck high. ' we cannot explain this from the code. ' This version saved as Bello_Pulse_srt3.bas ' it works for slow repeats and still has the persistent anomalie on out0 ' loopspeed is 5 microseconds. '13.06.2015: attempt to drop the timer and use a loopcounter instead ' This seems to work, but there is jitter. '14.06.2015: timer3 implemented in low priority interrupt. ' this solves the jitter problem. Velo scalings and durations may have to be recalculated now. ' Untrue: it only worked because we left an INC time in the loop... ' we still suspect a compiler bug in the dword handling... ' Back to the loop counter: this works, but time has to be scaled down a factor 4 or 5 ' as average loop speed is 5.5 us. ' This version, with a loopcounter divide, has a loop speed of 22.2us, pretty close ' to the timer resolution we had in earlier versions of our software before the ' compiler upgrade. ' Some memory shuffling required to make it work... (compiler bug) '15.06.2015: Code seems stable now. Compiler problems circumvented. ' Functionality tested with oscilloscope. ' Reminder: with this compiler, using dword variables in any irq is taboo. ' This coding can easily be adapted to implement a 12-channel slow pwm controller ' usefull for DC motor control. ' Counter reset added to avoid overflows when the firmware is running many hours. ' This makes the loopspeed now 5.65us. (under full load conditions). '16.06.2015: Timeroverflow coding improved. ' loopspeed is now 5.9 to 6.3us. ' A reset will occur after 1h45' of continuous operation. ' all notes off and timer reset will be performed. ' tested: after 7 hours, a reset will be performed. All bells repeating close to maximum speed. '17.06.2015: Controller #30 added to set all repeats to the same rate, or to reset them all. '27.06.2015: Velo's rescaled. Firmware uploaded en placed in Bello. Version 2.1 Include "18F2525.inc" 'version for the Bello board. (40MHz) 'Include "18F2620.inc" 'also possible, more memory available 'Include "18F2520.inc" 'not possible as it has too little user ram (40MHz) 'Include "18F25K20.inc" 'for test & debug on an Amicus board. (64MHz) Declare Bootloader = 0 Declare Watchdog = 0 Declare Label_Bank_Resets = 1 'Declare Icd_Req = 0 ' Mapping defines for midi-events on pin outputs and inputs: $define Out0 PORTA.0 ' 70 $define Out1 PORTA.1 ' 71 $define Out2 PORTA.2 ' 58 nc $define Out3 PORTA.3 ' 73 mounted 02.06.2015 $define Out4 PORTA.4 ' 74 $define Out5 PORTA.5 ' 75 $define Out6 PORTC.0 ' 76 $define Out7 PORTC.1 ' 77 can pwm $define Out8 PORTC.2 ' 78 can pwm $define Out9 PORTC.3 ' 79 $define Out10 PORTC.4 ' 80 $define Out11 PORTC.5 ' 81 $define Green_Led PORTB.2 ' on board square green LED $define Debug_Led PORTB.5 ' for testing - red led - watchdog Symbol CntLw = TMR0L.Word0 ' 16 bit timer 0 alias ' configure the input and output pins: Clear SSPCON1.5 'RC3 must be available for I/O TRISA = %11000000 'bits set to 0 are output, 1 = input TRISB = %11100000 TRISC = %11000000 'RC1 en RC2 zijn pwm outputs and must be set to output 'RC6 en RC7 zijn USART I/O and must be set to input 'constant definitions: 'initialisations for the midi input parser: Symbol Midichannel = 13 ' Balmec channel Symbol NoteOff_Status = 128 + Midichannel ' 2 bytes follow Symbol NoteOn_Status = 144 + Midichannel Symbol Keypres_Status = 160 + Midichannel ' 2 bytes follow Symbol Control_Status = 176 + Midichannel Symbol ProgChange_Status = 192 + Midichannel ' 1 byte message Symbol Aftertouch_Status = 208 + Midichannel ' 1 byte follows Symbol Pitchbend_Status = 224 + Midichannel ' lsb msb follow 'application specific constants 'Symbol fPWM = PWMminF * 4 ' in avoidance of audible artifacts ' not used in this code Symbol note0 = 70 ' steel dome Symbol note1 = 71 ' inox 'Symbol note2 = 58 ' so far unmounted ' was 72, changed 05.04.2015 note 72 is now on board1, out5 Symbol note3 = 73 ' mounted 02.06.2015 '[was:unmounted, we used the Siemens bell for this note ' implemented on board 1 Symbol note4 = 74 ' Friedland dome Symbol note5 = 75 ' Friedland Symbol note6 = 76 ' Funke Symbol note7 = 77 ' Funke with Black Knight solenoid Symbol note8 = 78 ' Friedland Symbol note9 = 79 ' inox Symbol note10 = 80 ' Funke with green dome Symbol note11 = 81 ' Funke dome ' Setup the USART Declare Hserial_Baud = 31250 ' Set baud rate for the USART to MIDI specs. Declare Hserial_TXSTA = 0x24 ' instead of the normal 0x20 - ?? 0x24 Declare All_Digital = True ' Declare Hserial_Clear = On ' should clear on errors. Bytes get lost of course... ' Create variables ' Dim Cnt As Dword System ' 32bit counter ' Dim CntHw As Cnt.Word1 'used in the timer0 interrupt, to create a 32 bit timer ' Dim CntLw As TMR0L.Word 'this is the trick to read both TMR0L and TMR0H as a single 16 bit value 'it makes Cntlw the low word of cnt 'We still have to copy the contents of CntLw to Cnt, as CntLw is not Cnt.word0 ! ' by doing Cnt.Byte1 = TMR0H : Cnt.Byte0 = TMR0L before using the timer value in cnt ' or Cnt.word0 = CntLw ' macro definition: '$define Gettime Cnt.Word0 = CntLw ' ' time = Cnt Dim Tim3 As TMR3L.Word ' used in the low interrupt '----------------------------------------------------------------------------------------- ' Load the USART Interrupt handler And buffer read subroutines into memory Include "Bello_Irq.inc" ' our own version for UART And Timer0/3 Interrupt Dim Bytein As Byte System ' midi byte read from buffer Dim StBit As Bytein.7 ' highest bit of ByteIn Dim i As Byte System ' general purpose counter ' midi variables Dim statusbyte As Byte System Dim noteUit As Byte System ' note off + release value ' Dim release As Byte System Dim noteAan As Byte System ' note on + release value Dim velo As Byte System Dim notePres As Byte System ' note pressure + pressure value ' Dim pres As Byte System Dim Ctrl As Byte 'System ' continuous controller + value Dim value As Byte 'System ' Dim prog As Byte System ' program change + program-byte ' Dim aft As Byte System ' channel aftertouch ' Dim pblsb As Byte System ' pitch bend lsb ' Dim pbmsb As Byte System ' pitch bend msb Dim VelFlags As Word System ' bits 0 - 15 used as flags for active timers Dim Notes As Word System ' bits used as flags Notes.0 to Notes.11 for the repeats ' Dim Bells As Word 'system ' bits used as flags for bell active or not active Dim CC66 As Byte System ' global on/off switch Dim time As Dword System ' 32-bit, incremented in low IRQ ' or loopcounter Dim maxtim As time.31 ' overflow bit, will cause timer reset after 1h45' Dim t As Byte System ' loopcounter, running at 4 times time-clock Dim tog As Byte System Dim tg As tog.0 ' divide by 4 bit ' Dim overflow As tog.7 ' bit gets set when time.31 gets set Dim velo0 As Word System Dim velo1 As Word System ' Dim velo2 As Word 'System Dim velo3 As Word System Dim velo4 As Word System Dim velo5 As Word System Dim velo6 As Word System Dim velo7 As Word System Dim velo8 As Word System Dim velo9 As Word System Dim velo10 As Word System Dim velo11 As Word System Dim Rate0 As Word System Dim Rate1 As Word System ' set with keypressure ' Dim Rate2 As Word System Dim Rate3 As Word System Dim Rate4 As Word System Dim Rate5 As Word System Dim Rate6 As Word System Dim Rate7 As Word System Dim Rate8 As Word System Dim Rate9 As Word System Dim Rate10 As Word System Dim Rate11 As Word System Dim Pres0 As Byte System 'indexes for durations lookup Dim Pres1 As Byte System ' Dim Pres2 As Byte System Dim Pres3 As Byte System Dim Pres4 As Byte System Dim Pres5 As Byte System Dim Pres6 As Byte System Dim Pres7 As Byte System Dim Pres8 As Byte System Dim Pres9 As Byte System Dim Pres10 As Byte System Dim Pres11 As Byte System Dim TimVals[12] As Dword ' lijst met timer waarden - de kleinste is eerst aan de beurt Dim Nxt As Dword System ' waarde voor de eerstvolgende timer Dim idx As Byte System ' index voor de eerstvolgende timer ' lookup-tables: ' velocity lookup tables: ' the first lookup gets cluttered ' so we dim two arrays that we do not use first... ' so on purpose, we waste 512 bytes of variable space Dim notused[128] As Word ' dummy must be at this place! Dim Vels2[128] As Word ' no bell connected as yet Dim Vels1[128] As Word Dim Vels3[128] As Word Dim Vels4[128] As Word Dim Vels5[128] As Word Dim Vels6[128] As Word Dim Vels7[128] As Word Dim Vels8[128] As Word Dim Vels9[128] As Word Dim Vels10[128] As Word Dim Vels11[128] As Word Dim Vels0[128] As Word ' lookup for note repetitions: Dim Dur[128] As Word MAIN: 'make sure we initialize the used pins on start up: Low Green_Led Low Out0 Low Out1 Low Out2 Low Out3 Low Out4 Low Out5 Low Out6 Low Out7 Low Out8 Low Out9 Low Out10 Low Out11 'DelayMS 50 ' wait for stability 'Clear ' clears all RAM 'Low Debug_Led Clear Rate0 Clear Rate1 'Clear Rate2 Clear Rate3 Clear Rate4 Clear Rate5 Clear Rate6 Clear Rate7 Clear Rate8 Clear Rate9 Clear Rate10 Clear Rate11 Clear Pres0 Clear Pres1 'Clear Pres2 Clear Pres3 Clear Pres4 Clear Pres5 Clear Pres6 Clear Pres7 Clear Pres8 Clear Pres9 Clear Pres10 Clear Pres11 Clear CC66 GoSub Dur_Lookup ' note repetition periods GoSub Vels_Lookup ' velocity scalings Clear Notes Clear VelFlags Low PORTB ' rescale velocities: For i = 1 To 127 Vels0[i] = Vels0[i] * 2.4 Vels1[i] = Vels1[i] * 2.4 Vels3[i] = Vels3[i] * 2.4 Vels4[i] = Vels4[i] * 2.4 Vels5[i] = Vels5[i] * 2.4 Vels6[i] = Vels6[i] * 2.4 Vels7[i] = Vels7[i] * 2.4 Vels8[i] = Vels8[i] * 2.4 Vels9[i] = Vels9[i] * 2.4 Vels10[i] = Vels10[i] * 2.4 Vels11[i] = Vels11[i] * 2.4 Next i ' compiler test: crashes! 'while time < 2147483648 ' inc time ' set PortB.6 'wend 'clear portB.6 Init_Usart_Interrupt ' Initiate the USART serial buffer interrupt ' this procedure is in the IRQ include file Clear_Serial_Buffer ' Clear the serial buffer and reset its pointers ' in the IRQ include as well ' Configure Timer0 for: ' Clear TMR0L and TMR0H registers ' Interrupt on Timer0 overflow ' 16-bit operation ' Internal clock source 40MHz ' 1:256 Prescaler : thus 40MHz / 256 = 156.250kHz ' Opentimer0 (Timer_INT_On & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256) 'in macro file. Clear T1CON ' clear timer1 flags Clear IntConBits_T0IF ' clear interrupt flag Set INTCONBITS_T0IE ' enable interrupt on overflow T0CON = %10000111 ' bit 7 = enable/disable ' bit 6 = 1=8 bit, 0=16 bit ' bit 5 = 1 pin input, 0= Internal Clk0 ' bit 4 = HL or LH transition when bit5 =1 ' bit 3 = 1= bypass prescaler, 0= input from prescaler ' bit 2-0 = prescaler select: 111= 1:256 ' Setup the High priorities for the interrupts ' open and start timer3 for counting: Clear T3CON Clear PIR2BITS_TMR3IF ' clear IRQ flag ' Set PIE2BITS_TMR3IE ' irq on 'Clear Tim3 ' Clear TMR3L And TMR3H registers Tim3 = 65506 ' Set RCONbits_IPEN ' Enable priority interrupts ' Clear IPR2bits_TMR3IP ' Set Timer3 as a low priority interrupt source ' we can also set T3Con in one instruction as: ' T3CON = %10110001 ' oef, now it works... ' bit 7 = 16 bit mode , 0= 8 bit mode : only affect the way it's written ' bit 6,3 = 0, 0 ' bit 5,4 = 1:8 prescale ' bit 2 = 0 ' bit 1 = 0 Internal clock = Fosc/4 ' bit 0 : 1= enable timer 3, 0= disable ' maximum count = 52.42ms, 1 tick =0.8uS, lowest freq.=19Hz ' reset all timers on startup: Set TimVals Set idx Set Nxt.31 Clear time ' so we start from 0 ' start the main program loop: --------------------------------------------------------- LOOP: Inc t ' byte If t.1 = tg Then Btg tg Inc time ' dword EndIf ' = time = t >> 2 not working: compiler bug! ' Create an infinite loop Bytein = HRSIn ' Read data from the serial buffer, with no timeout ' Start the midi parser. Midi_Parse: If Bytein > Control_Status Then ' here higher statusses are not implemented. If Bytein < 254 Then Clear statusbyte GoTo Check_Timers ' we do not need to re-sort existing timers in this case EndIf If StBit = 1 Then 'should be faster than If Bytein > 127 Then 'status byte received, bit 7 is set Clear statusbyte 'if on another channel, the statusbyte needs a reset Select Bytein 'eqv to Select case ByteIn Case NoteOff_Status statusbyte = Bytein Set noteUit '= 255 'reset value. Cannot be 0 !!! Case NoteOn_Status statusbyte = Bytein Set noteAan Case Keypres_Status ' used for note repetition speed statusbyte = Bytein Set notePres Case Control_Status ' only 66 and 123 statusbyte = Bytein Set Ctrl '= 255 ' Case ProgChange_Status ' statusbyte = Bytein ' prog = 255 ' Case Aftertouch_Status ' statusbyte = Bytein ' aft = 255 ' Case Pitchbend_Status ' statusbyte = Bytein ' pblsb = 255 ' pbmsb = 255 EndSelect GoTo Check_Timers ' no re-sorting of timers required Else ' midi byte is 7 bits Select statusbyte Case 0 'not a message for this channel GoTo Check_Timers 'disregard - no resort required Case NoteOff_Status If noteUit = 255 Then noteUit = Bytein GoTo Check_Timers Else 'release = Bytein 'message complete, so we can do the action... Select noteUit Case note0 Clear Out0 Clear VelFlags.0 Clear Notes.0 Set TimVals[0] ' set all bits Case note1 Clear Out1 Clear VelFlags.1 Clear Notes.1 Set TimVals[1] ' Case note2 ' Clear VelFlags.2 ' Clear Out2 ' Clear Notes.2 Case note3 Clear VelFlags.3 Clear Out3 Clear Notes.3 Set TimVals[3] Case note4 Clear VelFlags.4 Clear Out4 Clear Notes.4 Set TimVals[4] Case note5 Clear VelFlags.5 Clear Out5 Clear Notes.5 Set TimVals[5] Case note6 Clear VelFlags.6 Clear Out6 Clear Notes.6 Set TimVals[6] Case note7 Clear VelFlags.7 Clear Out7 Clear Notes.7 Set TimVals[7] Case note8 Clear VelFlags.8 Clear Out8 Clear Notes.8 Set TimVals[8] Case note9 Clear VelFlags.9 Clear Out9 Clear Notes.9 Set TimVals[9] Case note10 Clear VelFlags.10 Clear Out10 Clear Notes.10 Set TimVals[10] Case note11 Clear VelFlags.11 Clear Out11 Clear Notes.11 Set TimVals[11] Case Else Set noteUit ' not a note for this board GoTo Check_Timers ' no re-sorting EndSelect Set noteUit '= 255 reset GoTo resort ' note-off happened, so resort! EndIf Case NoteOn_Status If noteAan = 255 Then noteAan = Bytein Else velo = Bytein If velo = 0 Then Select noteAan Case note0 Clear Out0 Clear VelFlags.0 Clear Notes.0 Set TimVals[0] Case note1 Clear Out1 Clear VelFlags.1 Clear Notes.1 Set TimVals[1] ' Case note2 ' Clear VelFlags.2 ' Clear Out2 ' Clear Notes.2 Case note3 '73 Clear VelFlags.3 Clear Out3 Clear Notes.3 Set TimVals[3] Case note4 Clear VelFlags.4 Clear Out4 Clear Notes.4 Set TimVals[4] Case note5 Clear VelFlags.5 Clear Out5 Clear Notes.5 Set TimVals[5] Case note6 Clear VelFlags.6 Clear Out6 Clear Notes.6 Set TimVals[6] Case note7 Clear VelFlags.7 Clear Out7 Clear Notes.7 Set TimVals[7] Case note8 Clear VelFlags.8 Clear Out8 Clear Notes.8 Set TimVals[8] Case note9 Clear VelFlags.9 Clear Out9 Clear Notes.9 Set TimVals[9] Case note10 Clear VelFlags.10 Clear Out10 Clear Notes.10 Set TimVals[10] Case note11 Clear VelFlags.11 Clear Out11 Clear Notes.11 Set TimVals[11] Case Else Set noteAan 'not a note for this board GoTo Check_Timers 'no resort required EndSelect ' here we need a resort! Set noteAan GoTo resort EndIf If CC66 > 0 Then ' so power ON must have been set! Select noteAan Case note0 'hier moeten we een pulse timer starten, duur evenredig met velo 'na afloop van de puls moet een wachttimer ingeschakeld worden 'voor zover een repeat speed is ingesteld met keypressure ' na de wachttijd moet een nieuwe puls gegeven worden met de bestaande velo ' note off schakelt de repeats uiteraard uit. Set Out0 ' stroom aan velo0 = Vels0[velo] ' word var's Set VelFlags.0 TimVals[0] = time + velo0 ' stroke duration should never be larger than 16ms (= 60Hz bell) If Pres0 > 0 Then Set Notes.0 ' hier moeten we Rate0 herberekenen in funktie van velo0 ' in elk geval mag Rate0 nooit kleiner zijn dan velo0. If Dur[Pres0] <= velo0 << 1 Then Rate0 = velo0 Else Rate0 = Dur[Pres0] - velo0 ' 3 word vars EndIf EndIf Case note1 Set Out1 velo1 = Vels1[velo] Set VelFlags.1 TimVals[1] = time + velo1 If Pres1 > 0 Then Set Notes.1 If Dur[Pres1] <= velo1 << 1 Then Rate1 = velo1 Else Rate1 = Dur[Pres1] - velo1 EndIf EndIf ' Case note2 ' niet aangesloten Case note3 velo3 = Vels3[velo] Set Out3 Set VelFlags.3 TimVals[3] = time + velo3 If Pres3 > 0 Then Set Notes.3 If Dur[Pres3] <= velo3 << 1 Then Rate3 = velo3 Else Rate3 = Dur[Pres3] - velo3 EndIf EndIf Case note4 velo4 = Vels4[velo] Set Out4 Set VelFlags.4 TimVals[4] = time + velo4 If Pres4 > 0 Then Set Notes.4 If Dur[Pres4] <= velo4 << 1 Then Rate4 = velo4 Else Rate4 = Dur[Pres4] - velo4 EndIf EndIf Case note5 velo5 = Vels5[velo] Set Out5 Set VelFlags.5 TimVals[5] = time + velo5 If Pres5 > 0 Then Set Notes.5 If Dur[Pres5] <= velo5 << 1 Then Rate5 = velo5 Else Rate5 = Dur[Pres5] - velo5 EndIf EndIf Case note6 velo6 = Vels6[velo] Set Out6 Set VelFlags.6 TimVals[6] = time + velo6 If Pres6 > 0 Then Set Notes.6 If Dur[Pres6] <= velo6 << 1 Then Rate6 = velo6 Else Rate6 = Dur[Pres6] - velo6 EndIf EndIf Case note7 velo7 = Vels7[velo] Set Out7 Set VelFlags.7 TimVals[7] = time + velo7 If Pres7 > 0 Then Set Notes.7 If Dur[Pres7] <= velo7 << 1 Then Rate7 = velo7 Else Rate7 = Dur[Pres7] - velo7 EndIf EndIf Case note8 velo8 = Vels8[velo] Set Out8 Set VelFlags.8 TimVals[8] = time + velo8 If Pres8 > 0 Then Set Notes.8 If Dur[Pres8] <= velo8 << 1 Then Rate8 = velo8 Else Rate8 = Dur[Pres8] - velo8 EndIf EndIf Case note9 velo9 = Vels9[velo] Set Out9 Set VelFlags.9 TimVals[9] = time + velo9 If Pres9 > 0 Then Set Notes.9 If Dur[Pres9] <= velo9 << 1 Then Rate9 = velo9 Else Rate9 = Dur[Pres9] - velo9 EndIf EndIf Case note10 velo10 = Vels10[velo] Set Out10 Set VelFlags.10 TimVals[10] = time + velo10 If Pres10 > 0 Then Set Notes.10 If Dur[Pres10] <= velo10 << 1 Then Rate10 = velo10 Else Rate10 = Dur[Pres10] - velo10 EndIf EndIf Case note11 velo11 = Vels11[velo] Set Out11 Set VelFlags.11 TimVals[11] = time + velo11 If Pres11 > 0 Then Set Notes.11 If Dur[Pres11] <= velo11 << 1 Then Rate11 = velo11 Else Rate11 = Dur[Pres11] - velo11 EndIf EndIf Case Else Set noteAan GoTo Check_Timers ' no re-sorting required EndSelect Else ' power is OFF Set noteAan GoTo Check_Timers ' no re-sort EndIf ' CC66 endif Set noteAan GoTo resort EndIf Case Keypres_Status 'used for note repetition speed modulation If notePres = 255 Then notePres = Bytein GoTo Check_Timers Else Select notePres Case note0 Pres0 = Bytein If Pres0 > 0 Then Rate0 = Dur[Pres0] ' note that we set Notes.0 only on reception of a note-on ' this way we can program the repeats prior to playing. Else Clear Rate0 Clear Notes.0 EndIf Case note1 Pres1 = Bytein If Pres1 > 0 Then Rate1 = Dur[Pres1] Else Clear Rate1 Clear Notes.1 EndIf ' Case note2 ' Pres2 = Bytein ' If Pres2 > 0 Then ' Rate2 = Dur[Pres2] ' Else ' Clear Rate2 ' Clear Notes.2 ' EndIf Case note3 Pres3 = Bytein If Pres3 > 0 Then Rate3 = Dur[Pres3] Else Clear Rate3 Clear Notes.3 EndIf Case note4 Pres4 = Bytein If Pres4 > 0 Then Rate4 = Dur[Pres4] Else Clear Rate4 Clear Notes.4 EndIf Case note5 Pres5 = Bytein If Pres5 > 0 Then Rate5 = Dur[Pres5] Else Clear Rate5 Clear Notes.5 EndIf Case note6 Pres6 = Bytein If Pres6 > 0 Then Rate6 = Dur[Pres6] Else Clear Rate6 Clear Notes.6 EndIf Case note7 Pres7 = Bytein If Pres7 > 0 Then Rate7 = Dur[Pres7] Else Clear Rate7 Clear Notes.7 EndIf Case note8 Pres8 = Bytein If Pres8 > 0 Then Rate8 = Dur[Pres8] Else Clear Rate8 Clear Notes.8 EndIf Case note9 Pres9 = Bytein If Pres9 > 0 Then Rate9 = Dur[Pres9] Else Clear Rate9 Clear Notes.9 EndIf Case note10 Pres10 = Bytein If Pres10 > 0 Then Rate10 = Dur[Pres10] Else Clear Rate10 Clear Notes.10 EndIf Case note11 Pres11 = Bytein If Pres11 > 0 Then Rate11 = Dur[Pres11] Else Clear Rate11 Clear Notes.11 EndIf 'Case Else ' Set notePres ' GoTo Check_Timers ' no sort required EndSelect Set notePres '= 255 GoTo Check_Timers ' no sort required EndIf Case Control_Status 'this is where the action takes place for controllers If Ctrl = 255 Then Ctrl = Bytein GoTo Check_Timers ' no sort required Else value = Bytein GoSub Controller ' this will be followed with a re-sort EndIf EndSelect EndIf resort: GoSub SortTimers ' so we resort only if an incoming midi command changed something Check_Timers: ' here we check the Task counters and compare them with the 32 bit cnt value ' copied in time using the TimVals[] dword variables: If idx < 12 Then ' we moeten alleen checken wanneer er een timer loopt If time >= Nxt Then ' nagaan of de eerstvolgende timer afgelopen is... ' in dit geval is de eerste timer afgelopen en moeten we de juiste aktie ondernemen: Set Nxt.31 ' timer reset, is immers afgelopen ' aan de hand van idx weten we welke timer dit is Select idx Case 0 If Notes.0 = 0 Then Clear VelFlags.0 Clear Out0 Set TimVals[0] Else If VelFlags.0 = 1 Then Clear Out0 TimVals[0] = time + Rate0 Clear VelFlags.0 Else Set Out0 TimVals[0] = time + velo0 Set VelFlags.0 EndIf EndIf Case 1 If Notes.1 = 0 Then Clear VelFlags.1 Clear Out1 Set TimVals[1] Else If VelFlags.1 = 1 Then Clear Out1 TimVals[1] = time + Rate1 Clear VelFlags.1 Else Set Out1 TimVals[1] = time + velo1 Set VelFlags.1 EndIf EndIf ' Case 2 ' nc Case 3 If Notes.3 = 0 Then Clear VelFlags.3 Clear Out3 Set TimVals[3] Else If VelFlags.3 = 1 Then Clear Out3 TimVals[3] = time + Rate3 Clear VelFlags.3 Else Set Out3 TimVals[3] = time + velo3 Set VelFlags.3 EndIf EndIf Case 4 If Notes.4 = 0 Then Clear VelFlags.4 Clear Out4 Set TimVals[4] Else If VelFlags.4 = 1 Then Clear Out4 TimVals[4] = time + Rate4 Clear VelFlags.4 Else Set Out4 TimVals[4] = time + velo4 Set VelFlags.4 EndIf EndIf Case 5 If Notes.5 = 0 Then Clear VelFlags.5 Clear Out5 Set TimVals[5] Else If VelFlags.5 = 1 Then Clear Out5 TimVals[5] = time + Rate5 Clear VelFlags.5 Else Set Out5 TimVals[5] = time + velo5 Set VelFlags.5 EndIf EndIf Case 6 If Notes.6 = 0 Then Clear VelFlags.6 Clear Out6 Set TimVals[6] Else If VelFlags.6 = 1 Then Clear Out6 TimVals[6] = time + Rate6 Clear VelFlags.6 Else Set Out6 TimVals[6] = time + velo6 Set VelFlags.6 EndIf EndIf Case 7 If Notes.7 = 0 Then Clear VelFlags.7 Clear Out7 Set TimVals[7] Else If VelFlags.7 = 1 Then Clear Out7 TimVals[7] = time + Rate7 Clear VelFlags.7 Else Set Out7 TimVals[7] = time + velo7 Set VelFlags.7 EndIf EndIf Case 8 If Notes.8 = 0 Then Clear VelFlags.8 Clear Out8 Set TimVals[8] Else If VelFlags.8 = 1 Then Clear Out8 TimVals[8] = time + Rate8 Clear VelFlags.8 Else Set Out8 TimVals[8] = time + velo8 Set VelFlags.8 EndIf EndIf Case 9 If Notes.9 = 0 Then Clear VelFlags.9 Clear Out9 Set TimVals[9] Else If VelFlags.9 = 1 Then Clear Out9 TimVals[9] = time + Rate9 Clear VelFlags.9 Else Set Out9 TimVals[9] = time + velo9 Set VelFlags.9 EndIf EndIf Case 10 If Notes.10 = 0 Then Clear VelFlags.10 Clear Out10 Set TimVals[10] Else If VelFlags.10 = 1 Then Clear Out10 TimVals[10] = time + Rate10 Clear VelFlags.10 Else Set Out10 TimVals[10] = time + velo10 Set VelFlags.10 EndIf EndIf Case 11 If Notes.11 = 0 Then Clear VelFlags.11 Clear Out11 Set TimVals[11] Else If VelFlags.11 = 1 Then Clear Out11 TimVals[11] = time + Rate11 Clear VelFlags.11 Else Set Out11 TimVals[11] = time + velo11 Set VelFlags.11 EndIf EndIf 'Case Else ' ' in dit geval is idx geset ' GoTo jumpout End Select GoSub SortTimers ' find a new nxt and idx 'If time >= Nxt Then GoTo Check_Timers ' this causes an endless loop! ' we could try this ' if idx < 11 then ' if time >= Nxt then goto Check_Timers ' endif EndIf ' beveiliging tegen overflow crashes... If maxtim = 1 Then Clear time Clear VelFlags Clear Notes Set TimVals 'Clear PortA Clear Out0 Clear Out1 Clear Out2 Clear Out3 Clear Out4 Clear Out5 Clear Out6 Clear Out7 Clear Out8 Clear Out9 Clear Out10 Clear Out11 EndIf Else ' idx > 11, no timers running, so to avoid overflows, we can reset the timer If maxtim = 1 Then Clear time ' 16.06.2015 'Clear time.Byte3 ' added 15.06.2015 EndIf Btg PORTB.0 ' average loop-speed: 5.9 microseconds. (Tektronix measurement) GoTo LOOP ' end of the main loop SortTimers: 'look up the next smallest timer value in the Timvals array ' zoek de de volgende kleinste timer waarde: Set idx ' makes it 255 Set Nxt.31 ' nxt is set on entry. - for speed, we just set the highest bit For i = 0 To 11 If TimVals[i] < Nxt Then Nxt = TimVals[i] ' 12 dword comparisons idx = i EndIf Next i ' dit volstaat als bescherming tegen timer overflows: ' If idx > 11 Then ' indien geen enkele timer geladen is... ' Clear time.Byte3 ' reset ' EndIf Return 'ProgChange: ' Set prog '= 255 'this is not realy required 'Return 'Pitchbend: ' 'only implemented on dsPIC based robots ' Set pblsb '= 255 'Return 'Aftertouch: ' 'this is the channel aftertouch, affecting all notes ' Set aft '= 255 'not mandatory 'Return Controller: Select Ctrl Case 30 ' controller to set all repeat frequencies to one and the same value at once If value = 0 Then Clear Notes Clear Rate0 Clear Pres0 Clear Rate1 Clear Pres1 Clear Rate3 Clear Pres3 Clear Rate4 Clear Pres4 Clear Rate5 Clear Pres5 Clear Rate6 Clear Pres6 Clear Rate7 Clear Pres7 Clear Rate8 Clear Pres8 Clear Rate9 Clear Pres9 Clear Rate10 Clear Pres10 Clear Rate11 Clear Pres11 Else Pres0 = value Rate0 = Dur[value] Pres1 = value Rate1 = Dur[value] Pres3 = value Rate3 = Dur[value] Pres4 = value Rate4 = Dur[value] Pres5 = value Rate5 = Dur[value] Pres6 = value Rate6 = Dur[value] Pres7 = value Rate7 = Dur[value] Pres8 = value Rate8 = Dur[value] Pres9 = value Rate9 = Dur[value] Pres10 = value Rate10 = Dur[value] Pres11 = value Rate11 = Dur[value] EndIf Case 66 'on/off for the robot If value = 0 Then Clear VelFlags 'stop all running timers Clear Notes Set TimVals Set idx Clear Out0 Clear Out1 Clear Out2 Clear Out3 Clear Out4 Clear Out5 Clear Out6 Clear Out7 Clear Out8 Clear Out9 Clear Out10 Clear Out11 ' reset all repetition rates: Clear Rate0 Clear Rate1 'Clear Rate2 Clear Rate3 Clear Rate4 Clear Rate5 Clear Rate6 Clear Rate7 Clear Rate8 Clear Rate9 Clear Rate10 Clear Rate11 Clear Pres0 Clear Pres1 ' Clear Pres2 Clear Pres3 Clear Pres4 Clear Pres5 Clear Pres6 Clear Pres7 Clear Pres8 Clear Pres9 Clear Pres10 Clear Pres11 Clear CC66 Clear Green_Led Clear time Else If CC66 = 0 Then ' only if switched from OFF to ON Set Green_Led CC66 = value EndIf EndIf Case 123 Clear VelFlags Clear Notes Clear Out0 Clear Out1 Clear Out2 Clear Out3 Clear Out4 Clear Out5 Clear Out6 Clear Out7 Clear Out8 Clear Out9 Clear Out10 Clear Out11 Clear time Set TimVals Set idx EndSelect Set Ctrl '= 255 mandatory reset Return Dur_Lookup: '09.06.2015: for these bells a good range would be fastest = 30 Hz, slowest = 1 Hz ' this is a tempered distribution! Set Dur[0] ' not used Dur[1]= 41667 ' freq= .999992000063999 Dur[2]= 39494 ' freq= 1.0550125757499 Dur[3]= 38450 ' freq= 1.08365843086259 Dur[4]= 37434 ' freq= 1.11307011451265 Dur[5]= 36445 ' freq= 1.14327525495038 Dur[6]= 35482 ' freq= 1.17430434210774 Dur[7]= 34544 ' freq= 1.20619113787247 Dur[8]= 33631 ' freq= 1.23893629885126 Dur[9]= 32743 ' freq= 1.27253662360403 Dur[10]= 31877 ' freq= 1.30710752789367 Dur[11]= 31035 ' freq= 1.34257021642232 Dur[12]= 30215 ' freq= 1.37900601246621 Dur[13]= 29416 ' freq= 1.41646269603844 Dur[14]= 28639 ' freq= 1.45489251254117 Dur[15]= 27882 ' freq= 1.49439303732396 Dur[16]= 27146 ' freq= 1.53490999287802 Dur[17]= 26428 ' freq= 1.57661066545583 Dur[18]= 25730 ' freq= 1.61938074880166 Dur[19]= 25050 ' freq= 1.66333998669328 Dur[20]= 24388 ' freq= 1.70849051446066 Dur[21]= 23743 ' freq= 1.75490319953951 Dur[22]= 23116 ' freq= 1.8025033166061 Dur[23]= 22505 ' freq= 1.85144042064726 Dur[24]= 21910 ' freq= 1.90171915411532 Dur[25]= 21331 ' freq= 1.95333864641445 Dur[26]= 20768 ' freq= 2.006291730868 Dur[27]= 20219 ' freq= 2.06076792455941 Dur[28]= 19685 ' freq= 2.11667090000847 Dur[29]= 19164 ' freq= 2.17421554303207 Dur[30]= 18658 ' freq= 2.23317969057062 Dur[31]= 18165 ' freq= 2.29378842095605 Dur[32]= 17685 ' freq= 2.35604561304307 Dur[33]= 17218 ' freq= 2.41994811631239 Dur[34]= 16763 ' freq= 2.48563304102289 Dur[35]= 16320 ' freq= 2.5531045751634 Dur[36]= 15888 ' freq= 2.62252433702585 Dur[37]= 15469 ' freq= 2.69355916133342 Dur[38]= 15060 ' freq= 2.76671093404161 Dur[39]= 14662 ' freq= 2.84181330423316 Dur[40]= 14274 ' freq= 2.91906029610948 Dur[41]= 13897 ' freq= 2.99824902257082 Dur[42]= 13530 ' freq= 3.07957625030796 Dur[43]= 13172 ' freq= 3.16327563518575 Dur[44]= 12824 ' freq= 3.24911624038262 Dur[45]= 12485 ' freq= 3.33733813910025 Dur[46]= 12155 ' freq= 3.42794460441519 Dur[47]= 11834 ' freq= 3.52092839840009 Dur[48]= 11522 ' freq= 3.61627032343922 Dur[49]= 11217 ' freq= 3.71459986330272 Dur[50]= 10921 ' freq= 3.81527943106553 Dur[51]= 10632 ' freq= 3.91898670679709 Dur[52]= 10351 ' freq= 4.02537597011561 Dur[53]= 10078 ' freq= 4.13441820467024 Dur[54]= 9811 ' freq= 4.24693371385859 Dur[55]= 9552 ' freq= 4.36208821887214 Dur[56]= 9300 ' freq= 4.48028673835125 Dur[57]= 9054 ' freq= 4.60201752448273 Dur[58]= 8815 ' freq= 4.72679145396105 Dur[59]= 8582 ' freq= 4.85512312592247 Dur[60]= 8355 ' freq= 4.9870337123479 Dur[61]= 8134 ' freq= 5.12253094008688 Dur[62]= 7919 ' freq= 5.26160710527423 Dur[63]= 7710 ' freq= 5.40423692174665 Dur[64]= 7506 ' freq= 5.5511146638245 Dur[65]= 7308 ' freq= 5.70151432220398 Dur[66]= 7115 ' freq= 5.85617240571562 Dur[67]= 6927 ' freq= 6.01510995621 Dur[68]= 6744 ' freq= 6.1783313562673 Dur[69]= 6565 ' freq= 6.34678852500635 Dur[70]= 6392 ' freq= 6.51856487275761 Dur[71]= 6223 ' freq= 6.69559162247576 Dur[72]= 6059 ' freq= 6.87682235792485 Dur[73]= 5898 ' freq= 7.06454165253758 Dur[74]= 5743 ' freq= 7.25520924023449 Dur[75]= 5591 ' freq= 7.45245334764204 Dur[76]= 5443 ' freq= 7.65509216730969 Dur[77]= 5299 ' freq= 7.86311882745172 Dur[78]= 5159 ' freq= 8.07650061381405 Dur[79]= 5023 ' freq= 8.29517552591413 Dur[80]= 4890 ' freq= 8.52079072937969 Dur[81]= 4761 ' freq= 8.75166281593503 Dur[82]= 4635 ' freq= 8.98957209636821 Dur[83]= 4513 ' freq= 9.23258734027624 Dur[84]= 4393 ' freq= 9.48478640261021 Dur[85]= 4277 ' freq= 9.74203101862676 Dur[86]= 4164 ' freq= 10.0064040986231 Dur[87]= 4054 ' freq= 10.277914816642 Dur[88]= 3947 ' freq= 10.5565408326999 Dur[89]= 3843 ' freq= 10.842223956978 Dur[90]= 3741 ' freq= 11.1378419317473 Dur[91]= 3642 ' freq= 11.4406004027091 Dur[92]= 3546 ' freq= 11.7503290092122 Dur[93]= 3452 ' freq= 12.0702974121282 Dur[94]= 3361 ' freq= 12.3971040364971 Dur[95]= 3272 ' freq= 12.7343113284434 Dur[96]= 3186 ' freq= 13.0780498012136 Dur[97]= 3102 ' freq= 13.4321942832581 Dur[98]= 3020 ' freq= 13.7969094922737 Dur[99]= 2940 ' freq= 14.172335600907 Dur[100]= 2862 ' freq= 14.5585837409737 Dur[101]= 2787 ' freq= 14.9503647889008 Dur[102]= 2713 ' freq= 15.3581521071385 Dur[103]= 2641 ' freq= 15.7768522024486 Dur[104]= 2571 ' freq= 16.2064047711656 Dur[105]= 2504 ' freq= 16.640042598509 Dur[106]= 2437 ' freq= 17.0975242784845 Dur[107]= 2373 ' freq= 17.5586458772299 Dur[108]= 2310 ' freq= 18.037518037518 Dur[109]= 2249 ' freq= 18.5267526307989 Dur[110]= 2190 ' freq= 19.0258751902588 Dur[111]= 2132 ' freq= 19.5434646654159 Dur[112]= 2076 ' freq= 20.0706486833654 Dur[113]= 2021 ' freq= 20.616856341745 Dur[114]= 1967 ' freq= 21.182850364345 Dur[115]= 1915 ' freq= 21.7580504786771 Dur[116]= 1865 ' freq= 22.3413762287757 Dur[117]= 1815 ' freq= 22.9568411386593 Dur[118]= 1767 ' freq= 23.5804565176382 Dur[119]= 1721 ' freq= 24.2107301956227 Dur[120]= 1675 ' freq= 24.8756218905473 Dur[121]= 1631 ' freq= 25.5466993664418 Dur[122]= 1588 ' freq= 26.2384550797649 Dur[123]= 1546 ' freq= 26.9512721000431 Dur[124]= 1505 ' freq= 27.6854928017719 Dur[125]= 1465 ' freq= 28.4414106939704 Dur[126]= 1427 ' freq= 29.1987853305302 Dur[127]= 1389 ' freq= 29.9976001919846 Return Vels_Lookup: ' lookup table for the velocity controlled pulse durations ' if we state that the longest pulse (for fortissimo) should not exceed 16ms (=666 24us units) ' and we set the minimum pulse duration at 1ms (=42 24us units) then we can calculate the lookup ' as follows: ' Vels[1] = 42 ' minimum velocity 1ms ' For i = 2 To 127 ' Vels[i] = Vels[i-1] + 5 ' Next i ' Velocity lookup tables for board 2 ' after measurements 07.04.2015 gwr. ' Noot= 70 Output= 0 Vels0[0] = 42 ' not used Vels0[1]= 76 Vels0[2]= 79 Vels0[3]= 81 Vels0[4]= 83 Vels0[5]= 85 Vels0[6]= 87 Vels0[7]= 90 Vels0[8]= 92 Vels0[9]= 94 Vels0[10]= 96 Vels0[11]= 98 Vels0[12]= 101 Vels0[13]= 103 Vels0[14]= 105 Vels0[15]= 107 Vels0[16]= 109 Vels0[17]= 112 Vels0[18]= 114 Vels0[19]= 116 Vels0[20]= 118 Vels0[21]= 120 Vels0[22]= 123 Vels0[23]= 125 Vels0[24]= 127 Vels0[25]= 129 Vels0[26]= 132 Vels0[27]= 134 Vels0[28]= 136 Vels0[29]= 138 Vels0[30]= 140 Vels0[31]= 143 Vels0[32]= 145 Vels0[33]= 147 Vels0[34]= 149 Vels0[35]= 151 Vels0[36]= 154 Vels0[37]= 156 Vels0[38]= 158 Vels0[39]= 160 Vels0[40]= 162 Vels0[41]= 165 Vels0[42]= 167 Vels0[43]= 169 Vels0[44]= 171 Vels0[45]= 173 Vels0[46]= 176 Vels0[47]= 178 Vels0[48]= 180 Vels0[49]= 182 Vels0[50]= 184 Vels0[51]= 187 Vels0[52]= 189 Vels0[53]= 191 Vels0[54]= 193 Vels0[55]= 195 Vels0[56]= 198 Vels0[57]= 200 Vels0[58]= 202 Vels0[59]= 204 Vels0[60]= 207 Vels0[61]= 209 Vels0[62]= 211 Vels0[63]= 213 Vels0[64]= 215 Vels0[65]= 218 Vels0[66]= 220 Vels0[67]= 222 Vels0[68]= 224 Vels0[69]= 226 Vels0[70]= 229 Vels0[71]= 231 Vels0[72]= 233 Vels0[73]= 235 Vels0[74]= 237 Vels0[75]= 240 Vels0[76]= 242 Vels0[77]= 244 Vels0[78]= 246 Vels0[79]= 248 Vels0[80]= 251 Vels0[81]= 253 Vels0[82]= 255 Vels0[83]= 257 Vels0[84]= 259 Vels0[85]= 262 Vels0[86]= 264 Vels0[87]= 266 Vels0[88]= 268 Vels0[89]= 270 Vels0[90]= 273 Vels0[91]= 275 Vels0[92]= 277 Vels0[93]= 279 Vels0[94]= 281 Vels0[95]= 284 Vels0[96]= 286 Vels0[97]= 288 Vels0[98]= 290 Vels0[99]= 293 Vels0[100]= 295 Vels0[101]= 297 Vels0[102]= 299 Vels0[103]= 301 Vels0[104]= 304 Vels0[105]= 306 Vels0[106]= 308 Vels0[107]= 310 Vels0[108]= 312 Vels0[109]= 315 Vels0[110]= 317 Vels0[111]= 319 Vels0[112]= 321 Vels0[113]= 323 Vels0[114]= 326 Vels0[115]= 328 Vels0[116]= 330 Vels0[117]= 332 Vels0[118]= 334 Vels0[119]= 337 Vels0[120]= 339 Vels0[121]= 341 Vels0[122]= 343 Vels0[123]= 345 Vels0[124]= 348 Vels0[125]= 350 Vels0[126]= 352 Vels0[127]= 354 ' Noot= 71 Output= 2 Vels1[0] = 42 ' not used. Vels1[1]= 62 Vels1[2]= 64 Vels1[3]= 66 Vels1[4]= 69 Vels1[5]= 71 Vels1[6]= 73 Vels1[7]= 76 Vels1[8]= 78 Vels1[9]= 80 Vels1[10]= 83 Vels1[11]= 85 Vels1[12]= 87 Vels1[13]= 90 Vels1[14]= 92 Vels1[15]= 94 Vels1[16]= 96 Vels1[17]= 99 Vels1[18]= 101 Vels1[19]= 103 Vels1[20]= 106 Vels1[21]= 108 Vels1[22]= 110 Vels1[23]= 113 Vels1[24]= 115 Vels1[25]= 117 Vels1[26]= 120 Vels1[27]= 122 Vels1[28]= 124 Vels1[29]= 127 Vels1[30]= 129 Vels1[31]= 131 Vels1[32]= 134 Vels1[33]= 136 Vels1[34]= 138 Vels1[35]= 141 Vels1[36]= 143 Vels1[37]= 145 Vels1[38]= 148 Vels1[39]= 150 Vels1[40]= 152 Vels1[41]= 155 Vels1[42]= 157 Vels1[43]= 159 Vels1[44]= 161 Vels1[45]= 164 Vels1[46]= 166 Vels1[47]= 168 Vels1[48]= 171 Vels1[49]= 173 Vels1[50]= 175 Vels1[51]= 178 Vels1[52]= 180 Vels1[53]= 182 Vels1[54]= 185 Vels1[55]= 187 Vels1[56]= 189 Vels1[57]= 192 Vels1[58]= 194 Vels1[59]= 196 Vels1[60]= 199 Vels1[61]= 201 Vels1[62]= 203 Vels1[63]= 206 Vels1[64]= 208 Vels1[65]= 210 Vels1[66]= 213 Vels1[67]= 215 Vels1[68]= 217 Vels1[69]= 220 Vels1[70]= 222 Vels1[71]= 224 Vels1[72]= 226 Vels1[73]= 229 Vels1[74]= 231 Vels1[75]= 233 Vels1[76]= 236 Vels1[77]= 238 Vels1[78]= 240 Vels1[79]= 243 Vels1[80]= 245 Vels1[81]= 247 Vels1[82]= 250 Vels1[83]= 252 Vels1[84]= 254 Vels1[85]= 257 Vels1[86]= 259 Vels1[87]= 261 Vels1[88]= 264 Vels1[89]= 266 Vels1[90]= 268 Vels1[91]= 271 Vels1[92]= 273 Vels1[93]= 275 Vels1[94]= 278 Vels1[95]= 280 Vels1[96]= 282 Vels1[97]= 284 Vels1[98]= 287 Vels1[99]= 289 Vels1[100]= 291 Vels1[101]= 294 Vels1[102]= 296 Vels1[103]= 298 Vels1[104]= 301 Vels1[105]= 303 Vels1[106]= 305 Vels1[107]= 308 Vels1[108]= 310 Vels1[109]= 312 Vels1[110]= 315 Vels1[111]= 317 Vels1[112]= 319 Vels1[113]= 322 Vels1[114]= 324 Vels1[115]= 326 Vels1[116]= 329 Vels1[117]= 331 Vels1[118]= 333 Vels1[119]= 336 Vels1[120]= 338 Vels1[121]= 340 Vels1[122]= 343 Vels1[123]= 345 Vels1[124]= 347 Vels1[125]= 349 Vels1[126]= 352 Vels1[127]= 354 ' noot 58 , dummy as yet unconnected... 'Vels2[1]= 67 'Vels2[2]= 68 'Vels2[3]= 69 'Vels2[4]= 71 'Vels2[5]= 72 'Vels2[6]= 73 'Vels2[7]= 75 'Vels2[8]= 76 'Vels2[9]= 77 'Vels2[10]= 79 'Vels2[11]= 80 'Vels2[12]= 81 'Vels2[13]= 83 'Vels2[14]= 84 'Vels2[15]= 86 'Vels2[16]= 87 'Vels2[17]= 88 'Vels2[18]= 90 'Vels2[19]= 91 'Vels2[20]= 92 'Vels2[21]= 94 'Vels2[22]= 95 'Vels2[23]= 96 'Vels2[24]= 98 'Vels2[25]= 99 'Vels2[26]= 100 'Vels2[27]= 102 'Vels2[28]= 103 'Vels2[29]= 104 'Vels2[30]= 106 'Vels2[31]= 107 'Vels2[32]= 109 'Vels2[33]= 110 'Vels2[34]= 111 'Vels2[35]= 113 'Vels2[36]= 114 'Vels2[37]= 115 'Vels2[38]= 117 'Vels2[39]= 118 'Vels2[40]= 119 'Vels2[41]= 121 'Vels2[42]= 122 'Vels2[43]= 123 'Vels2[44]= 125 'Vels2[45]= 126 'Vels2[46]= 128 'Vels2[47]= 129 'Vels2[48]= 130 'Vels2[49]= 132 'Vels2[50]= 133 'Vels2[51]= 134 'Vels2[52]= 136 'Vels2[53]= 137 'Vels2[54]= 138 'Vels2[55]= 140 'Vels2[56]= 141 'Vels2[57]= 142 'Vels2[58]= 144 'Vels2[59]= 145 'Vels2[60]= 146 'Vels2[61]= 148 'Vels2[62]= 149 'Vels2[63]= 151 'Vels2[64]= 152 'Vels2[65]= 153 'Vels2[66]= 155 'Vels2[67]= 156 'Vels2[68]= 157 'Vels2[69]= 159 'Vels2[70]= 160 'Vels2[71]= 161 'Vels2[72]= 163 'Vels2[73]= 164 'Vels2[74]= 165 'Vels2[75]= 167 'Vels2[76]= 168 'Vels2[77]= 169 'Vels2[78]= 171 'Vels2[79]= 172 'Vels2[80]= 174 'Vels2[81]= 175 'Vels2[82]= 176 'Vels2[83]= 178 'Vels2[84]= 179 'Vels2[85]= 180 'Vels2[86]= 182 'Vels2[87]= 183 'Vels2[88]= 184 'Vels2[89]= 186 'Vels2[90]= 187 'Vels2[91]= 188 'Vels2[92]= 190 'Vels2[93]= 191 'Vels2[94]= 192 'Vels2[95]= 194 'Vels2[96]= 195 'Vels2[97]= 197 'Vels2[98]= 198 'Vels2[99]= 199 'Vels2[100]= 201 'Vels2[101]= 202 'Vels2[102]= 203 'Vels2[103]= 205 'Vels2[104]= 206 'Vels2[105]= 207 'Vels2[106]= 209 'Vels2[107]= 210 'Vels2[108]= 211 'Vels2[109]= 213 'Vels2[110]= 214 'Vels2[111]= 216 'Vels2[112]= 217 'Vels2[113]= 218 'Vels2[114]= 220 'Vels2[115]= 221 'Vels2[116]= 222 'Vels2[117]= 224 'Vels2[118]= 225 'Vels2[119]= 226 'Vels2[120]= 228 'Vels2[121]= 229 'Vels2[122]= 230 'Vels2[123]= 232 'Vels2[124]= 233 'Vels2[125]= 234 'Vels2[126]= 236 'Vels2[127]= 237 ' Noot= 73 Output= 4 toegevoegd 02.06.2015 ' this lookup based on the one for note 90 on board 3 (P3.5) Vels3[1]= 155 Vels3[2]= 157 Vels3[3]= 159 Vels3[4]= 160 Vels3[5]= 162 Vels3[6]= 164 Vels3[7]= 166 Vels3[8]= 168 Vels3[9]= 170 Vels3[10]= 171 Vels3[11]= 173 Vels3[12]= 175 Vels3[13]= 177 Vels3[14]= 179 Vels3[15]= 180 Vels3[16]= 182 Vels3[17]= 184 Vels3[18]= 186 Vels3[19]= 188 Vels3[20]= 190 Vels3[21]= 191 Vels3[22]= 193 Vels3[23]= 195 Vels3[24]= 197 Vels3[25]= 199 Vels3[26]= 200 Vels3[27]= 202 Vels3[28]= 204 Vels3[29]= 206 Vels3[30]= 208 Vels3[31]= 210 Vels3[32]= 211 Vels3[33]= 213 Vels3[34]= 215 Vels3[35]= 217 Vels3[36]= 219 Vels3[37]= 220 Vels3[38]= 222 Vels3[39]= 224 Vels3[40]= 226 Vels3[41]= 228 Vels3[42]= 230 Vels3[43]= 231 Vels3[44]= 233 Vels3[45]= 235 Vels3[46]= 237 Vels3[47]= 239 Vels3[48]= 240 Vels3[49]= 242 Vels3[50]= 244 Vels3[51]= 246 Vels3[52]= 248 Vels3[53]= 250 Vels3[54]= 251 Vels3[55]= 253 Vels3[56]= 255 Vels3[57]= 257 Vels3[58]= 259 Vels3[59]= 260 Vels3[60]= 262 Vels3[61]= 264 Vels3[62]= 266 Vels3[63]= 268 Vels3[64]= 270 Vels3[65]= 271 Vels3[66]= 273 Vels3[67]= 275 Vels3[68]= 277 Vels3[69]= 279 Vels3[70]= 280 Vels3[71]= 282 Vels3[72]= 284 Vels3[73]= 286 Vels3[74]= 288 Vels3[75]= 290 Vels3[76]= 291 Vels3[77]= 293 Vels3[78]= 295 Vels3[79]= 297 Vels3[80]= 299 Vels3[81]= 300 Vels3[82]= 302 Vels3[83]= 304 Vels3[84]= 306 Vels3[85]= 308 Vels3[86]= 310 Vels3[87]= 311 Vels3[88]= 313 Vels3[89]= 315 Vels3[90]= 317 Vels3[91]= 319 Vels3[92]= 320 Vels3[93]= 322 Vels3[94]= 324 Vels3[95]= 326 Vels3[96]= 328 Vels3[97]= 330 Vels3[98]= 331 Vels3[99]= 333 Vels3[100]= 335 Vels3[101]= 337 Vels3[102]= 339 Vels3[103]= 340 Vels3[104]= 342 Vels3[105]= 344 Vels3[106]= 346 Vels3[107]= 348 Vels3[108]= 350 Vels3[109]= 351 Vels3[110]= 353 Vels3[111]= 355 Vels3[112]= 357 Vels3[113]= 359 Vels3[114]= 360 Vels3[115]= 362 Vels3[116]= 364 Vels3[117]= 366 Vels3[118]= 368 Vels3[119]= 370 Vels3[120]= 371 Vels3[121]= 373 Vels3[122]= 375 Vels3[123]= 377 Vels3[124]= 379 Vels3[125]= 380 Vels3[126]= 382 Vels3[127]= 384 ' Noot= 74 Output= 5 Vels4[1]= 71 Vels4[2]= 74 Vels4[3]= 76 Vels4[4]= 78 Vels4[5]= 80 Vels4[6]= 83 Vels4[7]= 85 Vels4[8]= 87 Vels4[9]= 89 Vels4[10]= 92 Vels4[11]= 94 Vels4[12]= 96 Vels4[13]= 98 Vels4[14]= 101 Vels4[15]= 103 Vels4[16]= 105 Vels4[17]= 107 Vels4[18]= 110 Vels4[19]= 112 Vels4[20]= 114 Vels4[21]= 116 Vels4[22]= 119 Vels4[23]= 121 Vels4[24]= 123 Vels4[25]= 125 Vels4[26]= 128 Vels4[27]= 130 Vels4[28]= 132 Vels4[29]= 134 Vels4[30]= 137 Vels4[31]= 139 Vels4[32]= 141 Vels4[33]= 143 Vels4[34]= 146 Vels4[35]= 148 Vels4[36]= 150 Vels4[37]= 152 Vels4[38]= 155 Vels4[39]= 157 Vels4[40]= 159 Vels4[41]= 161 Vels4[42]= 163 Vels4[43]= 166 Vels4[44]= 168 Vels4[45]= 170 Vels4[46]= 172 Vels4[47]= 175 Vels4[48]= 177 Vels4[49]= 179 Vels4[50]= 181 Vels4[51]= 184 Vels4[52]= 186 Vels4[53]= 188 Vels4[54]= 190 Vels4[55]= 193 Vels4[56]= 195 Vels4[57]= 197 Vels4[58]= 199 Vels4[59]= 202 Vels4[60]= 204 Vels4[61]= 206 Vels4[62]= 208 Vels4[63]= 211 Vels4[64]= 213 Vels4[65]= 215 Vels4[66]= 217 Vels4[67]= 220 Vels4[68]= 222 Vels4[69]= 224 Vels4[70]= 226 Vels4[71]= 229 Vels4[72]= 231 Vels4[73]= 233 Vels4[74]= 235 Vels4[75]= 238 Vels4[76]= 240 Vels4[77]= 242 Vels4[78]= 244 Vels4[79]= 247 Vels4[80]= 249 Vels4[81]= 251 Vels4[82]= 253 Vels4[83]= 255 Vels4[84]= 258 Vels4[85]= 260 Vels4[86]= 262 Vels4[87]= 264 Vels4[88]= 267 Vels4[89]= 269 Vels4[90]= 271 Vels4[91]= 273 Vels4[92]= 276 Vels4[93]= 278 Vels4[94]= 280 Vels4[95]= 282 Vels4[96]= 285 Vels4[97]= 287 Vels4[98]= 289 Vels4[99]= 291 Vels4[100]= 294 Vels4[101]= 296 Vels4[102]= 298 Vels4[103]= 300 Vels4[104]= 303 Vels4[105]= 305 Vels4[106]= 307 Vels4[107]= 309 Vels4[108]= 312 Vels4[109]= 314 Vels4[110]= 316 Vels4[111]= 318 Vels4[112]= 321 Vels4[113]= 323 Vels4[114]= 325 Vels4[115]= 327 Vels4[116]= 330 Vels4[117]= 332 Vels4[118]= 334 Vels4[119]= 336 Vels4[120]= 339 Vels4[121]= 341 Vels4[122]= 343 Vels4[123]= 345 Vels4[124]= 347 Vels4[125]= 350 Vels4[126]= 352 Vels4[127]= 354 ' Noot= 75 Output= 6 Vels5[1]= 71 Vels5[2]= 74 Vels5[3]= 76 Vels5[4]= 78 Vels5[5]= 80 Vels5[6]= 82 Vels5[7]= 84 Vels5[8]= 86 Vels5[9]= 88 Vels5[10]= 90 Vels5[11]= 92 Vels5[12]= 94 Vels5[13]= 97 Vels5[14]= 99 Vels5[15]= 101 Vels5[16]= 103 Vels5[17]= 105 Vels5[18]= 107 Vels5[19]= 109 Vels5[20]= 111 Vels5[21]= 113 Vels5[22]= 115 Vels5[23]= 117 Vels5[24]= 120 Vels5[25]= 122 Vels5[26]= 124 Vels5[27]= 126 Vels5[28]= 128 Vels5[29]= 130 Vels5[30]= 132 Vels5[31]= 134 Vels5[32]= 136 Vels5[33]= 138 Vels5[34]= 140 Vels5[35]= 143 Vels5[36]= 145 Vels5[37]= 147 Vels5[38]= 149 Vels5[39]= 151 Vels5[40]= 153 Vels5[41]= 155 Vels5[42]= 157 Vels5[43]= 159 Vels5[44]= 161 Vels5[45]= 163 Vels5[46]= 165 Vels5[47]= 168 Vels5[48]= 170 Vels5[49]= 172 Vels5[50]= 174 Vels5[51]= 176 Vels5[52]= 178 Vels5[53]= 180 Vels5[54]= 182 Vels5[55]= 184 Vels5[56]= 186 Vels5[57]= 188 Vels5[58]= 191 Vels5[59]= 193 Vels5[60]= 195 Vels5[61]= 197 Vels5[62]= 199 Vels5[63]= 201 Vels5[64]= 203 Vels5[65]= 205 Vels5[66]= 207 Vels5[67]= 209 Vels5[68]= 211 Vels5[69]= 214 Vels5[70]= 216 Vels5[71]= 218 Vels5[72]= 220 Vels5[73]= 222 Vels5[74]= 224 Vels5[75]= 226 Vels5[76]= 228 Vels5[77]= 230 Vels5[78]= 232 Vels5[79]= 234 Vels5[80]= 237 Vels5[81]= 239 Vels5[82]= 241 Vels5[83]= 243 Vels5[84]= 245 Vels5[85]= 247 Vels5[86]= 249 Vels5[87]= 251 Vels5[88]= 253 Vels5[89]= 255 Vels5[90]= 257 Vels5[91]= 260 Vels5[92]= 262 Vels5[93]= 264 Vels5[94]= 266 Vels5[95]= 268 Vels5[96]= 270 Vels5[97]= 272 Vels5[98]= 274 Vels5[99]= 276 Vels5[100]= 278 Vels5[101]= 280 Vels5[102]= 282 Vels5[103]= 285 Vels5[104]= 287 Vels5[105]= 289 Vels5[106]= 291 Vels5[107]= 293 Vels5[108]= 295 Vels5[109]= 297 Vels5[110]= 299 Vels5[111]= 301 Vels5[112]= 303 Vels5[113]= 305 Vels5[114]= 308 Vels5[115]= 310 Vels5[116]= 312 Vels5[117]= 314 Vels5[118]= 316 Vels5[119]= 318 Vels5[120]= 320 Vels5[121]= 322 Vels5[122]= 324 Vels5[123]= 326 Vels5[124]= 328 Vels5[125]= 331 Vels5[126]= 333 Vels5[127]= 335 ' Noot= 76 Output= 7 Vels6[1]= 145 Vels6[2]= 146 Vels6[3]= 148 Vels6[4]= 149 Vels6[5]= 150 Vels6[6]= 152 Vels6[7]= 153 Vels6[8]= 154 Vels6[9]= 155 Vels6[10]= 157 Vels6[11]= 158 Vels6[12]= 159 Vels6[13]= 161 Vels6[14]= 162 Vels6[15]= 163 Vels6[16]= 164 Vels6[17]= 166 Vels6[18]= 167 Vels6[19]= 168 Vels6[20]= 169 Vels6[21]= 171 Vels6[22]= 172 Vels6[23]= 173 Vels6[24]= 175 Vels6[25]= 176 Vels6[26]= 177 Vels6[27]= 178 Vels6[28]= 180 Vels6[29]= 181 Vels6[30]= 182 Vels6[31]= 183 Vels6[32]= 185 Vels6[33]= 186 Vels6[34]= 187 Vels6[35]= 189 Vels6[36]= 190 Vels6[37]= 191 Vels6[38]= 192 Vels6[39]= 194 Vels6[40]= 195 Vels6[41]= 196 Vels6[42]= 198 Vels6[43]= 199 Vels6[44]= 200 Vels6[45]= 201 Vels6[46]= 203 Vels6[47]= 204 Vels6[48]= 205 Vels6[49]= 206 Vels6[50]= 208 Vels6[51]= 209 Vels6[52]= 210 Vels6[53]= 212 Vels6[54]= 213 Vels6[55]= 214 Vels6[56]= 215 Vels6[57]= 217 Vels6[58]= 218 Vels6[59]= 219 Vels6[60]= 221 Vels6[61]= 222 Vels6[62]= 223 Vels6[63]= 224 Vels6[64]= 226 Vels6[65]= 227 Vels6[66]= 228 Vels6[67]= 229 Vels6[68]= 231 Vels6[69]= 232 Vels6[70]= 233 Vels6[71]= 235 Vels6[72]= 236 Vels6[73]= 237 Vels6[74]= 238 Vels6[75]= 240 Vels6[76]= 241 Vels6[77]= 242 Vels6[78]= 243 Vels6[79]= 245 Vels6[80]= 246 Vels6[81]= 247 Vels6[82]= 249 Vels6[83]= 250 Vels6[84]= 251 Vels6[85]= 252 Vels6[86]= 254 Vels6[87]= 255 Vels6[88]= 256 Vels6[89]= 258 Vels6[90]= 259 Vels6[91]= 260 Vels6[92]= 261 Vels6[93]= 263 Vels6[94]= 264 Vels6[95]= 265 Vels6[96]= 266 Vels6[97]= 268 Vels6[98]= 269 Vels6[99]= 270 Vels6[100]= 272 Vels6[101]= 273 Vels6[102]= 274 Vels6[103]= 275 Vels6[104]= 277 Vels6[105]= 278 Vels6[106]= 279 Vels6[107]= 281 Vels6[108]= 282 Vels6[109]= 283 Vels6[110]= 284 Vels6[111]= 286 Vels6[112]= 287 Vels6[113]= 288 Vels6[114]= 289 Vels6[115]= 291 Vels6[116]= 292 Vels6[117]= 293 Vels6[118]= 295 Vels6[119]= 296 Vels6[120]= 297 Vels6[121]= 298 Vels6[122]= 300 Vels6[123]= 301 Vels6[124]= 302 Vels6[125]= 303 Vels6[126]= 305 Vels6[127]= 306 ' Noot= 77 Output= 8 Vels7[1]= 165 Vels7[2]= 166 Vels7[3]= 168 Vels7[4]= 169 Vels7[5]= 171 Vels7[6]= 172 Vels7[7]= 174 Vels7[8]= 175 Vels7[9]= 177 Vels7[10]= 178 Vels7[11]= 180 Vels7[12]= 181 Vels7[13]= 183 Vels7[14]= 184 Vels7[15]= 186 Vels7[16]= 187 Vels7[17]= 189 Vels7[18]= 190 Vels7[19]= 192 Vels7[20]= 194 Vels7[21]= 195 Vels7[22]= 197 Vels7[23]= 198 Vels7[24]= 200 Vels7[25]= 201 Vels7[26]= 203 Vels7[27]= 204 Vels7[28]= 206 Vels7[29]= 207 Vels7[30]= 209 Vels7[31]= 210 Vels7[32]= 212 Vels7[33]= 213 Vels7[34]= 215 Vels7[35]= 216 Vels7[36]= 218 Vels7[37]= 219 Vels7[38]= 221 Vels7[39]= 222 Vels7[40]= 224 Vels7[41]= 225 Vels7[42]= 227 Vels7[43]= 228 Vels7[44]= 230 Vels7[45]= 231 Vels7[46]= 233 Vels7[47]= 234 Vels7[48]= 236 Vels7[49]= 237 Vels7[50]= 239 Vels7[51]= 240 Vels7[52]= 242 Vels7[53]= 243 Vels7[54]= 245 Vels7[55]= 246 Vels7[56]= 248 Vels7[57]= 249 Vels7[58]= 251 Vels7[59]= 252 Vels7[60]= 254 Vels7[61]= 255 Vels7[62]= 257 Vels7[63]= 258 Vels7[64]= 260 Vels7[65]= 261 Vels7[66]= 263 Vels7[67]= 264 Vels7[68]= 266 Vels7[69]= 267 Vels7[70]= 269 Vels7[71]= 270 Vels7[72]= 272 Vels7[73]= 273 Vels7[74]= 275 Vels7[75]= 276 Vels7[76]= 278 Vels7[77]= 280 Vels7[78]= 281 Vels7[79]= 283 Vels7[80]= 284 Vels7[81]= 286 Vels7[82]= 287 Vels7[83]= 289 Vels7[84]= 290 Vels7[85]= 292 Vels7[86]= 293 Vels7[87]= 295 Vels7[88]= 296 Vels7[89]= 298 Vels7[90]= 299 Vels7[91]= 301 Vels7[92]= 302 Vels7[93]= 304 Vels7[94]= 305 Vels7[95]= 307 Vels7[96]= 308 Vels7[97]= 310 Vels7[98]= 311 Vels7[99]= 313 Vels7[100]= 314 Vels7[101]= 316 Vels7[102]= 317 Vels7[103]= 319 Vels7[104]= 320 Vels7[105]= 322 Vels7[106]= 323 Vels7[107]= 325 Vels7[108]= 326 Vels7[109]= 328 Vels7[110]= 329 Vels7[111]= 331 Vels7[112]= 332 Vels7[113]= 334 Vels7[114]= 335 Vels7[115]= 337 Vels7[116]= 338 Vels7[117]= 340 Vels7[118]= 341 Vels7[119]= 343 Vels7[120]= 344 Vels7[121]= 346 Vels7[122]= 347 Vels7[123]= 349 Vels7[124]= 350 Vels7[125]= 352 Vels7[126]= 353 Vels7[127]= 355 ' Noot= 78 Output= 9 Vels8[1]= 91 Vels8[2]= 93 Vels8[3]= 95 Vels8[4]= 96 Vels8[5]= 98 Vels8[6]= 100 Vels8[7]= 102 Vels8[8]= 103 Vels8[9]= 105 Vels8[10]= 107 Vels8[11]= 109 Vels8[12]= 110 Vels8[13]= 112 Vels8[14]= 114 Vels8[15]= 116 Vels8[16]= 117 Vels8[17]= 119 Vels8[18]= 121 Vels8[19]= 122 Vels8[20]= 124 Vels8[21]= 126 Vels8[22]= 128 Vels8[23]= 129 Vels8[24]= 131 Vels8[25]= 133 Vels8[26]= 135 Vels8[27]= 136 Vels8[28]= 138 Vels8[29]= 140 Vels8[30]= 142 Vels8[31]= 143 Vels8[32]= 145 Vels8[33]= 147 Vels8[34]= 149 Vels8[35]= 150 Vels8[36]= 152 Vels8[37]= 154 Vels8[38]= 156 Vels8[39]= 157 Vels8[40]= 159 Vels8[41]= 161 Vels8[42]= 163 Vels8[43]= 164 Vels8[44]= 166 Vels8[45]= 168 Vels8[46]= 169 Vels8[47]= 171 Vels8[48]= 173 Vels8[49]= 175 Vels8[50]= 176 Vels8[51]= 178 Vels8[52]= 180 Vels8[53]= 182 Vels8[54]= 183 Vels8[55]= 185 Vels8[56]= 187 Vels8[57]= 189 Vels8[58]= 190 Vels8[59]= 192 Vels8[60]= 194 Vels8[61]= 196 Vels8[62]= 197 Vels8[63]= 199 Vels8[64]= 201 Vels8[65]= 203 Vels8[66]= 204 Vels8[67]= 206 Vels8[68]= 208 Vels8[69]= 210 Vels8[70]= 211 Vels8[71]= 213 Vels8[72]= 215 Vels8[73]= 216 Vels8[74]= 218 Vels8[75]= 220 Vels8[76]= 222 Vels8[77]= 223 Vels8[78]= 225 Vels8[79]= 227 Vels8[80]= 229 Vels8[81]= 230 Vels8[82]= 232 Vels8[83]= 234 Vels8[84]= 236 Vels8[85]= 237 Vels8[86]= 239 Vels8[87]= 241 Vels8[88]= 243 Vels8[89]= 244 Vels8[90]= 246 Vels8[91]= 248 Vels8[92]= 250 Vels8[93]= 251 Vels8[94]= 253 Vels8[95]= 255 Vels8[96]= 257 Vels8[97]= 258 Vels8[98]= 260 Vels8[99]= 262 Vels8[100]= 263 Vels8[101]= 265 Vels8[102]= 267 Vels8[103]= 269 Vels8[104]= 270 Vels8[105]= 272 Vels8[106]= 274 Vels8[107]= 276 Vels8[108]= 277 Vels8[109]= 279 Vels8[110]= 281 Vels8[111]= 283 Vels8[112]= 284 Vels8[113]= 286 Vels8[114]= 288 Vels8[115]= 290 Vels8[116]= 291 Vels8[117]= 293 Vels8[118]= 295 Vels8[119]= 297 Vels8[120]= 298 Vels8[121]= 300 Vels8[122]= 302 Vels8[123]= 304 Vels8[124]= 305 Vels8[125]= 307 Vels8[126]= 309 Vels8[127]= 310 ' Noot= 79 Output= 10 Vels9[1]= 67 Vels9[2]= 68 Vels9[3]= 70 Vels9[4]= 71 Vels9[5]= 73 Vels9[6]= 74 Vels9[7]= 76 Vels9[8]= 77 Vels9[9]= 79 Vels9[10]= 80 Vels9[11]= 82 Vels9[12]= 84 Vels9[13]= 85 Vels9[14]= 87 Vels9[15]= 88 Vels9[16]= 90 Vels9[17]= 91 Vels9[18]= 93 Vels9[19]= 94 Vels9[20]= 96 Vels9[21]= 98 Vels9[22]= 99 Vels9[23]= 101 Vels9[24]= 102 Vels9[25]= 104 Vels9[26]= 105 Vels9[27]= 107 Vels9[28]= 108 Vels9[29]= 110 Vels9[30]= 111 Vels9[31]= 113 Vels9[32]= 115 Vels9[33]= 116 Vels9[34]= 118 Vels9[35]= 119 Vels9[36]= 121 Vels9[37]= 122 Vels9[38]= 124 Vels9[39]= 125 Vels9[40]= 127 Vels9[41]= 128 Vels9[42]= 130 Vels9[43]= 132 Vels9[44]= 133 Vels9[45]= 135 Vels9[46]= 136 Vels9[47]= 138 Vels9[48]= 139 Vels9[49]= 141 Vels9[50]= 142 Vels9[51]= 144 Vels9[52]= 145 Vels9[53]= 147 Vels9[54]= 149 Vels9[55]= 150 Vels9[56]= 152 Vels9[57]= 153 Vels9[58]= 155 Vels9[59]= 156 Vels9[60]= 158 Vels9[61]= 159 Vels9[62]= 161 Vels9[63]= 163 Vels9[64]= 164 Vels9[65]= 166 Vels9[66]= 167 Vels9[67]= 169 Vels9[68]= 170 Vels9[69]= 172 Vels9[70]= 173 Vels9[71]= 175 Vels9[72]= 176 Vels9[73]= 178 Vels9[74]= 180 Vels9[75]= 181 Vels9[76]= 183 Vels9[77]= 184 Vels9[78]= 186 Vels9[79]= 187 Vels9[80]= 189 Vels9[81]= 190 Vels9[82]= 192 Vels9[83]= 193 Vels9[84]= 195 Vels9[85]= 197 Vels9[86]= 198 Vels9[87]= 200 Vels9[88]= 201 Vels9[89]= 203 Vels9[90]= 204 Vels9[91]= 206 Vels9[92]= 207 Vels9[93]= 209 Vels9[94]= 210 Vels9[95]= 212 Vels9[96]= 214 Vels9[97]= 215 Vels9[98]= 217 Vels9[99]= 218 Vels9[100]= 220 Vels9[101]= 221 Vels9[102]= 223 Vels9[103]= 224 Vels9[104]= 226 Vels9[105]= 228 Vels9[106]= 229 Vels9[107]= 231 Vels9[108]= 232 Vels9[109]= 234 Vels9[110]= 235 Vels9[111]= 237 Vels9[112]= 238 Vels9[113]= 240 Vels9[114]= 241 Vels9[115]= 243 Vels9[116]= 245 Vels9[117]= 246 Vels9[118]= 248 Vels9[119]= 249 Vels9[120]= 251 Vels9[121]= 252 Vels9[122]= 254 Vels9[123]= 255 Vels9[124]= 257 Vels9[125]= 258 Vels9[126]= 260 Vels9[127]= 262 ' Noot= 80 Output= 11 Vels10[1]= 150 Vels10[2]= 151 Vels10[3]= 153 Vels10[4]= 154 Vels10[5]= 155 Vels10[6]= 156 Vels10[7]= 158 Vels10[8]= 159 Vels10[9]= 160 Vels10[10]= 162 Vels10[11]= 163 Vels10[12]= 164 Vels10[13]= 165 Vels10[14]= 167 Vels10[15]= 168 Vels10[16]= 169 Vels10[17]= 171 Vels10[18]= 172 Vels10[19]= 173 Vels10[20]= 174 Vels10[21]= 176 Vels10[22]= 177 Vels10[23]= 178 Vels10[24]= 179 Vels10[25]= 181 Vels10[26]= 182 Vels10[27]= 183 Vels10[28]= 185 Vels10[29]= 186 Vels10[30]= 187 Vels10[31]= 188 Vels10[32]= 190 Vels10[33]= 191 Vels10[34]= 192 Vels10[35]= 194 Vels10[36]= 195 Vels10[37]= 196 Vels10[38]= 197 Vels10[39]= 199 Vels10[40]= 200 Vels10[41]= 201 Vels10[42]= 202 Vels10[43]= 204 Vels10[44]= 205 Vels10[45]= 206 Vels10[46]= 208 Vels10[47]= 209 Vels10[48]= 210 Vels10[49]= 211 Vels10[50]= 213 Vels10[51]= 214 Vels10[52]= 215 Vels10[53]= 216 Vels10[54]= 218 Vels10[55]= 219 Vels10[56]= 220 Vels10[57]= 222 Vels10[58]= 223 Vels10[59]= 224 Vels10[60]= 225 Vels10[61]= 227 Vels10[62]= 228 Vels10[63]= 229 Vels10[64]= 231 Vels10[65]= 232 Vels10[66]= 233 Vels10[67]= 234 Vels10[68]= 236 Vels10[69]= 237 Vels10[70]= 238 Vels10[71]= 239 Vels10[72]= 241 Vels10[73]= 242 Vels10[74]= 243 Vels10[75]= 245 Vels10[76]= 246 Vels10[77]= 247 Vels10[78]= 248 Vels10[79]= 250 Vels10[80]= 251 Vels10[81]= 252 Vels10[82]= 254 Vels10[83]= 255 Vels10[84]= 256 Vels10[85]= 257 Vels10[86]= 259 Vels10[87]= 260 Vels10[88]= 261 Vels10[89]= 262 Vels10[90]= 264 Vels10[91]= 265 Vels10[92]= 266 Vels10[93]= 268 Vels10[94]= 269 Vels10[95]= 270 Vels10[96]= 271 Vels10[97]= 273 Vels10[98]= 274 Vels10[99]= 275 Vels10[100]= 276 Vels10[101]= 278 Vels10[102]= 279 Vels10[103]= 280 Vels10[104]= 282 Vels10[105]= 283 Vels10[106]= 284 Vels10[107]= 285 Vels10[108]= 287 Vels10[109]= 288 Vels10[110]= 289 Vels10[111]= 291 Vels10[112]= 292 Vels10[113]= 293 Vels10[114]= 294 Vels10[115]= 296 Vels10[116]= 297 Vels10[117]= 298 Vels10[118]= 299 Vels10[119]= 301 Vels10[120]= 302 Vels10[121]= 303 Vels10[122]= 305 Vels10[123]= 306 Vels10[124]= 307 Vels10[125]= 308 Vels10[126]= 310 Vels10[127]= 311 ' Noot= 81 Output= 12 Vels11[1]= 76 Vels11[2]= 78 Vels11[3]= 80 Vels11[4]= 82 Vels11[5]= 84 Vels11[6]= 86 Vels11[7]= 88 Vels11[8]= 90 Vels11[9]= 92 Vels11[10]= 93 Vels11[11]= 95 Vels11[12]= 97 Vels11[13]= 99 Vels11[14]= 101 Vels11[15]= 103 Vels11[16]= 105 Vels11[17]= 107 Vels11[18]= 109 Vels11[19]= 111 Vels11[20]= 112 Vels11[21]= 114 Vels11[22]= 116 Vels11[23]= 118 Vels11[24]= 120 Vels11[25]= 122 Vels11[26]= 124 Vels11[27]= 126 Vels11[28]= 128 Vels11[29]= 129 Vels11[30]= 131 Vels11[31]= 133 Vels11[32]= 135 Vels11[33]= 137 Vels11[34]= 139 Vels11[35]= 141 Vels11[36]= 143 Vels11[37]= 145 Vels11[38]= 147 Vels11[39]= 148 Vels11[40]= 150 Vels11[41]= 152 Vels11[42]= 154 Vels11[43]= 156 Vels11[44]= 158 Vels11[45]= 160 Vels11[46]= 162 Vels11[47]= 164 Vels11[48]= 165 Vels11[49]= 167 Vels11[50]= 169 Vels11[51]= 171 Vels11[52]= 173 Vels11[53]= 175 Vels11[54]= 177 Vels11[55]= 179 Vels11[56]= 181 Vels11[57]= 183 Vels11[58]= 184 Vels11[59]= 186 Vels11[60]= 188 Vels11[61]= 190 Vels11[62]= 192 Vels11[63]= 194 Vels11[64]= 196 Vels11[65]= 198 Vels11[66]= 200 Vels11[67]= 202 Vels11[68]= 203 Vels11[69]= 205 Vels11[70]= 207 Vels11[71]= 209 Vels11[72]= 211 Vels11[73]= 213 Vels11[74]= 215 Vels11[75]= 217 Vels11[76]= 219 Vels11[77]= 220 Vels11[78]= 222 Vels11[79]= 224 Vels11[80]= 226 Vels11[81]= 228 Vels11[82]= 230 Vels11[83]= 232 Vels11[84]= 234 Vels11[85]= 236 Vels11[86]= 238 Vels11[87]= 239 Vels11[88]= 241 Vels11[89]= 243 Vels11[90]= 245 Vels11[91]= 247 Vels11[92]= 249 Vels11[93]= 251 Vels11[94]= 253 Vels11[95]= 255 Vels11[96]= 256 Vels11[97]= 258 Vels11[98]= 260 Vels11[99]= 262 Vels11[100]= 264 Vels11[101]= 266 Vels11[102]= 268 Vels11[103]= 270 Vels11[104]= 272 Vels11[105]= 274 Vels11[106]= 275 Vels11[107]= 277 Vels11[108]= 279 Vels11[109]= 281 Vels11[110]= 283 Vels11[111]= 285 Vels11[112]= 287 Vels11[113]= 289 Vels11[114]= 291 Vels11[115]= 293 Vels11[116]= 294 Vels11[117]= 296 Vels11[118]= 298 Vels11[119]= 300 Vels11[120]= 302 Vels11[121]= 304 Vels11[122]= 306 Vels11[123]= 308 Vels11[124]= 310 Vels11[125]= 311 Vels11[126]= 313 Vels11[127]= 315 Return '[EOF]