• Como ya habia contado antes, el desarrollo fue desde el sintetizador HR1 hasta el HR5, y luego pego el salto al HD1. Despues de eso, volvi para atras y use algunas mejoras del HD1 en el HR4, lo que dio como resultado el sintetizador HR6.
    El fin de semana se me ocurrio volver mas atras y aplicar algunas optimizaciones al HR4, para que pase a la version 1.1, el sonido no cambia demasiado, pero ahora se usa internamente el volumen lineal de 4 bits, lo que permitio ajustar el volumen de algunos fonemas de manera mas precisa, para que quede igual que en los HR6 y HD1. Tambien reemplace los instrumentos musicales por las nuevas versiones del HR6, optimice las rutinas de envio y recepcion por RS232, y reemplace la tabla de la onda triangular por una onda generada por codigo, tal como en el HR6, lo que dejo memoria de programa libre.
    En este momento el sintetizador HR6 dispone de memoria libre para 15 instrucciones, y el HR4 para 51 instrucciones.
    Estoy viendo si se puede agregar alguna funcion al HR4, para que el nuevo estandar minimo sea el HR4 v1.1, pero el problema es que al ser el minimo, lo que sea que agregue voy a tener que poder agregarlo despues al HR6, y con 15 instrucciones libres se complica.
    Lo mas probable es que agregue algun comando para consultarle al sintetizador el valor de algun parametro, por ejemplo la velocidad o tono de la voz actual. Una vez que este todo decidido e implementado, me queda escribir la version final del manual, antes de publicarlo.
     

  • Va queriendo , muy bueno , a la espera de una demo de como va quedando
     

  • 5 meses! Como pasa el tiempo, lamentablemente apenas tuve tiempo para dedicarle a este proyecto, pero ya hay muchas cosas definidas que eran necesarias antes de hacer una version publica.
    En estos meses en el poco tiempo que tuve me dedique a "sincronizar" los distintos proyectos, unificando caracteristicas para que fueran identicas o lo mas parecidas que fuera posible, para que se pudieran intercambiar las versiones. En particular me interesaba que los sonidos tuvieran exactamente la misma duracion en todos, algo que al ser experimentos distintos no se cumplia al 100%.
    Tambien mi intencion era que se pudiera usar con computadoras de 8 bits a 57600 bps, por lo que empece a desarrollar rutinas para C64 para poder enviar y recibir datos a esa velocidad. Me queda pendiente terminar de implementar un "framework" que permita hacer todo eso sin tener que apagar el video, pero asumiendo que eso va a estar hecho, ya estuve definiendo nuevas funciones pensando como se iban a usar con las limitaciones de una maquina de 8 bits.
    El sintetizador HD1 tuvo algunas correcciones, pero menores, me estuve dedicando mas a tratar de tener una version final del HR4, y el HR6 va a terminarse despues de acuerdo a como quede el HR4.

    *** Novedades del sintetizador HR4 ***

     Hay cosas que ya estan hechas:

    -  Se ajustaron las duraciones y volumen de los fonemas para que se correspondan con los de los sintetizadores HD1 y HR6, que estaban mas avanzados.
    - Se agrego un jumper para seleccionar si la salida de audio vuelve a media tension (lo normal hasta ahora) o a masa, una vez que finaliza la emision de sonido. Esto solo importa si se va a armar la placa amplificada directamente con un transistor, como el audio siempre volvia a mitad de tension, cuando emitia silencio el transistor quedaba conduciendo siempre, calentandose innecesariamente. Ahora si se va a usar de esa manera, se ajusta ese jumper y la salida de audio vuelve a masa alrededor de 1 segundo despues de terminar la reproduccion de sonido.
    - Se reformo el arranque del programa, el texto que se hablaba al arrancar, que estaba codificado en el programa (sintetizador listo), ahora se traslado a la memoria EEPROM, logrando asi dos cosas, la primera es que el usuario puede modificar este texto para personalizar el sintetizador a los requerimientos de su proyecto, y la segunda es que se amplio la cantidad de caracteres, que ahora es de 58.

    Hay varias caracteristicas que quiero implementar, que van a depender de cuanta memoria de programa quede libre.

    Estas caracteristicas son las mas importantes:

    - Un comando para consultar el modelo del sintetizador y la version del firmware.
    - Algun comando para leer los parametros actuales de la voz (tono, nota, velocidad).

    Estas van a depender de la memoria disponible o de futuras optimizaciones:

    - Agregar 2 entradas analogicas para conectar paddles, potenciometros, o un joystick analogico de PC.
    - Ampliar el lenguaje para acercarse mas al castellano escrito.

    En el medio de todo esto, intente sin exito multiplexar el joystick con el sintetizador, para poder hacer una placa conectable al puerto de joystick, pero de manera de poder seguir conectando ahi un joystick. Lamentablemente las lineas del puerto ya estan compartidas con el teclado y eso complica bastante reutilizarlas para mas funciones. Pero va a haber una version para puerto de joystick, aunque nos va a quedar un puerto menos a la hora de jugar. Como tiene prioridad agregar un comando de chequeo de version, esto va a servir tambien para la autodeteccion del sintetizador, el juego podria consultar al puerto del usuario o de joystick y saber si hay placas conectadas y a que sintetizadores corresponden.
    En MSX si se podria multiplexar el puerto para compartir un joystick con el sintetizador, pero esto requiere agregar dos chips, y no se si valdria la pena.

     

  • Bueno, al final lo unico que pude implementar en la memoria disponible, y despues de hacer una ultraoptimizacion, fue el chequeo de modelo de sintetizador y version de firmware, que era lo mas importante. No es algo tan importante en este momento pero lo va a ser en el futuro, cuando los comandos soportados difieran mas entre sintetizadores, por lo que va a ser importante que el programa sepa de que comandos dispone.
    Al final decidi cambiar varios pines de lugar, por lo que las placas hechas no son compatibles con esta nueva version, ya modifique las placas para C64, me queda modificar la de MSX/Spectrum.
    Acabo de probar exitosamente el chequeo de version en la Commodore 64, enviando y recibiendo a 57600 bps, el chequeo es casi instantaneo, diseñe el protocolo para que se pudiera consultar de forma comoda tanto desde una maquina rapida (PC, raspberry pi, microcontrolador) como desde una maquina de 8 bits, que tiene que trabajar en half duplex, ya que no puede enviar y recibir simultaneamente a 57600 bps.
    Me queda implementar una rutina de interrupcion para que el envio y recepcion se hagan como tarea de fondo, asi ya se puede probar con alguna aplicacion de ejemplo.
    Y despues escribir el driver para MSX, para que envie y reciba a 57600 bps en lugar de los 19200 bps actuales.

     

  • Aca se puede ver la prueba con los dos sintetizadores, HR4 y HD1, no es gran cosa, el programa deshabilita el video y las interrupciones, y chequea la version del sintetizador y firmware enviando 7 bytes y recibiendo 6, 3 son del modelo (HR4, HD1, etc.) y 3 de la version del firmware. Todo esto a 57600 bps.

     

  • *** HR4 V1.1 BETA 1 ***

    Ya que no se puede agregar nada mas al sintetizador HR4, ahora oficialmente esta en beta 1, ya cambie los pines de lugar en las placas para C64, falta adaptar las de MSX y una de las placas para RS232. Tambien voy a cambiar la salida de datos desde la MSX a otro pin, por lo que hay que reformar el driver en asm para que envie por ese otro pin, el resto del soft deberia seguir funcionando.
    Le cambie el nombre a la serie de sintetizadores, esto solo se veia al conectar la placa a una terminal, donde mostraba un mensaje como este:

    *** PICSYNTH HR4 ***
     VERSION 1.1 ALFA 3
     EMAIL

    El nuevo mensaje inicial es como este:

    *** MICROSINT HR4 ***
     VERSION 1.1 BETA 1
     WWW.PASTBYTES.COM

    Ahora en lugar de "picsynth" va a aparecer "microsint", nombre tan malo y generico como el otro pero en castellano.  biglaugh.png
    Ademas, el nuevo mensaje hablado por defecto en el arranque es "microsint activado", en lugar del clasico "sintetizador listo". Esto igual es modificable por el usuario.

    Para terminar, esta es la placa que inicialmente hice para la C64 y que ahora tengo que modificar para MSX, lo cual es solamente reconectar las entradas/salidas a distintos pines del DB9:

    1473491682 75 FT59536 103 1272s

    1473491682 75 FT59536 103 1276s

     

  • *** Sintetizador HD1 alfa 8 ***

    Me habia quedado pendiente agregar algo al sintetizador HR4, que por cuestiones de falta de memoria de programa disponible tuvo que quedar fuera. Asi que decidi probar si funcionaba en el HD1, y para esto tuve que poner al dia la documentacio de los cambios anteriores del sintetizador HD1, asi que me puse a hacer eso.
    Una vez que todo estuvo listo para agregar mas codigo, empece a hacer pruebas primero con la parte de hard, y cuando parecia que mas o menos empezaba a funcionar, me puse a implementar el soft. Y que es lo que agregue? Un puerto para conectar joysticks analogicos de PC.
    No voy a hacer larga la explicacion ahora, porque la parte tecnica es bastante rebuscada, basta decir que me volvio loco hasta que pude rastrear todos los problemas que habia, pero al final salio andando que es lo que importa, y lo mejor de todo es que todas son ventajas:
    - el codigo que hay que agregar al PIC no es mucho, lo que me deja una esperanza de que se pueda agregar al HR4 si logro hacer magia y liberar un poco de memoria.
    - la captura de los ejes del joystick en el PIC se hace 60 veces por segundo, por lo que el movimiento es muy suave.
    - el hard extra requerido para que el sintetizador lea el joystick se reduce a 2 resistencias de 100K (una por cada eje), y 2 resistencias de 10K (una por cada boton).
    Como dije las cosas no fueron faciles, al principio leia mal y no sabia en que etapa se producia el error. Podia ser que el conversor A/D del PIC capturara mal, esto a su vez podia ser porque estaba mal el codigo o porque habia ruidos en la parte electrica. Si el conversor A/D andaba bien, podia ser que hubiera un bug en el sintetizador que alrerara la lectura antes de que se enviaran las coordenadas por RS232. Y en la parte de la C64, podia ser que la rutina de recepcion por RS232 a 57600 bps recibiera mal. Al final el problema resulto estar en el conversor A/D del PIC, para resumirlo, estaba intentando capturar mas rapido de lo que se podia, y esto tiraba lecturas erraticas porque la conversion quedaba a medias.
    Hice un video del joystick funcionando con la C64, cuando lo publique pongo el link.
     
  •  

  • Hice un logo para el manual del sintetizador de voz HR4.

    1479029940 75 FT59536 Logomicrosint1

    Esta dibujado con caracteres de 8x8, pero con espacios intermedios eliminados, tenia curiosidad de si se podia mostrar bien en la C64 con los caracteres graficos, asi que lo probe en VICE:

    1479029940 75 FT59536 Microsintlogovice

    Y despues lo corri en la C64:

    1479029940 75 FT59536 103 1524s

    Por no tener una columna mas, no hay lugar a la izquierda para que pase la linea del recuadro, asi que tampoco puse las lineas de arriba y abajo.
    Pero ya tenemos un logo, y una pantalla de presentacion para el programa de demostracion para C64.
    Ahora solo queda reescribir el manual y portar las demos que hice para otras maquinas.

     

  • Muy bueno!
    Si le sacas un lugar a la "r" o a la "n" no creo que se note tanto y le podes poner el recuadro...
     

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