Sintetizador de voz controlado por la salida MIC

Si por algo se caracteriza el Spectrum es por su gran variedad de periféricos (clásicos y modernos)

Moderador: Sir Cilve Sinclair

Responder
pastbytes
rst 0
Mensajes: 30
Registrado: Vie Mar 02, 2012 7:03 am
Ubicación: Argentina
Contactar:

Sintetizador de voz controlado por la salida MIC

Mensaje por pastbytes » Lun May 09, 2016 6:17 pm

Esta es una actualizacion del hilo del sintetizador de voz por RS232: http://foro.speccy.org/viewtopic.php?f=8&t=3165

Hace unos años que estoy desarrollando un sintetizador de voz y sonido implementado con un microcontrolador PIC. Mi intencion siempre fue hacer un circuito minimalista que cualquiera pudiera armar, pero al conectarse por RS232 esto complicaba las cosas tanto con el soft como con el conexionado.
Las primeras versiones fueron dispositivos RS232 estandar, que en el PC se conectaban directamente al puerto serie, y en el Spectrum requeria una Interface 1 o un modelo con puerto RS232. En los Commodore ya se pudo reducir la placa, ya que disponen de un puerto RS232 a niveles TTL, lo que evita la conversion de voltajes y sus componentes asociados.
Cuando quise conectar el sintetizador a los MSX, surgio la placa mas reducida, que se conecta al puerto de joystick, aprovechando que el MSX viene con un pin de salida. Hasta ese momento, en Commodore, Spectrum y PC, se usaban las ordenes soportadas en el BASIC para enviar los comandos al sintetizador. Pero en MSX ya no habia puerto serie incluido como estandar, mucho menos instrucciones en el BASIC, por lo que hubo que implementar un "driver" en asm que se pudiera llamar desde el BASIC con un texto a enviar al sintetizador. En Commodore se enviaba los datos a 1200 bps, en PC el limite era la UART utilizada, en Spectrum la ROM soporta hasta 19200 bps, que es la misma velocidad que soporta el driver de MSX.
La idea de conectar la placa a distintos ordenadores era poder tener un hard unico para todos, de forma que un juego pudiera emitir el mismo sonido exacto en cualquiera de ellos, sabiendo que el chip podia conectarse a todos. Pero empezo a ser evidente que estando limitado al uso desde el BASIC las posibilidades no eran muchas, por lo que empece a analizar alternativas. La primera fue conectar el chip directamente al bus de expansion, utilizando un acceso en paralelo, pero esto nunca llego a materializarse por distintas razones.
Entonces se me ocurrio que si podiamos enviar los datos lo suficientemente rapido, y no enviar continuamente, sino un byte en cada interrupcion de video, el sintetizador podria ser usable desde juegos desarrollados en asm o C. Para que esto fuera posible, la velocidad tendria que ser bastante alta. La maxima soportada por el sintetizador es 57600 bps, lo que nos da alrededor de 170 microsegundos por byte. Si se implementa un buffer del cual se envie un byte a 57600 bps en cada interrupcion de video, esto deberia ser suficiente para cualquier texto que se necesite.
La primera prueba que hice a 57600 bps fue en el Commodore 64, con su humilde 6510 a 1MHz, fue posible tanto enviar como recibir bytes a esa velocidad, lo cual implica que tambien es posible con el Z80. Pero en el Spectrum quedaba otro obstaculo importante, que es la necesidad de disponer de un puerto RS232 para poder utilizar el sintetizador, y eso es lo proximo que me propuse resolver.
Inspirado en este proyecto http://www.qsl.net/kp4md/petascii.htm para enviar datos por RS232 desde un ZX81 a un Commodore 64, utilizando la salida MIC del ZX81, amplificando y adaptando la señal a TTL, decidi hacer la prueba con ese hard y el driver utilizado en la version MSX del sintetizador. Despues de algunas pruebas fallidas y varios ajustes, hoy ya puedo decir que tengo una placa de sintetizador de voz minimalista para Spectrum.
Como no sabia si tendria exito, y para no armar una nueva placa, decidi utilizar la placa del sintetizador para MSX, que recibe los datos y la alimentacion desde el puerto de joystick, por lo que la nueva placa tendria que tener una salida DB9 con las señales necesarias para controlar la version de MSX.
Aqui hay unas fotos de las placas, la grande es el sintetizador para MSX, la pequeña es el circuito de adaptacion desde la salida MIC a niveles TTL, para controlar la placa para MSX:

Imagen
Imagen

La placa lleva 2 transistores BC548, dos resistencias, un diodo y los conectores, se alimenta con una fuente de 5V:

Imagen
Imagen
Imagen

El Spectrum con el sintetizador HD1 para MSX, el adaptador, y los altavoces de PC:

Imagen

Y por ultimo, una captura de lo que sale por MIC al enviar el texto "HOLA";

Imagen

Aqui se puede ver el sintetizador HD1 funcionando, controlado por la salida MIC a 19200 bps:



Lo que sigue es escribir una nueva rutina para enviar a 57600 bps, y despues implementar un buffer del cual se envie un byte en cada interrupcion de video, aunque estando en tantos proyectos, y siendo que el asm del Z80 no es lo mio, seguramente esto tomara un tiempo.
Me olvidaba de lo mas importante, a lo largo de este proyecto fueron apareciendo varios sintetizadores de voz, pero actualmente solo hay 3; HR4, HR6 y HD1. Probablemente venda los chips grabados con el sintetizador HR6, el HD1 esta en desarrollo y seguramente lo va a estar por meses, tal vez 1 año, y el HR4 va a estar disponible gratuitamente, aunque no va a ser libre. No voy a publicar el codigo fuente, solo va a estar disponible el binario para un microcontrolador PIC 16F648A, y no se permite modificar el codigo, sin embargo se van a poder modificar las tablas de ondas de los 3 instrumentos musicales que incluye, y el texto que el chip habla al arrancar, que van a estar almacenados en la memoria EEPROM.
Lamentablemente, por falta de tiempo no se cuando voy a poder publicarlo, ya que hay que hacer unas modificaciones antes de que este listo, espero que no sea mas de un mes.
Si ven en mi canal de youtube, hay varios videos donde se puede apreciar como suena cada version.

pastbytes
rst 0
Mensajes: 30
Registrado: Vie Mar 02, 2012 7:03 am
Ubicación: Argentina
Contactar:

Re: Sintetizador de voz controlado por la salida MIC

Mensaje por pastbytes » Mié May 11, 2016 7:21 am

Este es el circuito de esta version del sintetizador HR4:

Imagen

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 14 invitados