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

 

DJB PSIM Display

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.

 

DJB PSIM Programs

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 ***
IDE 8.0.1.3 beta software removed Push and Pop as valid commands.  Many of my programs use these commands to save local variables and will generate multiple confusing compiler errors.
  I am slowly changing my programs to remove these commands.  IDE 8.0.1.0 software operates correctly with the Push and Pop commands.

 

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.

 

back