Emillotron – parte 3

Update 20 Giu 2022 – All parts together and translated into English
https://hackaday.io/project/185954-use-yamaha-opl2-chip-with-esp8266-emillotron

Okay, un piccolo ostacolo. Il mio programma “antico” di CAD ha cancellato completamente la mia libreria personalizzata di componenti, subito dopo aver creato quelli nuovi. Ho una copia di backup, naturalmente, ma i tre componenti appena fatti sono spariti e ho dovuto rifarli. Per un momento sono stato tentato di lasciar perdere tutto (in fondo, non guadagno nulla a pubblicare questo lavoro) ma la caparbietà è uno dei miei principali difetti pregi 🙂 Ecco quindi lo schema:

Nota bene: questo non è lo schema finale, dato che al momento l’alimentazione della parte digitale e di quella analogica sono in comune. Al momento opportuno, ci saranno piccole modifiche a tale sezione, in modo da evitare fruscii e ronzii sulla bassa frequenza. Inoltre, sarà necessario aggiungere un filtro passa-basso (un altro TL082) all’uscita del buffer, prima di andare sul connettore di uscita audio. Per il momento, collegando l’uscita a un amplificatore, si potrà ascoltare l’effetto della scrittura dei vari registri del chip OPL-II (con un po’ di rumore di fondo). Ecco anche la realizzazione completa del prototipo:

Il chip OPL-II risulta nascosto nella foto. Osservando bene, vedrete che è sotto il modulino di espansione I/O i2c. L’oscillatore quarzato è realizzato con un 74HCU04 (la U sta per “unbuffered”), ma purtroppo non ho nemmeno uno di questi integrati, quindi sul prototipo ho montato un normale 74HC04. Oscilla lo stesso, ma per correttezza, andrebbe usato quello indicato sullo schema. Per chi ama questo tipo di “arte”, ecco il circuito visto dal lato cablaggi:

Cominciamo a fare le nostre prove. Ecco la prima versione del programma di test : emillotron-v1.zip . Il file è zippato con password “eficara” e contiene la directory di lavoro per Arduino. Vediamo cosa c’è dentro:

Il file commtask.h (che è comunque un sorgente in C) contiene il parser dei comandi da seriale. Questi sono: +WR (write register) +RD (read status) +HR (hardware reset). I comandi +RD e +HR sono senza parametri, mentre +WR richiede l’inserimento dell’indirizzo del registro e del valore che ci si vuole scrivere, entrambi in esadecimale (tutto maiuscolo). Il file emillotron-v1.ino è il “main” e contiene le solite funzioni setup() e loop(). Il file opl2drive.h è un sorgente in C che contiene le mie funzioni base per il controllo del chip OPL-II (ovviamente, in base al circuito descritto). Infine, il file projectheaders.h contiene variabili, costanti, definizioni, eccetera.

Tramite il monitor seriale possiamo, dopo aver compilato (per ESP826 D1 mini) e trasferito il programma nel modulo, dare i nostri comandi. Ogni comando inizia con un + e finisce con un CR (o LF). Per verificare, dopo il reset, che la scheda funzioni, proviamo il comando +RD e se ottieniamo in risposta 0x06, va tutto bene e si può iniziare la prova per generare un suono.

Questa prima versione è molto elementare (very basic), ma si può già fare tutto. Ecco un esempio; diamo di seguito tutti questi comandi per ottenere un timbro che io definisco ‘vocal’:

+WR 20 01
+WR 23 82
+WR 40 30
+WR 43 0A
+WR 60 41
+WR 63 40
+WR 80 D4
+WR 83 D4
+WR C0 04

Con questi comandi abbiamo caricato i parametri necessari a generare un suono FM nel canale 1 (ce ne sono 9).

Possiamo provare adesso ad “accendere” il suono, con una determinata frequenza. Per far ciò, diamo ancora un paio di comandi:

+WR A0 07
+WR B0 2E

Se il circuito è collegato ad un amplificatore, sentiremo il primo suono. Per interromperlo, diamo il comando:

+WR B0 00

Bene, il registro A0 contiene la parte bassa (gli 8 bits meno significativi) del divisore di frequenza; il registro B0 contiene altri 2 bits del divisore (i 2 più significativi, sono 10 in tutto) e poi il blocco (l’ottava) e il flag di nota on. Consiglio di stampare il datasheet del componente (YM3812) per un’analisi approfondita dei registri. Proviamo ora un altro timbro, che io chiamo ‘classic guitar’:

+WR 20 23
+WR 23 21
+WR 40 25
+WR 43 0A
+WR 60 83
+WR 63 C2
+WR 80 F6
+WR 83 F6
+WR C0 0E
ed ora per suonare
+WR A0 07
+WR B0 2E
per interrompere
+WR B0 00

Nella prossima parte aggiungerò: hardware) filtro passa-basso e preamplificatore; software) serie di comandi più completa per controllare la scheda in modo “easy”. Aggiungerò anche dei ‘preset’ che vengono dai tempi in cui lavoravo per il settore musicale (Elka, Orla, Sisme, Jen, Meta, Eko e mi scuso con chi non ho citato). Oltre a questo, ho scritto anche un programma “demo” che servì per le prime prove alla Rainbow (quella delle Winx) per il loro CD del gioco “Tommy e Oscar”. Era solo una prova e lavorava in DOS (correva l’anno 1996) con una tastiera musicale che avevo modificato per inviare i codici di una tastiera PC! Il programma generava a basso livello (scrittura di registri OPL-II e gestione DMA) la sintesi FM ed eseguiva un file .wav in PCM come sottofondo. Se trovate lo “jewel case” con il CD del gioco, in retrocopertina c’è anche il mio nome 🙂 Il prodotto finale, però, fu realizzato per Windows (non da me), con supporto multimediale ad alto livello. Tra le mie produzioni ci sono anche delle espansioni per Commodore C64 e VIC20 per tastiere polifoniche a 7 note (non le 3 del chip interno). Girando qui e là, mi è capitato di incontrare persone che avevano comprato il kit e si erano appassionate alla musica anche grazie a quello. Una bella soddisfazione 🙂

Questo conclude la parte 3. A presto…