SynthModules.com PSIM Module |
Here are some photos of my PSIM module built in MOTM format.
My PSIM module includes MIDI input, MIDI output, SpeakJet, and four CV controls. The four CV controls are normalled to a +10 volt reference through the input jacks.
I use dual switches for the PSIM and SpeakJet. Up (blue) control the SpeakJet and down control the PSIM. I have revised my SpeakJet interface from the original software serial interface to a hardware I2C interface interface to better operate with interrupts.
The SpeakJet module is on the left with a dual power cable to connect to the PSIM on the left. I added a heat sink on the +5 regulator to reduce heat. The MIDI input and output module is barely visible n the middle with the CV controls. I've since added an I2C interface and TTS256 daughter board below the SpeakJet board on the left.

MOTM-format PSIM FrontPanelExpress design file
MIDI input and output schematic
Original serial SpeakJet schematic
New I2C SpeakJet implementation
PSIM Analog/Digital Expansion New
I obtained a surplus 2x20 vacuum fluorescent display module from Noritake Itron which supports scrolling, four brightness levels, and user-definable fonts. It interfaces either by parallel or serial up to 9600 baud. I used the Aux output to drive to the display but the two 10K series resistors limited the current so I had to buffer the signal with a single transistor. I used the SEROUT command to interface to the display. This command uses software timing and is is not compatible with interrupts from MIDI or timers.

A follow-on project to this VFD display was my External LCD module. This significantly reduced power from the 400 mA vacuum fluorescent display. I changed the interface to the display to use a MIDI sysex command which eliminated use of the Aux output and the software SEROUT interrupt issues. I then built this into a 1U PSIM Display module using a 2 line x 8 character LCD display. I modified this design for the ComputerVoltageSource LCD and now use this as my standard display. I use the display for program names and to indicate control selections, modes, and input and output voltages. Programs that used the smaller 2 line x 8 character LCD just utilize the top line of the 2 line x 16 character LCD.

This is a summary of my PSIM programs. Programs for my ComputerVoltageSource are located here.
All of the programs use my PSIM Display module to display the name of the program. Since the display is interfaced via MIDI sysex, these programs should run on any system without a display and without MIDI. Some of my programs speak the name of the program. These use the I2C interface generally without error checking and should also run fine on a system without a SpeakJet.
I have also documented a number of hardware and software discoveries with the AtomPro24 and AtomPro28 in my AtomPro FAQ
*** ATTENTION *** |
5V ADC (rev0.1).DJB.bas
This program is a 5 volt 8 bit ADC which updates at 5 mS. It sends
streaming CC MIDI data to a PAiA MIDI2CV which provides the 8 bit digital outputs (+5 volt).
ARP
Sequencer Midi (rev0.1).DJB.bas
This program is an adaptation of "cv2midi" for the Arp sequencer
since the CV from the sequencer is not stable until the falling edge of clock.
Arpeggiate
It (rev0.4).djb.bas
This program is an arpeggiator for a CV keyboard. It contains 5 preset
sequences and the fifth sequence is user programmable in a "record" mode. It also
sends the notes to MIDI
out and contains a program change selection mode. The display is used for
mode and sequence display.
Audio (rev0.0).DJB.bas
This is a sample program to demonstrate the PSIM capabilities to generate
audio. It plays the bass sequence to 'Riders On The Storm'. Start begins, Stop ends, and
Aux is audio out.
Clock
(rev0.5).DJB.bas
Displays and speaks the time (hours, minutes, seconds) whenever Start is pressed and also
on the
hour. Sorry - I left out the chimes. Initial time is set in the program. Set it
about 1 minute ahead, load the program, then reset the PSIM at the programmed starting
time.
CV2Midi
(rev0.3).DJB.bas
This program converts CV to MIDI
. It sends note on & velocity, note off, and program changes based on various inputs. It determines valid notes from the gate signal
or a change in input CV. Tracking a changing CV creates some great MIDI
glissindos. The display shows program change and note velocity.
Divider &
Pseudo-Sequencer (rev0.3).DJB.bas
This program takes a clock input and provides four clock outputs, each with
a unique divisor (default is /4, /5, /6, & /7 and can be easily changed). It will
also output a pseudo-sequence created from the in- x's multiplied by the clock/x's. Start or
stop will increase the pseudo-sequence length. The pseudo-sequence is also sent to
MIDI out. MIDI
in or IN 1-4 set program changes.
Dual J-K
(rev0.1).DJB.bas
A simple dual j-k flip flop for logical combinations of gates and control
signals. It has Q-1 and Q-0 outputs with common clock, set, and reset.
Expressionmate
(rev0.1).DJB.bas
This program converts the Kurzweil Expressionmate MIDI data to CV. It
includes a MIDI
command parser and supports running status.
Four
Stage Quantizing Sample & Hold (rev0.1).DJB.bas
This program implements a single channel quantized sample
& hold followed by a multi-stage shift register. The input is sampled and quantized on each clock.
The output is also shifted through a three stage shift register for a total of four
outputs.
Hold All Notes (rev0.0).DJB.bas
This program passes through MIDI note depressions but not MIDI note
releases. Stop sends all the MIDI note releases. This program is used with my
MOTM-650 to create some wild arpeggiation sequences.
Kurz
PC-2 (rev0.1).DJB.bas
This program interfaces to the Kurzweil ribbon PC-2 to provide a 0 to 10 volt output with a gate and trigger. The output returns to 5 volts with no
ribbon contact. The display indicates the output voltage. The SpeakJet says "ouch" on
first contact.
Lights
(rev0.1).DJB.bas
OK - it had to be done. This program does nothing more than makes nifty patterns in the LEDs. Make your PSIM look like a PDP-8!
Midiclock
(rev0.0).DJB.bas
This is a program that will extract a MIDI clock and generate a 5 volt clock. It
also generates a start and stop pulse and can be used to control my SuperSequencer
program. The LCD displays the Beats Per Minute tempo. Here's a sample.
Midi Monitor
(rev0.2).DJB.bas
This is a MIDI data monitor that speaks the received midi data. I needed a midi monitor to verify what codes were sent with a controller so I just did this program
to listen to them. Careful, you can queue up a lot of data!
Midi Parser
(alpha+).DJB.bas
This program contains a complete MIDI
parser with running status, real time status, and MIDI
channel/omni mode. It is partially untested as I don't yet have ways to generate all of the various MIDI
strings. Please provide feedback if you use or test any portion of this program.
Midi
Transformer (rev0.2).DJB.bas
This program parses a midi input stream and processes it. A positive
pitchbend will set invert mode (e.g. reverse the keyboard so high notes are lows and visa
versa). A negative pitchbend resets normal Midi mode. This was my prototype
program for my Midi Processor project.
Midi Transpose
(rev0.1).DJB.bas
This program will transpose MIDI notes up or down a preset amount. Use
it to retune your MIDI keyboard.
Min Max (rev0.2).DJB.bas
This program limits one of two CV inputs as selected by Aux to between two other
voltages as determined by IN-1 and IN-2 (e.g. min & max). Three additional outputs
include symmetrical around +5 volts, minimum clamped to 0 volts, and maximum clamped to +10 volts.
MOTM730
(rev0.2).DJB.bas
This program takes a clock input and divides it by selectable integer values.
It is used with my PAiA MIDI2CV to provide 8 additional outputs. The PAiA
outputs are CLOCK/1 to CLOCK/8. The PSIM outputs are CLOCK/9, CLOCK/10, CLOCK/N,
and STEP (4ths, 5ths, or octaves).
MOTM-730
self clocked (rev0.2).DJB.bas
This program divides a built-in LFO clock by selectable integer values. It
is used with my PAiA MIDI2CV to provide 8 additional outputs. The PAiA
outputs are CLOCK/1 to CLOCK/8. The PSIM outputs are CLOCK/9, CLOCK/10, CLOCK/N,
and STEP (4ths, 5ths, or octaves).
Multi Phase LFO
(rev0.31).DJB.bas
This program implements a 0.3 to 4 Hz LFO. It is selectable for sine, pulse,
triangle, ramp, or saw outputs. It provides CV frequency and pulse width
control. It provides three outputs at 120 degrees and a fourth 0 - 360 variable phase
output. The display indicates waveform, duty cycle, and variable phase.
PSIM
Joystick Generator (rev0.0).DJB.bas
This program generates four outputs from a joystick which indicate whether the
position is in one of the four corners, one of the four sides, in the center, or
along the edges. In-3 controls the proportion between the edge and the
center. The LCD displays vertical bar indicators for each output. A companion CVS Joystick Generator program
generates the eight edge outputs.
PSIM Template
(rev0.66).DJB.bas
This is a previous template that is here for reference only. It drove the SpeakJet
without a TTS256 and contains SpeakJet phrase table lookup routines that are useful for
a Speakjet.
PSIM-CVS-CVS4 template
(rev1.3).DJB.bas
This is the combination CVS (4 and 8 channel) and PSIM code template that I use as the foundation for new
programs. Push and Pop commands removed for compatibility with IDE version
8.0.1.3. Support includes:
All hardware initialization
MIDI in and out interrupt drivers
Hex TTS256/SpeakJet output and drivers (PSIM configuration)
1 mS interrupt timestamp
4 sample averaged analog input drivers (polled and interrupt)
Aux rising edge interrupt detect for detecting trigger pulses
Digital input rising edge interrupt detect for pulses >1 mS
2 line x 8 character (PSIM configuration) or 2 line x 16 character (CVS
configuration) LCD display
Programmable 0, 5, and 10 volt reference selection (CVS configuration)
Quantizer
(rev0.1).DJB.bas
This program is an adaptation of "basicqu2.bas". I modified the
quantization algorithm to one that I prefer.
RS232
Speakjet (rev0.4).DJB.bas
This program allows the PC to talk to the SpeakJet through the PSIM. This
enables the PhraseALator program to talk directly to the SpeakJet. It uses the MIDI
in as the serial input with an adapter to connect to a DB-9 serial cable.
SC-7
Control (rev0.0).DJB.bas
This program provides controls for the Roland SC-7 Sound Canvas. MIDI in
is sent to MIDI out. In-1 selects the family, In-2 selects the voice, and In-3
selects octave transpose. Family and voice are displayed on the LCD while transpose is indicated by the
OUT leds. Program change is sent on the last-used MIDI channel.
Speakjet
Allophone Babbler (rev0.2).DJB.bas
This silly little program outputs speakjet allophones on a clock input. Uses
CV, range, and offset inputs to select the allophone. This was inspired by a program
that Brice Hornback wrote.
Speakjet
Noises (rev0.1).DJB.bas
This program sends various codes in the range of 200 to 245 to the SpeakJet with
random delays of less than 711 mS.
Speakjet Phrase
Sayer (rev0.3).DJB.bas
This program sends a phrase to the SpeakJet. One of five preset phrases is
selected via CV control.
Speakjet Voltmeter
(rev0.2).DJB.bas
This program speaks the four voltages at IN-1 thru IN-4 to two decimal
points of accuracy (e.g. '3 point 4 7'). I used it to verify the calibration of my four CV
controls.
Touch Text (rev0.0).DJB.bas
This program is a combination of my three latest additions: PSIM display, TTS256,
and the Kurzweil PC-2 ribbon. This program uses the ribbon to select one of six
phrases which is shown on the display. It will speak the phrase upon
releasing contact with the ribbon.
Trig-Gate-CV Delay
(rev0.1).DJB.bas
This program samples trigger, gate, and CV and delays each signal by a
variable delay. The default maximum delay is set for three seconds. It is useful for
creating keyboard note delays with additional VCOs.
TTS Phrase Sayer (rev0.0).DJB.bas
This program sends a phrase to the SpeakJet. One of five preset phrases is selected
via CV control. It is an updated version of the SpeakJet Phrase Sayer to use the
capabilities of the TTS256.
Calibration Programs
Here are some specific PSIM calibration programs:
PSIM
IO Test (rev0.1).DJB.bas
This program displays the decimal input values of the four analog inputs in the
BasicMicro IDE when the Start switch is pressed. This program also outputs
a calibrated "A440" 0.75 volt output. The Stop switch increments
the octave from 0.75 volts to 9.75 volts. This program is useful to
determine the accuracy and calibration of the inputs and to calibrate
the 10.666 DAC voltage against a known A440 reference standard.
PSIM
Display Input Values (rev0.1).DJB.bas
This program displays the decimal input values of the four analog inputs on the
LCD. Two inputs are displayed at a time. The Start switch toggles
between inputs IN1 & IN2 and IN3 & IN4. This program is useful to
determine the input accuracy and calibration of input controls.