HARDWAREMONTAGES ★ MIDI FÜR DEN SCHNEIDER (CPC AMSTRAD INTERNATIONAL) ★

MIDI für den Schneider (CPC Amstrad International)Hardware Montages
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Nachdem der C64 lange Zeit marktbeherrschend in Bezug auf Musikcomputer gewesen war, werden jetzt auch Computer wie z.B. Atari ST und Amiga midifahig. CPC-Besitzer mußten aber lange auf das EMR MIDI-Interface warten. Jetzt ist es da, aber man muß ca. 500,— DM für das Interface (incl. Software) auf den Ladentisch legen. Der Selbstbau eines solchen Interfaces bietet hier die Möglichkeit, die gleiche Leistung für ein Viertel des Ladenpreises zu bekommen.

Das Interface wird in diesem Falle nicht in der Form einer Karte für den ECB-Bus, sondern als eigenständiges Gerät zum Anschluß an den Expansionsport des 464, 664 und 6128 aufgebaut. Das MIDI-Interface ist im Grunde nur eine spezialisierte V-24-Schnittstelle, das heißt, daß die Schaltung mit dem selben IC SAB8251 arbeitet, das schon in Schneiderware #3 als asynchrone und serielle Schnittstelle benutzt wurde. Der gesamte Aufbau gliedert sich in zwei Teile: Interface und Timer.

Der MIDI-Standard

Für alle, die nicht wissen sollten was MIDI ist, will ich es kurz erklären:

MIDI ist ein Datenübertragungssystem für elektronische Musikinstrumente, das von führenden Herstellern dieser Instrumente wie Yamaha, Roland, Korg etc. genormt wurde. Mit diesem System ist es möglich, z.B. mit einem Computer und geeigneter Software eine große Anzahl elektronischer Musikinstrumente zu arrangieren und damit zu komponieren. Der MIDI-Standard basiert auf einer asynchronen Übertragung serieller Daten mit einer Baudrate von 31.25 kBaud. Das Datenformat hierzu zeigt Bild 1. Die Sende- bzw. Empfangsdaten gliedern sich zum einen in Befehlsbytes und zum anderen in Datenbytes. Befehlsworte werden durch ein gesetztes siebtes Bit gekennzeichnet. Die Channelinformation-Daten -das sind die Befehle, die alle MIDI-Keyboards gemeinsam haben (sollten) — fordern auf das Befehlsbyte jeweils entweder ein oder zwei Datenbytes.

Weiterhin muß nicht nur übermittelt werden, ob es sich um ein Befehlswort handelt, sondern auch, welcher MIDI-Kanal benutzt wird. MIDI unterstützt bis zu 16 verschiedene Kanäle zur Datenübertragung. Somit kann man jedem angeschlossenen MIDI-Gerät nur die Daten zuordnen, die für das Gerät gedacht sind. Der MIDI-Kanal wird durch die unteren vier Bit des Befehlsbytes bestimmt. Eine Auflistung der wichtigsten Befehle zeigt Tabelle 1.

Tabelle der MIDI-DATEN
&9X NOTE ANschaltet Note ein
3 Bytes; 1001nnnn
0kkkkkkk / 0vvvvvvv
nnnn:Kanalnummer
0kkkkkkk: Tastenn ununer
mittleres "C"=60
0vvvvvvv Tastenanschlag
Ohne Anschlagsdynamik =64
&BX PARAMETERaendert Parameter
3 Bytes: 1011nnnn
0ccccccc / 0vvvvvvv
0ccccccc: Parameternummer
0vvvvvvv: Neuer Wert
&8X NOTE AUSschaltet Note aus
3 Bytes: 1000nnnn
0kkkkkkk / 0vvvvvvv
&CX PROGRAMMVECHSEL2 Bytes; 1100nnnn
0ppppppp: Programmnummer
&AX AFTEPTOUCHnach Druecken der Taste
3 Bytes 1010nnnn
0kkkkkkk / 0vvvvvvv
0vvvvvvv: Wert des Tastendrucks
&EX PITCH WHEEL3 Bytes: 1101nnnn
01111111, 0mmmmmmm
14-Bit-Wert, zuerst LSB
Mittelwert 0,64
Maximum 127, 127
Minimum 0, 0

Tabelle 1: Auflistung der MIDI-Befehle


Tabelle 2: Programmierung des 8251

Der Aufbau

Der Aufbau teilt sich, wie oben gesagt, in zwei Teile. Das Interface selbst ist für zeitunkritische Anwendungen gedacht. Zeitunkritische Anwendungen sind z.B. Klangeditoren. Man kann jedoch nur Sequenzerprogramme laufen lassen, wenn man die Timerkarte hinzuzieht. Man sollte sich also im klaren darüber sein, ob man mit dem Interface professionell arbeiten will, oder ob man nur ein wenig experimentieren möchte. Der Timer liefert zusätzlich ein Taktsignal, das zur Synchronisation von Bandmaschinen und Drumcomputem genutzt werden kann bzw. kann ein ähnliches Taktsignal dem Interface zur Synchronisation zugeführt werden (je nach Software 24 oder 48 Impulse pro Viertelnote).

Das Interface besteht aus Adresscodierung, Resetcodierung, dem 8251, dem Baudratengenerator und den Datenleitungstreibern. Die nötige Sende- und Empfangsfrequenz wird durch Teilung des Prozessortaktes mittels IC 6 und IC 7 erzeugt. Die beiden ICs sind vom Typ 74LS93 und teilen die 4 MHz des Prozessors einmal durch 16 und durch 128. IC 1-3 büden die Adresscodierung und die Resetsteuerung (Portadressen siehe Tabelle 3). Der 74LS245 dient als Buspuffer. Je nach Programmierung kann per J1 entweder auf 500 KHz oder auf 31.25 kHz Sende- und Empfangstakt eingestellt werden. Dies dient der Kompatibilität des Interfaces zu anderen (späteren) Programmen. Bei Verwendung der 500 KHz kann man auch auf IC 7 verzichten. Der Optokoppler CNY17 sorgt bei der Verbindung mehrer Interfaces (Keyboards) für galvanische Signaltrennung, so daß keine Kurzschlüsse beim Zusammenschalten entstehen und sich auswirken können. Das Receive-Ready-Signal des 8251 wird durch IC 5 invertiert und dem Interrupteingang des CPC zugeführt, um einen Datenverlust durch Polling (ständige Abfrage des Ports) zu verhindern. Ein Problem der Intemiptsteuerung trat bei der Entwicklung des Interfaces auf. Das durch den Inverter erzeugte Interruptsignal blockierte den Computer vollständig, so daß der Einsatz eines Open-Collector-Typs nötig wurde. Bei dem »normalen« Typ entstand am INT-Eingang der Z80-CPU ein Kurzschluß mit dem Ausgang des Gate-Arrays. Schaltplan und Bestückung des Interfaces zeigen die Bilder 2 und 3.

INTERFACE PORTADRESSEN

TIMER PORTADRESSEN
AdresseRD/WRFunktionAdresseRD/WRFunktion
&F8FFWRReset&F8F4WRKommando/Zeitkonstante Kanal 0
&F8FFRD------RDZaehlerstand lesen
&F8F8WRByte senden&F8F5Kanal 1
&F8F8RDByte empfangen&F8F6Kanal 2
&F8F9WRBetriebsart/Kommando&F8F7Kanal 3
&F8F9RDFlags lesenTabelle 3: Portadressen des Interfaces und des Timers

Der Platinenaufbau

Die Layout- und Bestückungsseiten der Platine müssen bei der Selbstherstellung absolut deckungsgleich übereinander gebracht werden, damit man beim Bohren nicht aus Versehen eine Leiterbahn der anderen Seite durchbohrt. Anschließend sollte man sich Kupferhohlnieten mit 1 mm Durchmesser besorgen und alle Bohrungen durchkontaktieren. Wem das zu aufwendig ist, der kann sich auch WireWrap-IC-Fassungen besorgen, bei denen ein beidseitiges Verlöten gut möglich ist. Beim Bestücken der Platine sollte man wie immer die Reihenfolge: Brücken, Widerstände, Kondensatoren, IC-Fassungen, Dioden und übrige Halbleiter einhalten. Der Einbau in ein Gehäuse erfolgt so, daß noch Platz für die Timerplatine ist, felis sie eingebaut werden soll.

Inbetriebnahme des Interfaces

Die fertige Platine wird nach einer optischen Kontrolle an eine Stromversorgung angeschlossen, ohne daß die ICs eingesteckt sind, und nach Kurzschlüssen in der Stromversorgung untersucht. Erst dann wird die Platine ohne ICs an den Expansionsport über ein 50-poliges Flachkabel mit den entsprechenden Steckverbindern angeschlossen. (Bild 4 zeigt das Schema hierzu.) Sollte der Computer abstürzen, muß die Platine dringend nach Kurzschlüssen untersucht werden. Ansonsten kann begonnen werden, die ICs 1—7 einzustecken und erneut wird der Computer eingeschaltet. Vorsicht! Manipulationen an der Platine nur bei ausgeschaltetem Computer vornehmem! Ist soweit alles in Ordnung, wird auch IC 8 eingesetzt. Im anderen Fall müssen alle Signale nochmals überprüft werden.

Stückliste:Interface
R1,2,3,4,6 R5
C1-C9
D1
Optokoppler IC 1,2
IC 3
IC 4
IC 5
IC 6,7
IC 8
IC 9 74
3 Dinbuchsen
220 R
4k7
100 nF 1N4148
CNY 17
74 LS 00
74 LS 02
74 LS 245
74 LS 03
74 LS 93 SAB 8251
LS 14
5-pol. für Printmontage

Programmierung des Interfaces

Vor Beginn der Sendung oder des Empfangs von Daten muß der SAB 8251 mit einem Satz von Steuerworten geladen werden. Diese Steuersignale legen die gesamten Funktionseigenschaften des SAB 8251 fest und müssen unmittelbar nach einem Resetvorgang (Einschalten des Computers) folgen. Die Steuerworte teilen sich in zwei Formate auf:

— Betriebsart
— Kommando

Das Betriebsarten-Format legt Datengeschwindigkeit, Zeichenlänge und Start- und Stopbits fest (siehe Tabelle 2). Das Kommando-Format regelt die Empfangs- und Sendefreigabe. Beide Formate müssen direkt aufeinander folgen.

Anschluß und Probe

Nach Verbindung der Buchse MIDIOUT am Interface und der Buchse MIDI-IN an einem MIDI-Keyboard durch ein DIN-Kabel kann Listing 1 eingegeben und gestartet werden. Nach dem Start muß das MIDI-Keyboard für einen Moment einen C-Dreiklang ausgeben. Funktioniert dies soweit, kann man zunächst zum Punkt MIDI-RECORDER übergehen. Ansonsten ist es nötig, alle Verbindungen zu überprüfen und nach möglichen Unterbrechungen und Kurzschlüssen zu untersuchen. Die Eingabe bzw. der Start des Listings 1 ist dann zu wiederholen.

Bedeutung der CTC-Steuerwort-Bits
BIT 0muss immer 1 sein! (gilt sonst als Interruptvektor)
BIT 10 = keine Wirkung
1 = Reset, stoppt den Zaehlvorgang des Kanals, Ist BIT 2 ebenfalls 1, so laeuft der Kanal nach Laden einer Zeitkonstante erneut an, Anderfalls muss ein neues Steuerwort gesendet werden.
BIT 20 = folgendes Byte ist Steuerwort (oder Interruptvektor, bei Kanal 0)
1 = folgendes byte ist Zeitkonstante
BIT 3nur fuer Zeitgeber-Modus:
0 = Zaehler startet unmittelbar nach Laden der Zeitkonstante
1 = Zaehler startet erst nach Triggerflanke am CLK/TRG-Eingang, die auf das Laden der Zeit-konstante folgt.
BIT 4Polaritaet der aktiven Flanke des CLK/TRG-Eingangs:
0 = negative Flanke
1 = positive Flanke
BIT 5nur fuer Zeitgeber-Modus:
0 = Vorteiler 16
1 = Vorteiler 256
BIT 6Wahl des Modus:
0 = Zeitgeber-Modus
1 = Zeahler-Modus
BIT 7Interrupt-Freigabe
0 = Kanal kann keine Interrupts ausloesen
1 = Kanal loest bei jedem nachfolgenden Nulldurchgang des Rueckwaertszaehlers einen Interrupt aus.

Tabelle 4: Programmierung des CTC

Timer & Synchronizer

Wozu der Timer? Der einzige im CPC befindliche Timer ist der Fast-Ticker, der mit einer Frequenz von 300 Hertz arbeitet. Die für einen Sequenzer benötigten Tempi liegen zwischen 40 und 400 Beats per Minute, d.h. Viertelnoten pro Minute. Bei einer Auflösung von 48 Schlägen pro Viertel ergeben sich Timerfrequenzen zwischen 32 und 192 Hz, die nur durch Division der 300 Hz des CPC-Timers durch die gewünschte Frequenz erreichbar sind. Beachtet man, daß nur durch Integerzahlen dividiert werden kann, so ist nur eine Unterteilung in 8 Tempi möglich. Je höher die Timergrundfrequenz ist, desto größer ist also auch die Auflösung der Geschwindigkeitsregelung. Als Timerbaustein dient ein Z80 CTC, der für die Verwendung in Z80 Systemen optimiert ist. Er enthält vier 8 Bit-Timer, die durch Verbindung ihrer Ein- und Ausgänge kaskadiert werden können. Die Programmierung des CTC kann Tabelle 4 entnommem werden. Das IC3 74 LS 121 ist ein Monoflop, das die extrem kurzen Impulse des CTC verlängert. Die Impulslänge des CTC beträgt nur die Länge eines 4 MHz-Taktimpulses des Prozessortaktes, von dem der CTC gespeist wird. Die gestreckten Impulse werden über zwei open-collector-Inverter des 74LS05 auf saubere TTL-Pegel gebracht, die direkt am Sync-OUT-Ausgang abgenommen werden können. Die anderen beiden Inverter bereiten das Signal am Sync-IN-Eingang auf und geben ihn auf den Timer, der die ankommenden Impulse zählt. Der Öffner in der Sync-IN-Buchse schaltet dann den internen Takt der oberen beiden Timer ab. Die Timerplatine ist nur einseitig ausgelegt, so daß bei der Herstellung keine Probleme auftreten dürften. Bei der Bestückung geht man genauso vor wie bei der Interfaceplatine. Schaltplan und Bestückungsplan zum Timer zeigen Bild 5 und 6. Nachdem die fertige und überprüfte Platine an Interface und Computer angeschlossen worden ist, kann Listing 2 eingegeben und gestartet werden. Auf dem Bildschirm sollte eine Zahl erscheinen, die im Sekundentakt dekrementiert wird. Darauf wird ein Klinkenkabel in die Sync-IN-Buchse gesteckt. Der Zählvorgang wird nun unterbrochen und erst nach Einstecken des anderen Kabelendes in die Sync-OUT-Buchse fortgesetzt. Der Hardwareaufbau ist somit abgeschlossen. Die Kosten für die Bauteile liegen bei ca. 120,— DM. Wie Interface und Timer zusammengebaut werden, zeigt Bild 7.

Stückliste:Timer
R1-R6
C1
IC 1
IC 2
IC 3
IC 4
1k
1uF/16Volt
74 LS 32
Z80 A CTC
74 LS 121
74 LS 05
Klinkenbuchse6.3 mm mono
Klinkenbuchse6.3 mm mono
Öffner

Der MIDI-Recorder

Das beste Interface nützt ohne Software gar nichts, also müssen Treiberroutinen her. Daß das Senden von Daten ziemlich einfach ist, hat Listing 1 gezeigt. BASIC ist also für das Senden »langsam« genug. Warum langsam genug, werden sich einige fragen, aber es ist kein Denkfehler. Beachtet man, daß der MIDI-Standard eine Übertragungsrate von 31.25 kBaud hat, erkennt man relativ schnell, daß zwischen zwei zu sendenden Daten genau 320 Mikrosekunden »Wartezeit« liegen, bevor das nächste Byte gesendet werden kann. Diese Zeit berechnet sich daraus, daß ein übertragenes Datenwort aus acht Bit plus Start- und Stopbit besteht, d.h., daß bei 31.25 kBit pro Sekunde genau 3125 Daten pro Sekunde übertragen werden. Diese Zeit überbrückt BASIC allein schon durch den Sprung von einer Zeile zur anderen. Nur bei Maschinensprache muß man aufpassen. Hier ist nach jeder Ausgabe in das Datenregister des 8251 eine Warteschleife einzubauen:

LD BC, &F8F8
LD A, Datenwort
OUT (C), A
LD B, &40
LOOP: NOP
DJNZ, LOOP

Wo bekommt man die ganzen Sendedaten her? Richtig! Man kann sie ja vorher empfangen, indem man z.B. von einem MIDI-Keyboard einspielt.

Was geschieht also beim Empfangen? Sobald der 8251 ein Datenwort vollständig erkannt hat, setzt er seinen Receive-Ready-Ausgang, so daß ein Interrupt am Eingang des CPC entsteht. Dieser Interrupt bleibt so lange erhalten, bis ein Zugriff auf das Datenregister des 8251 erfolgt. Das Interrupt-Signal wird vom CPC erkannt und dieser führt dann einen RST7 zur Adresse &B939 beim 464 bzw. zur Adresse &B941 beim 664 und 6128 aus. Dort wird zwischen einem externen Interrupt vom Interface und dem internen Fast-Ticker unterschieden. Innerhalb der Interruptroutine wird nochmals kurzzeitig ein Interrupt zugelassen. Liegt dann immer noch ein Interrupt an, springt der Computer in die Abhandlung des externen Interrupts. Ein interner Interrupt wäre an dieser Stelle schon längst ausgeschaltet. An der Adresse &003B muß dann ein Sprungbefehl zur Interruptroutine für die Annahme der ankommenden Daten stehen. Doch die Routine für interne Interrupts ist für unsere Übertragungsgeschwindigkeit schon ein Hindernis. Diese Interruptroutine sorgt im CPC für die Tastaturabfrage und alle anderen interruptgesteuerten Programmteile und ist somit mehr als eine Millisekunde lang. Kommen nun MIDI-Daten während der Abarbeitung der Interrupt-routine kurz hintereinander, so gehen Daten verloren, da das Interface keinen Interrupt auslösen kann und nach 320 Mikrosekunden das aktuelle Datenwort überschrieben wird. Somit ist es nötig, beim 464 an der Adresse &B949 und

beim 664 bzw. 6128 an der Adresse &B951 eine Adresse auf eine eigene Interruptroutine zu legen, die Aufnahme der Daten durchzuführen und wieder die Originaladresse &00B1 einzufugen. Als Beispiel für diese Nutzung dient das Listing 3, mit dem es möglich ist, MIDI-Daten wie bei einem Kassettenrecorder aufzunehmen und wiederzugeben. Die invertiert dargestellten Buchstaben im Programmenue müssen gedrückt werden, um die entsprechende Funktion zu erhalten. Ich hoffe, daß ich einige Anregungen zum Experimentieren gegeben habe. Demnächst möchte ich eine 8-Spur-Sequenzer-Software für das Interface vorstellen.

Bis dahin viel Spaß!

(D. Siegmund/ME)


Bild 1: Datenformat der MIDI-Ubertragung


Bild 2: Schaltplan des Interfaces


Bild 3: Bestückungsplan des Interfaces


Bild 4: Anschlußskizze des Verbindungskabels


Bild 5: Schaltplan des Timers


Bild 6: Bestückungsplan des Timers


Bild 7: Zusammenbau von Timer und Interface


Bild 8: Layout des Interfaces (Lötseite)

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1988
★ AUTHOR: D.Siegmund
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» MIDI  Recorder  v1.0    (CPC  Amstrad  International)    GERMANDATE: 2021-08-11
DL: 316
TYPE: ZIP
SiZE: 5Ko
NOTE: 40 Cyls
.HFE: Χ

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Hardware » Interface MIDI (CPC Infos)
» Applications » Multi - Track Step Time Midi Sequencer
» Hardware » Audio - Cheetah Mk5 Midi Keyboard (Amstrad Computer User)
» Applications » MIDI Recorder (CPC Amstrad International)
» Hardware » Audio - Midi Track Sequencer
» Applications » 8 and 12 Track MIDI Sequencers
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 331 millisecondes et consultée 1103 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.