<Display> |
two midi controlled large 4-digit displays by Godfried-Willem Raes 2014 |
Since our music theatre composition 'A Book of Moves' we had a simple display device in use to communicate with our performers. This display -many versions were built- invariable had large 7-segment displays. There were two or three characters. However with printer ports becoming obsolete on modern computers, these displays became obsolete as well. The need for an easy and non intrusive way to cue performers however remained, even in the context of our Namuda performances with the robot orchestra.
Therefore we decided to design a new display device, this time fully midi controllable. In our design we did not make use of any readily available 7-segment decoder chips, as these do not offer the possibility to adres the segments in an arbitrary way. Thus we had to write the complete decoder in the firmware of the microcontrollers. We used four PIC microcontrollers and implemented an elementary communication mechanism between them. It will be clear from reading the circuit diagram provided below. The display module mounts on a regular microphone stand but can also be suspended. It can be used in combination with our polymetronome as it shares the same midi-channel and has no note overlaps. Possible and easy to implement applications include:
- stopwatch
- clock
- countdown for musicians
- hexadecimal counter
- bar-counter
- parameter feedback
- cueing device for musicians and dancers
- feedback device for musicians and dancers
- 5-bit bar-graph like display
- midi debug aid
The new design has 4 character-digits and the midi implementation is as follows:Midi-channel: 0
The utmost left 7-segment display responds to midi note 1. Thus, for the four characters, we use notes 1,2,3 and 4.
A Note-off command blanks the corresponding display character.
The note velocity byte with note-on commands is used to control what the displays will show. This is only the case in NUM and ASCI modes. In event counter mode, this can be used to set a preset counter value.
Program change:
- 0 = plain numeric with hexadecimal extensions [NUM]
- 1= simplified ASCII character set [ASCI], both uppercase and lowercase ascii codes can be sent.
- 2= event counter mode. Counter is incremented with controller 27, reset with controller 26. The controller value has no meaning. If you want to start from a preset value, you should send four note-on commands with the velocity byte set to the required preset value for that digit.
- 3= seconds counter. The counter starts on reception of this program change command. The value will increment every second. The count is decimal. In this mode, controller 28 is implemented (with any value) to temporary halt the seconds-counter. To restart it from the reading is was at on being halted, controller 29 (with any value) should be send. The controllers are one-shots.
- 4= stopwatch mode. The stopwatch starts on reception of this program change command. It counts in minutes and seconds MM.SS. In this mode, controller 28 is implemented (with any value) to temporary halt the stopwatch. To restart it from the reading is was at on being halted, controller 29 (with any value) should be send. The controllers are one-shots.
- 5= analog 5-bit display mode. Any note-on command for notes 1,2,3,4 can be sent with the required velo value. Velo range is 0-33.
In NUM mode, the displays will respond to velocity values as follows:
- value 0 displays "0"
- value 1 displays "1"
- value 2 displays "2"
- value 3 displays "3"
- etc.
- value 10 displays "A"
- value 11 displays "b"
- value 12 displays "C"
- value 13 displays "d"
- value 14 displays "E"
- value 15 displays "F"
- value 16: blanks the display
if bit 5 in the velocity byte is set, the dot will be on, otherwize always off.
In ASCII mode, the displays will translate ascii codes as follows:
- value 7 beeps the buzzer (for note 4 only)
- other values < 48: blank the display
- value 49-57: "0" to "9"
- value 59-93: "A" to "F" (for hexadecimal uses)
- value 65 to 90: "a to z"
- value 91 to 96: switch dot ON
- value 97-122: "a to z"
- value > 122: blank display
To allow users to freely program the segments of the display, we also implemented the note-pressure command, both in the NUM and ASCI modes of operation.
The individual bits of the pressure value byte control each individual segment of any display:
- bit 6: segment a
- bit 5: segment b
- bit 4: segment c
- bit 3: segment d
- bit 2: segment e
- bit 1: segment f
- bit 0: segment g
The circuit looks like:
The single sided PC board (200% scale) for this circuit is: The display panel makes use of four Microchip 18F2525 microprocessors. The firmware for the microcontroller is available for download.
This is a picture of the first assembled circuit board: After building up this board, we changed the PC board layout somewhat. So a second display, version 2 was build as well. It does not have any long wire bridges. Avoiding these altogether would entail the design of a double sided PC-board, virtually impossible to do with handdrawn and etched boards. Here is the improved design:
This is a picture of the second display board:
The display boards are both up and running, integrated in the Logos Robot Orchestra since july 31th of 2014. They are also integrated into our GMT control software for the orchestra.
Godfried-Willem Raes
Logbook:
References:
Datasheet Kingbright displays (Common anode types)
Datasheet BS170 N-channel mosfet
Power supply unit: XP Power, model ECL15US12-E, 12V 1.25A. Primary: 100-240V 0.6A, 50-60Hz. http://www.xppower.com
Firmware source code: (needs the Proton compiler)
Hexdumps: (these can be uploaded right into the PIC microcontrollers)
Last update: 2015-01-10