• No se cuando voy a poder terminar el proyecto en el PIC, tampoco se a que lo voy a destinar, pero seguramente vas a tener uno para experimentar, imaginate un clon de Altair con sintetizador de voz, no es poca cosa para una maquina de unos pocos bytes. shades.png

    pastbytes
    Seria genial wink
    Mi idea tambien es -como sabes- llegar a una compu de 8 bits mas o menos funcional.
    Cuando el "clon" del Altair esté ok, creo que me voy a largar a hacer algo parecido al KIM-1 (aunque con más recursos) que me sirva de base para el modelo definitivo.
    Cuando tenga mas claras las cosas paso datos asi pensamos en el sintetizador de voz shades.png
     

  • Pfffssss....
    Increíble las cosas que cocinan Uds...., si fueran chefs estarían en el Hilton de NY !!! (si es que hay uno ahí... supongo que si)

    Felicitaciones de nuevo a ambos por todo lo que hacen y por compartirlo.
     

  • Bueno, estuve en los pocos tiempos que pude mejorando bastante el sintetizador basado en PIC16, actualice todos los sonidos antiguos que estaban almacenados en 7 bits de resolucion (ya que el sintetizador usa 8 bits), tambien recapture algunos sonidos a la nueva tonalidad de voz que es mas baja que la original. En esta version no solo baje el tono de voz sino tambien la frecuencia de muestreo, asi que hubo que rehacer bastantes sonidos, pero la voz es mucho mas clara asi, aun a pesar de estar perdiendo ancho de banda en la generacion de sonidos (ahora es de alrededor de 3.5KHz). Pude resolver algunos sonidos que me complicaron desde que empece hace unos años ya, como la G o la B, ahora como complicado solo queda el sonido de la SH que es dificil generar correctamente por programa (se utilizan generadores de numeros al azar para hacer ruido y luego se lo modula por programa para que se parezca al sonido real).
    En los ultimos dias tambien adapte el programa a 20MHz, no es que lo necesitara porque corre perfectamente a 8MHz, pero estoy preparandolo para recibir los datos por RS232 a 300bps, y dado que el oscilador interno que trae el PIC16F648A que estoy usando es de 4MHz, insuficiente para el sintetizador, no tenia mucho sentido mantenerlo corriendo con un cristal de 8 en vez de usar uno mas comun de 20MHz. Esta adaptacion a RS232 requirio cambios radicales en el programa, radicales no porque sean tan drasticos sino porque son los primeros que hago en ese sentido desde hace como 5 años. Hasta el momento el programa funciona con el sintetizador como tarea de fondo reproduciendo los fonemas de una lista de reproduccion en memoria, el programa no estaba preparado para aceptar un flujo de datos ininterrumpido como seria el caso con una conexion RS232, asi que ahora la lista de reproduccion se implementa de manera circular. Falta implementar la recepcion serie y resolver algunos detalles para cuando se llene el buffer. En cuanto a la velocidad y el tipo de conexion, elegi RS232 y 300bps por una razon, quiero que se pueda usar como modulo de maquinas de 8 bits, en particular la C64, la Spectrum con Interface 1, la Apple IIc y las portatiles Epson de 8 bits que tengo. Por el momento no puedo usar la UART del PIC porque la minima velocidad posible a 20MHz esta ligeramente por encima de los 1200bps, que puede ser mucho para algunas maquinas, pero en el futuro el programa seguramente soportara velocidades mayores.
    Les dejo otra prueba de audio actual, con esto se van a dar cuenta de por que se podria llamar Terminator. shades.pngcheesey.pngbiglaugh.png

    ]test_hastalavista.zip[/file]
     

  • Estuve haciendo una filmacion de algunas placas con el sintetizador de voz, en total 3 versiones, desde la primera hecha en 2005 hasta la actual que esta en progreso. Subi un video a youtube con la primera version, que todavia funciona, incluyo el comentario que puse en youtube.


    Primer version del sintetizador de voz iniciada a mediados del año 2005. Este experimento era una modificacion del motor de sonido hecho para emitir tonos telefonicos (DTMF) con un PIC16F877, usando la salida PWM del PIC. Ese proyecto utilizaba un cristal de 16MHz, pensando en reducir luego la frecuencia a 4MHz y poder hacer los ajustes de tiempos con mas facilidad que pasando de 20MHz a 4. La placa que se ve en el video es un conjunto de proyectos, incluyendo a la version actual que tambien esta armada ahi. Inicialmente se uso un cristal de 4MHz, y si bien esta aun colocado en la placa, el programa utiliza el oscilador interno de 4MHz, que le da la precision suficiente para emitir DTMF sin problemas, incluso en mejor calidad que los telefonos convencionales. El circuito esta compuesto por un PIC16F628A (primero era un 16F628), un filtro RC en la salida PWM (una resistencia de 4K7 y un capacitor de 100nF) para dejar pasar audio hasta 4KHz, un teclado telefonico con 6 diodos para leerlo usando 4 pines, y un conector de audio, en este caso RCA. El PIC esta alimentado con 5V a traves de un regulador. Este programa nunca llego a terminarse porque en un momento empezo a distorsionar el sonido, y luego de investigar el codigo, descubri que quitando una sola instruccion a la rutina de interrupcion, la distorsion cesaba. La conclusion fue que ese era el limite para un programa a 4MHz, ya que las mejoras al motor de sintesis provocaban que no se terminara de atender la interrupcion antes que llegara la proxima. Se puede apreciar en el video que el teclado no responde siempre bien, esto es porque fue un experimento para leerlo con menos de 7 pines, y no tiene codigo anti rebote. La siguiente version del programa pasaria a un PIC16F648A, y en muy poco tiempo a un PIC16F873A, donde se elimino el teclado ya que se conectaba a la linea telefonica (la placa de este video tambien emite el sonido a la linea telefonica cuando se desviaba al sonido con un jumper hacia un transistor conectado a la linea), y los comandos se recibian a traves de un chip detector de DTMF.
    El sonido de este motor de sintesis era bastante robotico, y la voz que se uso de referencia para sintetizar no estaba bien capturada, pero sirvio para saber que era posible hacer un sintetizador con pocos recursos. En el programa, el motor de sintesis corre de fondo en la interrupcion de PWM, mientras que el programa principal lee el teclado y llama a diferentes rutinas para cargar la secuencia de fonemas en una lista de reproduccion de acuerdo a la tecla leida. Luego ajusta el puntero al inicio de la lista y activa una bandera, la cual es detectada por el motor de sintesis y comienza la reproduccion del sonido.
    En esta prueba el programa lee el teclado y segun la tecla presionada, emite el tono DTMF correspondiente y luego dice el numero, asterisco, o numeral. Si se conecta a la linea telefonica, se puede marcar los telefonos perfectamente utilizando esta placa.
     

  • Segundo video.



    Esta es la primera aplicacion comercial del motor de sonido, aunque no se utilizo el sintetizador de voz en ese caso. La placa que se ve es una alarma completa que va integrada en una sirena, utiliza un PIC12F683 de 8 pines, funcionando con oscilador interno de 8MHz, la alarma se hizo en 2010 y el programa esta construido alrededor del motor de sonido, el programa principal activa banderas para manejar la emision de sonido como si estuviera manejando un periferico mas, por lo cual la programacion es bastante simple y toda la complejidad queda en la rutina de interrupcion. En los 2K del PIC entra el motor de sonido, la recepcion de radio para leer controles remotos y sensores inalambricos, y el codigo de la alarma.
    Para probar la segunda version del motor de sintesis de voz se utilizo la misma placa de la alarma pero con el amplificador modificado para reducir la potencia y poder utilizar un parlante chico, ya que esta diseñado para conectarse directamente a una sirena. Se conservo en el programa la recepcion de radio y el motor de sonido, a lo que se agregaron los fonemas y se eliminaron los sonidos de la alarma. Lamentablemente no se pudo hacer que entrara el sintetizador completo, quedan afuera 2 fonemas, por lo cual habia que elegir cuales eliminar segun las palabras que se iban a reproducir. Eliminando la recepcion de radio se ahorraria bastante memoria para que el sintetizador este completo, pero quedaria encontrar una manera de comunicarse con el exterior con poco codigo para recibir los comandos externamente.
    Ya que se utilizan partes de alarmas, y el control remoto tiene 2 botones, solo se podian probar 3 comandos y asignarle al programa una frase por cada uno. En este caso se puede recibir un comando presionando el boton izquierdo del control, con lo cual el programa dira 'IZQUIERDO', otro con el boton derecho del control, con lo que el programa dira 'DERECHO', y un ultimo comando presionando ambos botones, con lo que el programa dira 'AMBOS'. Este segundo motor de sintesis paso luego a un PIC16F648A (de 4K) que es el minimo que se usara por el momento, primero se siguio trabajando a 8MHz, pero dado que este micro solo llega a 4MHz con el oscilador interno y no tener mas remedio que usar cristal, tenia mas sentido trabajar a 20MHz que seguir trabajando a 8MHz. La prueba con 12F683 fue simplemente un desafio propio para saber si era posible que el sintetizador mas avanzado entrara en tan poca memoria, ya que hace años que el sintetizador ocupaba entre 1K y 2K (siempre hablando de palabras de 14 bits, no bytes), sin contar el programa principal.
     

  • Tercer video.



    En este video se puede ver la placa de desarrollo de la alarma anterior, que es una antigua placa de receptor con reles, adaptada totalmente para las entradas y salidas de la alarma y conservando solo el receptor y algun led del diseño original. Esta placa tiene salida de audio, por lo cual se hicieron las pruebas conectandola a la entrada de linea de la placa de sonido de la PC, con lo que se puede apreciar mejor la voz.
     

  • Cuarto video, con publicidad "subliminal" incluida. cheesey.pngcheesey.pngcheesey.png



    Esta es la version mas actualizada del sintetizador de voz, que por esas casualidades (o por no tener ganas de ir a comprar una placa nueva) termino armada en la misma placa que el sintetizador original, 6 años despues. El proyecto se basa en un PIC16F648A corriendo a 20MHz, podria funcionar a 8MHz pero no tiene mucho sentido salvo que se use un PIC con oscilador interno a esa frecuencia, como el PIC16F88. La idea de este proyecto es hacer un chip sintetizador de voz controlable externamente, principalmente para su uso por computadoras de 8 bits y hard modesto, por lo cual inicialmente aceptara comandos por RS232 a 300bps o por una conexion paralelo pensada para comunicarse con un microprocesador de 8 bits como el 6502, el Z80 u otros. En principio la intencion es conectarlo por RS232 a una Commodore 64, a una Epson HX-20, a una Spectrum 48K con Interface 1, y luego a un 6502 y un Z80 en un proyecto que tenemos para armar una computadora retro de 8 bits. Para conectarlo a una MSX habra que armar un cartucho y utilizar dos puertos de E/S del Z80, o tener una placa RS232.
    El circuito en este caso esta compuesto por el PIC, un cristal de 20MHz con sus dos capacitores de 33pF, el mismo filtro RC para la salida de audio (4K7 y 100nF), un MAX232 con sus 4 capacitores de 1uF y su conector DB9 para implementar el puerto RS232, un conector de audio para miniplug estereo de 3.5mm, y un conector para el bus de CPU, que requiere ademas un latch y un buffer, pero se armara cuando haya una computadora a la cual conectarlo.
    Dado que todavia no esta terminada la comunicacion con el exterior, implementada en la misma rutina de interrupcion, por ahora solo se puede probar una frase agregada al programa, y esta es la razon para que siempre diga lo mismo en todas las pruebas. Para cambiar la frase hay que cambiarla en el programa y volver a grabar el PIC.
    La frase que se escucha en esta prueba es 'HOLA, MUNDO. VISITEN RETROCOMPUTACION.COM'
    Haganle caso, el PIC sabe lo que dice wink
    Tambien se puede ver en el video la captura en la PC de la salida de audio del PIC, y como se ven las ondas en GoldWave y Spectrum Analyzer Pro.
     

  • Ultima parte.



    En este video se puede ver un detalle de la ultima placa, faltaria el regulador de 5V que se reutiliza de otra parte de la placa. En el conector para bus se tiene tambien dos pines para alimentar la placa externamente con 5V.
    En esta prueba se conecto la placa a unos parlantes de PC relativamente baratos, y se puede apreciar que el sonido mejora un poco, ya que los propios parlantes hacen de filtro y eliminan armonicas que el modesto filtro RC deja pasar. Quedara para el futuro mejorar el filtro de la salida PWM.
     

  • Expectacular!  amazed.png
    Hace un tiempo que tengo este thread separado para mirarlo con detalle porque me interesa mucho el tema, pero habia que dedicarle un tiempo (hay muchas letritas!)
    Recien hoy empece a leerlo, baje el programa y lo corri en la C64.....No puedo creer que este escrito en basic!! Un programa Basic me dijo HOLA!
    Te felicito, muy buen tu laburo, y por ahora solo lei los 2 primeros mensajes y corri el programita Basic, despues miro el resto (hay muchisimas letritas veo!).
    Saludos
    MARCOS
    PD: La presentacion del programita esta muy linda, los titulos, los colores, etc!
     

  • Loco...es fantástico como pronuncia RETRO, o sea, no le patina la R ni un poco, en general lo que escuche sintetizado justamente "patina" en ese asunto. Muy bueno !
     

Moderador (s): homecomputer, Selandari, ArielP, pastbytes, Durandal