Midi Expander con scheda audio ISA

139cirpic

Basato su micro PIC18F4320, questo circuito permette di realizzare un piccolo expander MIDI con una scheda audio per bus ISA. Testato su 2 diversi circuiti, dovrebbe funzionare per qualunque scheda compatibile ADLIB (l’indirizzo di I/O DEVE essere 0x388). Il software (in questa prima release) risponde a comandi MIDI sul canale 1. I suoni sono generati per mezzo del sintetizzatore FM presente sul chip della scheda audio. Nelle prossime versioni i preset degli strumenti saranno caricati nella earom del micro, invece che nella memoria programma, in modo da consentire esperimenti per la creazione di timbri personalizzati.
I preset possono essere cambiati tramite MIDI dal numero 1 al 16.
Il file scaricabile ef139.zip contiene lo schema del circuito in formato PDF, il file oggetto .hex per programmare il micro e un programma di prova che permette di verificare su un PC se una scheda audio è compatibile con il circuito. Nota: quest’ultimo programma funziona SOLO in modalità DOS reale, non in una finestra DOS di Windows.

139alimpic

L’alimentazione viene ricavata da due trasformatori a uscita variabile di basso costo, regolati sui 9 Volt (in effetti l’uscita è prossima ai 12V).

Look at this short demo video to see the circuit working. Note that it’s in my personal version of english language 🙂 Sorry for that…

pic-isa-midiexp di robotop

Note: I recently added a zip file called midisrc.zip with all the C files used in this project. The C syntax is not very clean, ‘cause I translated the program from the original one I wrote many years ago in Assembly language for a different microcontroller ; for such reason you can read some “goto” instruction… it’s not elegant for a C program, but was useful for quickly translation from asm. 😉

Based on micro PIC18F4320, this circuit makes possible to realize a small MIDI expander using an old ISA-BUS soundcard. Tested on 2 different cards, it should work for any card ADLIB OPL3 compatible (the I/O address MUST be 0x388). The software (in this first release) responds to MIDI commands on Channel 1. The sounds are generated by the FM synthesizer built in the soundcard. The power is derived from two low-cost wall transformers (see picture) with variable output, set to 9V (the output is close to 12V). In future versions presets instruments will be loaded in the micro earom, rather than in the program memory, to allow experiments to create personalized sounds. The presets can be changed via MIDI ranging from 1 to 16.
The file ef139.zip contains the circuit diagram in PDF format, the object file .HEX to program the micro and a test program to verify on the PC if a soundcard is compatible with my circuit. This program runs ONLY in true DOS mode, not in a Windows DOS session.

Recentemente ho ricevuto alcune email con un argomento interessante: lo sviluppo di un piccolo sintetizzatore sempre partendo dalla base di una scheda audio ISA. Riporto (con alcuni omissis) il carteggio in questione :

Domanda:
Ciao Emilio
grazie per avermi risposto, ho visto il tuo progetto e volevo capire se poteva fare al caso mio, se ho ben capito ci posso collegare una tastiera midi e farla suonare tramite gli sf2 built-in della scheda audio (almeno credo), quindi penso che il pic serva per controllare i suoni nativi della scheda audio, confermami se ho capito bene , in alternativa mi interessava capire cosa ci potrei tirare fuori dal “giocattolino”, inoltre secondo te e’ possibile pensare di usarlo per costruirci attorno un mini synth ??

Risposta:
Ciao Mirco. Il PIC controlla direttamente i generatori FM OPL-3 e non usa altro. In pratica, i timbri vengono “costruiti” modificando i registri del chip audio direttamente. Ovviamente, data la mancanza di ram e di DMA, non è possibile usare la risorsa PCM. Tantissimi anni fa ( TRENTA ! ) progettavo strumenti musicali elettronici e così ho trasportato una parte del lavoro che feci allora con gli integrati Yamaha OPL-2, sui chip (assolutamente compatibili) delle varie schede audio ISA. Anche se gli OPL-3 hanno un operatore in più, io ho usato il subset corrispondente ai vecchi modelli. I timbri, quindi, sono tutti di mia programmazione e corrispondono ai suoni principali (chitarra, violino, tromba, clarino, organo eccetera), ma basta modificare alcune tabelle di look-up per ottenere nuovi timbri. Francamente, però, non credo di avere più la documentazione originale dei chip Yamaha, però penso che una ricerca con Google ti permetterà di trovare qualcosa in giro.
Per il funzionamento, sì; se colleghi una tastiera MIDI muta al mio expander, puoi suonare e cambiare i preset. La polifonia, se ricordo bene, l’ho fatta a sette note. Se ne premi di più (contemporaneamente) la più “vecchia” viene eliminata e sostituita dalla più recente.
In pratica, per costruire un sinth, dovresti aggiungere qualcosa per manipolare i dati nei registri, in modo da creare nuovi timbri con pulsanti o potenziometri. Lo spazio sul micro è abbondante, secondo me la cosa è realizzabile.

Domanda:
Ciao Emilio
Moooolto interessante cio’ che mi scrivi, anche se francamente sono a digiuno da troppo tempo sull’elettronica e in particolare sui PIC, pero’ quello che mi hai descritto mi ha chiarito le idee e mi ha messo altri dubbi, nel senso che mi scrivi che hai programmato il pic per ottenere dei timbri (chitarra, violino ecc), ma come fai a cambiare il timbro nel progestto originale ?? inoltre per creare dei nuovi timbri dovre dovrei agire nel codice ?? e per ultimo per il synth come procederesti ? immagino che si dovrebbe costruire qualcosa di analogico che venga letto dal pic per poi ricodificare i chip della scheda audio. Per la polifonia a 7 note per le mie esigenze basta e avanza 🙂
Ti chiedo tutte queste cose per 2 motivi:
1) costruirmi un expander analogico per una delle mie tastiere (e’ vero che con un pc e un po’ di sw si fa prima, pero’ il fascino di un aggeggino hw home made non ha prezzo)
2) potrebbe essere la base per la tesina dell’ esame di maturita’ per mio figlio (si diploma in informatica e farebbe il connubio elettronica informatica e musica)

Risposta:
Ciao Mirco. La sintesi FM che si utilizza nei vari OPL-2 e OPL-3 di brevetto Yamaha, basati sul lavoro di Chowning sulla generazione di spettri di frequenze complessi, mediante modulazione di frequenza, consiste (da parte del programmatore) nello scrivere alcuni parametri nei registri degli oscillatori. Ovviamente il parametro principale è la frequenza di base, cioè l’altezza della nota. Poi ci sono tanti altri fattori, tipo l’ADSR (attack, decay, sustain, release) per ognuno degli oscillatori, la modulazione di un oscillatore con l’altro e via dicendo. Ovviamente, le combinazioni di questi dati producono una quantità ENORME di effetti sonori, ma poi, alla fine, quelli utilizzabili per suonare davvero, sono giusto una ventina. Ovviamente, se ti piacciono i rumori di astronavi aliene, ne puoi creare a centinaia, ma poi che ci fai ? Ci crei un richiamo per extraterrestri ?
Per quanto riguarda il PIC, è uno dei micro che mi piacciono di meno, però si trova anche dal salumiere (quasi) e costa poco. Io ne avevo presi 5 su ebay (di quelli a 40 pin) in un ozioso pomeriggio di domenica e una volta arrivati ho deciso di utilizzarli per questa idea che mi era venuta in mente qualche tempo prima. Il programma sorgente, però, è tutto scritto in C, quindi si può trasportare su qualsiasi altro micro (con adeguato numero di porte di I/O e di flash e ram) senza grosse difficoltà. I timbri sono scritti su tabelle in flash, quindi diciamo che fanno parte del codice sorgente in C, ma nulla vieta di spostare le tabelle in ram o sulla earom (non volatile) presente su tanti tipi di micro. Una volta messe le tabelle su queste memorie alterabili (la ram o la earom) è possibile variare tutti i parametri e quindi produrre timbri a volontà. Tieni presente che per definire uno “strumento” si usano una ventina di bytes in tutto (non ricordo con precisione, dovrei andare a rileggere il sorgente). Per realizzare un sinth, chiaramente, sarebbe opportuno aggiungere un display LCD e magari 6 pulsanti con le frecce su, giù, destra, sinistra e poi accetta e annulla. Con questa interfaccia utente si fa praticamente tutto…

Domanda:
Quindi se non ho ben capito gli opl-2 e opl-3 probabilmente sono usati anche nella mia yamaha dx7 (fantastico synth)
per i richiami alienti diciamo quasi !!!! l’idea sarebbe quella di costruire sei suoni usati dai rockets i gruppi simili, considera comunque che sarebbe un passatempo per me e un bel voto all’esame per mio figlio, sul fatto che si possono emulate decentemente una ventina di strumenti per me basta e avanza, se poi i suoini gernerati magari li distorci un’attimo tanto meglio, come avrai capito amo molto i suoni vintage e sopratutto le favolose sonorita’ degli organi anni 60/70 ….
un’ultima cosa, mi puoi inviare il sorgente in c del pic ??

Risposta: (qualche tempo dopo)
Bene, ho “riesumato” la cartella del progetto ed ho creato il file scaricabile midisrc.zip che contiene tutti i files in C usati per la creazione del file HEX già allegato in precedenza. Modificando questi files, è possibile ampliare o cambiare del tutto il funzionamento del circuito e quindi, con un po’ di pazienza, realizzare anche il sinth di cui si parlava all’inizio.
E’ da notare che alcuni di questi listati in C sono stati “tradotti” dai miei programmi originali in assembler e quindi presentano, a volte, una sintassi un po’ desueta, come nell’uso dei “goto”; questo, però, mi ha permesso la conversione dall’assembler al C in minor tempo.
Spero che questo lavoro sia utile e sarò lieto di continuare ad aggiungere a questa pagina gli eventuali sviluppi della situazione.

Documenti utili:
Manuale in PDF dei primi chip Yamaha YM2413 (li ho usati !) link
Manuale in PDF dei più recenti chip Yamaha YMF262 link
Manuale in PDF del chip OPTi 82C931 (controller audio ISA) link