;-----------------------------------------------------------------------------------------------; ; Program: PSIM io test ; ; Developed by David J. Brown ; ; Copyright (c) November 16, 2006 David J. Brown ; ; Email: davebr@earthlink.net ; ; Web site: http://modularsynthesis.com ; ;-----------------------------------------------------------------------------------------------; ; LICENSE AGREEMENT: ; ; This program is free software. You can redistribute it and/or modify it. ; ; ; ; This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, ; ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ; ;-----------------------------------------------------------------------------------------------; ; ; Description: Test program for inputs and outputs ; ; Display input values: ; After programming the PSIM, click on the Terminal1 tab in the output window of the Atom-Pro ; IDE (third tab in the output window). Make sure Output is checked in the View Toolbars menu. ; ; Set the baud rate (first pull down) to 38.4kbs. ; Set the COM port (second pull down) to whatever communication port the PSIM is connected to. ; Click the Connect button. It should change to Disconnect. ; ; Pressing the start switch will display the decimal value (0 to 1023) of each of the inputs. ; The Run led will flash on each switch closure. ; ; Set output values: ; All outputs are set to Low A (0.75 volts). ; Pressing the stop switch will increment each output by one octave. Output voltage will wrap ; from 9.75 volts back to 0.75 volts. ; The Stop led will flash on each switch closure. ; ;-----------------------------------------------------------------------------------------------; ; Revision: 0.1XS ; Date November 16, 2006 ; History: 0.1XS initial release of program ; Written: November 16, 2006 ;-----------------------------------------------------------------------------------------------; ; ;pin declarations pin_j1 con p0 ;in-1 pin pin_j2 con p1 ;in-2 pin pin_j3 con p2 ;in-3 pin pin_j4 con p3 ;in-4 pin start_j var in4 ;start jack and switch stop_j var in5 ;stop jack and switch spkj_full var in6 ;speakjet buffer half full spkj_sdata con p7 ;speakjet data aux_j con p8 ;aux jack (output mode) aux_in var in8 ;aux jack (input mode) stop_led con p9 ;stop led (red) stop_led_out var out9 ;stop led alias used for let statement run_led con p10 ;run led (green) run_led_out var out10 ;run led alias used for let statement load_dacs con p11 ;load dac pin ser_data con p12 ;dac serial data input pin clock con p13 ;dac clock pin midi_sdata con p15 ;midi data serial output ;i/o declarations in_j1 var word ;in-1 value: get_inputs, get_inputs_avg, avg1 in_j2 var word ;in-2 value: get_inputs, get_inputs_avg, avc2 in_j3 var word ;in-3 value: get_inputs, get_inputs_avg, avg3 in_j4 var word ;in-4 value: get_inputs, get_inputs_avg, avg4 out_j1 var word ;out-1 value: load_outputs out_j2 var word ;out-2 value: load_outputs out_j3 var word ;out-3 value: load_outputs out_j4 var word ;out-4 value: load_outputs ;misc declarations lowA con 32*9 ;low A is 9 semitones above 0 octave con 32*12 ;one octave is 12 semitones ; ;-----------------------------------------------------------------------------------------------; ; Program ; ;-----------------------------------------------------------------------------------------------; ; ;initialize pins ;note: setting midi-out, i2c_clock, and i2c_data to outputs can send glitches so initialize as inputs dirs=%0011111000000000 ;configure pin direction (1=output, 0=input) ;inputs: midi-in, aux, start, stop, in-4, in-3, in-2, in-1 ;outputs: load_dacs, ser_data, clock, stop led, run led, i2c clock & data low run_led ;set run led off low stop_led ;set stop led off high load_dacs ;set dac load-0 high low ser_data ;set dac data low low clock ;set dac clock low let out_j1=lowA ;reset to low A let out_j2=lowA ;reset to low A let out_j3=lowA ;reset to low A let out_j4=lowA ;reset to low A gosub load_outputs ; ;-----------------------------------------------------------------------------------------------; ; Main Program ; ;-----------------------------------------------------------------------------------------------; ; disable check: if start_j=1 then inputs ;check for start press if stop_j=0 then check ;check for stop press high stop_led if out_j1<(4095-octave) then ;check for maximum value let out_j1=out_j1+octave ;add an octave let out_j2=out_j2+octave ;add an octave let out_j3=out_j3+octave ;add an octave let out_j4=out_j4+octave ;add an octave else let out_j1=lowA ;reset to low A let out_j2=lowA ;reset to low A let out_j3=lowA ;reset to low A let out_j4=lowA ;reset to low A endif gosub load_outputs outputs2: pause 100 if stop_j=1 then outputs2 ;wait for stop release low stop_led goto check ; inputs: high run_led gosub get_inputs serout s_out,i38400,["J1=",dec in_j1," J2=",dec in_j2," J3=",dec in_j3," J4=",dec in_j4,13] inputs2: pause 100 if start_j=1 then inputs2 ;wait for start release low run_led goto check ; ;-----------------------------------------------------------------------------------------------; ; Subroutines ; ;-----------------------------------------------------------------------------------------------; ; ;sample in-1 to in-4 ;in_jx is input value (0 - 1023) ;150 uS execution time get_inputs: adin pin_j1,in_j1 adin pin_j2,in_j2 adin pin_j3,in_j3 adin pin_j4,in_j4 return ; ;output out_jx values to dacs ;750 uS execution time load_outputs: ;add dac address to out_jx values and shift 16 bits using mode 4 shiftout ser_data,clock,fastmsbpre,[(out_j1|$c000)\16] pulsout load_dacs,1 ;clock loaddacs shiftout ser_data,clock,fastmsbpre,[(out_j2|$8000)\16] pulsout load_dacs,1 ;clock loaddacs shiftout ser_data,clock,fastmsbpre,[(out_j3|$4000)\16] pulsout load_dacs,1 ;clock loaddacs shiftout ser_data,clock,fastmsbpre,[out_j4\16] pulsout load_dacs,1 ;clock loaddacs return ; ;-----------------------------------------------------------------------------------------------; ; End Of Program ; ;-----------------------------------------------------------------------------------------------;