' ******************************************************************** ' * PIC firmware for Chi * ' * Motor and Hub board * ' * coded by dr.Godfried-Willem Raes * ' * http://www.logosfoundation.org/instrum_gwr/chi/picworks * ' * source code development directory: * ' * Chi_Mot.bas * ' ******************************************************************** ' 19.03.2016: Start coding. ' First we will try to read the Namur sensors as digital inputs, as ' that avoids the 50us delay induced by using analog reading. ' 20.03.2016: further coding. Position controllers added. ' automatic braking not yet implemented. ' Sensor reading is not working. Voltage levels are now 0.327V and 2.5V from sensor. ' all of the sudden it works... no explanation found. ' slow PWM implemented for vibrator motor ' Loop speed measured: 10 us now. ' 21.03.2016: Lookup tables calculated and inserted here. ' refuses to start up... unless we touch RA.0 and RA.1 ' 22.03.2016: Laukhuff solenoid code o.k. ' Lite code o.k. ' motor code works ' Vibrator pwm changed . Works o.k. now. ' 27.03.2016: First tests in Chi: ' Laukhuff code o.k. - scaling to be changed ' Lite code o.k ' dunkermotor not working at all. ' 28.03.2016: code extended with debug procs. ' 31.03.2016: rescaling of pulse values for the Laukhuff solenoid : now 11ms to 60ms ' flashing added for tungsten lite ' autorepeat added for the vibrator motor. ' This version flashed in the PIC and tested. ' 05.04.2016: New slow pwm lookup calculated for vibrator motor. Back to fixed frequency pwm. ' This version flashed in PIC. ' 06.06.2016: We got the Dunker motor to work: it needed logic 0 and +24V levels, not TTL. ' PWM for motor speed needs an inversion! ' 07.06.2016: Attempting to install the compiler and programmer on Yo, a laptop... ' apparently the sensor inputs do not work as expected. ' trying to read the sensors as analog inputs. ' Digital input version saved as Chi_Mot_000.bas (Version 1.0) ' 08.06.2016: This version upload in Chi via \\Yo and PicKit3 programmer. ' bug with sensor reads solved: was inverted! ' motor direction of rotation tested o.k. ' left sensor works fine now. Right sensor has a problem. ' ADIN 1 is not working. ' trying to implement is using A.1 as digital input instead : not working ' got adin 1 to work now... ' now it works, but the direction of rotation needs an inversion Include "18F2525.inc" 'version for the Chi-Mot board. (40MHz) 'Include "18F2520.inc" 'also possible. (40MHz) 'Include "18F25K20.inc" 'for test & debug on an Amicus board. (64MHz) 'Include "18F4620.inc" ' (40MHz) ' Mapping defines for midi-events on pin outputs and inputs: $define ccw PORTC.3 ' 0 ' Dunkelmotor $define cw PORTC.0 ' 3 ' Dunkelmotor $define counts PORTA.2 ' input from Dunkelmotor $define mot_err PORTA.3 ' input from Dunkelmotor $define mot_speed PORTC.2 ' Dunkelmotor pwm - HPWM1 $define clutch PORTC.4 ' dc solenoid brake $define vibrator PORTC.5 ' ac motor $define SolL PORTA.4 ' Laukhuff solenoid Left $define SolR PORTA.5 ' Laukhuff solenoid Right $define sensorL PORTA.0 ' Namur sensor left - wiring checked 07.06.2016 $define sensorR PORTA.1 ' Namur sensor right $define BlueLed PORTB.2 $define lite1 PORTC.1 ' pwm - tungsten lights. HPWM2 $define busy ADCON0.1 ' turns to 0 when ad conversion is done 'red LED for debug: $define Debug_Led PORTB.5 ' for testing - red led - watchdog Declare All_Digital = False ' True ' makes all analog pins, digital for I/O Clear SSPCON1.5 ' make sure RC3 is free for use. ' configure the input and output pins: TRISA = %11001111 'bits set to 0 are output, 1 = input - bits 6 and 7 are the clock! TRISB = %11100000 'bits 6 and 7 are for the ICP, bit 5 is the red LED TRISC = %11000000 'RC6 en RC7 zijn USART I/O and must be set to input 'CMCON = 7 ' microchip manual... 'CMCON.0 = 0 'CMCON.1 = 0 'Input sensorL ' port A.0 1= no contact, 0= sensor contact 'Input sensorR ' port A.1 Input counts ' port A.2 Input mot_err ' port A.3 'initialisation of the two analog input channels Declare Adin_Res = 10 ' 10-bit result required Declare Adin_Stime = 50 ' Allow 50us sample time ADCON2 = %00000010 ' left justified,0_TAD, Fosc/32 ADCON1 = %00001101 ' A0 and A1 are analog input , cfr. Microchip manual p.224 ADCON0 = %00000001 ' bits 5-2 =0 selects AN0 , bit 1 is the ready bit. Can be read. ' sensleft = ADIn 0 ' this sets sensorleft as the highword of sensleft. = ADRESH ' ADCON0 = %00000101 'bits 5-2 = 1 selects AN1 ' sensright = ADIn 1 'constant definitions: ' midi-mapping: Symbol fPwm = 21000 Symbol MovL = 96 Symbol MovR = 97 Symbol AltLR = 98 ' Laukhuff Symbol Vibr = 99 ' Vibrator Symbol GlisL = 100 ' Dunkermotor - pwm Symbol GlisR = 101 Symbol SlideLR = 102 Symbol Brake = 103 ' clutch Symbol Tungsten = 122 ' lite1 - pwm Symbol True = 1 Symbol False = 0 Symbol midval = 70 ' = 125 (2.46V) + 16 (0.32V) / 2 ' sensorleft < midval = kontakt met sensor ' sensorleft > midval = geen kontakt met sensor 'initialisations for the midi input parser: Symbol Midichannel = 9 ' Chi_Channel Symbol NoteOff_Status = 128 + Midichannel ' 2 bytes follow Symbol NoteOn_Status = 144 + Midichannel Symbol Keypres_Status = 160 + Midichannel 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 ' 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 Hserial_Clear = On ' should clear on errors. Bytes get lost of course... ' Create variables: ' Dim Cnt As Dword System '32 bit counter ' Dim CntHw As Cnt.Word1 ' Word System 'used in the timer0 interrupt, where it is incremented ' Dim CntLw As TMR0L.Word 'this is the trick to read both TMR0L and TMR0H 'it makes Cntlw the low word of cnt, when we use cnt.word0=CntLw ' Dim Tim1 As TMR1L.Word 'not used here ' Dim Tim2 As TMR2 'not used here ' Dim Cnt3 As Dword System ' Dim Cnt3Hw As Cnt3.Word1 ' Dim Tim3 As TMR3L.Word ' same trick for timer3 Dim Sr As TMR0L.7 '512 S/s - this works but these DO NOT WORK!!!: ' Dim Sr as CntLw.Byte1 does not ' Dim Sr As TMR0H.0 'sampling rate bit, 256 S/s ' DIM Sr as CntLw.8 ' As TMR0H.1 would be 128 S/s ' As TMR0H.2 would be 64 S/s ' As TMR0H.3 would be 32 S/s ' As TMR0H.4 would be 16 S/s 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 veltim0 As Dword System ' faster, replaces the arrays Dim veltim1 As Dword System ' ' Dim veltim2 As Dword System ' velo pulse timer ' Dim veltim3 As Dword System Dim veltim4 As Dword System Dim veltim5 As Dword System Dim Velflags As Byte System ' so we can have only 8 tasks Dim CC66 As Byte System ' global on/off switch Dim PowerOn As CC66.0 ' handled on the hub board. Dim notes As Byte System ' notes.7 used for flashing the tungsten lite! Dim LRbyte As Byte System Dim LR0 As LRbyte.0 ' 0= left, 1= right Dim MovCW As LRbyte.1 ' follows cw Dim MovCCW As LRbyte.2 ' follows ccw Dim MovHold As LRbyte.3 ' set when cw and cww are 1 - so motor is blocking Dim Moving As LRbyte.4 Dim LR4 As LRbyte.5 ' over- and back flag for slide motor Dim LitTog As LRbyte.6 ' on off toggle for the lights Dim VibTog As LRbyte.7 ' on off toggle for vibrator Dim position As SWord ' Sbyte should be enough, as we have only 115 pulses for the whole traject Dim countflag As Byte Dim CC30 As Byte System ' repeat freq. controller Dim Rate0 As Word System ' set with key pressure Dim Rate1 As Word System Dim Rate2 As Word System Dim Rate3 As Word System 'Dim Rate4 As Word System Dim Rate5 As Word System 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 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 Leftpos As Byte System Dim Rightpos As Byte System Dim time As Dword System ' 32-bit, incremented in 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 TimVals[6] 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 Dim MotSpeed As Byte System Dim sensLeft As Word System 'used for ADin 0, 10 bits, left adjusted Dim sensorLeft As sensLeft.Byte1 Dim sensRight As Word System 'used for ADin 1, 10 bits, left adjusted Dim sensorRight As sensRight.Byte1 '----------------------------------------------------------------------------------------- ' Load the USART Interrupt handler and buffer read subroutines into memory Dim Ringbuffer[256] As Byte ' Array for holding received characters Include "Chi_Irq.inc" ' for UART,Timer0, Timer3 Interrupt 'Clear ' clear all RAM '----------------------------------------------------------------------------------------- ' velocity lookup table Dim Vels[128] As Word ' for Laukhuff solenoid Dim Vels1[128] As Word ' for ac motor slow pwm Dim Dur[128] As Word ' duration lookup for repetitions Dim Dur1[128] As Word ' for ac motor slow pwm Dim Dur5[128] As Word ' duration lookup for lite flashing repetitions ' Main program starts here MAIN: High Debug_Led DelayMS 10 ' wait for stability Low SolL Low SolR Low clutch Low vibrator Low cw Low ccw ' dummy reads: ADCON0 = %00000001 ' bits 5-2 =0 selects A0 , bit 1 is the ready bit. Can be read. ' while busy = 1 ' wait for the ad conversion to be ready ' wend sensLeft = ADIn 0 ' now sensorleft is the highbyte of this ' ADCON0 = %00000111 ' bits 5-2 = 1 selects A1 ' while busy = 1 ' wend ' sensRight = ADIn 1 ' now sensorright is the highbyte of this ' i = sensorL ' i = sensorR i = counts i = mot_err ' unused ports: Low PORTB.0 ' used for loop speed measurement Low PORTB.1 Low PORTB.3 Low PORTB.4 HPWM 1, 255, fPwm 'inversion! HPWM 2, 0, fPwm ' lite Clear LRbyte ' 8 flags Clear notes Clear Velflags Set TimVals Clear CC66 Clear Leftpos ' set to zero Rightpos = 127 ' set to extreme right Clear position ' set to zero on startup Clear Pres0 ' for Laukhuff solenoid Clear Pres1 ' for vibrator 'Clear Pres2 'Clear Pres3 ' Clear Pres4 Clear pres5 ' for tungsten lights Clear Rate0 ' for Laukhuff solenoid Clear Rate1 ' for vibrator Clear Rate2 ' Clear Rate3 ' Clear Rate4 Clear Rate5 ' for tungsten lights Clear velo0 Clear velo1 'Clear velo2 'Clear velo3 Clear velo4 Clear velo5 Clear LRbyte Init_Usart_Interrupt ' Initiate the USART serial buffer interrupt ' this procedure is in the include file Clear_Serial_Buffer ' Clear the serial buffer and reset its pointers ' in the 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 ' 6.4 us per clock-tick ' Opentimer0 (Timer_INT_On & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256) ' replacing above macro with in-line coding: Clear T1CON Clear IntConBits_T0IF ' clear interrupt flag Set INTCONBITS_T0IE ' enable interrupt on overflow T0CON = %10000111 ' bit 7 = enable/disable ' bit 6 = 1=8 bot, 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 ' TIMER1: if enabled, all midi-in is blocked, so it must interfere with the UART ' Configure Timer1 for: ' Clear TMR1L and TMR1H registers ' Interrupt on Timer1 overflow ' 16-bit read/write mode ' Internal clock source ' 1:8 Prescaler ' OpenTimer1(TIMER_INT_ON & T1_16BIT_RW & T1_SOURCE_INT & T1_PS_1_8) ' dit kompileert o.k. ' TIMER2: if enabled, the UART stops working... ' Opentimer2 (Timer_Int_On & T2_POST_1_16 & T2_PS_1_16) ' dit lukt... maar de timer is nodig voor de UART... ' TIMER3: ' Configure Timer3 for: ' Interrupt on Timer3 overflow ' 16-bit read/write mode ' Internal clock source ' 1:8 Prescaler ' Dont sync external clock input ' T3_OSC1En_On () ' macro ' OpenTimer3(TIMER_INT_ON & T3_16BIT_RW & T3_SOURCE_INT & T3_PS_1_8 & T3_SYNC_EXT_OFF) ' fout, but == voorbeeld??? ' Opentimer3 (Timer_Int_On & T3_16BIT_RW & T3_SOURCE_INT & T3_PS_1_8 & T3_SYNC_EXT_OFF & T3_SOURCE_CCP) ' fout ' OpenTimer3 (Timer_INT_ON & T3_16BIT_RW & T3_PS_1_8 & T3_SYNC_EXT_OFF) ' fout ' OpenTimer3 (0xFFFF & Timer_INT_On & T3_16BIT_RW) ' OpenTimer3(T3_8BIT_RW & T3_SOURCE_EXT & T3_PS_1_1 & T3_SYNC_EXT_OFF) ' copied from manual, fout!!! ' OpenTimer3(TIMER_INT_OFF & T3_16BIT_RW & T3_SOURCE_INT & T3_PS_1_8) ' doing it this way seems to work: Clear T3CON Clear PIR2BITS_TMR3IF ' clear IRQ flag Set PIE2BITS_TMR3IE ' irq on 'T3_OSC1En_On () ' macro - sets T3CON ' Clear Tim3 ' Clear TMR3L And TMR3H registers 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 ' 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, freq.=19Hz ' Set up priority interrupts. ' IPR1bits_TMR1IP = 0 ' Set Timer1 as a low priority interrupt source ' INTCONbits_PEIE = 1 ' Enable peripheral interrupts ' INTCONbits_GIE = 1 ' Enable global interrupts ' GoSub Sensor_Test ' for hardware debug of the Pepperl and Fuchs sensors only GoSub Dur_Lookup GoSub Vels_Lookup GoSub SlowPWM_Lookup ' for vibrator motor only ADCON0 = %00000011 ' bits 5-2 =0 selects A0 , bit 1 is the ready bit. Can be read. ' ADCON0 = %00000111 'bits 5-2 = 1 selects A1 ' sensright = ADIn 1 ' while busy = 1 ' wend sensLeft = ADIn 0 If sensorLeft > midval Then '51 corresponds to 1 Volt 'this means the slide is not making contact with the sensor GoSub Motor_Reset ' on cold boot, reset the motor to the left if not found there. Else ' set the startvalues: Set cw ' blokkeer motor Set ccw Clear position ' reset to 0 Clear Leftpos ' set to 0 Clear MovCW Clear MovCCW Set MovHold Clear Moving ' Clear BlueLed EndIf ' motor reset is also implemented with controller 70 ' start the main program loop: LOOP: ' Create an infinite loop Inc t ' byte If t.1 = tg Then Btg tg Inc time ' dword EndIf Bytein = HRSIn ' Read data from the serial buffer, with no timeout ' Start the midi parser. Midi_Parse: If Bytein > Pitchbend_Status Then ' here higher statusses are not implemented. If Bytein > 253 Then '254 = midiclock, 255= reset 'midiclock can interrupt all other msg's... '255 had to be intercepted since thats what we 'get when no new byte flows in. Else Clear statusbyte 'reset the status byte End If GoTo Check_Timers 'throw away... 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 'reset value. Cannot be 0 !!! Set release '0 is a valid midi note! Case NoteOn_Status statusbyte = Bytein Set noteAan '= 255 Set velo '= 255 Case Keypres_Status 'not used here statusbyte = Bytein notePres = 255 pres = 255 Case Control_Status ' controllers and switches statusbyte = Bytein Set Ctrl Set value Case ProgChange_Status ' could be used for different lookup tables statusbyte = Bytein prog = 255 Case Aftertouch_Status ' for fingered vibrato, freq.changes during notes statusbyte = Bytein Set aft Case Pitchbend_Status ' not on this board. statusbyte = Bytein pblsb = 255 pbmsb = 255 End Select Else 'midi byte is 7 bits Select statusbyte Case 0 'not a message for this channel GoTo Check_Timers 'disregard Case NoteOff_Status If noteUit = 255 Then noteUit = Bytein Else release = Bytein 'message complete, so we can do the action... Select noteUit Case MovL ' note 96 Clear Velflags.0 Clear notes.0 Clear SolL LR0 = 0 Case MovR ' note 97 Clear Velflags.0 Clear notes.0 Clear SolR LR0 = 1 Case AltLR ' note 98 Clear Velflags.0 ' cancel running timer Clear notes.0 If LR0 = 0 Then ' staat naar links Clear SolL Else ' staat naar rechts Clear SolR EndIf Case Vibr ' note 99 Clear Velflags.1 ' cancel running timer Clear Velflags.2 Clear notes.1 Clear notes.2 Clear VibTog Clear vibrator Case GlisL, GlisR ' 100,101 Set ccw ' motor brake on Set cw Clear MovCW Clear MovCCW Clear LR4 'clear over and back flag Set MovHold Clear Moving Case SlideLR ' 102 Set cw ' brake Set ccw Clear MovCW Clear MovCCW Set MovHold ' brake on Clear Moving Clear LR4 ' clear the over and back flag Case Brake ' 103 Clear Velflags.4 ' cancel running timer Clear notes.4 Clear clutch Clear MovHold ' free to move now - no motor force Clear MovCW Clear MovCCW Clear cw Clear ccw Clear Moving Case Tungsten ' 122 'Clear lite1 this does not work! HPWM 2, 0 , fPwm Clear Velflags.5 Clear notes.5 Clear velo5 ' brightness End Select Set noteUit '= 255 'reset GoTo resort EndIf GoTo Check_Timers Case NoteOn_Status If noteAan = 255 Then noteAan = Bytein Else velo = Bytein If velo = 0 Then Select noteAan Case MovL ' note 96 Clear Velflags.0 Clear notes.0 Clear SolL LR0 = 0 Case MovR ' 97 Clear Velflags.0 Clear notes.0 Clear SolR LR0 = 1 Case AltLR ' note 98 Clear Velflags.0 ' cancel running timer Clear notes.0 If LR0 = 0 Then ' staat naar links Clear SolL Else ' staat naar rechts Clear SolR EndIf Case Vibr ' note 99 Clear Velflags.1 ' cancel running pwm timer Clear Velflags.2 ' cancel repeat timer Clear notes.1 ' stop slow pwm Clear notes.2 ' stop repeats Clear VibTog Clear vibrator Case GlisL , GlisR ' 100, 101 Set ccw Set cw Clear MovCCW Clear MovCW Clear LR4 Set MovHold Clear Moving Case SlideLR ' 102 Set cw Set ccw Clear MovCW Clear MovCCW Set MovHold Clear LR4 ' clear the over and back flag Clear Moving Case Brake ' 103 Clear Velflags.4 ' cancel running timer Clear notes.4 Clear clutch Clear MovHold Clear MovCW Clear MovCCW Clear cw Clear ccw Clear Moving Clear LR4 Case Tungsten ' 122 'Clear lite1 - this does not work! HPWM 2, 0, fPwm Clear Velflags.5 Clear notes.5 Clear velo5 Case Else GoTo Check_Timers End Select GoTo resort Else Select noteAan Case MovL ' 96 Clear SolL Clear SolR LR0 = 0 Set Velflags.0 velo0 = Vels[velo] TimVals[0] = time + velo0 Set SolL Clear notes.0 ' no repeats! Case MovR ' 97 Clear SolL Clear SolR LR0 = 1 Set Velflags.0 velo0 = Vels[velo] TimVals[0] = time + velo0 Set SolR Clear notes.0 ' no repeats! Case AltLR ' 98 If LR0 = 0 Then Clear SolL Set SolR ' move right Else Clear SolR Set SolL EndIf Toggle LR0 ' reflects the position now Set Velflags.0 velo0 = Vels[velo] TimVals[0] = time + velo0 If Pres0 > 0 Then ' if note repeats are programmed... Set notes.0 If Dur[Pres0] <= velo0 Then Rate0 = velo0 ' stick to 50% duty cycle Else Rate0 = Dur[Pres0] - velo0 EndIf EndIf Case Vibr ' 99 ' velo stuurt de AAN-tijd voor de motor ' minimum moet 10ms zijn ' duty cycle is verhouding velo/wait ' experiments 04-05.04.2016: 10ms is veel te kort Set Velflags.1 velo1 = Vels1[velo] TimVals[1] = time + velo1 ' repeats are always programmed... if velo < 127 Set notes.1 Rate1 = Dur1[velo] ' repetitions with key pressure is also possible: If Pres1 > 0 Then ' if repeats are programmed... Set notes.2 ' misused for repetition here Rate2 = Dur[Pres1] TimVals[2] = time + Rate2 Else Clear VibTog Clear notes.2 Set TimVals[2] EndIf Case GlisL '100 ' start a downwards strike of the chimes ' MotSpeed = velo << 1 would be a bug, as PWM must be inverted! MotSpeed = 255 - (velo >> 1) 'and we limit the range . 128=fastest, 254= slowest, 255=stop HPWM 1, MotSpeed, fPwm ' set motor speed ADCON0 = %00000001 ' bits 5-2 =0 selects A0 , bit 1 is the ready bit. Can be read. ' while busy = 1 ' wend 'sensorleft = ADRESH sensLeft = ADIn 0 ' ADCON0 = %00000101 'bits 5-2 = 1 selects A1 ' sensRight = ADIn 1 ' If sensorL = 0 Then ' we are not at the left end... If sensorLeft > midval Then ' no contact with endsensor - voltage is 2.4V, read as 125 ' If position > Leftpos Then Clear cw Set ccw ' run to the left Clear MovCW Set MovCCW Clear MovHold Set Moving ' Else ' in this case we are already more to the left then required. ' Set cw ' motor brake on ' Set ccw ' Set MovHold ' Clear MovCW ' Clear MovCCW ' clear moving ' EndIf Else ' left end already reached - contact with sensor - voltage is 0.32V, read as 16 Clear position ' reset position counter Set cw ' brake Set ccw Clear MovCW Clear MovCCW Set MovHold Clear Moving EndIf Clear LR4 Case GlisR '101 ' MotSpeed = velo << 1 MotSpeed = 255 - (velo >> 1) HPWM 1, MotSpeed, fPwm ' set motor speed ADCON0 = %00000101 'bits 5-2 = 1 selects A1 ' while busy =1 ' wend ' sensRight = ADIn 1 ' If sensorR = 1 Then If sensorRight > midval Then ' geen kontakt met sensor rechts ' If position < Rightpos Then Clear ccw ' run to the right Set cw Clear MovCCW Set MovCW Clear MovHold Set Moving ' Else ' Set cw ' motor brake on ' Set ccw ' Clear MovCCW ' Clear MovCW ' Set MovHold ' EndIf Else ' kontakt met sensor rechts Set cw ' brake Set ccw Clear MovCW Clear MovCCW Set MovHold Clear Moving EndIf Clear LR4 Case SlideLR '102 MotSpeed = 255 - (velo >> 1) HPWM 1, MotSpeed, fPwm Set LR4 ' set flag for over and back movement Clear MovHold Select position Case < Rightpos ' move right but first check the right sensor... ADCON0 = %00000101 'bits 5-2 = 1 selects A1 sensRight = ADIn 1 If sensorRight > midval Then ' geen kontakt met sensor rechts Set cw Clear ccw Set MovCW Clear MovCCW Clear MovHold Set Moving Else 'sensor reached 'so we inverse the direction of movement Clear cw Set ccw Clear MovCW Set MovCCW Clear MovHold Set Moving EndIf Case > Leftpos ' move left but first check the left sensor ADCON0 = %00000001 sensLeft = ADIn 0 If sensorLeft > midval Then 'geen kontakt met linker sensor Set ccw Clear cw Set MovCCW Clear MovCW Clear MovHold Set Moving Else 'sensor reached, so inverse direction of rotation: Clear ccw Set cw Clear MovCCW Set MovCW Clear MovHold Set Moving EndIf EndSelect Case Brake '103 works o.k. tested 27.03.2016 Set clutch Set Velflags.4 velo4= Vels[velo] TimVals[4] = time + velo4 Set cw ' motor brake ON Set ccw Set MovHold Clear Moving Clear LR4 ' no repeats here! Case Tungsten '122 works o.k. tested 27.03.2016 ' repeats implemented ' will only work with key pressure commands. velo5 = velo << 1 If velo < 127 Then HPWM 2, velo5, fPwm Else Set velo5 HPWM 2, 255, fPwm 'Set lite1 EndIf If pres5 > 0 Then ' if repeats are programmed... Set notes.5 Rate5 = Dur5[pres5] TimVals[5] = time + Rate5 Else Clear notes.5 Set TimVals[5] EndIf Case Else Set noteAan GoTo Check_Timers End Select Set noteAan '= 255 GoTo resort EndIf EndIf GoTo Check_Timers Case Keypres_Status If notePres = 255 Then notePres = Bytein Else pres = Bytein GoSub KeyPres EndIf GoTo Check_Timers Case Control_Status 'this is where the action takes place for controllers If Ctrl = 255 Then Ctrl = Bytein Else value = Bytein GoSub Controller ' fingerings implemented here EndIf GoTo Check_Timers Case ProgChange_Status ' could be used to select alternative fingering lookups If prog = 255 Then 'single byte message prog = Bytein 'weak coding... GoSub ProgChange EndIf GoTo Check_Timers Case Aftertouch_Status If aft = 255 Then aft = Bytein GoSub Aftertouch EndIf GoTo Check_Timers End Select EndIf resort: GoSub SortTimers ' so we resort only if an incoming midi command changed something Check_Timers: If idx < 6 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 ' notes 96,97,98 Laukhuff solenoid If notes.0 = 0 Then ' note off Clear Velflags.0 Clear SolL Clear SolR Set TimVals[0] Else ' note is active If Velflags.0 = 1 Then ' velo timer afgelopen If LR0 = 0 Then ' staat links Clear SolL ' hold is switched off on reception of a note off command ' blijft links Else Clear SolR ' blijft rechts EndIf TimVals[0] = time + Rate0 ' wachttijd gaat in Clear Velflags.0 Else ' wachttijd is afgelopen If LR0 = 0 Then ' staat links Set SolR ' ga naar rechts Else ' staat rechts Set SolL ' ga naar links EndIf Toggle LR0 ' huidige positie TimVals[0] = time + velo0 ' stel een nieuwe velo-timer in Set Velflags.0 ' aktiveer hem ook EndIf EndIf Case 1 ' note 99 - slow 7-bit PWM - Vibrator motor If notes.1 = 0 Then ' note off Clear Velflags.1 Clear vibrator Set TimVals[1] Else ' note is active If Velflags.1 = 1 Then ' velo timer afgelopen Clear vibrator TimVals[1] = time + Rate1 ' wachttijd gaat in Clear Velflags.1 Else ' wachttijd is afgelopen Set vibrator TimVals[1] = time + velo1 ' stel een nieuwe velo-timer in Set Velflags.1 ' aktiveer hem ook EndIf EndIf Case 2 ' used for repetitions on the vibrator motor If notes.2 = 0 Then Clear Velflags.2 Set TimVals[2] Else Btg VibTog ' on-off toggle TimVals[2] = time + Rate2 Set Velflags.2 ' blijft geset If VibTog = 0 Then Clear vibrator Clear Velflags.1 Set TimVals[1] Else Set vibrator TimVals[1] = time + velo1 ' stel een nieuwe velo-timer in Set Velflags.1 ' aktiveer hem ook EndIf EndIf Case 3 ' would be dunkermotor ' this never sets a timer, so we do not have to handle it here. ' of course we could use a timet to do periodic sampling of the sensors if ' the motor is enabled... Case 4 If Velflags.4 = 1 Then ' velo time afgelopen Clear clutch Clear Velflags.4 Set TimVals[4] EndIf Case 5 ' tungsten lite If notes.5 = 0 Then Clear Velflags.5 HPWM 2, 0, fPwm Set TimVals[5] Else Btg LitTog If LitTog = 0 Then HPWM 2, 0, fPwm Else HPWM 2, velo5, fPwm EndIf TimVals[5] = time + Rate5 EndIf 'Case Else ' ' in dit geval is idx geset ' GoTo jumpout End Select GoSub SortTimers ' find a new nxt and idx EndIf ' beveiliging tegen overflow crashes... If maxtim = 1 Then Clear time Clear Velflags Clear notes Set TimVals EndIf Else ' idx > 5, no timers running, so to avoid overflows, we can reset the loop timer If maxtim = 1 Then Clear time ' 16.06.2015 EndIf ' motor position monitoring: ' this code would apply if the pulses were positive going: ' If counts = 1 Then ' 30 pulses per rotation ' If countflag = 0 Then ' If cw = 1 Then ' Inc position ' EndIf ' If ccw = 1 Then ' Dec position ' EndIf ' Btg BlueLed ' show reception of the pulses ' Set countflag ' avoiding multiple triggering ' EndIf ' Else ' Clear countflag ' EndIf ' this code applies if the pulses are negative going: If Moving = 1 Then If counts = 0 Then ' 30 pulses per rotation If countflag = 0 Then If MovCW = 1 And MovCCW = 0 Then ' dit gaat helemaal fout wanneer de slede handmatig wordt verplaatst Inc position If position > 127 Then position = 127 EndIf If MovCCW = 1 And MovCW = 0 Then Dec position If position < 0 Then position = 0 EndIf 'Btg BlueLed ' show reception of the pulses - this works fine Set countflag ' avoiding multiple triggering EndIf Else Clear countflag EndIf EndIf 'debug for right sensor: 'if SensorR = 0 then 'this does not work! 'this works!: If Moving = 1 Then ADCON1 = %00001101 ADCON0 = %00000101 sensRight = ADIn 1 If ADRESH < midval Then Set BlueLed 'sensor makes contact Clear MovCW Clear cw Rightpos = position If LR4 = 1 Then 'in this case we start running in the other direction: Set ccw Set MovCCW Set Moving Clear MovHold Else 'just brake and stop the motor Set cw Set ccw Clear MovCW Clear MovCCW Set MovHold Clear Moving EndIf Else 'continue running Clear BlueLed EndIf ADCON0 = %00000001 sensLeft = ADIn 0 If ADRESH < midval Then Set BlueLed 'sensor makes contact Clear ccw Clear MovCCW Clear position If LR4 = 1 Then ' inverse the direction of rotation Set cw Set MovCW Set Moving Clear MovHold Else 'just brake and stop motor Set cw Set ccw Clear MovCW Clear MovCCW Set MovHold Clear Moving EndIf Else 'just continue running Clear BlueLed EndIf EndIf Btg PORTB.0 ' average loop-speed: 11.7 microseconds or 85.47kHz (Tektronix measurement, 01.04.2016) GoTo 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 5 If TimVals[i] < Nxt Then Nxt = TimVals[i] ' 5 dword comparisons idx = i EndIf Next i Return KeyPres: ' used for auto-shaking and repeats in Select notePres Case AltLR Pres0 = pres 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 Vibr Pres1 = pres If Pres1 > 0 Then Rate2 = Dur[Pres1] ' rate2 is not a bug!!! Else Clear Rate2 Clear notes.2 EndIf Case Tungsten pres5 = pres If pres5 > 0 Then Rate5 = Dur5[pres5] Else Clear Rate5 Clear notes.5 EndIf EndSelect ' we do not need to resort here Set notePres '= 255 Return ProgChange: Set prog '= 255 'this is not realy required Return Pitchbend: Set pblsb Return Aftertouch: ' 'this is the channel aftertouch, affecting any playing note ' 'used for fingered vibrato in instruments such as ' 'the value of aft is used to set or modify the vibrato speed. Minimum freq=19Hz/2 = 9.54Hz ' coding using timer3: ' If aft > 0 Then ' Clear T3CONBITS_TMR3ON ' stop timer ' CC31 = aft ' VibratoPeriod = CC31 << 9 '* CC31 ' Tim3 = VibratoPeriod ' Set T3CONBITS_TMR3ON ' restart timer ' Else ' Clear CC31 ' Clear VibratoPeriod ' Clear T3CONBITS_TMR3ON ' stop timer ' EndIf Set aft ' reset Return Controller: Select Ctrl Case 30 ' can be used for global repeat frequency of the shakers ' controller to set all repeat frequencies to one and the same value at once If value = 0 Then Clear notes Clear Rate0 ' Laukhuff Clear Pres0 Clear Pres1 ' Vibrator Clear Rate2 ' vibrator repeats Clear Rate5 ' Tungsten Lite Clear pres5 Else Pres0 = value Rate0 = Dur[value] Pres1 = value Rate2 = Dur[value] ' no bug pres5 = value Rate5 = Dur5[value] EndIf Case 66 'on/off for the robot If value = 0 Then Clear PowerOn 'CC66.0 =0 GoSub PowerDown Else Set PowerOn 'CC66.0 =1 EndIf Case 70 ' as this command blocks the multitasker, ' we first switch all ongoing tasks off. ' motor reset and callibration Clear Velflags Clear notes Clear SolL Clear SolR Clear clutch Clear vibrator Clear lite1 GoSub Motor_Reset Case 71 'this works fine ' motor OFF: Clear ccw Clear cw Clear MovCCW Clear MovCW Clear MovHold Clear Moving Case 72 ' for debugging only - run right, unconditional MotSpeed = 255 - (value >> 1) HPWM 1, MotSpeed, fPwm Set cw Clear ccw Set MovCW Clear MovCCW Clear MovHold Set Moving Case 73 ' for debugging only - run left, unconditional MotSpeed = 255 - (value >> 1) ' value << 1 HPWM 1, MotSpeed, fPwm Clear cw Set ccw Clear MovCW Set MovCCW Clear MovHold Set Moving Case 74 ' sets a left side limit position for the motor carriage Leftpos = value If Leftpos >= Rightpos Then Rightpos = Leftpos + 1 EndIf Case 75 ' sets right side limit position for the motor carriage Rightpos = value If Rightpos <= Leftpos Then Rightpos = Leftpos + 1 EndIf Case 123 ' all notes off - no controller resets Clear Velflags Clear notes Clear SolL Clear SolR Clear clutch Clear vibrator Low cw ' motor off Low ccw Clear LRbyte 'clears all flags. 'Clear LR4 'Clear MovCW 'Clear MovCCW 'Clear MovHold HPWM 1, 255, fPwm HPWM 2, 0, fPwm ' tungsten lite End Select Set Ctrl 'mandatory reset Return PowerDown: Clear Velflags 'stop all running timers Clear notes ' clear all velo-bits Clear SolL Clear SolR Clear clutch Clear vibrator Low cw Low ccw HPWM 1, 255, fPwm ' motor speed naar nul HPWM 2, 0, fPwm ' tungsten lite Set MotSpeed Clear Leftpos Rightpos = 127 'Clear MovCW 'Clear MovCCW 'Clear MovHold Clear LRbyte Clear Pres0 Clear Pres1 Clear pres5 Clear Rate0 Clear Rate2 Clear Rate5 Return Motor_Reset: 'this should run on startup and on reception of controller #70 HPWM 1, 255, fPwm ADCON0 = %00000001 ' bits 5-2 =0 selects A0 , bit 1 is the ready bit. Can be read. ' while busy =1 ' wend sensLeft = ADIn 0 ' ADCON0 = %00000101 'bits 5-2 = 1 selects A1 ' sensRight = ADIn 1 If ADRESH < midval Then ' positie is links tegen sensor Set cw ' blokkeer motor Set ccw Clear position ' reset to 0 Clear Leftpos ' set to 0 Clear MovCW Clear MovCCW Set MovHold Clear Moving 'Clear BlueLed Return ' so nothing to be done EndIf ADCON0 = %00000101 ' while busy =1 ' wend sensRight = ADIn 1 ' If sensorR = 0 Then ' motor staat helemaal rechts If ADRESH < midval Then ' kontakt met rechtersensor Clear cw ' deblokkeer Set ccw ' laat motor naar links gaan Clear MovCW Set MovCCW Clear MovHold Set Moving 'Rightpos = 127 position = 127 'set Blueled Else 'in dit geval staat de slede vrij Clear cw Set ccw Clear MovCW Set MovCCW Clear MovHold Set Moving 'clear blueled EndIf HPWM 1, 252, fPwm ' slow ADCON0 = %00000011 'while busy =1 'wend sensLeft = ADIn 0 While ADRESH > midval ' sensorL = 0 ' kan niet in de multitasker, neemt tijd! ADCON0 = %00000001 'while busy = 1 'wend sensLeft = ADIn 0 Wend ' positie moet bereikt zijn nu Set cw ' blokkeer motor, ccw is ook geset Clear MovCW Clear MovCCW Set MovHold Clear Moving 'HPWM 1, 255, fPwm Clear position 'Clear Leftpos 'Rightpos = 127 ' wordt gekorrigeerd in de main loop ' Clear BlueLed Clear LR4 Return 'Sensor_Test: ' ' for hardware debug only ' ' should read the status of the Namur sensors on A.0 and A.1 ' While 1 = 1 ' If sensorR = 1 Then ' Set BlueLed ' Else ' Clear BlueLed ' EndIf ' Wend 'Return Dur_Lookup: 'lookup for Laukhuff solenoid and vibrator repeat frequencies Set Dur[0] ' not used ' durations for note repetition on Chi ' the dur values are for a half period ! ' the frequencies are for the full period. Dur[1]= 23674 ' freq= 2.11202162710146 Dur[2]= 22917 ' freq= 2.18178644674259 Dur[3]= 22548 ' freq= 2.21749157353202 Dur[4]= 22185 ' freq= 2.25377507324769 Dur[5]= 21827 ' freq= 2.29074082558299 Dur[6]= 21475 ' freq= 2.32828870779977 Dur[7]= 21129 ' freq= 2.36641582658905 Dur[8]= 20789 ' freq= 2.40511809129828 Dur[9]= 20454 ' freq= 2.44450963136795 Dur[10]= 20124 ' freq= 2.48459550785132 Dur[11]= 19800 ' freq= 2.52525252525252 Dur[12]= 19481 ' freq= 2.56660335711719 Dur[13]= 19167 ' freq= 2.60865028434288 Dur[14]= 18858 ' freq= 2.65139463357726 Dur[15]= 18554 ' freq= 2.69483669289641 Dur[16]= 18255 ' freq= 2.73897562311695 Dur[17]= 17961 ' freq= 2.7838093647347 Dur[18]= 17672 ' freq= 2.82933454051607 Dur[19]= 17387 ' freq= 2.87571173865532 Dur[20]= 17107 ' freq= 2.92278014847723 Dur[21]= 16831 ' freq= 2.97070881112233 Dur[22]= 16560 ' freq= 3.01932367149758 Dur[23]= 16293 ' freq= 3.06880255324372 Dur[24]= 16030 ' freq= 3.11915159076731 Dur[25]= 15772 ' freq= 3.17017499365965 Dur[26]= 15518 ' freq= 3.22206469905916 Dur[27]= 15268 ' freq= 3.27482315954938 Dur[28]= 15022 ' freq= 3.32845160431367 Dur[29]= 14780 ' freq= 3.382949932341 Dur[30]= 14542 ' freq= 3.43831660019254 Dur[31]= 14307 ' freq= 3.4947927587894 Dur[32]= 14077 ' freq= 3.55189315905378 Dur[33]= 13850 ' freq= 3.6101083032491 Dur[34]= 13627 ' freq= 3.66918617450649 Dur[35]= 13407 ' freq= 3.72939509211606 Dur[36]= 13191 ' freq= 3.79046319460238 Dur[37]= 12978 ' freq= 3.85267375558638 Dur[38]= 12769 ' freq= 3.91573341686898 Dur[39]= 12564 ' freq= 3.97962432346386 Dur[40]= 12361 ' freq= 4.04498017959712 Dur[41]= 12162 ' freq= 4.1111659266568 Dur[42]= 11966 ' freq= 4.17850576633796 Dur[43]= 11773 ' freq= 4.24700586086809 Dur[44]= 11583 ' freq= 4.31667098333765 Dur[45]= 11397 ' freq= 4.38711941739054 Dur[46]= 11213 ' freq= 4.45910996165165 Dur[47]= 11032 ' freq= 4.53226976069616 Dur[48]= 10855 ' freq= 4.60617227084293 Dur[49]= 10680 ' freq= 4.6816479400749 Dur[50]= 10508 ' freq= 4.75827940616673 Dur[51]= 10338 ' freq= 4.83652544012381 Dur[52]= 10172 ' freq= 4.91545418796697 Dur[53]= 10008 ' freq= 4.99600319744204 Dur[54]= 9846 ' freq= 5.07820434694292 Dur[55]= 9688 ' freq= 5.16102394715111 Dur[56]= 9532 ' freq= 5.24548887956357 Dur[57]= 9378 ' freq= 5.33162721262529 Dur[58]= 9227 ' freq= 5.4188793757451 Dur[59]= 9078 ' freq= 5.50782110597048 Dur[60]= 8932 ' freq= 5.59785042543663 Dur[61]= 8788 ' freq= 5.68957669549385 Dur[62]= 8646 ' freq= 5.78302105019662 Dur[63]= 8507 ' freq= 5.87751263665217 Dur[64]= 8370 ' freq= 5.973715651135 Dur[65]= 8235 ' freq= 6.07164541590771 Dur[66]= 8102 ' freq= 6.17131572451246 Dur[67]= 7972 ' freq= 6.27195183140993 Dur[68]= 7843 ' freq= 6.37511156445238 Dur[69]= 7717 ' freq= 6.47920176234288 Dur[70]= 7593 ' freq= 6.58501251152377 Dur[71]= 7470 ' freq= 6.69344042838019 Dur[72]= 7350 ' freq= 6.80272108843537 Dur[73]= 7231 ' freq= 6.91467293597013 Dur[74]= 7115 ' freq= 7.02740688685875 Dur[75]= 7000 ' freq= 7.14285714285714 Dur[76]= 6888 ' freq= 7.25900116144018 Dur[77]= 6777 ' freq= 7.37789582411096 Dur[78]= 6667 ' freq= 7.49962501874906 Dur[79]= 6560 ' freq= 7.62195121951219 Dur[80]= 6454 ' freq= 7.74713356058258 Dur[81]= 6350 ' freq= 7.8740157480315 Dur[82]= 6248 ' freq= 8.00256081946223 Dur[83]= 6147 ' freq= 8.13404912965674 Dur[84]= 6048 ' freq= 8.26719576719577 Dur[85]= 5951 ' freq= 8.40194925222652 Dur[86]= 5855 ' freq= 8.5397096498719 Dur[87]= 5760 ' freq= 8.68055555555555 Dur[88]= 5668 ' freq= 8.82145377558222 Dur[89]= 5576 ' freq= 8.96700143472023 Dur[90]= 5486 ' freq= 9.11410864017499 Dur[91]= 5398 ' freq= 9.26268988514264 Dur[92]= 5311 ' freq= 9.41442289587648 Dur[93]= 5225 ' freq= 9.56937799043062 Dur[94]= 5141 ' freq= 9.72573429293912 Dur[95]= 5058 ' freq= 9.88533017002768 Dur[96]= 4977 ' freq= 10.0462125778581 Dur[97]= 4897 ' freq= 10.2103328568511 Dur[98]= 4818 ' freq= 10.3777501037775 Dur[99]= 4740 ' freq= 10.548523206751 Dur[100]= 4664 ' freq= 10.7204116638079 Dur[101]= 4589 ' freq= 10.8956199607758 Dur[102]= 4515 ' freq= 11.0741971207087 Dur[103]= 4442 ' freq= 11.2561909049977 Dur[104]= 4370 ' freq= 11.441647597254 Dur[105]= 4300 ' freq= 11.6279069767442 Dur[106]= 4231 ' freq= 11.8175372252422 Dur[107]= 4162 ' freq= 12.013455069678 Dur[108]= 4095 ' freq= 12.2100122100122 Dur[109]= 4029 ' freq= 12.4100273020601 Dur[110]= 3964 ' freq= 12.6135216952573 Dur[111]= 3901 ' freq= 12.8172263522174 Dur[112]= 3838 ' freq= 13.0276185513288 Dur[113]= 3776 ' freq= 13.2415254237288 Dur[114]= 3715 ' freq= 13.4589502018842 Dur[115]= 3655 ' freq= 13.6798905608755 Dur[116]= 3596 ' freq= 13.9043381535039 Dur[117]= 3538 ' freq= 14.1322781232335 Dur[118]= 3481 ' freq= 14.3636885952312 Dur[119]= 3425 ' freq= 14.5985401459854 Dur[120]= 3370 ' freq= 14.8367952522255 Dur[121]= 3316 ' freq= 15.0784077201448 Dur[122]= 3262 ' freq= 15.3280196198651 Dur[123]= 3210 ' freq= 15.5763239875389 Dur[124]= 3158 ' freq= 15.8328055731476 Dur[125]= 3107 ' freq= 16.0926939169617 Dur[126]= 3057 ' freq= 16.3559044815178 Dur[127]= 3008 ' freq= 16.6223404255319 'lookup for flashing light: Set Dur5[0] ' not used Dur5[1]= 41667 ' freq= .999992000063999 Dur5[2]= 39494 ' freq= 1.0550125757499 Dur5[3]= 38450 ' freq= 1.08365843086259 Dur5[4]= 37434 ' freq= 1.11307011451265 Dur5[5]= 36445 ' freq= 1.14327525495038 Dur5[6]= 35482 ' freq= 1.17430434210774 Dur5[7]= 34544 ' freq= 1.20619113787247 Dur5[8]= 33631 ' freq= 1.23893629885126 Dur5[9]= 32743 ' freq= 1.27253662360403 Dur5[10]= 31877 ' freq= 1.30710752789367 Dur5[11]= 31035 ' freq= 1.34257021642232 Dur5[12]= 30215 ' freq= 1.37900601246621 Dur5[13]= 29416 ' freq= 1.41646269603844 Dur5[14]= 28639 ' freq= 1.45489251254117 Dur5[15]= 27882 ' freq= 1.49439303732396 Dur5[16]= 27146 ' freq= 1.53490999287802 Dur5[17]= 26428 ' freq= 1.57661066545583 Dur5[18]= 25730 ' freq= 1.61938074880166 Dur5[19]= 25050 ' freq= 1.66333998669328 Dur5[20]= 24388 ' freq= 1.70849051446066 Dur5[21]= 23743 ' freq= 1.75490319953951 Dur5[22]= 23116 ' freq= 1.8025033166061 Dur5[23]= 22505 ' freq= 1.85144042064726 Dur5[24]= 21910 ' freq= 1.90171915411532 Dur5[25]= 21331 ' freq= 1.95333864641445 Dur5[26]= 20768 ' freq= 2.006291730868 Dur5[27]= 20219 ' freq= 2.06076792455941 Dur5[28]= 19685 ' freq= 2.11667090000847 Dur5[29]= 19164 ' freq= 2.17421554303207 Dur5[30]= 18658 ' freq= 2.23317969057062 Dur5[31]= 18165 ' freq= 2.29378842095605 Dur5[32]= 17685 ' freq= 2.35604561304307 Dur5[33]= 17218 ' freq= 2.41994811631239 Dur5[34]= 16763 ' freq= 2.48563304102289 Dur5[35]= 16320 ' freq= 2.5531045751634 Dur5[36]= 15888 ' freq= 2.62252433702585 Dur5[37]= 15469 ' freq= 2.69355916133342 Dur5[38]= 15060 ' freq= 2.76671093404161 Dur5[39]= 14662 ' freq= 2.84181330423316 Dur5[40]= 14274 ' freq= 2.91906029610948 Dur5[41]= 13897 ' freq= 2.99824902257082 Dur5[42]= 13530 ' freq= 3.07957625030796 Dur5[43]= 13172 ' freq= 3.16327563518575 Dur5[44]= 12824 ' freq= 3.24911624038262 Dur5[45]= 12485 ' freq= 3.33733813910025 Dur5[46]= 12155 ' freq= 3.42794460441519 Dur5[47]= 11834 ' freq= 3.52092839840009 Dur5[48]= 11522 ' freq= 3.61627032343922 Dur5[49]= 11217 ' freq= 3.71459986330272 Dur5[50]= 10921 ' freq= 3.81527943106553 Dur5[51]= 10632 ' freq= 3.91898670679709 Dur5[52]= 10351 ' freq= 4.02537597011561 Dur5[53]= 10078 ' freq= 4.13441820467024 Dur5[54]= 9811 ' freq= 4.24693371385859 Dur5[55]= 9552 ' freq= 4.36208821887214 Dur5[56]= 9300 ' freq= 4.48028673835125 Dur5[57]= 9054 ' freq= 4.60201752448273 Dur5[58]= 8815 ' freq= 4.72679145396105 Dur5[59]= 8582 ' freq= 4.85512312592247 Dur5[60]= 8355 ' freq= 4.9870337123479 Dur5[61]= 8134 ' freq= 5.12253094008688 Dur5[62]= 7919 ' freq= 5.26160710527423 Dur5[63]= 7710 ' freq= 5.40423692174665 Dur5[64]= 7506 ' freq= 5.5511146638245 Dur5[65]= 7308 ' freq= 5.70151432220398 Dur5[66]= 7115 ' freq= 5.85617240571562 Dur5[67]= 6927 ' freq= 6.01510995621 Dur5[68]= 6744 ' freq= 6.1783313562673 Dur5[69]= 6565 ' freq= 6.34678852500635 Dur5[70]= 6392 ' freq= 6.51856487275761 Dur5[71]= 6223 ' freq= 6.69559162247576 Dur5[72]= 6059 ' freq= 6.87682235792485 Dur5[73]= 5898 ' freq= 7.06454165253758 Dur5[74]= 5743 ' freq= 7.25520924023449 Dur5[75]= 5591 ' freq= 7.45245334764204 Dur5[76]= 5443 ' freq= 7.65509216730969 Dur5[77]= 5299 ' freq= 7.86311882745172 Dur5[78]= 5159 ' freq= 8.07650061381405 Dur5[79]= 5023 ' freq= 8.29517552591413 Dur5[80]= 4890 ' freq= 8.52079072937969 Dur5[81]= 4761 ' freq= 8.75166281593503 Dur5[82]= 4635 ' freq= 8.98957209636821 Dur5[83]= 4513 ' freq= 9.23258734027624 Dur5[84]= 4393 ' freq= 9.48478640261021 Dur5[85]= 4277 ' freq= 9.74203101862676 Dur5[86]= 4164 ' freq= 10.0064040986231 Dur5[87]= 4054 ' freq= 10.277914816642 Dur5[88]= 3947 ' freq= 10.5565408326999 Dur5[89]= 3843 ' freq= 10.842223956978 Dur5[90]= 3741 ' freq= 11.1378419317473 Dur5[91]= 3642 ' freq= 11.4406004027091 Dur5[92]= 3546 ' freq= 11.7503290092122 Dur5[93]= 3452 ' freq= 12.0702974121282 Dur5[94]= 3361 ' freq= 12.3971040364971 Dur5[95]= 3272 ' freq= 12.7343113284434 Dur5[96]= 3186 ' freq= 13.0780498012136 Dur5[97]= 3102 ' freq= 13.4321942832581 Dur5[98]= 3020 ' freq= 13.7969094922737 Dur5[99]= 2940 ' freq= 14.172335600907 Dur5[100]= 2862 ' freq= 14.5585837409737 Dur5[101]= 2787 ' freq= 14.9503647889008 Dur5[102]= 2713 ' freq= 15.3581521071385 Dur5[103]= 2641 ' freq= 15.7768522024486 Dur5[104]= 2571 ' freq= 16.2064047711656 Dur5[105]= 2504 ' freq= 16.640042598509 Dur5[106]= 2437 ' freq= 17.0975242784845 Dur5[107]= 2373 ' freq= 17.5586458772299 Dur5[108]= 2310 ' freq= 18.037518037518 Dur5[109]= 2249 ' freq= 18.5267526307989 Dur5[110]= 2190 ' freq= 19.0258751902588 Dur5[111]= 2132 ' freq= 19.5434646654159 Dur5[112]= 2076 ' freq= 20.0706486833654 Dur5[113]= 2021 ' freq= 20.616856341745 Dur5[114]= 1967 ' freq= 21.182850364345 Dur5[115]= 1915 ' freq= 21.7580504786771 Dur5[116]= 1865 ' freq= 22.3413762287757 Dur5[117]= 1815 ' freq= 22.9568411386593 Dur5[118]= 1767 ' freq= 23.5804565176382 Dur5[119]= 1721 ' freq= 24.2107301956227 Dur5[120]= 1675 ' freq= 24.8756218905473 Dur5[121]= 1631 ' freq= 25.5466993664418 Dur5[122]= 1588 ' freq= 26.2384550797649 Dur5[123]= 1546 ' freq= 26.9512721000431 Dur5[124]= 1505 ' freq= 27.6854928017719 Dur5[125]= 1465 ' freq= 28.4414106939704 Dur5[126]= 1427 ' freq= 29.1987853305302 Dur5[127]= 1389 ' freq= 29.9976001919846 Return Vels_Lookup: ' velo lookup scale for Laukhuff solenoid. Logarithmic ' Vels_Lookup_Laukhuff: Vels[1]= 1160 ' duur= .0116 Vels[2]= 1190 ' duur= .0119 Vels[3]= 1206 ' duur= .01206 Vels[4]= 1222 ' duur= .01222 Vels[5]= 1238 ' duur= .01238 Vels[6]= 1254 ' duur= .01254 Vels[7]= 1270 ' duur= .0127 Vels[8]= 1287 ' duur= .01287 Vels[9]= 1303 ' duur= .01303 Vels[10]= 1320 ' duur= .0132 Vels[11]= 1337 ' duur= .01337 Vels[12]= 1355 ' duur= .01355 Vels[13]= 1373 ' duur= .01373 Vels[14]= 1390 ' duur= .0139 Vels[15]= 1408 ' duur= .01408 Vels[16]= 1427 ' duur= .01427 Vels[17]= 1445 ' duur= .01445 Vels[18]= 1464 ' duur= .01464 Vels[19]= 1483 ' duur= .01483 Vels[20]= 1503 ' duur= .01503 Vels[21]= 1522 ' duur= .01522 Vels[22]= 1542 ' duur= .01542 Vels[23]= 1562 ' duur= .01562 Vels[24]= 1582 ' duur= .01582 Vels[25]= 1603 ' duur= .01603 Vels[26]= 1624 ' duur= .01624 Vels[27]= 1645 ' duur= .01645 Vels[28]= 1667 ' duur= .01667 Vels[29]= 1688 ' duur= .01688 Vels[30]= 1710 ' duur= .0171 Vels[31]= 1732 ' duur= .01732 Vels[32]= 1755 ' duur= .01755 Vels[33]= 1778 ' duur= .01778 Vels[34]= 1801 ' duur= .01801 Vels[35]= 1825 ' duur= .01825 Vels[36]= 1848 ' duur= .01848 Vels[37]= 1872 ' duur= .01872 Vels[38]= 1897 ' duur= .01897 Vels[39]= 1921 ' duur= .01921 Vels[40]= 1946 ' duur= .01946 Vels[41]= 1972 ' duur= .01972 Vels[42]= 1997 ' duur= .01997 Vels[43]= 2023 ' duur= .02023 Vels[44]= 2050 ' duur= .0205 Vels[45]= 2077 ' duur= .02077 Vels[46]= 2104 ' duur= .02104 Vels[47]= 2131 ' duur= .02131 Vels[48]= 2159 ' duur= .02159 Vels[49]= 2187 ' duur= .02187 Vels[50]= 2215 ' duur= .02215 Vels[51]= 2244 ' duur= .02244 Vels[52]= 2273 ' duur= .02273 Vels[53]= 2303 ' duur= .02303 Vels[54]= 2333 ' duur= .02333 Vels[55]= 2363 ' duur= .02363 Vels[56]= 2394 ' duur= .02394 Vels[57]= 2425 ' duur= .02425 Vels[58]= 2457 ' duur= .02457 Vels[59]= 2489 ' duur= .02489 Vels[60]= 2521 ' duur= .02521 Vels[61]= 2554 ' duur= .02554 Vels[62]= 2587 ' duur= .02587 Vels[63]= 2621 ' duur= .02621 Vels[64]= 2655 ' duur= .02655 Vels[65]= 2690 ' duur= .0269 Vels[66]= 2725 ' duur= .02725 Vels[67]= 2760 ' duur= .0276 Vels[68]= 2796 ' duur= .02796 Vels[69]= 2833 ' duur= .02833 Vels[70]= 2870 ' duur= .0287 Vels[71]= 2907 ' duur= .02907 Vels[72]= 2945 ' duur= .02945 Vels[73]= 2983 ' duur= .02983 Vels[74]= 3022 ' duur= .03022 Vels[75]= 3061 ' duur= .03061 Vels[76]= 3101 ' duur= .03101 Vels[77]= 3142 ' duur= .03142 Vels[78]= 3183 ' duur= .03183 Vels[79]= 3224 ' duur= .03224 Vels[80]= 3266 ' duur= .03266 Vels[81]= 3309 ' duur= .03309 Vels[82]= 3352 ' duur= .03352 Vels[83]= 3395 ' duur= .03395 Vels[84]= 3440 ' duur= .0344 Vels[85]= 3484 ' duur= .03484 Vels[86]= 3530 ' duur= .0353 Vels[87]= 3576 ' duur= .03576 Vels[88]= 3622 ' duur= .03622 Vels[89]= 3669 ' duur= .03669 Vels[90]= 3717 ' duur= .03717 Vels[91]= 3766 ' duur= .03766 Vels[92]= 3815 ' duur= .03815 Vels[93]= 3864 ' duur= .03864 Vels[94]= 3915 ' duur= .03915 Vels[95]= 3966 ' duur= .03966 Vels[96]= 4017 ' duur= .04017 Vels[97]= 4070 ' duur= .0407 Vels[98]= 4123 ' duur= .04123 Vels[99]= 4176 ' duur= .04176 Vels[100]= 4231 ' duur= .04231 Vels[101]= 4286 ' duur= .04286 Vels[102]= 4342 ' duur= .04342 Vels[103]= 4398 ' duur= .04398 Vels[104]= 4456 ' duur= .04456 Vels[105]= 4514 ' duur= .04514 Vels[106]= 4572 ' duur= .04572 Vels[107]= 4632 ' duur= .04632 Vels[108]= 4692 ' duur= .04692 Vels[109]= 4753 ' duur= .04753 Vels[110]= 4815 ' duur= .04815 Vels[111]= 4878 ' duur= .04878 Vels[112]= 4941 ' duur= .04941 Vels[113]= 5006 ' duur= .05006 Vels[114]= 5071 ' duur= .05071 Vels[115]= 5137 ' duur= .05137 Vels[116]= 5204 ' duur= .05204 Vels[117]= 5272 ' duur= .05272 Vels[118]= 5340 ' duur= .0534 Vels[119]= 5410 ' duur= .0541 Vels[120]= 5480 ' duur= .0548 Vels[121]= 5552 ' duur= .05552 Vels[122]= 5624 ' duur= .05624 Vels[123]= 5697 ' duur= .05697 Vels[124]= 5772 ' duur= .05772 Vels[125]= 5847 ' duur= .05847 Vels[126]= 5923 ' duur= .05923 Vels[127]= 6000 ' duur= .06 ' velo lookup scale prog.change 1 Same range as 0 but logarithmic ' this lookup used for the Laukhuff solenoid 'Vels[1]= 52 ' duur= .00052 'Vels[2]= 56 ' duur= .00056 'Vels[3]= 58 ' duur= .00058 'Vels[4]= 60 ' duur= .0006 'Vels[5]= 62 ' duur= .00062 'Vels[6]= 64 ' duur= .00064 'Vels[7]= 66 ' duur= .00066 'Vels[8]= 69 ' duur= .00069 'Vels[9]= 71 ' duur= .00071 'Vels[10]= 73 ' duur= .00073 'Vels[11]= 76 ' duur= .00076 'Vels[12]= 79 ' duur= .00079 'Vels[13]= 81 ' duur= .00081 'Vels[14]= 84 ' duur= .00084 'Vels[15]= 87 ' duur= .00087 'Vels[16]= 90 ' duur= .0009 'Vels[17]= 94 ' duur= .00094 'Vels[18]= 97 ' duur= .00097 'Vels[19]= 100 ' duur= .001 'Vels[20]= 104 ' duur= .00104 'Vels[21]= 107 ' duur= .00107 'Vels[22]= 111 ' duur= .00111 'Vels[23]= 115 ' duur= .00115 'Vels[24]= 119 ' duur= .00119 'Vels[25]= 123 ' duur= .00123 'Vels[26]= 128 ' duur= .00128 'Vels[27]= 132 ' duur= .00132 'Vels[28]= 137 ' duur= .00137 'Vels[29]= 142 ' duur= .00142 'Vels[30]= 147 ' duur= .00147 'Vels[31]= 152 ' duur= .00152 'Vels[32]= 157 ' duur= .00157 'Vels[33]= 163 ' duur= .00163 'Vels[34]= 168 ' duur= .00168 'Vels[35]= 174 ' duur= .00174 'Vels[36]= 180 ' duur= .0018 'Vels[37]= 187 ' duur= .00187 'Vels[38]= 193 ' duur= .00193 'Vels[39]= 200 ' duur= .002 'Vels[40]= 207 ' duur= .00207 'Vels[41]= 214 ' duur= .00214 'Vels[42]= 222 ' duur= .00222 'Vels[43]= 230 ' duur= .0023 'Vels[44]= 238 ' duur= .00238 'Vels[45]= 246 ' duur= .00246 'Vels[46]= 255 ' duur= .00255 'Vels[47]= 264 ' duur= .00264 'Vels[48]= 273 ' duur= .00273 'Vels[49]= 283 ' duur= .00283 'Vels[50]= 293 ' duur= .00293 'Vels[51]= 303 ' duur= .00303 'Vels[52]= 314 ' duur= .00314 'Vels[53]= 325 ' duur= .00325 'Vels[54]= 336 ' duur= .00336 'Vels[55]= 348 ' duur= .00348 'Vels[56]= 360 ' duur= .0036 'Vels[57]= 373 ' duur= .00373 'Vels[58]= 386 ' duur= .00386 'Vels[59]= 400 ' duur= .004 'Vels[60]= 414 ' duur= .00414 'Vels[61]= 428 ' duur= .00428 'Vels[62]= 443 ' duur= .00443 'Vels[63]= 459 ' duur= .00459 'Vels[64]= 475 ' duur= .00475 'Vels[65]= 492 ' duur= .00492 'Vels[66]= 509 ' duur= .00509 'Vels[67]= 527 ' duur= .00527 'Vels[68]= 545 ' duur= .00545 'Vels[69]= 564 ' duur= .00564 'Vels[70]= 584 ' duur= .00584 'Vels[71]= 605 ' duur= .00605 'Vels[72]= 626 ' duur= .00626 'Vels[73]= 648 ' duur= .00648 'Vels[74]= 671 ' duur= .00671 'Vels[75]= 695 ' duur= .00695 'Vels[76]= 719 ' duur= .00719 'Vels[77]= 744 ' duur= .00744 'Vels[78]= 770 ' duur= .0077 'Vels[79]= 798 ' duur= .00798 'Vels[80]= 826 ' duur= .00826 'Vels[81]= 855 ' duur= .00855 'Vels[82]= 885 ' duur= .00885 'Vels[83]= 916 ' duur= .00916 'Vels[84]= 948 ' duur= .00948 'Vels[85]= 981 ' duur= .00981 'Vels[86]= 1016 ' duur= .01016 'Vels[87]= 1052 ' duur= .01052 'Vels[88]= 1089 ' duur= .01089 'Vels[89]= 1127 ' duur= .01127 'Vels[90]= 1166 ' duur= .01166 'Vels[91]= 1207 ' duur= .01207 'Vels[92]= 1250 ' duur= .0125 'Vels[93]= 1294 ' duur= .01294 'Vels[94]= 1339 ' duur= .01339 'Vels[95]= 1386 ' duur= .01386 'Vels[96]= 1435 ' duur= .01435 'Vels[97]= 1486 ' duur= .01486 'Vels[98]= 1538 ' duur= .01538 'Vels[99]= 1592 ' duur= .01592 'Vels[100]= 1648 ' duur= .01648 'Vels[101]= 1706 ' duur= .01706 'Vels[102]= 1766 ' duur= .01766 'Vels[103]= 1828 ' duur= .01828 'Vels[104]= 1892 ' duur= .01892 'Vels[105]= 1959 ' duur= .01959 'Vels[106]= 2028 ' duur= .02028 'Vels[107]= 2099 ' duur= .02099 'Vels[108]= 2173 ' duur= .02173 'Vels[109]= 2249 ' duur= .02249 'Vels[110]= 2328 ' duur= .02328 'Vels[111]= 2410 ' duur= .0241 'Vels[112]= 2495 ' duur= .02495 'Vels[113]= 2583 ' duur= .02583 'Vels[114]= 2674 ' duur= .02674 'Vels[115]= 2768 ' duur= .02768 'Vels[116]= 2865 ' duur= .02865 'Vels[117]= 2966 ' duur= .02966 'Vels[118]= 3070 ' duur= .0307 'Vels[119]= 3178 ' duur= .03178 'Vels[120]= 3290 ' duur= .0329 'Vels[121]= 3405 ' duur= .03405 'Vels[122]= 3525 ' duur= .03525 'Vels[123]= 3649 ' duur= .03649 'Vels[124]= 3777 ' duur= .03777 'Vels[125]= 3910 ' duur= .0391 'Vels[126]= 4048 ' duur= .04048 'Vels[127]= 4190 ' duur= .0419 Return SlowPWM_Lookup: ' on and off time lookup for Chi ' vibrator ac motor slow pwm ' version 2.0, 05.04.2016: ' on and off time lookup for Chi ' vibrator ac motor slow pwm ' value 1 is now an on pulse of 20ms ' value 127 is now an on pulse of 100ms Dur1[1]= 5712 ' period .0714 s duty cycle= 20 Dur1[2]= 5667 ' period .0714 s duty cycle= 20 Dur1[3]= 5622 ' period .0714 s duty cycle= 21 Dur1[4]= 5577 ' period .0714 s duty cycle= 21 Dur1[5]= 5532 ' period .0714 s duty cycle= 22 Dur1[6]= 5487 ' period .0714 s duty cycle= 23 Dur1[7]= 5442 ' period .0714 s duty cycle= 23 Dur1[8]= 5397 ' period .0714 s duty cycle= 24 Dur1[9]= 5352 ' period .0714 s duty cycle= 25 Dur1[10]= 5307 ' period .0714 s duty cycle= 25 Dur1[11]= 5262 ' period .0714 s duty cycle= 26 Dur1[12]= 5217 ' period .0714 s duty cycle= 26 Dur1[13]= 5172 ' period .0714 s duty cycle= 27 Dur1[14]= 5127 ' period .0714 s duty cycle= 28 Dur1[15]= 5082 ' period .0714 s duty cycle= 28 Dur1[16]= 5037 ' period .0714 s duty cycle= 29 Dur1[17]= 4992 ' period .0714 s duty cycle= 30 Dur1[18]= 4947 ' period .0714 s duty cycle= 30 Dur1[19]= 4902 ' period .0714 s duty cycle= 31 Dur1[20]= 4857 ' period .0714 s duty cycle= 31 Dur1[21]= 4812 ' period .0714 s duty cycle= 32 Dur1[22]= 4767 ' period .0714 s duty cycle= 33 Dur1[23]= 4722 ' period .0714 s duty cycle= 33 Dur1[24]= 4677 ' period .0714 s duty cycle= 34 Dur1[25]= 4632 ' period .0714 s duty cycle= 35 Dur1[26]= 4587 ' period .0714 s duty cycle= 35 Dur1[27]= 4542 ' period .0714 s duty cycle= 36 Dur1[28]= 4497 ' period .0714 s duty cycle= 37 Dur1[29]= 4452 ' period .0714 s duty cycle= 37 Dur1[30]= 4407 ' period .0714 s duty cycle= 38 Dur1[31]= 4362 ' period .0714 s duty cycle= 38 Dur1[32]= 4317 ' period .0714 s duty cycle= 39 Dur1[33]= 4272 ' period .0714 s duty cycle= 40 Dur1[34]= 4227 ' period .0714 s duty cycle= 40 Dur1[35]= 4182 ' period .0714 s duty cycle= 41 Dur1[36]= 4137 ' period .0714 s duty cycle= 42 Dur1[37]= 4092 ' period .0714 s duty cycle= 42 Dur1[38]= 4047 ' period .0714 s duty cycle= 43 Dur1[39]= 4002 ' period .0714 s duty cycle= 43 Dur1[40]= 3957 ' period .0714 s duty cycle= 44 Dur1[41]= 3912 ' period .0714 s duty cycle= 45 Dur1[42]= 3867 ' period .0714 s duty cycle= 45 Dur1[43]= 3822 ' period .0714 s duty cycle= 46 Dur1[44]= 3777 ' period .0714 s duty cycle= 47 Dur1[45]= 3732 ' period .0714 s duty cycle= 47 Dur1[46]= 3687 ' period .0714 s duty cycle= 48 Dur1[47]= 3642 ' period .0714 s duty cycle= 48 Dur1[48]= 3597 ' period .0714 s duty cycle= 49 Dur1[49]= 3552 ' period .0714 s duty cycle= 50 Dur1[50]= 3507 ' period .0714 s duty cycle= 50 Dur1[51]= 3462 ' period .0714 s duty cycle= 51 Dur1[52]= 3417 ' period .0714 s duty cycle= 52 Dur1[53]= 3372 ' period .0714 s duty cycle= 52 Dur1[54]= 3327 ' period .0714 s duty cycle= 53 Dur1[55]= 3282 ' period .0714 s duty cycle= 54 Dur1[56]= 3237 ' period .0714 s duty cycle= 54 Dur1[57]= 3192 ' period .0714 s duty cycle= 55 Dur1[58]= 3147 ' period .0714 s duty cycle= 55 Dur1[59]= 3102 ' period .0714 s duty cycle= 56 Dur1[60]= 3057 ' period .0714 s duty cycle= 57 Dur1[61]= 3012 ' period .0714 s duty cycle= 57 Dur1[62]= 2967 ' period .0714 s duty cycle= 58 Dur1[63]= 2922 ' period .0714 s duty cycle= 59 Dur1[64]= 2877 ' period .0714 s duty cycle= 59 Dur1[65]= 2832 ' period .0714 s duty cycle= 60 Dur1[66]= 2787 ' period .0714 s duty cycle= 60 Dur1[67]= 2742 ' period .0714 s duty cycle= 61 Dur1[68]= 2697 ' period .0714 s duty cycle= 62 Dur1[69]= 2652 ' period .0714 s duty cycle= 62 Dur1[70]= 2607 ' period .0714 s duty cycle= 63 Dur1[71]= 2562 ' period .0714 s duty cycle= 64 Dur1[72]= 2517 ' period .0714 s duty cycle= 64 Dur1[73]= 2472 ' period .0714 s duty cycle= 65 Dur1[74]= 2427 ' period .0714 s duty cycle= 66 Dur1[75]= 2382 ' period .0714 s duty cycle= 66 Dur1[76]= 2337 ' period .0714 s duty cycle= 67 Dur1[77]= 2292 ' period .0714 s duty cycle= 67 Dur1[78]= 2247 ' period .0714 s duty cycle= 68 Dur1[79]= 2202 ' period .0714 s duty cycle= 69 Dur1[80]= 2157 ' period .0714 s duty cycle= 69 Dur1[81]= 2112 ' period .0714 s duty cycle= 70 Dur1[82]= 2067 ' period .0714 s duty cycle= 71 Dur1[83]= 2022 ' period .0714 s duty cycle= 71 Dur1[84]= 1977 ' period .0714 s duty cycle= 72 Dur1[85]= 1932 ' period .0714 s duty cycle= 72 Dur1[86]= 1887 ' period .0714 s duty cycle= 73 Dur1[87]= 1842 ' period .0714 s duty cycle= 74 Dur1[88]= 1797 ' period .0714 s duty cycle= 74 Dur1[89]= 1752 ' period .0714 s duty cycle= 75 Dur1[90]= 1707 ' period .0714 s duty cycle= 76 Dur1[91]= 1662 ' period .0714 s duty cycle= 76 Dur1[92]= 1617 ' period .0714 s duty cycle= 77 Dur1[93]= 1572 ' period .0714 s duty cycle= 77 Dur1[94]= 1527 ' period .0714 s duty cycle= 78 Dur1[95]= 1482 ' period .0714 s duty cycle= 79 Dur1[96]= 1437 ' period .0714 s duty cycle= 79 Dur1[97]= 1392 ' period .0714 s duty cycle= 80 Dur1[98]= 1347 ' period .0714 s duty cycle= 81 Dur1[99]= 1302 ' period .0714 s duty cycle= 81 Dur1[100]= 1257 ' period .0714 s duty cycle= 82 Dur1[101]= 1212 ' period .0714 s duty cycle= 83 Dur1[102]= 1167 ' period .0714 s duty cycle= 83 Dur1[103]= 1122 ' period .0714 s duty cycle= 84 Dur1[104]= 1077 ' period .0714 s duty cycle= 84 Dur1[105]= 1032 ' period .0714 s duty cycle= 85 Dur1[106]= 987 ' period .0714 s duty cycle= 86 Dur1[107]= 942 ' period .0714 s duty cycle= 86 Dur1[108]= 897 ' period .0714 s duty cycle= 87 Dur1[109]= 852 ' period .0714 s duty cycle= 88 Dur1[110]= 807 ' period .0714 s duty cycle= 88 Dur1[111]= 762 ' period .0714 s duty cycle= 89 Dur1[112]= 717 ' period .0714 s duty cycle= 89 Dur1[113]= 672 ' period .0714 s duty cycle= 90 Dur1[114]= 627 ' period .0714 s duty cycle= 91 Dur1[115]= 582 ' period .0714 s duty cycle= 91 Dur1[116]= 537 ' period .0714 s duty cycle= 92 Dur1[117]= 492 ' period .0714 s duty cycle= 93 Dur1[118]= 447 ' period .0714 s duty cycle= 93 Dur1[119]= 402 ' period .0714 s duty cycle= 94 Dur1[120]= 357 ' period .0714 s duty cycle= 95 Dur1[121]= 312 ' period .0714 s duty cycle= 95 Dur1[122]= 267 ' period .0714 s duty cycle= 96 Dur1[123]= 222 ' period .0714 s duty cycle= 96 Dur1[124]= 177 ' period .0714 s duty cycle= 97 Dur1[125]= 132 ' period .0714 s duty cycle= 98 Dur1[126]= 87 ' period .0714 s duty cycle= 98 Dur1[127]= 42 ' period .0714 s duty cycle= 99 Vels1[1]= 1428 ' freq= 14.0056022408964 Vels1[2]= 1473 ' freq= 14.0056022408964 Vels1[3]= 1518 ' freq= 14.0056022408964 Vels1[4]= 1563 ' freq= 14.0056022408964 Vels1[5]= 1608 ' freq= 14.0056022408964 Vels1[6]= 1653 ' freq= 14.0056022408964 Vels1[7]= 1698 ' freq= 14.0056022408964 Vels1[8]= 1743 ' freq= 14.0056022408964 Vels1[9]= 1788 ' freq= 14.0056022408964 Vels1[10]= 1833 ' freq= 14.0056022408964 Vels1[11]= 1878 ' freq= 14.0056022408964 Vels1[12]= 1923 ' freq= 14.0056022408964 Vels1[13]= 1968 ' freq= 14.0056022408964 Vels1[14]= 2013 ' freq= 14.0056022408964 Vels1[15]= 2058 ' freq= 14.0056022408964 Vels1[16]= 2103 ' freq= 14.0056022408964 Vels1[17]= 2148 ' freq= 14.0056022408964 Vels1[18]= 2193 ' freq= 14.0056022408964 Vels1[19]= 2238 ' freq= 14.0056022408964 Vels1[20]= 2283 ' freq= 14.0056022408964 Vels1[21]= 2328 ' freq= 14.0056022408964 Vels1[22]= 2373 ' freq= 14.0056022408964 Vels1[23]= 2418 ' freq= 14.0056022408964 Vels1[24]= 2463 ' freq= 14.0056022408964 Vels1[25]= 2508 ' freq= 14.0056022408964 Vels1[26]= 2553 ' freq= 14.0056022408964 Vels1[27]= 2598 ' freq= 14.0056022408964 Vels1[28]= 2643 ' freq= 14.0056022408964 Vels1[29]= 2688 ' freq= 14.0056022408964 Vels1[30]= 2733 ' freq= 14.0056022408964 Vels1[31]= 2778 ' freq= 14.0056022408964 Vels1[32]= 2823 ' freq= 14.0056022408964 Vels1[33]= 2868 ' freq= 14.0056022408964 Vels1[34]= 2913 ' freq= 14.0056022408964 Vels1[35]= 2958 ' freq= 14.0056022408964 Vels1[36]= 3003 ' freq= 14.0056022408964 Vels1[37]= 3048 ' freq= 14.0056022408964 Vels1[38]= 3093 ' freq= 14.0056022408964 Vels1[39]= 3138 ' freq= 14.0056022408964 Vels1[40]= 3183 ' freq= 14.0056022408964 Vels1[41]= 3228 ' freq= 14.0056022408964 Vels1[42]= 3273 ' freq= 14.0056022408964 Vels1[43]= 3318 ' freq= 14.0056022408964 Vels1[44]= 3363 ' freq= 14.0056022408964 Vels1[45]= 3408 ' freq= 14.0056022408964 Vels1[46]= 3453 ' freq= 14.0056022408964 Vels1[47]= 3498 ' freq= 14.0056022408964 Vels1[48]= 3543 ' freq= 14.0056022408964 Vels1[49]= 3588 ' freq= 14.0056022408964 Vels1[50]= 3633 ' freq= 14.0056022408964 Vels1[51]= 3678 ' freq= 14.0056022408964 Vels1[52]= 3723 ' freq= 14.0056022408964 Vels1[53]= 3768 ' freq= 14.0056022408964 Vels1[54]= 3813 ' freq= 14.0056022408964 Vels1[55]= 3858 ' freq= 14.0056022408964 Vels1[56]= 3903 ' freq= 14.0056022408964 Vels1[57]= 3948 ' freq= 14.0056022408964 Vels1[58]= 3993 ' freq= 14.0056022408964 Vels1[59]= 4038 ' freq= 14.0056022408964 Vels1[60]= 4083 ' freq= 14.0056022408964 Vels1[61]= 4128 ' freq= 14.0056022408964 Vels1[62]= 4173 ' freq= 14.0056022408964 Vels1[63]= 4218 ' freq= 14.0056022408964 Vels1[64]= 4263 ' freq= 14.0056022408964 Vels1[65]= 4308 ' freq= 14.0056022408964 Vels1[66]= 4353 ' freq= 14.0056022408964 Vels1[67]= 4398 ' freq= 14.0056022408964 Vels1[68]= 4443 ' freq= 14.0056022408964 Vels1[69]= 4488 ' freq= 14.0056022408964 Vels1[70]= 4533 ' freq= 14.0056022408964 Vels1[71]= 4578 ' freq= 14.0056022408964 Vels1[72]= 4623 ' freq= 14.0056022408964 Vels1[73]= 4668 ' freq= 14.0056022408964 Vels1[74]= 4713 ' freq= 14.0056022408964 Vels1[75]= 4758 ' freq= 14.0056022408964 Vels1[76]= 4803 ' freq= 14.0056022408964 Vels1[77]= 4848 ' freq= 14.0056022408964 Vels1[78]= 4893 ' freq= 14.0056022408964 Vels1[79]= 4938 ' freq= 14.0056022408964 Vels1[80]= 4983 ' freq= 14.0056022408964 Vels1[81]= 5028 ' freq= 14.0056022408964 Vels1[82]= 5073 ' freq= 14.0056022408964 Vels1[83]= 5118 ' freq= 14.0056022408964 Vels1[84]= 5163 ' freq= 14.0056022408964 Vels1[85]= 5208 ' freq= 14.0056022408964 Vels1[86]= 5253 ' freq= 14.0056022408964 Vels1[87]= 5298 ' freq= 14.0056022408964 Vels1[88]= 5343 ' freq= 14.0056022408964 Vels1[89]= 5388 ' freq= 14.0056022408964 Vels1[90]= 5433 ' freq= 14.0056022408964 Vels1[91]= 5478 ' freq= 14.0056022408964 Vels1[92]= 5523 ' freq= 14.0056022408964 Vels1[93]= 5568 ' freq= 14.0056022408964 Vels1[94]= 5613 ' freq= 14.0056022408964 Vels1[95]= 5658 ' freq= 14.0056022408964 Vels1[96]= 5703 ' freq= 14.0056022408964 Vels1[97]= 5748 ' freq= 14.0056022408964 Vels1[98]= 5793 ' freq= 14.0056022408964 Vels1[99]= 5838 ' freq= 14.0056022408964 Vels1[100]= 5883 ' freq= 14.0056022408964 Vels1[101]= 5928 ' freq= 14.0056022408964 Vels1[102]= 5973 ' freq= 14.0056022408964 Vels1[103]= 6018 ' freq= 14.0056022408964 Vels1[104]= 6063 ' freq= 14.0056022408964 Vels1[105]= 6108 ' freq= 14.0056022408964 Vels1[106]= 6153 ' freq= 14.0056022408964 Vels1[107]= 6198 ' freq= 14.0056022408964 Vels1[108]= 6243 ' freq= 14.0056022408964 Vels1[109]= 6288 ' freq= 14.0056022408964 Vels1[110]= 6333 ' freq= 14.0056022408964 Vels1[111]= 6378 ' freq= 14.0056022408964 Vels1[112]= 6423 ' freq= 14.0056022408964 Vels1[113]= 6468 ' freq= 14.0056022408964 Vels1[114]= 6513 ' freq= 14.0056022408964 Vels1[115]= 6558 ' freq= 14.0056022408964 Vels1[116]= 6603 ' freq= 14.0056022408964 Vels1[117]= 6648 ' freq= 14.0056022408964 Vels1[118]= 6693 ' freq= 14.0056022408964 Vels1[119]= 6738 ' freq= 14.0056022408964 Vels1[120]= 6783 ' freq= 14.0056022408964 Vels1[121]= 6828 ' freq= 14.0056022408964 Vels1[122]= 6873 ' freq= 14.0056022408964 Vels1[123]= 6918 ' freq= 14.0056022408964 Vels1[124]= 6963 ' freq= 14.0056022408964 Vels1[125]= 7008 ' freq= 14.0056022408964 Vels1[126]= 7053 ' freq= 14.0056022408964 Vels1[127]= 7098 ' freq= 14.0056022408964 ' on and off time lookup for Chi ' vibrator ac motor slow pwm ' 7-bit PWM ' with variable base frequency and 16-bit values ' version 1: (too irregular in performance on the motor) 'Dur1[1]= 64512 ' period .65536 s duty cycle= 1 'Dur1[2]= 64512 ' period .65536 s duty cycle= 1 'Dur1[3]= 64000 ' period .65536 s duty cycle= 2 'Dur1[4]= 31744 ' period .32768 s duty cycle= 3 'Dur1[5]= 24600 ' period .256 s duty cycle= 3 'Dur1[6]= 31232 ' period .32768 s duty cycle= 4 'Dur1[7]= 17303 ' period .18304 s duty cycle= 5 'Dur1[8]= 15360 ' period .16384 s duty cycle= 6 'Dur1[9]= 13328 ' period .14336 s duty cycle= 7 'Dur1[10]= 11800 ' period .128 s duty cycle= 7 'Dur1[11]= 10647 ' period .11648 s duty cycle= 8 'Dur1[12]= 14848 ' period .16384 s duty cycle= 9 'Dur1[13]= 8855 ' period .09856 s duty cycle= 10 'Dur1[14]= 8151 ' period .09152 s duty cycle= 10 'Dur1[15]= 7571 ' period .08576 s duty cycle= 11 'Dur1[16]= 7168 ' period .08192 s duty cycle= 12 'Dur1[17]= 6549 ' period .07552 s duty cycle= 13 'Dur1[18]= 6160 ' period .07168 s duty cycle= 14 'Dur1[19]= 5777 ' period .06784 s duty cycle= 14 'Dur1[20]= 5400 ' period .064 s duty cycle= 15 'Dur1[21]= 5136 ' period .06144 s duty cycle= 16 'Dur1[22]= 4823 ' period .05824 s duty cycle= 17 'Dur1[23]= 4620 ' period .05632 s duty cycle= 17 'Dur1[24]= 6656 ' period .08192 s duty cycle= 18 'Dur1[25]= 4120 ' period .0512 s duty cycle= 19 'Dur1[26]= 3927 ' period .04928 s duty cycle= 20 'Dur1[27]= 3838 ' period .04864 s duty cycle= 21 'Dur1[28]= 3575 ' period .04576 s duty cycle= 21 'Dur1[29]= 3465 ' period .0448 s duty cycle= 22 'Dur1[30]= 3283 ' period .04288 s duty cycle= 23 'Dur1[31]= 3201 ' period .04224 s duty cycle= 24 'Dur1[32]= 3072 ' period .04096 s duty cycle= 25 'Dur1[33]= 2945 ' period .03968 s duty cycle= 25 'Dur1[34]= 2773 ' period .03776 s duty cycle= 26 'Dur1[35]= 2697 ' period .03712 s duty cycle= 27 'Dur1[36]= 2576 ' period .03584 s duty cycle= 28 'Dur1[37]= 2548 ' period .03584 s duty cycle= 28 'Dur1[38]= 2385 ' period .03392 s duty cycle= 29 'Dur1[39]= 2314 ' period .03328 s duty cycle= 30 'Dur1[40]= 2200 ' period .032 s duty cycle= 31 'Dur1[41]= 2175 ' period .032 s duty cycle= 32 'Dur1[42]= 2064 ' period .03072 s duty cycle= 32 'Dur1[43]= 2040 ' period .03072 s duty cycle= 33 'Dur1[44]= 1911 ' period .02912 s duty cycle= 34 'Dur1[45]= 1909 ' period .02944 s duty cycle= 35 'Dur1[46]= 1804 ' period .02816 s duty cycle= 35 'Dur1[47]= 1782 ' period .02816 s duty cycle= 36 'Dur1[48]= 2560 ' period .04096 s duty cycle= 37 'Dur1[49]= 1659 ' period .02688 s duty cycle= 38 'Dur1[50]= 1560 ' period .0256 s duty cycle= 39 'Dur1[51]= 1540 ' period .0256 s duty cycle= 39 'Dur1[52]= 1463 ' period .02464 s duty cycle= 40 'Dur1[53]= 1425 ' period .02432 s duty cycle= 41 'Dur1[54]= 1406 ' period .02432 s duty cycle= 42 'Dur1[55]= 1387 ' period .02432 s duty cycle= 42 'Dur1[56]= 1287 ' period .02288 s duty cycle= 43 'Dur1[57]= 1278 ' period .02304 s duty cycle= 44 'Dur1[58]= 1225 ' period .0224 s duty cycle= 45 'Dur1[59]= 1173 ' period .02176 s duty cycle= 46 'Dur1[60]= 1139 ' period .02144 s duty cycle= 46 'Dur1[61]= 1139 ' period .02176 s duty cycle= 47 'Dur1[62]= 1089 ' period .02112 s duty cycle= 48 'Dur1[63]= 1040 ' period .02048 s duty cycle= 49 'Dur1[64]= 1024 ' period .02048 s duty cycle= 50 'Dur1[65]= 1008 ' period .02048 s duty cycle= 50 'Dur1[66]= 961 ' period .01984 s duty cycle= 51 'Dur1[67]= 915 ' period .0192 s duty cycle= 52 'Dur1[68]= 885 ' period .01888 s duty cycle= 53 'Dur1[69]= 885 ' period .0192 s duty cycle= 53 'Dur1[70]= 841 ' period .01856 s duty cycle= 54 'Dur1[71]= 855 ' period .0192 s duty cycle= 55 'Dur1[72]= 784 ' period .01792 s duty cycle= 56 'Dur1[73]= 770 ' period .01792 s duty cycle= 57 'Dur1[74]= 756 ' period .01792 s duty cycle= 57 'Dur1[75]= 742 ' period .01792 s duty cycle= 58 'Dur1[76]= 689 ' period .01696 s duty cycle= 59 'Dur1[77]= 663 ' period .01664 s duty cycle= 60 'Dur1[78]= 650 ' period .01664 s duty cycle= 60 'Dur1[79]= 637 ' period .01664 s duty cycle= 61 'Dur1[80]= 600 ' period .016 s duty cycle= 62 'Dur1[81]= 611 ' period .01664 s duty cycle= 63 'Dur1[82]= 575 ' period .016 s duty cycle= 64 'Dur1[83]= 585 ' period .01664 s duty cycle= 64 'Dur1[84]= 528 ' period .01536 s duty cycle= 65 'Dur1[85]= 516 ' period .01536 s duty cycle= 66 'Dur1[86]= 504 ' period .01536 s duty cycle= 67 'Dur1[87]= 492 ' period .01536 s duty cycle= 67 'Dur1[88]= 455 ' period .01456 s duty cycle= 68 'Dur1[89]= 468 ' period .01536 s duty cycle= 69 'Dur1[90]= 437 ' period .01472 s duty cycle= 70 'Dur1[91]= 407 ' period .01408 s duty cycle= 71 'Dur1[92]= 396 ' period .01408 s duty cycle= 71 'Dur1[93]= 385 ' period .01408 s duty cycle= 72 'Dur1[94]= 374 ' period .01408 s duty cycle= 73 'Dur1[95]= 363 ' period .01408 s duty cycle= 74 'Dur1[96]= 512 ' period .02048 s duty cycle= 75 'Dur1[97]= 341 ' period .01408 s duty cycle= 75 'Dur1[98]= 315 ' period .01344 s duty cycle= 76 'Dur1[99]= 319 ' period .01408 s duty cycle= 77 'Dur1[100]= 280 ' period .0128 s duty cycle= 78 'Dur1[101]= 270 ' period .0128 s duty cycle= 78 'Dur1[102]= 260 ' period .0128 s duty cycle= 79 'Dur1[103]= 250 ' period .0128 s duty cycle= 80 'Dur1[104]= 231 ' period .01232 s duty cycle= 81 'Dur1[105]= 230 ' period .0128 s duty cycle= 82 'Dur1[106]= 209 ' period .01216 s duty cycle= 82 'Dur1[107]= 210 ' period .0128 s duty cycle= 83 'Dur1[108]= 190 ' period .01216 s duty cycle= 84 'Dur1[109]= 190 ' period .0128 s duty cycle= 85 'Dur1[110]= 171 ' period .01216 s duty cycle= 85 'Dur1[111]= 170 ' period .0128 s duty cycle= 86 'Dur1[112]= 143 ' period .01144 s duty cycle= 87 'Dur1[113]= 135 ' period .01152 s duty cycle= 88 'Dur1[114]= 126 ' period .01152 s duty cycle= 89 'Dur1[115]= 117 ' period .01152 s duty cycle= 89 'Dur1[116]= 105 ' period .0112 s duty cycle= 90 'Dur1[117]= 99 ' period .01152 s duty cycle= 91 'Dur1[118]= 85 ' period .01088 s duty cycle= 92 'Dur1[119]= 81 ' period .01152 s duty cycle= 92 'Dur1[120]= 67 ' period .01072 s duty cycle= 93 'Dur1[121]= 63 ' period .01152 s duty cycle= 94 'Dur1[122]= 51 ' period .01088 s duty cycle= 95 'Dur1[123]= 45 ' period .01152 s duty cycle= 96 'Dur1[124]= 33 ' period .01056 s duty cycle= 96 'Dur1[125]= 24 ' period .01024 s duty cycle= 97 'Dur1[126]= 16 ' period .01024 s duty cycle= 98 'Dur1[127]= 8 ' period .01024 s duty cycle= 99 'Vels1[1]= 1024 ' freq= 1.52587890625 'Vels1[2]= 1024 ' freq= 1.52587890625 'Vels1[3]= 1536 ' freq= 1.52587890625 'Vels1[4]= 1024 ' freq= 3.0517578125 'Vels1[5]= 1000 ' freq= 3.90625 'Vels1[6]= 1536 ' freq= 3.0517578125 'Vels1[7]= 1001 ' freq= 5.46328671328671 'Vels1[8]= 1024 ' freq= 6.103515625 'Vels1[9]= 1008 ' freq= 6.97544642857143 'Vels1[10]= 1000 ' freq= 7.8125 'Vels1[11]= 1001 ' freq= 8.58516483516483 'Vels1[12]= 1536 ' freq= 6.103515625 'Vels1[13]= 1001 ' freq= 10.1461038961039 'Vels1[14]= 1001 ' freq= 10.9265734265734 'Vels1[15]= 1005 ' freq= 11.660447761194 'Vels1[16]= 1024 ' freq= 12.20703125 'Vels1[17]= 1003 ' freq= 13.2415254237288 'Vels1[18]= 1008 ' freq= 13.9508928571428 'Vels1[19]= 1007 ' freq= 14.7405660377358 'Vels1[20]= 1000 ' freq= 15.625 'Vels1[21]= 1008 ' freq= 16.2760416666667 'Vels1[22]= 1001 ' freq= 17.1703296703297 'Vels1[23]= 1012 ' freq= 17.7556818181818 'Vels1[24]= 1536 ' freq= 12.20703125 'Vels1[25]= 1000 ' freq= 19.53125 'Vels1[26]= 1001 ' freq= 20.2922077922078 'Vels1[27]= 1026 ' freq= 20.5592105263158 'Vels1[28]= 1001 ' freq= 21.8531468531468 'Vels1[29]= 1015 ' freq= 22.3214285714286 'Vels1[30]= 1005 ' freq= 23.320895522388 'Vels1[31]= 1023 ' freq= 23.6742424242424 'Vels1[32]= 1024 ' freq= 24.4140625 'Vels1[33]= 1023 ' freq= 25.2016129032258 'Vels1[34]= 1003 ' freq= 26.4830508474576 'Vels1[35]= 1015 ' freq= 26.9396551724138 'Vels1[36]= 1008 ' freq= 27.9017857142857 'Vels1[37]= 1036 ' freq= 27.9017857142857 'Vels1[38]= 1007 ' freq= 29.4811320754717 'Vels1[39]= 1014 ' freq= 30.0480769230769 'Vels1[40]= 1000 ' freq= 31.25 'Vels1[41]= 1025 ' freq= 31.25 'Vels1[42]= 1008 ' freq= 32.5520833333333 'Vels1[43]= 1032 ' freq= 32.5520833333333 'Vels1[44]= 1001 ' freq= 34.3406593406593 'Vels1[45]= 1035 ' freq= 33.9673913043478 'Vels1[46]= 1012 ' freq= 35.5113636363636 'Vels1[47]= 1034 ' freq= 35.5113636363636 'Vels1[48]= 1536 ' freq= 24.4140625 'Vels1[49]= 1029 ' freq= 37.2023809523809 'Vels1[50]= 1000 ' freq= 39.0625 'Vels1[51]= 1020 ' freq= 39.0625 'Vels1[52]= 1001 ' freq= 40.5844155844156 'Vels1[53]= 1007 ' freq= 41.1184210526316 'Vels1[54]= 1026 ' freq= 41.1184210526316 'Vels1[55]= 1045 ' freq= 41.1184210526316 'Vels1[56]= 1001 ' freq= 43.7062937062937 'Vels1[57]= 1026 ' freq= 43.4027777777778 'Vels1[58]= 1015 ' freq= 44.6428571428571 'Vels1[59]= 1003 ' freq= 45.9558823529412 'Vels1[60]= 1005 ' freq= 46.6417910447761 'Vels1[61]= 1037 ' freq= 45.9558823529412 'Vels1[62]= 1023 ' freq= 47.3484848484848 'Vels1[63]= 1008 ' freq= 48.828125 'Vels1[64]= 1024 ' freq= 48.828125 'Vels1[65]= 1040 ' freq= 48.828125 'Vels1[66]= 1023 ' freq= 50.4032258064516 'Vels1[67]= 1005 ' freq= 52.0833333333333 'Vels1[68]= 1003 ' freq= 52.9661016949152 'Vels1[69]= 1035 ' freq= 52.0833333333333 'Vels1[70]= 1015 ' freq= 53.8793103448276 'Vels1[71]= 1065 ' freq= 52.0833333333333 'Vels1[72]= 1008 ' freq= 55.8035714285714 'Vels1[73]= 1022 ' freq= 55.8035714285714 'Vels1[74]= 1036 ' freq= 55.8035714285714 'Vels1[75]= 1050 ' freq= 55.8035714285714 'Vels1[76]= 1007 ' freq= 58.9622641509434 'Vels1[77]= 1001 ' freq= 60.0961538461538 'Vels1[78]= 1014 ' freq= 60.0961538461538 'Vels1[79]= 1027 ' freq= 60.0961538461538 'Vels1[80]= 1000 ' freq= 62.5 'Vels1[81]= 1053 ' freq= 60.0961538461538 'Vels1[82]= 1025 ' freq= 62.5 'Vels1[83]= 1079 ' freq= 60.0961538461538 'Vels1[84]= 1008 ' freq= 65.1041666666667 'Vels1[85]= 1020 ' freq= 65.1041666666667 'Vels1[86]= 1032 ' freq= 65.1041666666667 'Vels1[87]= 1044 ' freq= 65.1041666666667 'Vels1[88]= 1001 ' freq= 68.6813186813187 'Vels1[89]= 1068 ' freq= 65.1041666666667 'Vels1[90]= 1035 ' freq= 67.9347826086956 'Vels1[91]= 1001 ' freq= 71.0227272727273 'Vels1[92]= 1012 ' freq= 71.0227272727273 'Vels1[93]= 1023 ' freq= 71.0227272727273 'Vels1[94]= 1034 ' freq= 71.0227272727273 'Vels1[95]= 1045 ' freq= 71.0227272727273 'Vels1[96]= 1536 ' freq= 48.828125 'Vels1[97]= 1067 ' freq= 71.0227272727273 'Vels1[98]= 1029 ' freq= 74.4047619047619 'Vels1[99]= 1089 ' freq= 71.0227272727273 'Vels1[100]= 1000 ' freq= 78.125 'Vels1[101]= 1010 ' freq= 78.125 'Vels1[102]= 1020 ' freq= 78.125 'Vels1[103]= 1030 ' freq= 78.125 'Vels1[104]= 1001 ' freq= 81.1688311688312 'Vels1[105]= 1050 ' freq= 78.125 'Vels1[106]= 1007 ' freq= 82.2368421052632 'Vels1[107]= 1070 ' freq= 78.125 'Vels1[108]= 1026 ' freq= 82.2368421052632 'Vels1[109]= 1090 ' freq= 78.125 'Vels1[110]= 1045 ' freq= 82.2368421052632 'Vels1[111]= 1110 ' freq= 78.125 'Vels1[112]= 1001 ' freq= 87.4125874125874 'Vels1[113]= 1017 ' freq= 86.8055555555555 'Vels1[114]= 1026 ' freq= 86.8055555555555 'Vels1[115]= 1035 ' freq= 86.8055555555555 'Vels1[116]= 1015 ' freq= 89.2857142857143 'Vels1[117]= 1053 ' freq= 86.8055555555555 'Vels1[118]= 1003 ' freq= 91.9117647058823 'Vels1[119]= 1071 ' freq= 86.8055555555555 'Vels1[120]= 1005 ' freq= 93.2835820895522 'Vels1[121]= 1089 ' freq= 86.8055555555555 'Vels1[122]= 1037 ' freq= 91.9117647058823 'Vels1[123]= 1107 ' freq= 86.8055555555555 'Vels1[124]= 1023 ' freq= 94.6969696969697 'Vels1[125]= 1000 ' freq= 97.65625 'Vels1[126]= 1008 ' freq= 97.65625 'Vels1[127]= 1016 ' freq= 97.65625 '' on and off time lookup for Chi '' vibrator ac motor slow pwm ' version 0 'Dur1[1]= 49000 ' period .5 s duty cycle= 2 'Dur1[2]= 48614 ' period .5 s duty cycle= 2 'Dur1[3]= 48228 ' period .5 s duty cycle= 3 'Dur1[4]= 47842 ' period .5 s duty cycle= 4 'Dur1[5]= 47456 ' period .5 s duty cycle= 5 'Dur1[6]= 47070 ' period .5 s duty cycle= 5 'Dur1[7]= 46684 ' period .5 s duty cycle= 6 'Dur1[8]= 46298 ' period .5 s duty cycle= 7 'Dur1[9]= 45912 ' period .5 s duty cycle= 8 'Dur1[10]= 45526 ' period .5 s duty cycle= 8 'Dur1[11]= 45140 ' period .5 s duty cycle= 9 'Dur1[12]= 44754 ' period .5 s duty cycle= 10 'Dur1[13]= 44368 ' period .5 s duty cycle= 11 'Dur1[14]= 43982 ' period .5 s duty cycle= 12 'Dur1[15]= 43596 ' period .5 s duty cycle= 12 'Dur1[16]= 43210 ' period .5 s duty cycle= 13 'Dur1[17]= 42824 ' period .5 s duty cycle= 14 'Dur1[18]= 42438 ' period .5 s duty cycle= 15 'Dur1[19]= 42052 ' period .5 s duty cycle= 15 'Dur1[20]= 41666 ' period .5 s duty cycle= 16 'Dur1[21]= 41280 ' period .5 s duty cycle= 17 'Dur1[22]= 40894 ' period .5 s duty cycle= 18 'Dur1[23]= 40508 ' period .5 s duty cycle= 18 'Dur1[24]= 40122 ' period .5 s duty cycle= 19 'Dur1[25]= 39736 ' period .5 s duty cycle= 20 'Dur1[26]= 39350 ' period .5 s duty cycle= 21 'Dur1[27]= 38964 ' period .5 s duty cycle= 22 'Dur1[28]= 38578 ' period .5 s duty cycle= 22 'Dur1[29]= 38192 ' period .5 s duty cycle= 23 'Dur1[30]= 37806 ' period .5 s duty cycle= 24 'Dur1[31]= 37420 ' period .5 s duty cycle= 25 'Dur1[32]= 37034 ' period .5 s duty cycle= 25 'Dur1[33]= 36648 ' period .5 s duty cycle= 26 'Dur1[34]= 36262 ' period .5 s duty cycle= 27 'Dur1[35]= 35876 ' period .5 s duty cycle= 28 'Dur1[36]= 35490 ' period .5 s duty cycle= 29 'Dur1[37]= 35104 ' period .5 s duty cycle= 29 'Dur1[38]= 34718 ' period .5 s duty cycle= 30 'Dur1[39]= 34332 ' period .5 s duty cycle= 31 'Dur1[40]= 33946 ' period .5 s duty cycle= 32 'Dur1[41]= 33560 ' period .5 s duty cycle= 32 'Dur1[42]= 33174 ' period .5 s duty cycle= 33 'Dur1[43]= 32788 ' period .5 s duty cycle= 34 'Dur1[44]= 32402 ' period .5 s duty cycle= 35 'Dur1[45]= 32016 ' period .5 s duty cycle= 35 'Dur1[46]= 31630 ' period .5 s duty cycle= 36 'Dur1[47]= 31244 ' period .5 s duty cycle= 37 'Dur1[48]= 30858 ' period .5 s duty cycle= 38 'Dur1[49]= 30472 ' period .5 s duty cycle= 39 'Dur1[50]= 30086 ' period .5 s duty cycle= 39 'Dur1[51]= 29700 ' period .5 s duty cycle= 40 'Dur1[52]= 29314 ' period .5 s duty cycle= 41 'Dur1[53]= 28928 ' period .5 s duty cycle= 42 'Dur1[54]= 28542 ' period .5 s duty cycle= 42 'Dur1[55]= 28156 ' period .5 s duty cycle= 43 'Dur1[56]= 27770 ' period .5 s duty cycle= 44 'Dur1[57]= 27384 ' period .5 s duty cycle= 45 'Dur1[58]= 26998 ' period .5 s duty cycle= 46 'Dur1[59]= 26612 ' period .5 s duty cycle= 46 'Dur1[60]= 26226 ' period .5 s duty cycle= 47 'Dur1[61]= 25840 ' period .5 s duty cycle= 48 'Dur1[62]= 25454 ' period .5 s duty cycle= 49 'Dur1[63]= 25068 ' period .5 s duty cycle= 49 'Dur1[64]= 24682 ' period .5 s duty cycle= 50 'Dur1[65]= 24296 ' period .5 s duty cycle= 51 'Dur1[66]= 23910 ' period .5 s duty cycle= 52 'Dur1[67]= 23524 ' period .5 s duty cycle= 52 'Dur1[68]= 23138 ' period .5 s duty cycle= 53 'Dur1[69]= 22752 ' period .5 s duty cycle= 54 'Dur1[70]= 22366 ' period .5 s duty cycle= 55 'Dur1[71]= 21980 ' period .5 s duty cycle= 56 'Dur1[72]= 21594 ' period .5 s duty cycle= 56 'Dur1[73]= 21208 ' period .5 s duty cycle= 57 'Dur1[74]= 20822 ' period .5 s duty cycle= 58 'Dur1[75]= 20436 ' period .5 s duty cycle= 59 'Dur1[76]= 20050 ' period .5 s duty cycle= 59 'Dur1[77]= 19664 ' period .5 s duty cycle= 60 'Dur1[78]= 19278 ' period .5 s duty cycle= 61 'Dur1[79]= 18892 ' period .5 s duty cycle= 62 'Dur1[80]= 18506 ' period .5 s duty cycle= 62 'Dur1[81]= 18120 ' period .5 s duty cycle= 63 'Dur1[82]= 17734 ' period .5 s duty cycle= 64 'Dur1[83]= 17348 ' period .5 s duty cycle= 65 'Dur1[84]= 16962 ' period .5 s duty cycle= 66 'Dur1[85]= 16576 ' period .5 s duty cycle= 66 'Dur1[86]= 16190 ' period .5 s duty cycle= 67 'Dur1[87]= 15804 ' period .5 s duty cycle= 68 'Dur1[88]= 15418 ' period .5 s duty cycle= 69 'Dur1[89]= 15032 ' period .5 s duty cycle= 69 'Dur1[90]= 14646 ' period .5 s duty cycle= 70 'Dur1[91]= 14260 ' period .5 s duty cycle= 71 'Dur1[92]= 13874 ' period .5 s duty cycle= 72 'Dur1[93]= 13488 ' period .5 s duty cycle= 73 'Dur1[94]= 13102 ' period .5 s duty cycle= 73 'Dur1[95]= 12716 ' period .5 s duty cycle= 74 'Dur1[96]= 12330 ' period .5 s duty cycle= 75 'Dur1[97]= 11944 ' period .5 s duty cycle= 76 'Dur1[98]= 11558 ' period .5 s duty cycle= 76 'Dur1[99]= 11172 ' period .5 s duty cycle= 77 'Dur1[100]= 10786 ' period .5 s duty cycle= 78 'Dur1[101]= 10400 ' period .5 s duty cycle= 79 'Dur1[102]= 10014 ' period .5 s duty cycle= 79 'Dur1[103]= 9628 ' period .5 s duty cycle= 80 'Dur1[104]= 9242 ' period .5 s duty cycle= 81 'Dur1[105]= 8856 ' period .5 s duty cycle= 82 'Dur1[106]= 8470 ' period .5 s duty cycle= 83 'Dur1[107]= 8084 ' period .5 s duty cycle= 83 'Dur1[108]= 7698 ' period .5 s duty cycle= 84 'Dur1[109]= 7312 ' period .5 s duty cycle= 85 'Dur1[110]= 6926 ' period .5 s duty cycle= 86 'Dur1[111]= 6540 ' period .5 s duty cycle= 86 'Dur1[112]= 6154 ' period .5 s duty cycle= 87 'Dur1[113]= 5768 ' period .5 s duty cycle= 88 'Dur1[114]= 5382 ' period .5 s duty cycle= 89 'Dur1[115]= 4996 ' period .5 s duty cycle= 90 'Dur1[116]= 4610 ' period .5 s duty cycle= 90 'Dur1[117]= 4224 ' period .5 s duty cycle= 91 'Dur1[118]= 3838 ' period .5 s duty cycle= 92 'Dur1[119]= 3452 ' period .5 s duty cycle= 93 'Dur1[120]= 3066 ' period .5 s duty cycle= 93 'Dur1[121]= 2680 ' period .5 s duty cycle= 94 'Dur1[122]= 2294 ' period .5 s duty cycle= 95 'Dur1[123]= 1908 ' period .5 s duty cycle= 96 'Dur1[124]= 1522 ' period .5 s duty cycle= 96 'Dur1[125]= 1136 ' period .5 s duty cycle= 97 'Dur1[126]= 750 ' period .5 s duty cycle= 98 'Dur1[127]= 364 ' period .5 s duty cycle= 99 'Vels1[1]= 1000 ' freq= 2 'Vels1[2]= 1386 ' freq= 2 'Vels1[3]= 1772 ' freq= 2 'Vels1[4]= 2158 ' freq= 2 'Vels1[5]= 2544 ' freq= 2 'Vels1[6]= 2930 ' freq= 2 'Vels1[7]= 3316 ' freq= 2 'Vels1[8]= 3702 ' freq= 2 'Vels1[9]= 4088 ' freq= 2 'Vels1[10]= 4474 ' freq= 2 'Vels1[11]= 4860 ' freq= 2 'Vels1[12]= 5246 ' freq= 2 'Vels1[13]= 5632 ' freq= 2 'Vels1[14]= 6018 ' freq= 2 'Vels1[15]= 6404 ' freq= 2 'Vels1[16]= 6790 ' freq= 2 'Vels1[17]= 7176 ' freq= 2 'Vels1[18]= 7562 ' freq= 2 'Vels1[19]= 7948 ' freq= 2 'Vels1[20]= 8334 ' freq= 2 'Vels1[21]= 8720 ' freq= 2 'Vels1[22]= 9106 ' freq= 2 'Vels1[23]= 9492 ' freq= 2 'Vels1[24]= 9878 ' freq= 2 'Vels1[25]= 10264 ' freq= 2 'Vels1[26]= 10650 ' freq= 2 'Vels1[27]= 11036 ' freq= 2 'Vels1[28]= 11422 ' freq= 2 'Vels1[29]= 11808 ' freq= 2 'Vels1[30]= 12194 ' freq= 2 'Vels1[31]= 12580 ' freq= 2 'Vels1[32]= 12966 ' freq= 2 'Vels1[33]= 13352 ' freq= 2 'Vels1[34]= 13738 ' freq= 2 'Vels1[35]= 14124 ' freq= 2 'Vels1[36]= 14510 ' freq= 2 'Vels1[37]= 14896 ' freq= 2 'Vels1[38]= 15282 ' freq= 2 'Vels1[39]= 15668 ' freq= 2 'Vels1[40]= 16054 ' freq= 2 'Vels1[41]= 16440 ' freq= 2 'Vels1[42]= 16826 ' freq= 2 'Vels1[43]= 17212 ' freq= 2 'Vels1[44]= 17598 ' freq= 2 'Vels1[45]= 17984 ' freq= 2 'Vels1[46]= 18370 ' freq= 2 'Vels1[47]= 18756 ' freq= 2 'Vels1[48]= 19142 ' freq= 2 'Vels1[49]= 19528 ' freq= 2 'Vels1[50]= 19914 ' freq= 2 'Vels1[51]= 20300 ' freq= 2 'Vels1[52]= 20686 ' freq= 2 'Vels1[53]= 21072 ' freq= 2 'Vels1[54]= 21458 ' freq= 2 'Vels1[55]= 21844 ' freq= 2 'Vels1[56]= 22230 ' freq= 2 'Vels1[57]= 22616 ' freq= 2 'Vels1[58]= 23002 ' freq= 2 'Vels1[59]= 23388 ' freq= 2 'Vels1[60]= 23774 ' freq= 2 'Vels1[61]= 24160 ' freq= 2 'Vels1[62]= 24546 ' freq= 2 'Vels1[63]= 24932 ' freq= 2 'Vels1[64]= 25318 ' freq= 2 'Vels1[65]= 25704 ' freq= 2 'Vels1[66]= 26090 ' freq= 2 'Vels1[67]= 26476 ' freq= 2 'Vels1[68]= 26862 ' freq= 2 'Vels1[69]= 27248 ' freq= 2 'Vels1[70]= 27634 ' freq= 2 'Vels1[71]= 28020 ' freq= 2 'Vels1[72]= 28406 ' freq= 2 'Vels1[73]= 28792 ' freq= 2 'Vels1[74]= 29178 ' freq= 2 'Vels1[75]= 29564 ' freq= 2 'Vels1[76]= 29950 ' freq= 2 'Vels1[77]= 30336 ' freq= 2 'Vels1[78]= 30722 ' freq= 2 'Vels1[79]= 31108 ' freq= 2 'Vels1[80]= 31494 ' freq= 2 'Vels1[81]= 31880 ' freq= 2 'Vels1[82]= 32266 ' freq= 2 'Vels1[83]= 32652 ' freq= 2 'Vels1[84]= 33038 ' freq= 2 'Vels1[85]= 33424 ' freq= 2 'Vels1[86]= 33810 ' freq= 2 'Vels1[87]= 34196 ' freq= 2 'Vels1[88]= 34582 ' freq= 2 'Vels1[89]= 34968 ' freq= 2 'Vels1[90]= 35354 ' freq= 2 'Vels1[91]= 35740 ' freq= 2 'Vels1[92]= 36126 ' freq= 2 'Vels1[93]= 36512 ' freq= 2 'Vels1[94]= 36898 ' freq= 2 'Vels1[95]= 37284 ' freq= 2 'Vels1[96]= 37670 ' freq= 2 'Vels1[97]= 38056 ' freq= 2 'Vels1[98]= 38442 ' freq= 2 'Vels1[99]= 38828 ' freq= 2 'Vels1[100]= 39214 ' freq= 2 'Vels1[101]= 39600 ' freq= 2 'Vels1[102]= 39986 ' freq= 2 'Vels1[103]= 40372 ' freq= 2 'Vels1[104]= 40758 ' freq= 2 'Vels1[105]= 41144 ' freq= 2 'Vels1[106]= 41530 ' freq= 2 'Vels1[107]= 41916 ' freq= 2 'Vels1[108]= 42302 ' freq= 2 'Vels1[109]= 42688 ' freq= 2 'Vels1[110]= 43074 ' freq= 2 'Vels1[111]= 43460 ' freq= 2 'Vels1[112]= 43846 ' freq= 2 'Vels1[113]= 44232 ' freq= 2 'Vels1[114]= 44618 ' freq= 2 'Vels1[115]= 45004 ' freq= 2 'Vels1[116]= 45390 ' freq= 2 'Vels1[117]= 45776 ' freq= 2 'Vels1[118]= 46162 ' freq= 2 'Vels1[119]= 46548 ' freq= 2 'Vels1[120]= 46934 ' freq= 2 'Vels1[121]= 47320 ' freq= 2 'Vels1[122]= 47706 ' freq= 2 'Vels1[123]= 48092 ' freq= 2 'Vels1[124]= 48478 ' freq= 2 'Vels1[125]= 48864 ' freq= 2 'Vels1[126]= 49250 ' freq= 2 'Vels1[127]= 49636 ' freq= 2 Return '[EOF]