pasión por la robótica en Argentina |
[PRINCIPAL] [ROBOTS DIDACTICOS] [NOSOTROS] [ACTIVIDAD] [NOTICIAS] [ARTICULOS] [GALERIA] [ENLACES] [CONTACTO] |
Comunicación - Modulo sintetizador de voz SP03
|
Conector PL1 interfaz serie/I2C +5V - Alimentación de 5V 100 mA SDA - Conexión SDA del bus I2C SCL - Conexión SCL del bus I2C Libre - No conectar Gnd - Masa o común (0V) Libre - No conectar Gnd - Masa o común (0V) RS232 Rx - Se conecta al pin TX del PC. RS232 Tx -Se conecta al pin RX del PC. |
|
Conector PL2 interfaz paralelo +5V - Alimentación de 5V 100mA. Stat - Alto mientras habla. Sel 4 - Sel 3 - Estas cinco entradas binarias Sel 2 - seleccionan cual de las Sel 1 - 30 frases se reproduce Sel 0 - Gnd - Masa o común (0V) |
Comunicaciones serie por RS232
Para controlar el módulo sintetizador por medio del puerto serie de la plaqueta, conectándose
con un puerto RS232 de una PC (conector serie) u otro equipo, se utilizan únicamente tres
conexiones (más, por supuesto, la alimentación de 5V).
La conexión serie se define en 38.400 baudios, 8 bits de dato, sin paridad, y 2 bits de parada.
Comandos a través de RS232
A través del puerto serie se pueden enviar 33 comandos distintos al módulo SP03. Los comandos son:
Como se ve, treinta de las órdenes (de la 1 a la 30) se utilizan para reproducir las 30 frases almacenadas previamente, con sólo enviar un byte de comando.
Cuando el sintetizador termina de vocalizar la frase, devuelve el comando de regreso al PC por la comunicación serie, indicando que ha terminado. No se deben enviar ordenes al módulo mientras está sintetizando la frase. Si se envía un comando en esta situación, la orden será ignorada.
El retorno de la orden desde el módulo indica que éste ya está listo para recibir la siguiente instrucción.
Detalle del comando 128 (0x80)
Este comando se utiliza para enviar una línea de texto que debe ser convertida a voz. El byte 0x80 de la orden debe ser seguido por 3 bytes de control, luego el texto de la frase a reproducir, y como cierre el carácter 0x00 (NULO).
Los tres bytes de control indicarán volumen, tono (frecuencia) y velocidad.
Cada byte recibido por el módulo es devuelto por la línea serie como indicación de que ha sido reconocido. Es importante que no se envíe un nuevo byte hasta que el módulo haya devuelto el byte anterior.
El registro de texto del PIC tiene una capacidad de 85 bytes. Como el comando tiene, en total, 4 bytes de control y sincronización, para el texto a vocalizar queda disponible un total de 81 bytes. Éste es el límite de caracteres que puede tener la frase que se le envía al módulo para que sea emitida.
A continuación se ve un esquema con la secuencia para reproducir "Hola amigo" a pleno volumen y con una velocidad y tono medios.
Orden transmitida al módulo SP03 | Byte devuelto por módulo SP03 |
Comando 0x80 | 0x01 |
Máximo Volumen 0x00 | 0x00 |
Tono de la síntesis 0x04 | 0x04 |
Velocidad de la voz 0x02 | 0x02 |
Texto 'H' | 'H' |
Texto 'o' | 'o' |
Texto 'l' | 'l' |
Texto 'a' | 'a' |
Texto ' ' | ' ' |
Texto 'a' | 'a' |
Texto 'm' | 'm' |
Texto 'i' | 'i' |
Texto 'g' | 'g' |
Texto 'o' | 'o' |
NULO 0x00 | 0x00 |
El módulo reproduce el texto | 0x00 indica que el texto ya está cargado. |
Detalle del comando 129 (0x81)
Este comando se utiliza para leer el registro de estado del WTS701, formado por dos bytes.
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
Byte 0 | ICNT | IBUF | ICNV | COD | BFUL | BEMP | CNVT | RDY |
Byte 1 | R/B | reservado | reservado | reservado | reservado | IABB | reservado | ICMD |
Cuando el módulo recibe esta orden, devuelve el byte de menor peso seguido del byte de mayor peso. Uno de los usos es el monitoreo de estado que permite saber si el sintetizador ha terminado de hablar.
Detalle abreviado del byte 0 (ver la hoja de datos por más información):
RDY (Bit 0): Encendido indica que el chip está listo para recibir comandos.
CNVT (Bit 1): Convirtiendo.
BEMP (Bit 2): El registro de texto de entrada está vacío.
BFUL (Bit 3): El registro de texto de entrada está lleno. Se apaga en cuanto hay al menos 128 bytes libres.
COD (Bit 4): Habilitado el CODEC.
ICNV (Bit 5): Se terminó la conversión y se produjo la interrupción.
IBUF (Bit 6): El registro de texto de entrada se ha llenado por encima del tope definido.
ICNT (Bit 7): Se produjo una interrupción por conteo de palabras.
Detalle abreviado del byte 1 (ver la hoja de datos por más información):
ICMD (Bit 0): El comando fue ignorado.
IABB (Bit 2): Se ha producido una interrupción por abreviado.
R/B (Bit 7): Estado de la pata R/B del chip. Si es 0, los datos que se envían serán ignorados.
Recomendamos consultar la hoja de características del WTS701 para ampliar información acerca de los bytes del registro de estado.
Detalle del comando 130 (0x82)
Este comando se utiliza para registrar las 30 frases predefinidas en la memoria flash del PIC. El uso de este comando no es fácil, ya que el texto es enviado en un formato comprimido especial. Esta operación se puede realizar con facilidad utilizando el programa SP03.EXE .
Comunicación por bus I2C
Para implementar la comunicación por bus I2C sólo se requiere utilizar las señales SDA y SCL, además de la alimentación de 5V.
No se incluyen dentro el módulo los resistores de polarización del bus, así que si fuera el único dispositivo conectado éstas deben ser situadas en alguna parte del bus.
Lo más normal es instalarlas en el dispositivo maestro (bus master), lo que servirá para todos los módulos que se conecten al bus.
Los valores usuales son resistores de 4k7 (uno en cada señal) para velocidades de 100 KHz y de 1k8 si se sube hasta los 400 KHz. Para mayores velocidades se deben separar los bytes que se envian por el bus I2C con un retardo mínimo de 40 useg, con el fin de dar tiempo al procesador para transferir el byte recibido a su registro interno flash. Cumpliendo con este requisito, operando con el módulo sintetizador de voz SP03 se han obtenido velocidades de transferencia de hasta 1 MHz.
El protocolo que se emplea para comunicarse con el módulo SP03 por el bus I2C es el mismo que se emplea en las memorias EEPROM del tipo 24C04 y similares.
El módulo SP03 tiene dos registros, el de comandos y el del número de revisión.
Para iniciar la comunicación
Si no se obtuviera este número de revisión, y en cambio el byte está en cero, la comunicación no se establece.
Registro | Función |
0 | Registro de Comando |
1 | Número de revisión del software |
Una vez establecida la comunicación, los comandos y el texto que se desea reproducir se envían al registro de comando. Existe un total de 32 comandos válidos, que se muestran a continuación:
Comando | Acción |
NOP 0 (ó 0x00) | No emite sonido. Guarda un frase en la memoria. |
SPKPRE 1 a 30, (ó 0x01 a 0x1E) | Vocaliza la frase predefinida |
SPKBUF 64 (ó 0x40) | Vocaliza el texto de la memoria flash |
El comando NOP, utilizado para agregar texto a la memoria flash cuando se necesita que el módulo reproduzca textos enviados en ASCII, debe ser seguido por el texto que se desea sintetizar. Se puede mandar cualquier texto de una extensión que no supere los 81 bytes.
Se pueden enviar varias secuencias de comandos NOP a la memoria flash antes de enviar el comando SPKBUF, que es el que finalmente inicia la vocalización.
Luego de la ejecución de un comando SPKPRE o SPKBUF, la memoria flash se vacía.
El formato del comando NOP es el mismo que el que se emplea en protocolo serie RS232, es decir, 3 bytes de control seguidos del texto, y al final el carácter 0 (0X00).
Una vez enviado el texto, éste puede ser reproducido enviando el comando SPKBUF. Hay que tener en cuenta que el tamaño total de la memoria flash es de 85 bytes, por lo que si descontamos los 4 bytes de control quedan un total de 81 caracteres para el texto.
La secuencia para reproducir la palabra "Hola" desde el bus I2C es la siguiente:
Comando | Acción |
Bit de inicio | Inicia protocolo I2C |
0xC4 | Dirección I2C del SP03 |
0x00 | Registro de comandos del SP03 |
0x00 | Comando NOP |
0x00 | Volumen (Max.) |
0x05 | Velocidad |
0x03 | Tono |
'H' (0x48) | Texto |
'o' (0x6F) | Texto |
'l' (0x6C) | Texto |
'a' (0x61) | Texto |
0x00 | NULO |
Bit de parada | Fin de la Secuencia |
Fíjese que no hay un comando único "Vocalice este texto" como en el caso del comando a traves de la interfaz RS232. Si se desea reproducir una frase, entonces, se debe enviar el comando NOP seguido por el texto y después en otra transacción I2C el comando SPKBUF.
Para comprobar si ha terminado la vocalización, se puede leer el registro de comando. Mientras está reproduciendo, el valor del registro es el del comando que inició la vocalización (comandos del 1 al 30) o bien el valor 64 (0X40). El valor es puesto a cero cuando el módulo termina de hablar y está preparado para la próxima frase.
Comunicación por puerto paralelo
El conector de puerto paralelo PL2 se utiliza para reproducir una de las 30 frases predefinidas. La comunicación a través de este puerto no permite enviar texto ASCII para que se lo vocalice.
Para reproducir cualquiera de las 30 frases guardadas, basta con aplicar el valor binario del número de frase a las entradas SEL0-SEL4. Los números 00 y 31 no se utilizan, de modo que si se aplica ese número no se reproduce nada.
Las entradas cuentan con resistencias de polarización, de modo que si no se utilizan se pueden dejar desconectadas. Cuando el PIC reconoce un valor de entrada en los pines SEL0-SEL4, pone el bit de la salida STATUS a 1 para indicar que está ocupado y reproduce la frase. Una vez que el bit de estado está en 1, se puede quitar el valor de entrada de los pines SEL0 a SEL4. Se debe volver al valor 0 ó 31 antes de que el módulo termine de hablar, porque sino la frase será repetida.
La salida del pin STATUS se pone en estado lógico bajo (0) cuando el módulo SP03 ha terminado de reproducir la frase.
Encendido
Al encender el módulo, éste reproduce de forma automática la frase número 1. Si no desea que esto ocurra, no almacene texto en la frase número 1.
Programa de Configuración SP03.EXE
El programa de configuración para el módulo SP03 es gratuito y se puede obtener descargándolo aquí. Se trata de un programa para PC.
Al ejecutar por primera vez el programa, se deberá seleccionar el puerto COM1 o COM2 a través del cual se va a realizar la conexión. Este valor será recordado la próxima vez que se utilice el programa.
Con este programa se pueden almacenar 30 frases, que se definen en 6 páginas de 5 frases cada una. Presionando sobre los botones PageUP y PageDW se cambia de página. Debajo de las 5 frases hay una línea en la que se muestra el estado, y tres botones deslizantes que sirven para cambiar el volumen, el tono y la velocidad de la vocalización.
El volumen y la velocidad funcionan de una forma lineal, pero el tono tiene un funcionamiento algo más extraño, debido al funcionamiento interno del chip WTS701.
Una vez que se han escrito y probados todas las frases, se las puede almacenar en la memoria flash del PIC16F872 con sólo pulsar el botón Program.
El funcionamiento del programa es bastante sencillo: basta con escribir algo en una de las líneas de texto y a continuación pulsar el botón Test que se encuentra a su lado. Las palabras que se han escrito se reproducirán en el módulo de inmediato. Al pulsar el botón de "Test" se almacena y se utilizan los valores de volumen, velocidad y tono de los respectivos controles que se han fijado en el panel. Pulsando el botón "Set" se reproduce la frase usando los valores que se guardaron la última vez que se pulsó el botón "Test".
Así, se pueden definir diferentes valores de velocidad, tono y volumen para cada una de las 30 frases.
Una vez que se ha terminado de preparar las frases sólo hay que pulsar el botón "Program" para que éstas sean comprimidas y enviadas a la memoria del procesador PIC. Cuando la programación termine, se mostrará el mensaje "Finished Program" en la barra de estado ubicada arriba de los controles de volumen, etc.
Una vez programadas las frases, los botones de "Test" ya no están activos, quedando solamente los de "Set", para reproducir directamente las frases sin más cambios. Para activar de nuevo los botones de Test basta con hacer clic sobre cualquiera de las zonas de edición de texto.
Características físicas del módulo
Los datos originales del SP03 se pueden encontrar, en inglés, en esta página.
Hoja de
características del integrado WTS701EM.
Para comprar el módulo SP03 en España
Para comprar el módulo SP03 en Estados Unidos
|