Windows Interface: Overall DesignBy Mark David [21030170+]
Starting at the Chroma end:
The design supports up to 4 Chromas. If you want to connect fewer than 4, just leave off the connectors and associated logic (this is shown explicitly in the Circuit design) for the extra Chromas. The Chromas connect to the Circuit via DB-25 pass-through cables. I made the circuit connector a male plug, so that I don't accidentally use the Chroma-to-expander cable, which is cross-wired.
The +5V pin (#5) from Chroma 0 is the power source for the circuit. I was nervous about doing this at first, but it seems to work just fine.
Only Chroma 0 transmits performance information back to the computer. This is a design compromise, but I think it will be OK. For a full explanation of my reasoning, see the FAQS.
The Chroma addressing logic controls which Chromas are sent the commands originating from the computer. I have used a byte command which the Chroma language doesn't recognize to change the Chromas addressed. The byte command is specified thus: 6+cccc 6 is an unused command. cccc is a bitmap representing which Chromas any subsequent byte commands will address, from highest to lowest. E.g., the command 63 specifies that all subsequent commands (up until the next 6 command) will be addressed to Chromas 0 and 1 only. For my reasoning on doing it this way, see the FAQS. The Chroma addressing logic latches cccc and ANDs it, Chroma by Chroma with a data available signal to the Chroma's !XOFULL pin.
The UART converts parallel bytes from Chroma 0 to serial and send them to the RS232 transmitter. It also converts serial bytes from the RS232 receiver to parallel, and presents them to the Chromas.
The RS232 transmitter/receiver is necessary to convert TTL +5V/0V logic to RS232 -12V/+12V logic.
On the computer end, the Server/Object library will deal with the serial port. There will be methods to address the Chromas and send commands to the (previously addressed) Chromas. There will be properties which get the current status of the Chromas' programs, parameters, etc. There will be events which trigger on performance commands received from Chroma 0. There will be methods for saving patches/programs and collections of same in files. There will be methods for recording time-stamped performance commands to files; for mixing multiple performances together; for playing back performances to Chromas.
The Client will provide an intuitive and visual interface to all the Server functions. I will develop my own client; anyone is, of course, welcome to develop their own from the Server Object Library.