- como construir tus unidades de nano SwinSIDb -

Introducción
Este tutorial explica paso a paso como construir el nano SwinSID, el clon del SID. 
SID ( Sound Interface Device ) es el sobrenombre con el que se conoce a los chips de sonido MOS6581 y MOS8580 utilizados en prácticamente todos los ordenadores de 8-bits de Commodore en los años 80 y principios de los 90, y más tarde también en algunos sintetizadores como la SIDStation. En el momento de su aparición era el generador de sonido orientado a ordenadores domésticos mas avanzado que existía. Este dispone de 3 canales de audio, cada uno con su propio generador de envolvente, con su porpio generador de onda ( rampa, triangular, pulso y ruido ), y de un filtro compartido configurable para actuar como paso-alto, paso-banda o paso-bajo. Es una versión digital muy simplificada de los sintetizadores basados en sintesis sustractiva ( osciladores-ADSRs-filtros ). Sus posibilidades de sonido y el hecho de que el Commodore 64 fuera uno de los ordenadores de 8-bits mas vendidos de la historia, han convertido al SID en uno de los chips de referencia del sonido chiptune.

El SwinSID es un clon del SID implementado mediante microcontrolador. El SID original fue diseñado por el ingeniero Robert Yannes ( quien mas tarde fundaría Ensoniq ) y producido por Mostek desde principios de los 80 hasta principios de los 90. A pesar de que la producción de este finalizó hace ya más de dos décadas, aún es posible encontrar unidades sueltas de origen desconocido en los sitios de subasta o tiendas de Internet, pero estas unidades suelen ser bastante caras y con frecuencia tienen alguna de sus partes estropeadas. No es raro encontrar unidades con alguno de sus filtros u osciladores dañados.

nano SwinSIDb junto a un MOS6581 original
El clon SwinSID fue diseñado por Swinkels en 2005, quién hizo diferentes mejoras en este a lo largo de los años. Un usuario de la comunidad forum64.de, llamado x1541, redujo el tamaño del PCB de una de las ramas del proyecto original llamada micro SwinSID. Esta versión de tamaño reducido del SwinSID es conocida como nano SwinSID. SwinSID no es 100% compatible con el SID original pero es una de las pocas opciones que existen para reemplazar los SIDs originales. La versión actual del nano SwinSIDb no implementa las entradas analógicas para los paddles, no tiene la entrada audio EXT, y en algunas situaciones no trata el sonido de forma exactamente igual a como lo hace el SID, pero aún y así es una buena alternativa a este. Swinkels explica muy bien en su página web cuales son las ventajas y limitaciones del SwinSID.
A pesar de que gran parte de la información del proyecto se encuentra disponible en la web de Swinkels, esta resulta insuficiente para construir el nano SwinSID desde cero. Uno ha de rebuscar en la web del autor y también en otros foros y páginas de Internet para obtener toda la información necesaria para construir sus nano SwinSID (p.ej. en nightfallcrew , lemon , forum64). Aún y así fui incapaz de localizar algunos de los recursos necesarios y tuve que crearlos a partir de la información recopilada de otros sitios. La finalidad de este tutorial es facilitar el trabajo a aquellos interesados en montarse sus propios nano SwinSIDb, proporcionando toda la información y explicando los pasos necesarios para ello.
Materiales y herramientas
Este es el listado de materiales y herramientas necesarias para montar el nano SwinSIDb:
- Circuito impreso del nano SwinSIDb: uno se puede hacer sus propios PCBs en casa ( algo complejo si no se tiene experiencia en ello ) o encargarlos a un fabricante de PCBs ( existen algunos fabricantes muy económicos por Internet ). Para fabricar los PCBs el fabricante solo necesita que se le proporcionen los Gerbers. Los Gerbers son unos ficheros que describen la disposición de las capas de cobre, de la máscara de soldadura, la posición de los agujeros etc. que conforman el PCB.

Esquemáticos del nano SwinSIDb creados a partir de la información obtenida de Internet
Como no pude localizar los Gerbers de la última versión conocida del nano SwinSID ( la que tiene 2 jumpers ) decidí crearlos yo mismo con el programa de diseño electrónico Altium. Primero cree los esquemáticos basándome en otros que localicé en Internet, y luego, a partir de estos, el diseño del PCB. Con el diseño del PCB listo bastó con exportarlo al formato correcto para obtener los Gerbers. Como se puede ver, los esquemáticos corresponden a la versión del SwinSID que utiliza el microcontrolador Atmega88PA. El clon tiene dos jumpers, J1 para establecer el modo de emulación de los filtros ( modo MOS6581 o MOS8580 ), y J2 para ajustar el nivel del voltaje de la salida de audio. También añadí un LED opcional en la parte inferior del PCB para crear un efecto de iluminación bajo el chip "al estilo tuning" cuando este se encuentra montado en la placa. Esta es la razón por la que añadí al nombre la coletilla 'b', para diferenciarla de la versión original de nano SwinSID sin LED creada por el usuario x1541.

Efecto de iluminación bajo el nano SwinSIDb
Estos son los parámetros de producción recomendados para los PCBs del nano SwinSIDb:
   - Grosor de PCB:1.6mm
   - Acabado de superficie: HASL
   - Grosor de cobre: 1oz
   - Color de PCB: el que se desee...

PCB del nano SwinSIDb en diferentes colores
- Componentes electrónicos del nano SwinSIDb: estos son los componentes que han de soldarse en el PCB. Al hacer el pedido es importante prestar atención al tipo de encapsulados. La mayoría de componentes son SMD ( de montaje superficial ). Se recomienda echar una ojeada a las fotos que acompañan a este tutorial para estar seguro de que se piden los encapsulados correctos. Estos son los componentes del nano SwinSIDb:
   - Resistencias:  todas en encapsulado SMD en formato 0805, R1: 1K, R2: 240K, R3: 1K, R4: 2K2, R5: 4K7
   - Condensador: en encapsulado SMD en formato 0805, 1206 o también throug-hole,  C: 100n
   - Microcontrolador: en encapsulado TQFP de 32 pines, U2: ATmega88PA
   - Oscilador: encapsulado SMD, U5: 32Mhz
   - Jumpers: throug-hole de 2mm de paso, J1 , J2.
   - Tira de pines:  throug-hole de 2.54mm de paso, 2 x 14 pines. Para evitar problemas al insertar el clon en algunos zócalos más estrechos se recomienda el uso de tiras de pines torneados.
   - Opcional: SMD en formato 0805, R6: 330 y 5V LED.

Recordar también comprar el zócalo para alimentar el chip mientras se programa, y la tira de pines y cables finos para el cable adaptador de programación.
- Soldador y otras herramientas: para soldar los componentes SMD es necesario un soldador de punta fina y no mucha potencia ( 11 W son suficientes ). También es necesario el hilo de estaño y unas pinzas para sujetar los componentes SMD sobre la placa mientras se sueldan. Es muy recomendable tener a mano malla de desoldar, flux y algún tipo de soporte para fijar la placa mientras se trabaja en ella.

Herramientas
- Firmware y herramientas de programación: el microcontrolador debe programarse con el firmware del SwinSID, y para ello se necesita:
  - un programador con soporte para el protocolo ISP de Atmel.
  - un cable especial para conectar el programador ISP a la placa del nano SwinSIDb.
  - la aplicación de programación compatible con el programador ISP.
  - una fuente de 5V o un zócalo de adaptación para proporcionar 5V al nano SwinSIDb mientras se programa.
Existen varios programadores compatibles con el protocolo ISP de Atmel. En este tutorial se muestra un clon del JTAGICE mkII de Atmel y el Atmel ICE ( este muy recomendable ), pero existen otros programadores más sencillos y baratos como el AVRISP que deberían funcionar igualmente. Si no se dispone de un programador y se va a comprar uno nuevo, el programador Atmel ICE es la mejor opción. Si se quiere ahorrar dinero y se dispone de un ordenador con puerto paralelo, es posible construirse un programador sencillo con un conector DB25 y una par de resistencias.

Cable adaptador y programador Atmel ICE de Atmel

Cable adaptador y programador JTAGICE mkII compatible con el protocolo Atmel ISP

Detalle del cable adaptador necesario para conectar el nano SwinSIDb al programador
Para enviar el firmware al microcontrolador mediante el programador hace falta también una aplicación de programación compatible con este. Algunas de las aplicaciones útiles para ello son Atmel Studio, AVR Studio, AVR Dude o cualquier otra que implemente el protocolo Atmel ISP y sea compatible con el programador.
Pasos
Estos son los pasos para montar el nano SwinSIDb:
- Conseguir los PCBs: se los puede crear uno mismo en casa o encargarlos a un fabricante de PCBs. La segunda opción es la más sencilla y la que proporciona mejores resultados, pero primero hay que localizar un fabricante de PCBs. Existen algunos fabricantes de PCBs como Itead Studio o Seed Studio dedicados al prototipaje con unos precios muy razonables para series pequeñas. Una vez localizado el fabricante de PCBs este nos solicitará los Gerbers y también los parámetros de producción ( y su dinero :) ).

PCBs del nano SwinSIDb
- Obtener los componentes: es posible que uno no pueda encontrar todos los componentes del nano SwinSIDb en la tienda de componentes de su ciudad, y por eso la mejor opción es recurrir a alguna de las tiendas on-line, tipo RS-Amidata, Farnell, Mouser or Digikey. Prestar atención a los encapsulados al hacer el pedido.

Componentes
- Soldar los componentes electrónicos: el siguiente paso tras obtener los componentes electrónicos es soldarlos en el PCB. Los componentes electrónicos SMD requieren de cierta pericia para ser soldados, especialmente los que tienen muchas patas como es el caso del microcontrolador. Ir con cuidado y no cortocircuitar ninguno de los pines. Antes de soldar asegurarse de que la orientación de los componentes es la correcta. Prestar también atención a la polaridad de LED opcional, ya que si se monta al revés este no lucirá. Una vez soldados los componentes se recomienda revisar todas las soldaduras, comprobar que la orientación es la correcta y que no hay cortocircuitos entre los pines.

Posicionamiento de los componentes
El oscilador y el microcontrolador son la parte más delicada de soldar. Algunos osciladores tienen unos pequeños puntos metálicos cerca de los pads de soldadura. Al soldar hay que ir con cuidado y evitar que el estaño llegue hasta estos puntos o hasta la carcasa metálica del encapsulado. Esto haría que los componentes no funcionaran correctamente. El siguiente vídeo muestra las diferentes etapas del montaje, incluyendo el proceso de soldadura:

Video que muestra el proceso de montaje

- Programar el microcontrolador: antes de programar el microcontrolador con el firmware, la placa del nano SwinSIDb montada, ha de conectarse al programador ISP con el cable adaptador citado anteriormente, y luego alimentarse con 5VDC ( pin 14 a GND y pin 25 a 5VDC). Para programar las unidades que se muestran en las fotos de este tutorial cree una pequeña placa de alimentación con un regulador LM7805 pero existen alternativas más sencillas. Una opción bastante más simple es utilizar un zócalo de ancho DIP de 28 pines, cortarle todos los pines menos el 14-GND y el 25-VCC y luego conectar el nano SwinSIDb con este zócalo al Commodore o sintetizador SID para obtener los 5VDC.

nano SwinSIDb montado sobre la placa de alimentación opcional
Tras conectar el nano SwinSIDb al programador ISP y haberlo alimentado con los 5VDC, hay que utilizar la herramienta software que acompaña al programador ( Atmel Studio, AVR Studio, AVR Dude ... ) para programar:
- El contenido de la memoria Flash: con el binario de la aplicación del SwinSID.
- Los fuses: para establecer la fuente de reloj y la frecuencia correcta.

Obtener primero la información del dispositivo "Device information" para verificiar que las comunicaciones entre el uC y el programador son correctas.

Programar la memoria Flash con el fichero .hex proporcionado. La EEPROM no necesita ser programada.

Configuracion de los fuses. Ir con cuidado al programar los fuses.

No modificar los lock bits!
Ir con cuidado al programar los fuses. Una configuración incorrecta puede hacer que el microcontrolador no funcione correctamente y en algunos casos que sea muy difícil, o incluso imposible, volver a programarlo. Los lock bits no deben tocarse, hacerlo puede dejar el microcontrolador bloqueado.
- Test: una vez montado, para comprobar que el nano SwinSIDb funciona correctamente, hay que instalarlo en un Commodore de 8-bits o en cualquier sintetizador que haga uso del SID, y reproducir en este alguna melodía o sonido. Recordar poner los jumpers en la configuración correcta :
-J1: este jumper permite seleccionar el modo de emulación de los filtros del nano SwinSID. El puerto PB del microcontrolador donde se encuentra conectado el jumper dispone de resistencias internas de pull-up, así cuando no hay jumper, la entrada de este puerto queda fija a Vcc=5VDC ('1') y en esta situación los filtros del nano SwinSID emulan a los del MOS8580. Cuando hay jumper puesto la entrada de este puerto queda fija a GND ('0') y en esta situación los filtros se comportan como los del MOS6581. En otras palabras: con J1 montado se activa el modo de emulación de filtros del MOS6581, y sin jumper montado se activa el modo de emulación de filtros del MOS8580.

-J2: el circuito de salida de audio del nano SwinSID está formado por una pequeña red de resistencias entre las que se encuentra R3 (1K), la cual une la salida de audio con GND. J2 permite conectar a GND o dejar al aire esta resistencia. Las palcas base de Commodore que utilizan el modelo MOS6581 ya incorporan una resistencia de 1K entre la salida de audio del SID y GND. Por este motivo cuando el nano SwinSIDb se monte en equipos que usen el MOS6581, como estos ya disponen de una resistencia de 1K a GND, no hay que montar el jumper. Habilitar la resistencia R3 en las placas que usan MOS6581 equivalidría a tener una resistencia de 1K/2=500 entre la salida de audio y GND, y esto incrementaría la caída de voltaje en R5 ( y en R4, R1 y R2), haciendo sonar más debil al nano SwinSID. Las placas base de Commodore que utilizan la versión del SID MOS8580 no incluyen la resistencia de 1K entre la salida y GND, y en este caso debería montarse el jumper J2. Por tano si la placa en que se va montar el nano SwinSIDb está diseñada para el MOS6581 entonces se ha de dejar el jumper abierto. Si en cambio utiliza el MOS8580, el jumper J2 se ha de dejar montado. En caso de que el nano SwinSIDb se use en un sintetizador habrá que investigar la línea de audio de salida para ver si esta incorpora o no alguna resistencia hacia GND. Como una configuración incorrecta de los jumpers no debería dañar nada, la opción más simple para saber como poner los jumpers es probando si suena mejor con jumper o sin jumper.


nano SwinSIDb terminados

Cara inferior del nano SwinSIDb con el LED opcional
Descargas
Estos son los ficheros necesarios para construir el nano SwinSIDb:
- Gerbers: ZIP con los ficheros de producción del PCB del nano SwinSIDb. Este contiene todos los ficheros que hay que enviar al fabricante de PCBs.
- firmware del nano SwinSID (v24/5/2012): es el fichero.hex con el binario a cargar en la memoria flash del microcontrolador. Esta es la última versión del firmware del nano SwinSID y se ha obtenido de la página del autor del proyecto.
Otros recursos de interés relacionados con el proyecto:
- Esquemáticos y diseño del PCB del nano SwinSIDb: este ZIP contiene los esquemas del circuito del nano SwinSIDb y el diseño del PCB que cree en Altium 14.1.15 en base a la información recopilada de Internet. Los Gerbers proporcionados más arriba están generados partir de este proyecto.
- Esquemáticos y diseño del PCB del nano SwinSID realizados por el usuario x1541: este ZIP contiene los ficheros del nano SwinSID original diseñado por el usuario de forum64.de x1541. Se encuentran en formato Eagle y únicamente tienen el jumper J1 para selección del modo de funcionamiento de los filtros. Se han obtenido de este sitio web.
- Una versión anterior del firmware del nano SwinSID (?/?/2011): este ZIP contiene el firmware que utilicé antes de disponer de la versión del 24/5/2012 proprocionada más arriba. Aunque es más antigua que la versión más reciente tiene un tamaño mayor (23.1Kb vs 17.8Kb) pero no se bien a que se debe esta diferencia de tamaño.
- Versión 'Lazy fix' del firmware del nano SwinSID por Code Killer (19/10/2014): ZIP con una versión modificada del firmware de Swinkels que mejora el funcionamiento del nano SwinSID en algunos juegos del Commodore 64 ( p.ej. en el Lazy Jones con temas de David Whittaker ). Se ha obtenido de aqui ( foro muy recomendable con comentarios y aportacoines de algunos "gurus del nano SwinSID").

NOTA: no he podido localizar el código fuente original correspondiente al .hex del firmware del SwinSID que proporciono más arriba. A pesar de que se podría desensamblar e intentar comprender el codigo, sería mucho mejor disponer del codigo fuente original con la estructura correcta del programa y con los comentarios del autor. Porfavor contáctame si lo localizas, y lo colgaré aquí para hacerlo accesible a todo el mundo.


... página actualizada por Tolaemon el 09-2015 ...