# MIDIbox

MIDIbox ist ein nicht-kommerzielles Open-Source-Projekt für MIDI-Hard- und Software. Hauptprojekt ist eine Do-it-yourself-Plattform, die auf der PIC-Mikrocontroller-Familie sowie auf Arm-Cortex-M3-Mikrocontrollern aufbaut und es ermöglicht, eigene MIDI-Controller, Sequenzer und Synthesizer zu bauen.

## Geschichte

Die MIDIbox-Hardware-Plattform (MBHP) basiert auf Thorsten Kloses Arbeit mit MIDI-Controllern und stellt eine standardisierte Umgebung von wiederverwertbaren und austauschbaren Modulen dar. Kurz nachdem die ersten Module veröffentlicht wurden, hat sich aus einer kleinen Anzahl von Enthusiasten eine stetig wachsende Open-Source-Entwicklercommunity gebildet.

## Die MIDIbox Hardware Platform (MBHP)

Die Plattform besteht aus Modulen, die auf kleinen unkomplizierten Schaltungen basieren, um auch Anfängern den Einstieg zu erleichtern, die zu kompletten Aufbauten verbunden werden können. Alle Leiterkarten sind technisch dokumentiert und können als Single-Layer-PCB hergestellt werden. Prototypen-Boards können mit einem Freeware-CAD-Programm entworfen werden. Fast alle Komponenten sind in through-hole-Technik ausgeführt, um die händische Montage zu erleichtern. Als Microcontroller kommen insbesondere PIC18F452, PIC16F88, PIC18F4620 und PIC18F4685, sowie STM32F103RE und LPC1769 zum Einsatz.
Das MIDIbox-Projekt betreibt ein eigenes Open-Source-Betriebssystem: MIOS (MIDIbox Operating System), das für hohe Geschwindigkeit und Genauigkeit in PIC-Assemblersprache optimiert ist. Es gibt einen C-Wrapper-Layer, um leichter programmieren zu können. MIOS ist so konzipiert und dokumentiert, dass damit einfache Neukonfigurationen, Anpassungen und Erweiterungen auch durch weniger versierte Bastler vorgenommen werden können.

## Das MIDIbox Operating System (MIOS)

Das MIDIbox Operating System (MIOS) wurde entwickelt, um die Gestaltung von flexiblen MIDI-Controller-Applikationen zu ermöglichen. MIOS hält sich an die Idee einer nicht-kommerziellen, offenen Plattform, was als grundlegend erachtet wird für den Austausch von Ideen und persönlichen Anpassungen, die nicht mit handelsüblichen Controllern möglich wäre.
Die meisten Controller, die von der Community gebaut werden, bestehen auf bereits dokumentierten Entwürfen und beginnen ihr Leben mit dem Feature-Set, das von der bestehenden Firmware zur Verfügung gestellt wird. Endbenutzer können ihre Geräte mit austauschbaren Programm-Code erweitern und somit die Geräte der Host-Anwendung, Synthesizern oder anderen MIDI-Geräten anpassen. Auch ist eine individuelle Anpassung möglich, die den eigenen, bevorzugten Arbeitsablauf unterstützt.
Quellcode von Anwendungen, Modulschaltpläne und PCB-Layouts stehen kostenlos für die nicht-kommerzielle Verwendung als Vorlagen für Änderungen und Verbesserungen zur Verfügung. Somit stellt MIOS und die Hardware-Plattform einen leichten Einstieg in das Microcontroller-Entwicklungs-Hobby dar, um Anwendungen außerhalb der Bereiche des kommerziellen MIDI-Mainstream-Markts zu ermöglichen.
MIOS wurde bis Version 1.8 unter der GNU GPL lizenziert. Spätere Versionen erfordern jetzt Thorsten Kloses Erlaubnis für den gewerblichen Einsatz.
Das Betriebssystem besteht aus einem Kernel, der dem Benutzer Hooks an Hard- und Software-Ereignissen zur Verfügung stellt, sowie Funktionen für die Interaktion mit Modulen wie z. B. Audio-Plugins.
Ein Core-Modul kann folgendes mit einem PIC18F452 Mikrocontroller verarbeiten:
* bis zu 128 digitale Eingänge
* bis zu 128 digitale Ausgänge
* bis zu 64 analoge Eingänge
* Matrixanzeigen und grafische LCDs
* bis zu 8 Banksticks (I²C EEPROMs)
* einen MIDI-In und einen MIDI-Out oder einen seriellen RS-232-COM-Port
Background-Treiber stehen für die folgenden Steuerungsaufgaben zur Verfügung:
* MIDI I/O-Verarbeitung
* Bootstrap loader
* Analog-Wandlung für bis zu 64 Knöpfe, Fader oder andere analoge Quellen mit einer Auflösung von 10 Bit
* Motor-Handling für bis zu 8 motorisierte Fader mit einer Auflösung von 10 Bit
* Handling von bis zu 64 Drehreglern (Inkrementalgeber)
* Handling von bis zu 128 Tasten, Touch-Sensoren oder ähnlichen digitalen Eingabegeräten
* Handling von bis zu 128 LEDs, Relais, Digital-Analog-Wandler oder ähnlichen Ausgabegeräten.
* Im Multiplexbetrieb kann eine fast unbegrenzte Anzahl von LEDs, LED-Ringen und LED-Ziffern genutzt werden
* Lesen/Schreiben von/nach EEPROM, Flash, und Bankstick
* PIC18F Core Module Verbindung über MIDIbox Link
Das komplette Betriebssystem ist in Assemblersprache geschrieben und auf Geschwindigkeit optimiert. MIOS nutzt derzeit 8kb Programmspeicher und 640 Byte RAM. Dadurch sind nur 75 μs (Mikrosekunden) erforderlich, um 128 digitale Input-Pins zu lesen und 128 Output-Pins zu schreiben. 16 Drehregler sind innerhalb von 100 μs aktualisiert. Analoge Eingänge werden im Hintergrund alle 200 μs aktualisiert; Veränderungen, die ein definierbares Minimum überschreiten, lösen einen Hook aus.
Bis zu 256 MIDI-Events können Funktionen auslösen; Die Verarbeitung der Event-Liste erfordert etwa 300 μS. MIDI-Events können auch von einer Benutzer-Routine für das SysEx-Parsen oder ähnlichen Jobs verarbeitet werden. Ein User-Timer ist für Zeit-basierenden Code vorhanden. Support für andere Hochsprachen neben C ist möglich.

## MIOS Hardware

MIOS ist ein dediziertes Betriebssystem für den Mikrocontroller PIC18F452. Dieser PIC ist Pin-kompatibel mit dem PIC16F877, der in früheren MIDIbox Projekten verwendet wurde. So ist es abwärtskompatibel mit älteren MIDIbox-Core-Modulen.
Der PIC18F452 besitzt mehr internen Flash, mehr internen RAM, einige neue Anweisungen und eine bessere System-Architektur. Er ist in den meisten Ländern für den gleichen Preis wie der PIC16F877 erhältlich.
Für das neuere MIOS32 steht ein Core-Modul auf Basis des STM32F103RE Arm Cortex-M3 zur Verfügung. Dieser 32-Bit-Controller ist deutlich schneller als seine PIC-Vorgänger und verfügt über eine große Zahl integrierter Schnittstellen. Das CORE32-Modul ist mit den bereits vorhandenen Modulen vollständig kompatibel. Der Nachfolger des CORE32-Modul ist das LPC17-Modul mit einem 120MHz LPC1769 Arm Cortex-M3.

## Komplette Lösungen

Es stehen zahlreiche komplett dokumentierte Projekte zur Verfügung sowie eine große Anzahl von Benutzer-Projekten der Community. Die offiziellen Projekte sind wie folgt:
* MIDIbox SEQ V4+: 16 Track Live-Step-Sequenzer und Morph-Arpeggiator
* MIDIbox SID V2: Hardware-MIDI-Synthesizer, basierend auf dem MOS Technology SID Soundchip, der mit dem Commodore 64/128 ausgeliefert wurde.
* MIDIbox FM V1: Hardware-Synthesizer auf Basis des Yamaha YMF262 Soundchips (auch als OPL3 bekannt), zur Erzeugung von FM Sounds aus Sound-Blaster-kompatiblen Soundkarten der früheren 90er Jahre.
* MIDI Merger V1: Führt zwei separate MIDI-Eingänge auf einen Ausgang
* MIDI Router V1: Routen von verschiedenen MIDIboxen auf einem einzigen MIDI-Port
* MIDI-Prozessor: Bietet grundlegende Funktionen zum Senden und Empfangen von MIDI-Events
* MIDIbox CV: Stellt CV- und Gate-Ausgänge, um spannungsgesteuerte Geräte wie z. B. analoge modulare Synthesizer anzusteuern.
* MIDIbox 64: Vollwertiger 64-Kanal MIDI-Controller
* MIDIbox 64E V2: Erweiterte Version der MIDIbox 64
* MIDIO128 V2: Die MIDIO128 Schnittstelle wird verwendet, um bis zu 128 digitale Output-Pins anzusteuern, und auf bis zu 128 digitale Eingangs-Pins per MIDI zu reagieren
* MIDIbox LC V1: Alternative zu der MIDIbox 64/64E
* sammichSID: Komplettbausatz der Communitymitglieder Wilba und nILS für eine Midibox mit 2 SIDs
* sammichFM: Komplettbausatz der Communitymitglieder Wilba und nILS für eine Midibox mit YMF262 (OPL3) Soundchip