Il SID (Sound Interface Device) è un circuito integrato con funzioni di sintetizzatore / generatore audio di effetti speciali.
Esso genera 3 voci simultanee con selezione indipendente della frequenza, della forma d'onda e dell'inviluppo (volume).
Ciascuna voce può generare anche contemporaneamente (**) 4 diversi timbri: segnale triangolare, a dente di sega, a impulso
(con Duty Cycle variabile) e pseudo-rumore bianco.
(**) le diverse forme d'onda selezionate sono in effetti soggette a un'operazione di AND logico, con risultati quindi peculiari e diversi dalla somma istantanea analogica.
Un filtro interno, configurabile con responso Passa Bassa, Passa Alto e Passa Banda (anche in sovrapposizione) modifica
il contenuto timbrico delle 3 voci + un ulteriore segnale audio esterno; del filtro si può configurare sia la
frequenza centrale di taglio sia la pendenza della risposta (risonanza).
La frequenza o l'ampiezza della voce 3 (OSC3) può essere utilizzata per modulare le altre 2 voci (OSC1 e OSC2).
2 ingressi analogici (POT X e POT Y) possono essere connessi a potenziometri per generare un ulteriore
segnale di modulazione e controllo.
Tutte le funzioni del SID sono comandate tramite un'interfaccia dati per microprocessore a 8 bit, una serie
di 29 Registri programmabili e 4 linee di comando.
Qui di seguito sono riportate le informazioni principali sul SID; per le altre caratteristiche si rimanda
al Datasheet del SID
Il chip è in un package 28 Pin DIL 600mil, ovvero 'largo' il doppio dei normali integrati.
ATTENZIONE: il circuito è molto sensibile alle
cariche elettrostatiche, in particolare i pin I/O audio.
NOTA BENE:
i chip 6581 e 6582/8580 sono identici e differiscono solo nella
tensione di alimentazione (+12V per il 6581 e +9V per il 6582/8580).
Anche i valori dei condensatorei CAP1 e CAP 2 sono
diversi (220pf per il 6581 e 6800pf per il 6582).
Pin 5 RES | Reset del chip (attivo basso) |
Pin 6 O2 | Segnale di Clock - valore = 1MHz |
Pin 7 R/W | Comando Lettura (=1) o Scrittura (=0) |
Pin 8 CS | Segnale 'Chip Select' attivo basso |
Pin 9-13 | Indirizzo dei Registri (da 0 a 29) |
Pin 14 | Massa |
Pin 15-22 | Porta Dati a 8 bit |
Pin 23-24 | Connessioni ai potenziometri |
Pin 25 | Alimentazione digitale +5V |
Pin 26 | Ingresso segnale audio esterno |
Pin 27 | Uscita audio |
Pin 28 | Alimentazione analogica (+9 / +12V) |
Ext In |
Su questo pin è possibile inserire un segnale audio che sarà mixato alle voci interne. e soggetto al volume generale.
L'impedenza di ingresso è di circa 100KOhm; il livello max in ingresso è di 3Vpp. E' presente una componente in continua, per cui è necessario disaccoppiare l'ingresso con un condensatore elettrolito da 10uF. Per ridurre il rumore introdotto, è consigliato di mettere un condensatore da 1000pf verso massa sull'ingresso, in particolare se l'ingresso non è utilizzato. |
Audio Out | E' un'uscita open-source con valore max di 3Vpp sovrapposta a una continua di circa 4.75Vcc. Anche qui è richiesto un condensatore da 10uF in serie e suggerita una resistenza da pin a massa di 1 o 2KOhm. |
CAP1-2 | Sono le connessioni per i 2 condensatori usati dal filtro programmabile. I valori suggeriti sono di 6800pf per il 6581 e di 220pF per il 6582/8580. |
02 | Ingresso per il clock al valore nominale di 1MHz. Il SID può operare con frequenze comprese tra 500KHz e 2MHz, con relative modifiche delle frequenze generate e delle temporizzazioni degli ADSR. |
R/W | Seleziona il funzionamento in scrittura (R/W=0) o lettura (R/W=1). |
CS |
Ingresso Chip Select. Tutte le operazioni di lettura/scrittura del SID avvengono solo quando CS=0. Lo stato CS=1 disabilita l'accesso al SID e consente di multiplessare più SID sugli stessi Bus. |
VDD |
Alimentazione analogica di +12V per il 6581 e di +9V per il 6582/8580. In considerazione dell'assorbimento abbastanza elevato (circa 120-150mA) del chip, è consigliato portare una pista diretta dall'alimentazione al chip, di spessore adeguato e ben filtrata in più punti. |
RST | Pin di Reset del SID, attivo basso (=0). Quando attivo, tutti i registri del SID sono azzerati e l'uscita audio è silenziata. |
![]() ![]() |
I 5 bit di indirizzo A0..A5 selezionano uno dei 29 (h00..h1C) registri disponibili (gli indirizzi 30-32 non sono utilizzati).
Ciascuna delle 3 voci dispone di un banco consecutivo di 7 registri ( h00..h06 , h07..h0D , h0E..h14 ) rispettivamente per OSC1, OSC2 e OSC3). Funzione dei Registri VOCII registri Freq Lo e Freq Hi stabiliscono il valore da h0000 a hFFFF della frequenza dell'oscillatore, come indicato nella tabella più avanti I registri PWM Lo e PWM Hi stabiliscono il valore da h0000 a hFFF della modulazione d'ampiezza per il segnale a onda quadra. Il valore h800 rappresenta un'onda quadro con Duty Cycle = 50%. Gli ultimi 2 registri selezionano i valori dei 4 parametri (Attack, Decay, Sustain, Release) dei modulatori di inviluppo (ADRS), come indicato nella tabella più avanti. |
Il registro Control stabilisce il modo di funzionamento dell'oscillatore come indicato di seguito:
D0 - Gate | Avvio e termine del ciclo ADSR. N.B. quando Gate = 0 non ci sarà alcuna uscita dal relativo oscillatore |
D1 - Sync | Sync=1 sincronizza la frequenza dell'oscillatore selezionato con la frequenza di OSC3 (per OSC1), OSC1 (per OSC2) e OSC2 (per OSC3). Il risultato è un segnale 'Hard Sync' utile per effetti speciali |
D2 - Ring | Ring=1 sostituisce l'uscita Triangolare con la modulazione incrociata tra la frequenza dell'oscillatore selezionato con la frequenza di OSC3 (per OSC1), OSC1 (per OSC2) e OSC2 (per OSC3). Il risultato è un segnale atonale utile per suoni tipo campane e gong |
D3 - Test | Deve sempre essere = 0. Il livello 1 serve per Test o applicazioi particolari |
D4 - Trian | Selezione l'uscita del segnale triangolare. I bit D4..D7 possono essere sommati per generare un segnale composito di 2 o più forme d'onda |
D5 - Ramp | Selezione l'uscita del segnale a Rampa (dente di sega) |
D6 - Pulse | Selezione l'uscita del segnale Impulso (onda quadra) |
D7 - Noise | Selezione l'uscita del segnale Noise (rumore). Il segnale è una frequenza casuale incentrata sulla frequenza stabilita dal registro Freq |
FC Lo FC Hi | stabiliscono il valore da h0000 a hFFF della frequenza centrale del filtro, tra circa 30Hz e 12KHz. |
Filt 1 | Filt 1=0 passa il segnale di OSC1 direttamente all'uscita. Filt 1=1 elabora il segnale tramite il Filtro |
Filt 2 | Come per Filt 1, relativamente a OSC2 |
Filt 3 | Come per Filt 1, relativamente a OSC3 |
Filt Ex | Come per Filt 1, relativamente al segnale analogico esterno AUDIO IN |
Res 0..3 | Stabiliscono la frequenza di risonanza (fattore di merito) del filtro, tra 0 e 15 (massimo effetto) |
D0..D3 | Stabiliscono il volume di uscita dal Mixer da 0 (mute) a 15 (massimo livello) |
D4 - LP | Abilita la funzione Passa-Basso (circa 12dB per ottava) |
D5 - BP | Abilita la funzione Passa-Banda (circa 6dB per ottava) |
D6 - HP | Abilita la funzione Passa-Alto (circa 12dB per ottava) N.B. le 3 funzioni sono addittive, per cui possono essere attivate in qualsiasi combinazione per sperimentare vari filtraggi |
D7 - 3 OFF | Ponendo a 1 questo bit, la Voce3 è scollegata dal percorso audio. Ponendo anche Filt3 = 0, il segnale d'uscita di OSC3 viene totalmente escluso dalla combinazione sonora, utile quando questo oscillatore è usato come modulatore. |
POTX | Riporta la posizione del potenziometro collegato a POTX come valore compreso tra 0 (res. minima) e 255 (res. massima). Il valore è sempre valido e viene aggiornato ogni 512 cicli di clock |
POTY | Come POTX per il potenziometro connesso a POTY |
OSC3/Rand |
Il registro copia il valore degli 8 bit più significativi di OSC3. Il valore letto dipende dalla forma d'onda selezionata per OSC3.
Impostando la forma a Rampa, l'uscita varierà da 0 a 255 con la frequenza selezionata per OSC3. Impostando la forma Triangolare,l'uscita varierà da 0 a 255 e quindi da 255 a 0 ciclicamente. Impostando la forma Impulso, l'uscita commuterà tra i 2 valori di 0 o 255. Impostando la forma Noise, l'uscita sarà un valore casuale tra 0 e 255, utile per generare effetti speciali comandando altri parametri (es. filtro o frequenza di OSC1 e OSC2). Normalmente, quando OSC3 è utilizzato per generare queste modulazioni, la sua uscita viene disabilita per non aggiungere suoni non voluti. |
ENV3 |
Come per il registro precedente, solo che in questo caso viene copiato il valore istantaneo dell'ADSR di OSC3.
Utilissimo per generare più o meno lente variazioni di altri parametri e ottenere, per esempio, effetti Whaa-Whaa, Phaser, ecc |
L'inviluppo del segnale è suddiviso in 4 parti, rispettivamente:
A = Attacco (Attack): tempo impiegato per portare il segnale di uscita da 0 al valore massimo (Peak Amplitude).
D = Decadimento (Decay): tempo impiegato per passare dal valore di picco al valore stabilito da 'Sustain'.
S = Sostegno (Sustain): valore intermedio di ampiezza del segnale (16 livelli possibili).
R = Rilascio (Release): tempo impiegato dal segnale per passare dal valore intermedio al valore 0.
L'avvio del segnale ADSR è dato dal comando di Gate (bit 0 del Control Register).
Non appena Gate va a 1, inizia il tempo di Attacco, a cui segue il Decadimento; il segnale si assesta quindi al valore stabilito
da Sostegno finchè il comando di Gate torna a 0. A questo punto inizia il periodo di Rilascio.
E' importante notare che il ciclo può essere interrotto in qualsiasi momento portando il Gate = 0; in questo caso inizierà
la fase di Rilascio indipendentemente dal valore attuale raggiunto.
Un nuovo comando di Gate = 1 riprenderà immediatamente il ciclo dal valore corrente.
E' importante ricordare che questo chip è stato pensato per accoppiarsi alle CPU della famiglia 65xx/68xx usate
nei computer Commodore (e anche Apple, Atari e altre).
Tali CPU dispongono nativamente dei segnali 02 (clock), R/W e RST; anche il segnale CS è normalmente generato dalla
decodifica diretta dell'indirizzo presente sul bus. Questo significa che un'operazione di lettura scrittura nella
mappa di memoria riservata al SID genera automaticamente e con la corretta temporizzazione questi segnali.
Ben diverso è pilotare il chip con un moderno processore tipo PIC; non è possibile avere l'abilitazione del chip
e/o la scelta tra lettura e scrittura contemporanemente all'operazione di trasferimento dati.
Occorre quindi seguire una sequenza corretta e precisa nel codice assembler di comando.
In sostanza, i passi da seguire sono:
Purtroppo (e questo è l'aspetto frustrante del SID) non esiste alcun tipo di riscontro che la sequenza abbia
funzionato, se non il fatto che il SID suoni o varii il suono corrente.
Ovvero, se c'è anche un unico errore da qualche parte, il chip sta zitto e vai a capire dove qualcosa è andato storto
(personalmente ho perso 3 settimane di prova/modifica/ritenta).
Il chip SID
in preparazione