*** Actualizacion 8-Sep-2017 ***
Pasaron meses y veo que no actualice algunas cosas del proyecto por aca. Hace bastante que no toco nada del sintetizador, porque habia cosas fuera del codigo que habia que definir, y creo que ya mas o menos estan tomando forma final.
Tuve un rato libre y viendo el codigo del sintetizador HR4, no hay memoria de programa libre ni para 1 instruccion, asi que decidi que voy a eliminar el soporte de joystick analogico en este sintetizador, algo que de todas maneras no estaba funcionando y no se podia terminar de arreglar por falta de memoria.
Decidi que el sintetizador HR4 va a ser una base que se va a poder expandir, ya no va a estar limitado a ese modelo de PIC, sino que puedo hacer la version basica con el 16F648A que uso actualmente, y una version mas completa con un PIC mas grande, con soporte de joystick y algunas funciones extra. Esto me lleva a tener que agregar un comando para consultar que funciones estan disponibles por encima del modelo base.
Veo que no lo anuncie en este hilo pero si en otros, asi que solo para que quede aca tambien, el nuevo sitio de los sintetizadores de voz con PIC es LINK
Aparentemente hay un bug en el manejo del buffer que hace que la aventura conversacional que funciona perfectamente en la Spectrum 48K usando la salida MIC como RS232, no funcione en la TS2068. Seguramente es un tema de diferencias de velocidad en la TS que hace que el buffer se llene (cosa que no pasa en la Spectrum) y esto provoque que se cuelgue el sintetizador, por culpa de ese bug. Me interesa que funcione bien en la TS2068, asi que espero que arreglando eso se corrija el problema.
Ya que logre usar la salida MIC de la Spectrum como la linea TX del RS232, se me ocurrio que en una de esas funcionaria la entrada EAR como RX del RS232, tengo que hacerme tiempo para armar la placa adaptadora y agregar recepcion al "driver" en asm, a 19200 bps. Anticipandome a eso, estuve definiendo un comando para consultar el estado del buffer y de reproduccion de sonido, ya que actualmente se necesitan dos lineas extra, una para saber si el buffer esta lleno y otra para saber si el sintetizador esta reproduciendo audio. Estas lineas se usan para sincronizar correctamente el soft con el sintetizador, para saber cuando enviar datos. Ahora habra un comando de 1 byte que devuelve en otro byte esa informacion. Actualmente como la Spectrum no puede saber cuando el sintetizador termino de emitir sonido, ni cuando el buffer esta lleno, todo debe hacerse a ciegas, enviando la cantidad de bytes justos y esperando un cierto tiempo antes de enviar mas. Con estas modificaciones, la Spectrum podria planificar el envio porque sabria de antemano cuanto espacio libre hay en el buffer, y se podrian hacer cosas complejas como sincronizar el video con la reproduccion de sonido, porque se sabria, con cierta tolerancia, cuando el PIC termina de emitir sonido.
Si todos estos cambios se pueden hacer exitosamente pasaria a ser la version 1.3, y esta si seria la primera version publica, ya que tuve que poner en espera la 1.2 por no funcionar bien en la TS2068, y por otras cosas que con esta version quedarian resueltas.
*** Actualizacion 22-Sep-2017 - HR4 version 1.3 alfa 2 ***
Bueno, pude agregar todo lo que queria y solo se perdio el soporte de joystick analogico, que como dije antes igual no estaba completo. Ahora el sintetizador HR4 esta en la version 1.3 alfa 2.
Desde el punto de vista del hard, lo que cambia con la 1.2 es que los pines 1, 2, 17 y 18 quedan libres y configurados como salidas, para que no se requiera conectarlos con resistencias. Por el momento esos pines van a quedar sin uso. Tambien es posible ahora usar el sintetizador sin conectar las lineas CTS y PLAYING, solo se necesitan TX y RX, por lo que se puede conectar a computadoras/microcontroladores que tienen un puerto serie minimo.
Desde el punto de vista del soft, hay unos cuantos cambios, pero permanece compatible con todo lo anterior.
- Se agrego un chequeo que descarta los caracteres recibidos si no hay mas memoria libre en el buffer, algo bastante logico pero que no estaba contemplado porque se requeria la comunicacion con TX, RX y CTS, y no se deberia enviar mas datos cuando CTS=0. Ya que tuve problemas con un cable USB-RS232 que por alguna razon en algun momento deja de verificar CTS, era mejor agregar un control para evitar que se sobreescribian los datos en el buffer.
- Para soportar la comunicacion con 2 lineas, se agrego el comando ENQ (ASCII 5), que devuelve un byte conteniendo el estado de la linea PLAYING en el bit 7, y en el resto la cantidad de bytes que se pueden enviar al sintetizador de forma segura, sin el riesgo de que el buffer se llene.
- Se recupero una funcion que se habia eliminado en la version 1.2, al eliminar el jumper JP2 que determinaba si el sintetizador devolvia el eco del caracter recibido, una funcion util al controlarlo desde una terminal. En la version 1.2 esta funcion quedo permanentemente deshabilitada, y no habia forma de volver a activarla. En esta version se agregaron dos comandos, asignados a DC2 (ASCII 18) y DC4 (ASCII 20), que sirven respectivamente para habilitar y deshabilitar el eco de lo recibido. Por defecto arranca deshabilitado, por lo que si se quiere controlar el sintetizador desde una terminal, seria util habilitarlo enviando el caracter DC2.
Para lograr esos cambios hubo que recuperar memoria de programa, y para eso se reescribio gran parte del parser. Gracias a esto se ahorro memoria suficiente como para implementar todo, y quedo memoria libre para 15 instrucciones mas. El calculo de memoria disponible para el comando ENQ fue bastante complicado, porque requeria hacer una division por 3, codigo que llevo 41 instrucciones solo para la division.
Hay muchas cosas planeadas para agregar, pero las voy a ir probando en otros chips, no creo que en este se pueda hacer mucho mas. Tambien, aprovechando que ahora ya no son necesarias las lineas CTS y PLAYING, vi que es posible implementar el sintetizador completo en un PIC de 8 pines, sin usar cristal y con componentes minimos. Tambien quiero ampliar el lenguaje para que pueda leer castellano escrito, el sintetizador para agregar algunos fonemas faltantes, y algunos comandos para aprovechar entradas y salidas no usadas del PIC, para controlar cosas o leer sensores o botones.