50 ways... Interfacing Arduino with the mythic AY-3-8910 sound chip

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Abstract

Abstract in English

Resum

Referències

El xip AY-3-8912 és el que porten els ZX Spectrum 128 i superiors, i que va millorar molt el so respecte el ZX Spectrum +.

cercant en eBay es pot comprar el xip (Estats Units i Hong Kong), el AY-3-8912 o el AY-3-8910, per uns 10e i sense despeses d'enviament.

Aquest projecte està relacionat amb el concepte de chiptune: http://en.wikipedia.org/wiki/Chiptune. També hi ha informació a Internet sobre AY music.

Exemple de projectes d'Arduino i AY-3-8910/12:

També es pot utilitzar el YMZ284: this chip is a workalike of the popular AY8910 and a cheap and easy way to get synth ability on an Arduino. En aquest cas, n'hi ha un que ja ho ha connectat a l'arduino i dóna el codi (s'hauria d'adaptar el codi al AY8910):

Exemple de codi amb el ZX Spectrum (el 128K i superiors són els que porten el xip):

En el cas dels Commodore 64 s'utilitza el xip SID (Custom SID 6581 & 8580, Sound Interface Device), un xip molt popular per a fer xiptunes, i que disposa d'una àmplia col.lecció de música i emuladors:

Objectius

AY Music Utilities

Dins de http://www.worldofspectrum.org/utilities.html hi ha l'apartat AY Music Utilities, on puc accedir a fitxers AY de jocs i demos, i a players de fitxers AY:

Plays AY files. [02/03/06] no compila perquè necessita unes llibreries que deuen estar molt desfasades (2006)

An excellent player that accepts all of the file formats OUT, ZXAY, STC, ZXS, ASC, YM (YM2, YM3, YM3b, YM5 and YM6), VTX, PSG, EPSG, STP, FTC, FLS, PSC, PSM, PT1, PT2, PT3, SQT, GTR, FXM, AY (EMUL and AMAD) and AYM, plus various others formats such as MP3, MOD, MID, CDA and so on. This utility can do more than 'just' play music. It can also be used to convert between formats and rip music from a wide range of Spectrum file formats! [28/09/06] Interested people can also get the source code of this player at Sergey's site. Also available for all 2.x versions is Skin Manager II! (and various skins are available on Sergey's site) [25/05/03]

De moment no me n'he ensortit.

Converts a MIDI file to an AY file. [27/12/05]

Desenvolupament

cristalls de quarç i oscil.ladors de cristall

compte! són coses diferents. Els cristalls de quarç tenen dues potetes i necessiten circuiteria externa per oscil.lar (R, C), i els oscil.ladors de critall de quarç ja tenen tota la circuiteria (4 potetes, V, GND, output i NC)

per veure un exemple de projecte fet amb el AY-3-8910 i veure com es connecta el rellotge

En aquest cas no s'utilitza un cristall sinó que amb dues portes NAND i un circuit RC es pot aconseguir un oscil.lador. Les portes NAND poden ser un IC CD4011 (llibre 30 montajes para iniciarse en la electrónica, pag 130, on es construeix un metrònom amb portes NAND). Finalment com a portes NAND faig servir un SN7400: Fitxer:Sn7400.pdf

Les proves que he fet amb l'oscil.loscopi em donen una freqüència de 20KHz, que no em val per al que vull. Més informació de com muntar un oscil.lador amb portes NAND a:

Some datasheets for the AY have a frequency table for a 1.78975MHz clock, or half of the NTSC frequency.

Una altre projecte on es pot veure com es connecta el rellotge:

en aquest cas s'utilitza un oscil.lador que va a 3.57MHz, i amb un flip-flop (74HC74) suposo que ho redueix a la meitat (1,78MHz).

Projecte:

De l'esquema que podem veure a

es pot deduir lo simple que és connectar el cristall de qurz de 2MHz. Però en realitat no és un cristall de quarç, és un oscil.lador TTL. Per una banda Vdd a una pota, i a l'altra pota ja ho podem connectar al pin22 del AY-3-8910. En aquest disseny no s'utilitzen condensadors ni resistències, és el disseny més simple.

però no s'utilitzen condensadors i resistències perquè de fet estem utilitzant un oscil.lador TTL, com s'explica al final de tot de

Per tant, una cosa és un cristall que necessita circuiteria (2 potetes), i una altra cosa és un oscil.lador (4 potetes), que ja incorpora el cristall i tota la circuiteria. Típicament, les quatre potetes de l'oscil.lador són N/C, GND, 5V i Output.

Oscilador TTL 

Este tipo de oscilador está basado en un Cristal que contiene toda la circuitería para generar una onda cuadrada. Este ha de ser conectado como si de un generador de señal externa se tratase. Al incluir toda la circuitería esto lo convierte en la opción más costosa; pero representa la forma más práctica por la cantidad de conexiones y por la precisión en la señal de reloj emitida. En la imagen de la siguiente figura se muestra como debe conectarse al microcontrolador y las características del cristal. 

Estos tipos de cristales están diseñados especialmente para tecnologías TTL. La frecuencias disponibles para esta versión de cristal son muy amplias y las mas usuales son 1 - 1.8432 - 2 - 4 - 8 - 10 - 11.059 - 12 - 14.31818 - 16 - 20 - 25 - 32 - 33 
- 40 - 50 - 80 y 100 Mhz. 

Oscil.lador tipus XT PIC XTAL.jpg

Finalment, els muntatges habituals es fan amb cristalls de quarç. Ara bé, compte!, no oscil.len per sí sols, sino que necessiten d'una ajuda per oscil.lar, per entrar en freqüència de ressonància. Això s'aconsegueix amb 2 condensadors (que han de ser iguals), i la idea és que en l'oscil.lació els condensadors es carreguen i descarreguen. Es tracta del muntatge tipus XT, com es pot veure a:

En aquest cas es connecta a un PIC:

Frecuencia de Oscilación  	C1  	C2
455 Khz 	47 - 100 pF 	47 - 100 pF
2 Mhz 	        15 - 33 pF. 	15 - 33 pF.
4 Mhz 	        15 - 33 pF. 	15 - 33 pF.

En el cas de l'arduino no tenim aquests condensadors. Això és senzillament perquè aquests condensadors ja estan integrats en el microcontrolador Atmel.

Per tant, en el meu cas de fer oscilar el Atmel a 2MHz amb un cristall de 2MHz, necessito dos condensadors de 15-30pF (suposant una tensió de 5V, doncs sembla ser que amb una altra tensió el marge de valors podria canviar). Per tant, sempre ho hauré de comprovar amb l'oscil.loscopi.

En qualsevol cas, si vull estudiar el tema dels oscil.ladors i estar segur de la velocitat de rellotge de sortida, necessitaria un oscil.loscopi. (ja el tinc :-))

M'és impossible trobar oscil.ladors de cristall. Dues possibles solucions:

1. Aquí hi ha un esquema de com aconseguir un rellotge de 2MHz:

solució!!!

i aquí hi ha un altre esquema d'ocil.lador utilitzant unes portes NAND (74LS00):

jo tinc un SN7400 (4 portes NAND), i en principi m'hauria de valdre. Oscillator circuit.PNG Ho he comprovat amb l'oscil.locopi: ona quadrada de 2MHz (amb un cristall de 2MHz).

Una altra possibilitat és la que em suggereix el Programmable Sound Generator (PSG) Data Manual del AY-3-8910, que en la pàg 31 i 37 veig com es pot generar un puls de rellotge de 1,78MHz a partir d'un rellotge de 3,57MHz (la meitat). Utlitza els integrats CD4013 (per dividir la freqüència per la meitat) i CD4069 (CMOS inverter)(o en el text diu 4089, deu ser un error, doncs ś un CMOS Binary Rate Multiplier).

Com connecto la sortida d'audio?

Ho podem llegir a

    What do I need for that? The things between the 3 channel outputs on the YM-2149F and the 3.5mm jack.

    you need to put a charge on the output, else it will not sound right.

http://www.midibox.org/dokuwiki/doku.php?id=midibox_ay_3_8912_mixer. L'avantatge és que és un mesclador i controlo la proporció de cada canal. En el lloc tinc la placa base PCB que es pot utilitzar o tornar-la a fer en el Eagle si m'interessa.

Amplificació

L'amplificació del senyal de sortida em baso en l'esquema de la pag 32 ó 37 de la guia de programació del AY-3-8910, que és bàsicament el mateix esquema que es pot veure en el datasheet del LM386 (Fitxer:LM386.pdf)

Prototip

Eagle

Video

Transcripció català

Aquest és el mític xip AY-3-8910, és un Generador de Sons Programable. Jo l'he comprat a eBay per 10 $. Existeix una altra versió que funciona igual, el YZ... Aquest xip és la base dels sons dels videojocs i consoles dels anys 80. Per exemple, el ZX Spectrum 128 o Atari. (...). La diferència entre el ZX Spectrum de 48K i el de 128K és que la primera versió no disposava d'aquest xip, i això significa que és el microprocessador, el Z80, qui s'ha d'encarregar de generar els pulsos d'audio a una freqüència audible. Això significa gastar molts recursos de processador aconseguint una qualitat mediocre. Per contra, en el cas del ZX de 128K, que ja incorporava aquest processador d'audio, el microprocessador Z80 envia ordres del tipus toca una nota musical, i és el xip d'audio el que s'encarrega de generar els pulsos d'audio. No només això, sinó que aquest xip té tres sortides d'audio independents que es poden mesclar, un generador de soroll, es pot programar les envolvents de les notes, de manera que es pot definir l'atac o el release de la nota... i també podem definir envolvents de baixa freqüència per aconseguir efectes com el tremolo o vibrato.

Per tant, tenim tot un xip d'audio programable, i ara només ens cal conèixer el seu funcionament intern per aconseguir diversos efectes que es poden sentir en els mítics chiptunes dels videojocs dels anys'80.

En el nostre cas, el host que utilitzem és un Arduino o qualsevol placa basada en un microcontrolador Atmel, i el programa que carreguem en el microcontrolador envia els missatges per tal que el processador d'audio toqui Una Plata d'Enciam. Mirem com sona aquesta cançó com a melodia chiptune.

Transcripció castellà

Transcripció anglès

Notes tècniques

Enllaços


creat per Joan Quintana Compte, febrer 2011

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines