Dr.Godfried-Willem RAES
Kursus Experimentele Muziek: Boekdeel 2: Live Electronics for composers and musicians
Hogeschool Gent : Departement Muziek & Drama
|
PC-card midi interface, zie eind van deze pagina. |
Definities :
UART:
Universal Asynchronous Receiver and Transmitter. Dit zijn zgn. LSI-chips (large scale integrated circuits) die in zich de funkties van serieel naar parallel en parallel naar serieel konvertor, buffer, latch, baudrate-generator, parity-controll , start- en stop-bit generator ... verenigen, zo dat een universeel bruikbare elektronische bouwsteen ontstaat. Deze chips kunnen universeel worden ingezet onafhankelijk van het type microprocessor, hebben een eigen klok, en zijn ook in staat diverse seriele dataformaten in elkaar om te zetten.
USART=
Universal Synchronous and Asynchronous Receiver and Transmitter. Deze chips implementeren dezelfde funkties als de UART maar kunnen ook overweg met synchrone seriele datatransmissie.
MODEM=
MOdulator DEModulator. Het is een toestel dat seriele informatie omzet in een toonhoogte-code die via normale telefoonlijnen of via radio-verbindingen, naar andere komputers voorzien van een modem kan worden verstuurd.
Voorbeelden van dergelijke chips zijn o.m.:
Zowel UART als USART's kan je beschouwen als zijnde opgebouwd uit twee onafhankelijk van elkaar werkende schuifregisters. Een eerste schuifregister krijgt de parallelle data van de komputer binnen en schuift de ontvangen data in seriele vorm via de seriele transmit (TD) uitgang naar buiten. Een tweede schuifregister ontvangt seriële data via de serial-receive data input (RD), en biedt die gebufferd aan op de parallele uitgang.
Beide registers werken met onafhankelijke klokfrekwenties, de ene is de transmit-clock (TXD), de andere de receive-clock (RXD). De klokfrekwenties dienen een veelvoud (16 tot 64x bvb.) te zijn van de gewenste Baudrate. De chip voegt zelf en automatisch de nodige of gewenste start- en stopbits toe en genereert allerhande signalen wanneer er transmissie of omzettingsfouten optreden: parity error on receive, buffer overflow , framing error ...
Wanneer we beide parallelle poorten onderling met elkaar verbinden dan kunnen we de chip meestal ook gebruiken als serieel naar serieel konvertor (Baud-rate translator).
De nieuwere UART chips beschikken over een FIFO geheugen (16 tot 64 bytes) waardoor een snellere afhandeling van seriele kommunikatie door de software mogelijk is geworden. Voor de snelste types zijn data rates tot 500kBaud en hoger mogelijk.
Een (deels uitgewerkt) voorbeeld van een schakeling waarmee DMX, midi of andere seriele datastromen tot 500kBaud in parallele data kunnen worden omgezet kan er uitzien alsvolgt:
Een volledige uitwerking wordt behandeld in 2071.html
Toepassingsvoorbeeld : EEN MIDI-INTERFACE
Ontwerp voor een Midi-interface voor de printerpoort van de PC
1.Studie van de MIDI-hardware vereisten
MIDI is een serieel interface. De seriele dataoverdracht verloopt aan 31.25kBaud. De frekwentieafwijking hierop mag niet meer dan 1% bedragen. Het data-formaat bestaat uit 1 startbit , 8 databits en 1 stopbit. Overdracht van 1 midi-byte neemt dus 320 mikrosekonden in beslag. Elektrisch gaat het om een stroom-lus systeem (current-loop), waarbij een logisch 0 bit wordt voorgesteld door een stroom in de verbinding van 5mA. Bij logisch 1 loopt er geen stroom door de lus. De stroom in de lus wordt geleverd door een 5 Volt spanningsbron waarvan de stroom begrensd wordt door een weerstand van minstens 220 Ohm.
De ontvanger-zijde van de verbinding dient te bestaan uit een optokoppelaar, en dient met een diode beveiligd te worden tegen ompoling. Het LED gedeelte mag niet galvanisch verbonden zijn met de massa van de ontvangende schakeling. De optokoppelaar moet in de signaaloverdracht een flanksteilheid hebben van niet meer dan 2 mikrosekonden.
De te gebruiken konnektors (stekkers) werden eveneens in een voorschrift vastgesteld. Er worden 5 polige DIN-stekkers gebruikt waarvan de pennen over een halve cirkel (180 graden) opgesteld staan. De pinnen 1 en 3 worden niet gebruikt noch aangesloten. Pin 2 wordt verbonden met de afscherming van de verbindingsdraad. Hiervoor wordt 'screened twisted-pair' kabel gebruikt. Symmetrisch mikrofoonsnoer is hier goed bruikbaar, maar echt kritisch is het helemaal niet. De stroomlus dient te worden aangesloten op de pinnen 4 en 5. De stroom loopt van 4 naar 5 ( van + naar -) .
Hierbij het aansluitschema zoals opgenomen in de officiele MIDI-standaard.
2.Uitwerking
De eerste overweging heeft betrekking op de manier waarop we het te bouwen interface op de komputer willen aansluiten. De seriele poort dienen we op oudere PCs (pre-pentium) bij voorbaat uit te sluiten, enerzijds omdat de maximale baudsnelheid daarvan meestal ligt op 9600 Baud, wat veel te traag is voor Midi, anderzijds omdat voor die Baudrate slechts kan gekozen worden tussen waarden in de standaard reeks 300, 600, 1200, 2400, 4800, 9600, 19k2, 38.4... , wat niet overeenkomt met de afgesproken snelheid voor Midi kommunikatie.
Resteren nog twee mogelijkheden:
Aan de eerste oplossing, hoewel het technisch beslist de meest esthetische is, kleeft het bezwaar dat we dan telkens we een andere machine willen gebruiken, we die dienen open te maken om er ons interface in te steken. Niet alle eigenaars stellen dit echt op prijs. Bovendien is het maken van een insteekkaart met de noodzakelijke vergulde kontaktvingers voor de ISA-bus, laat staan voor de PCI-bus, niet eenvoudig zelf te doen, terwijl experimenteerkaarten met dergelijke kontakten overmatig duur zijn.
De tweede oplossing heeft als nadeel dat het gros der printerpoorten op IBM-machines slechts als uitgangspoort kunnen worden gebruikt, hoewel dit in de laatste jaren wel is verbeterd. Een analyse van de gangbare oudeISA-bus printerinsteekkaarten leerde ons echter vlug dat hieraan door leggen van slechts een enkel extra draadje kon worden verholpen. Deze ingreep zal de gemiddelde komputerbezitter nu ook wel niet zo erg op prijs stellen, maar, in dat geval zullen we ons interface toch nog steeds voor output van midi-data kunnen gebruiken. Op zowat alle laptop komputers is de printerpoort overigens van nature uit bidirektioneel opgebouwd. Onder operating systems zoals Windows NT en Win2000 gaat dit niet want die printerpoorten worden klaarblijkelijk beschouwd als eigendom van Bill Gates...
We besloten dan ook het ontwerp uit te werken voor een (eventueel bidirektioneel gemodificeerde) Centronics printerpoort op IBM-kompatibelen onder DOS of Windows 3.1, 95, 98, Millennium..
Analyze van de nodige versus de bruikbare signalen:
1.Centronics kant komputer:
PLUG: DB25
pen:naam: Logic Electric Port/bit 6402-pen & funktie
1: STROBE 0 5V A2/Bit 0 23 TBRL
Een logische 0 schrijft de aangeboden data naar het intern register. De overgang van 0 naar 1 stuurt de data naar de seriele uitgang,
OPGELET: NEGATIEVE LOGICA! om logisch 0 te krijgen moeten we een logische 1 uitsturen !!!
2-9 : DATA-BYTE - 5V A0/Bit0-7 26-33 = ingangen
5-12 = uitgangen
Deze poort moet bidirektioneel kunnen gebruikt worden. Hiertoe dient de printerinterface kaart in de komputer te worden gewijzigd. Sturing via A2/Bit5 : 0=output 1=input
10:ACKNOWLEDGE 0 5V A1/Bit6
11:BUSY 1 5V A1/Bit7 22 = als pin 22 logisch 1 is, mag de chip nieuwe data van de komputer toegestuurd krijgen. 24 = Wanneer deze pin logisch 1 is dan is de seriele verzending volledig klaar. Beide pinnen moeten dus veiligheids-halve hoog zijn vooraleer we data kunnen versturen. Vandaar de AND-poort.
12:PAPER_END 1 5V A1/Bit5
13:SELECT_IN 1 5V A1/Bit4 19 = als pin 19 logisch 1 is dan is er een byte voor lezing beschikbaar.
14:AUTOFEED 0 0V A2/Bit1 4 = als pin 4 logisch 0 is kan een byte door de komputer worden ingelezen.
15:ERROR 1 5V A1/Bit3 15 = Optioneel te verbinden. Deze pin is logisch 1 wanneer pin 19 niet via 18 werd gereset Kan als error-signaal benut worden.
16:INITIALIZE 1 0V A2/Bit2 18 = reset pin 19 wanneer een byte is ingelezen door pin 18 laag te maken.
17:SELECT 0 5V A2/Bit3
18-25:GROUND 0 0V -
Overige signalen nodig voor een goede werking van de 6402-chip:
Pinnummer:
Zend en ontvangstfrekwentie zijn gelijk bij Midi.
Deze gegevens volstaan principieel om een werkend interface te kunnen bouwen. De software zal evenwel aan de hardware moeten aangepast worden opdat het geheel naar behoren zou werken.
Schema
Wanneer we het schema overlopen, zien we dat het geheel en al beheerst wordt door de UART-chip 6402. Daarnaast is er nog de onvermijdelijke en alomtegenwoordige klokoscillator, die hier geen gebruik maakt van een kristal waarvan de frekwentie wordt gedeeld tot de voor midi noodzakelijke waarde is verkregen, maar van een monolitische schakeling. Wanneer een hogere klokfrekwentie beschikbaar is moet een deler ingeschakeld worden (7493 bvb.) De klokfrekwentie van de chip zelf moet 16 keer de midi baudrate zijn ( 16 x 31250 = 500kHz). Als alternatief kan ook een 6403 UART gebruikt worden. Dit type heeft een deler (baud-rate generator) aan boord.
Voorts merken we de optocoupler op, die instaat voor een strikte galvanische scheiding tussen komputer en de aangesloten midi-muziekinstrumenten.
Softwarevoorzieningen :
Zoals gezegd, werkt de schakeling eens naar behoren opgebouwd niet zomaar vanzelf. Ze dient steeds te worden gebruikt met eraan aangepaste software. Hierop willen we hier wat verder ingaan.
1: Algemene initialisatie van de printerpoort
'test bit 5 -dit bit moet 0 zijn om de poort als uitgangspoort te gebruiken
'maak pin 4 en pin 18 van de 6402 hoog - A2,B1 en A2,B2 dit maakt de 6402 tot midi-send - bytes dus van de komputer naar het Midi-toestel
Elk programma dat van deze midi-poort gebruik maakt zal helemaal vooraan een verwijzing naar deze initialisatiesubroutine moeten omvatten. Gedetaileerde beschrijving van een midi-schrijfroutine :
Gedetailleerde low level beschrijving van een midi-inleesroutine:
Praktische kodering :
Hardware realisatie - printontwerp en schema:
Gebruikte chips:
Overige onderdelen ( afgezien van weerstanden en kondensatoren):
Het hele ontwerp past op een halve Eurokaart-print (10x8 cm). Ook de konnektors vinden een plaatsje op de print zelf. Alleen de voeding dient extern te worden aangesloten, en kan eventueel uit de komputer zelf betrokken worden. (5 Volt). Bij het overgaan van schema naar printontwerp, zijn er enkele vuistregels, maar ook een heleboel vrijheid. Een eerste algemeen principe is dat verbindingen steeds de kortst mogelijke weg dienen te volgen. Voorts dienen voedingsbanen en massabanen of vlakken voldoende breed te worden getekend en moeten ze van ontkoppelingskondensatoren (10nF-100nF) voorzien worden. Het ontwerpen van prints met de hand vanaf een schema duurt -afhankelijk van de ervaring van de ontwerper- ongeveer 4 uur per vierkante decimeter, voor enkelzijdige printen met een grote komponentendensiteit.
Tegenwoordig worden meer en zgn. CAD/CAM komputerprogrammas (Orcad, Ultiboard, Layo) gebruikt voor dit soort werk. Hierbij moet echter opgemerkt worden dat de nodige tijd veelal groter is dan bij geroutineerde handmatige realizatie ! Het resultaat is daareentegen meestal 'mooier'. Voor het ontwerpen en realizeren van het soort betrekkelijk eenvoudige schakelingen waarmee we in deze kursus te maken krijgen, wijst de praktijk uit dat handwerk alsnog gewoon efficienter is.
Kommerciele ontwerpen van Midi-interfaces
Voor wat betreft IBM-achtige PC's was er op de markt van de muziekelektronika lange tijd eigenlijk slechts één interface-type beschikbaar dat min of meer ' standaard' kon worden genoemd. Het betrof steevast het Roland MPU-401 interface. Dit interface dat bestaat uit een kleine PC-insteekkaart (ISA-slot) en een externe 'doos' met de eigenlijke schakeling en de aansluitingen, staat bekend als 'intelligent'. Dit omdat voor het interface niet zomaar een UART werd gebruikt maar een heuse maar erg trage (8-bit) microprocessor. Dit interface is dan ook een klein ' dedicated system'. Van komputerzijde uit gezien, maakt het gebruik van twee I/O adressen : &H330 en &H331. Het eerste adres wordt gebruikt voor bidirectioneel dataverkeer tussen interface en komputer (net zoals in het door ons voorgestelde ontwerp). Het tweede adres wordt bij output gebruikt om instrukties naar de processor van het interface te sturen, en bij uitlezing van de poort, om een 'handshake-protokol' te implementeren.
Dit interface is wat moeilijker zelf te programmeren dan ons eigen ontwerp en is bovendien (zeker in de oorspronkelijke versie van Roland) ook een flink stuk trager. Wie er zich desalnietemin toch wil in verdiepen verwijs ik graag naar het enkele jaren geleden verschenen boek van John Vanderaart " Het Midi Handboek", verschenen bij Addison-Wesley, 1990. De bij het interface geleverde dokumentatie van de firma Roland is helaas volstrekt onbruikbaar. Verder in deze kursus tref je overigens Basic-bronkode aan waarmee ook dit interface evenals de vele klonen ervan goed is te programmeren.
Het enige groot voordeel van dit en recentere ermee kompatibele en meestal superieure interfaces (MusicQuest bvb.), is dat kommerciele midi-software voor IBM-achtige komputers er bijna steeds gebruik van maakt en dat het ook geintegreerd kan worden in Windows en in de kommerciele multi-media extenties/software daarvan.
Maar, ook wie reeds over een standaard Midi-interface beschikt, kan toch heel wat voordeel halen uit een zelfgebouwd interface. Het is immers een eenvoudige oplossing om je komputer uit te breiden met een extra midi-poort: per extra poort krijgen we immers de beschikking over 16 extra midi-kanalen. Ook en vooral wanneer je interaktief wil werken en zowel midi-data inlezen als verzenden, kan het beschikken over 2 interfaces de snelheid van je eigen programmas aanzienlijk verbeteren. Een van beide interfaces kan dan immers voor inkomende data worden gebruikt terwijl het andere alleen voor output kan worden voorbehouden.
Midi interfaces op Soundcards (Soundblaster en dergelijke)
Het in de laatste jaren sterk verspreid geraakte midi-interface dat voorkomt op zgn. multi-media soundkaarten (Soundblaster, Gravis, AdLib ...) was tot voor kort voor wie wilde programmeren nauwelijks te gebruiken. Het werkte alleen goed onder Windows, gebruik makend van de bij de kaart geleverde DLL's... De nieuwere generaties sound-kaarten voor de IBM-PC hebben dit euvel niet meer en kunnen met onze procedures gemakkelijk worden aangestuurd. Ze ondersteunen de UART modus van de MPU401 en maken gebruik van dezelfde hardware adressen en IRQs. Voor wie onder GMT programmeert is er natuurlijk geen enkel probleem, want GMT ondersteunt alle onder Windows mogelijke midi interfaces vanuit de Win32 Api.
Sound-cards bieden de gebruiker weliswaar de midisignalen op de game-port, maar die kan je niet zomaar gebruiken om midi-apparatuur aan te sturen. Niet alleen omdat de stekker (een DB15) niet kompatibel is, maar ook en vooral omdat enerzijds deze signalen alleen in TTL formaat en niet als stroomlus signaal ter beschikking staan en anderzijds omdat er geen optocouplers op de klankkaarten zijn aangebracht. De speciale adapterkabel die voor de aansluiting is vereist is nogal duur en bevat een eenvoudige aanpasschakeling. Het loont de moeite een dergelijke adapter met enkele eenvoudige komponenten zelf inelkaar te zetten.
Het schema geven we hieronder. Het is in menig opzicht superieur aan de in de handel verkrijgbare adapters: de signalen hebben mooiere flanken, er is een snellere optocouper gebruikt (6N138) en we kunnen meerdere midi-uitgangsbussen voorzien. Wil je een midi-thru toevoegen, dan kan ook dit eenvoudig worden gerealiseerd.
De schakeling voor een midi-thru ziet eruit alsvolgt:
Wil je ook iets doen met de aansluitingen voor de joystick, dan heb je hierbij de gegevens:
Een ontwerp voor een kleine gedrukte schakeling (schaal 200%) waarbij is voorzien in twee afzonderlijk gebufferde midi uitgangen, een midi-input en een midi thru-aansluiting tonen we hier:
Een meer luksueus ontwerp, waarbij we voorzagen in 2 midi thru uitgangen en drie normale midi-uitgangen en bovendien nog aansluitingen op de vrije joystickpennen voor eigen experimentele uitbreidingen en interfaces, geven we eveneens als printontwerp.
Filedate: 850202/920408/971021/2003-09-16
Terug naar inhoudstafel kursus: <Index Kursus> |
Naar homepage dr.Godfried-Willem RAES |
|