MIDIbox SID Control Surface Step B
WARNING: This tutorial describes features of MIDIbox SID V1 - they are partly handled on a different way in MIDIbox SID V2. More details can be found in the MBSID V2 User Manual.
Step B of MIDIbox SID allows to access three additional SID modules from a single control unit. Although every SID module still needs its own core, this solution has some advantages compared to the parallel MIDI wiring of multiple devices:
- all parameters can be accessed without using a computer
- all Slave SIDs can share a BankStick with the Master SID (planned: up to 8 BankSticks)
- realtime parameter changes can be easily routed to multiple SIDs at once - an important feature for amazing stereo effects and fat unisono sounds
- additional play modes like Super-Poly, Super-Arpeggiator, Split, Layer, Unisono are possible and planned for future extensions.
Before discussing the hardware some words to the realization: messages to the slave SIDs are transported over the common MIDI interface of the core module. Every slave requires an unique device ID in the MIDI network so that the master is able to address every SID separately. The device ID is independent from the MIDI channel to which the SID has been assigned in order to allow a flexible setup. For example, if the same channel is selected for all SIDs, different sounds - played with a single keyboard - can be distributed across the stereo panorama. If every SID uses its own channel, more complex tunes can be played (Note: the PIC18F implementation of MIDIbox SID allows to split the voices over different keyboard zones, so that up to 12 voices can be played and layered individually.).
As already mentioned before, the Master shares the sound patches stored in the BankStick with the slaves. This reduces the costs and allows the use of the same setup without copying the BankStick content from one SID to the other.
The slave modules should not be stuffed with a BankStick.
Incoming MIDI events like Notes and CC's will be forwarded by the integrated MIDI merger to the slaves when the "Link" mode is enabled. Only unidirectional transfers are possible, this means, the master cannot fetch data from a slave and therefore never knows the exact state of it. However, this limitation can be disregarded so long as it is ensured that the slave behaves deterministic, and this is fortunately the case in this simple system. A bidirectional connection (either Point-to-Point, bus, package oriented or a circular chain) would require additional hardware and a sophisticated protocol which wouldn't be really target-oriented. There are only three imperfections: the master never knows if a slave is online (the user has to ensure this) and - a more software related problem - if the master receives CCs and SysEx streams which addresses the slaves, he just forwards these events and doesn't analyze the content. This can lead to an inconsistent data base if the user modifies the same sound parameter with a computer or MIDI controller, and with the MIDIbox SID control surface at the same time. This problem doesn't occur on events which addresses the master itself. A fix for this problem is not planned due to the high effort. In reality it doesn't really hurt!
The third limitation has a direct impact on your MIDI setup: since the MIDI merger of the core module forwards every incoming event to the MIDI Out for the slaves, also your computer will receive (back) these events. You have to ensure that your software doesn't return the messages likewise in order to avoid an endless feedback loop. Note that this problem doesn't occur when the "Link" mode is disabled.
Yes, it is possible to use stepB without any slave SID or with one or two... the maximum number of supported slave SIDs is three.
The master core has to be stuffed with a PIC18F452, the appr. firmware is available at the MIOS download page. The slave cores can either be stuffed with a PIC18F452 or PIC16F877 - so, if you still own some old PIC16F derivatives, this is the chance to reuse them!
The MIDI interfaces of master and slave modules can be connected via port J11 of the core module. With this direct digital connection an optocoupler is not required on the slave site (-> Only the MIDI In port of the master module requires an optocoupler).
This diagram shows the required MIDI connections.
A single power supply can be used for all modules, although the power input of the core is rated to 9V. The whole system (4 core modules and 4 SID modules) draws about 600 mA. Note that especially the 7805 of the master core module can get very hot when a backlit LCD is connected. This can lead to problems if the SID module is stuffed with a 6581, as this chip needs 12V for working and therefore at least 15V at the power input (before the 7812) - the 7805 will convert the 10V voltage difference into heat and this can lead to trouble. A simple workaround is the use of a 7809, connected behind the rectifier of the core module. Since the 78xx needs DC, it's recommended to connect this voltage regulator between C9 (the 2200uF cap behind the rectifier) of the SID module and C5 of the core module like shown here.
The best solution is the use of the original C64 power supply unit since it delivers 5V DC for the core and additional 9V for the SID module - a schematic can be found here.
Of course, it's also possible to create a single PCB for the whole circuit. See also the questions from Nebula in this forum article.
The audio outputs of all SIDs can either be cascaded (Audio Out SID1->Audio In SID2->Audio Out SID2->...) or connected in parallel via 10k resistors in order to get a 2-channel signal from 4 SID channels. Note that both methods are lossy. An active mixer, realized with operating amplifiers (OPs) would be better, but requires a biased voltage (+/- 9V or more). The best and most flexible solution is the use 4 separate channel strips on a mixer or soundcard for every SID, because this allows you to change the position of the sound source across the stereo panarama and to lead every signal to a dedicated Fx unit.
The multi SID solution definitely requires at least the minimal control unit which has been introduced here. 7 additional buttons and LEDs are required for a perfect interaction with the SIDs, an example configuration can be found in this diagram: 2x20_enc_multi.pdf. Note that the DIN and DOUT pinning can be changed in the MIOS application (see main.asm header) - in order to save a DOUTX1 module, it's also possible to use the free J5 to drive the LEDs, see this schematic. In this case the SR ID has to be changed from 1 to 0 in cs_menu_io_tables.inc.
Preparation of PIC18F cores
Step by step:
- it's assumed that the bootstrap loader already exists in the PIC18F, that the master has MIOS ID 0x00, and the slaves MIOS ID 0x01, 0x02 and 0x03 - if you've forgotten to set the correct ID, use the change_id application which can be found in the MIOS download section to change the ID header. In this case you have to ensure that only one slave is connected directly to tyour PC, otherwise all core modules which received this application will have the same ID again!
- upload MIOS V1.8 or higher into the master core module like described at the MIOS bootstrap page. If a newer MIOS version is available, use the latest one!
- upload the SID application into the master module. There are several prepared .hex files in the SID package, use either "setup_6581_with_cs.hex" or "setup_8580_with_cs.hex", depending on the SID which is stuffed on the SID module
- test the master before continuing with the slaves! You can use the virtual keyboard of MIDI-Ox to play some notes. Note that MIDI Channel #1 is selected by default, but if a BankStick is connected, the channel could be different depending on the last saved setup. The MIDI channel will be displayed on LCD, so please check it!
- unplug the master PIC, and put a PIC used for the slave core into the master core module.
- install MIOS for the first slave with MIOS device ID 0x01
- upload the SID application into the slave module. The SID package comes with already prepared .hex files for the slaves
- do the same for the other slaves (ID 0x02 and 0x03)
- test the slaves on the master module first (they are all assigned to MIDI channel #1 by default).
- now plug the PICs into the core of the slave. Enable MIDIbox Link on the core (if you haven't connected a Link button + LED, do it now!), and play a note again to check if some sound is coming out of the slave SID.
There is also a "through master" programming method for the slave SIDs, but it isn't very newbie friendly, and therefore not recommended here! It's described at the bottom of this page.
Preparation of PIC16F slaves
If PIC16F slaves are connected, you have to change their device ID by hand. The first slave requires ID 1, the second slave ID 2, the third slave ID 3. This step can be done with MIDI-Ox, just connect only one core with your PC and send following SysEx string: F0 00 00 7E 46 [old device-number] 0D 03 00 [new device-number] F7.
Slave 1: F0 00 00 7E 46 00 0D 03 00 01 F7
Slave 2: F0 00 00 7E 46 00 0D 03 00 02 F7
Slave 3: F0 00 00 7E 46 00 0D 03 00 03 F7
See the Introduction of the control unit how to navigate through the menus. Following table lists the function of the additional buttons and LEDs.
|| Use these buttons to select the SID(s).
They behave like "radio buttons" if only one is pressed so that you can quickly change between the SID setups. It's also possible to select multiple SIDs by holding one of the SID buttons and pushing the additional SID buttons - in this case every parameter change will be sent not only to one, but to all selected SIDs.
Here a video
| Link (*)
|| This button enables the MIDI merger, thus establishes the connection to the slave SIDs. Note that this function is switched off after startup. You can change this behaviour by setting the< #define CS_MENU_DEFAULT_LINK to 1 in the main.asm of the firmware.
| CC (*)
|| This function activates the CC mode. If enabled, manual parameter changes from the control unit will be sent out as CC MIDI events over the MIDI Out port. If this port is connected to your computer, you are able to record these events with your recording software in order to automate parameter changes (e.g filter sweeps or portamento slides)
| Edit (*)
|| If the edit mode is enabled, all parameter changes will be saved automatically into the current selected patch before you select another patch. The LED flashes slowly if there is something to save in order to warn you.
(*) Please note: in MIDIbox SID V2, these buttons got a new/modified function! The LINK button has the purpose of a SHIFT button (the MIDI link is obsolete, since MIDIbox Link has been replaced by MBNet). In addition, it displays a special configuration page, which for example allows you to switch between left and right SID channel. The CC button is used for "Page Up" (increments OSC/LFO/ENV/MOD/TRG/KNB), and the Edit button is used for "Page Down" (decrements OSC/LFO/ENV/MOD/TRG/KNB). SHIFT+CC and SHIFT+EDIT still switch the CC/Edit function like before (means: the two LED labels are still valid).
This changed behaviour should be considered when labling a new front panel
Wanna tweak more?
...then continue here...
Last update: 2017-02-26
Copyright © 1998-2017, Thorsten Klose. All rights reserved.