BoxIdee

Il chip SID

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


pin del chip 6581 6582 8580

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).




I pin del SID

Pin 5 RESReset del chip (attivo basso)
Pin 6 O2Segnale di Clock - valore = 1MHz
Pin 7 R/WComando Lettura (=1) o Scrittura (=0)
Pin 8 CSSegnale 'Chip Select' attivo basso
Pin 9-13Indirizzo dei Registri (da 0 a 29)
Pin 14Massa
Pin 15-22Porta Dati a 8 bit
Pin 23-24Connessioni ai potenziometri
Pin 25Alimentazione digitale +5V
Pin 26Ingresso segnale audio esterno
Pin 27Uscita audio
Pin 28Alimentazione analogica (+9 / +12V)

Note sui pin

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.

Lo schema a blocchi

schema a blocchi del chip SID 6581/6582/8580

I Registri

registri del SID
registri del SID
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 VOCI

I 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

Il registro Control stabilisce il modo di funzionamento dell'oscillatore come indicato di seguito:

D0 - GateAvvio e termine del ciclo ADSR. N.B. quando Gate = 0 non ci sarà alcuna uscita dal relativo oscillatore
D1 - SyncSync=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 - RingRing=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 - TestDeve sempre essere = 0. Il livello 1 serve per Test o applicazioi particolari
D4 - TrianSelezione 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 - RampSelezione l'uscita del segnale a Rampa (dente di sega)
D6 - PulseSelezione l'uscita del segnale Impulso (onda quadra)
D7 - NoiseSelezione l'uscita del segnale Noise (rumore). Il segnale è una frequenza casuale incentrata sulla frequenza stabilita dal registro Freq

Registri FILTRI

FC Lo
FC Hi
stabiliscono il valore da h0000 a hFFF della frequenza centrale del filtro, tra circa 30Hz e 12KHz.

Registro Res/Filt

Filt 1Filt 1=0 passa il segnale di OSC1 direttamente all'uscita. Filt 1=1 elabora il segnale tramite il Filtro
Filt 2Come per Filt 1, relativamente a OSC2
Filt 3Come per Filt 1, relativamente a OSC3
Filt ExCome per Filt 1, relativamente al segnale analogico esterno AUDIO IN
Res 0..3Stabiliscono la frequenza di risonanza (fattore di merito) del filtro, tra 0 e 15 (massimo effetto)

Registro Mode/Vol

D0..D3Stabiliscono il volume di uscita dal Mixer da 0 (mute) a 15 (massimo livello)
D4 - LPAbilita la funzione Passa-Basso (circa 12dB per ottava)
D5 - BPAbilita la funzione Passa-Banda (circa 6dB per ottava)
D6 - HPAbilita 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.

Funzione dei Registri MISC

POTXRiporta 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
POTYCome 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

Significato e valori dell'ADSR

modulo ADSR del SID

L'inviluppo del segnale è suddiviso in 4 parti, rispettivamente:

tabella valori dell'ADSR del SID

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.

Note sul comando del SID

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:

  •  portare a inattivo (1) il CS
  •  caricare nella CPU il dato da trasferire
  •  emettere sulla porta assegnata il dato precedente
  •  selezionare l'operazione di lettura o scrittura modificando il bit relativo al pin R/W
  •  caricare nella CPU l'indirizzo del registro da selezionare
  •  emettere sulla porta indirizzi il valore dalla CPU
  •  portare a 0 il pin CS
  •  inserire un eventuale ciclo di attesa (NOP), anche in funzione della velocità di clock della CPU
  •  riportare a 1 il pin CS

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).



Progetto My SID

Il chip SID

  • Caratteristiche HW
  • Registri e comandi
  • Note d'uso

Progetto Hardware modulo di comando del SID da PIC
  • Il modulo picSID
  • Modulo ausiliario auxSID
  • Ingegnerizzazione

Progetto Protocollo
  • Protocollo SIDcom

Progetto Firmware
  • Schema a blocchi
  • Il Firmware

Progetto Software Programma per Windows di comando PIC e SID 6582

in preparazione