Estuve investigando el puerto RS232 de la Interface 1 para conectar la placa del sintetizador de voz y me encontre con descripciones un poco confusas en el manual, despues de equivocarme en la conexion pude dar con el cableado correcto.
El cable que me arme compatibiliza el conector RS232 con el de la PC, aunque descubri que la Interface 1 tiene varias limitaciones, como por ejemplo que no lee la señal CTS, que es justamente la que usa mi placa para indicarle que no puede aceptar mas datos por haberse llenado el buffer. Aparentemente esta interfaz funciona siempre con DTR/DSR, por lo cual puentee las señales de salida CTS y DTR en mi placa para contentar tanto a las computadoras que usan RTS/CTS como a las que usan DTR/DSR.
Si bien la Interface 1 permite elegir varias velocidades de 50 a 19200bps, siempre trabaja en 8 bits, sin paridad y con 1 bit de stop, que es justamente lo que usa el sintetizador.
La utilizacion de este puerto serie es bastante simple, lo primero que se hace es ajustar la velocidad, por ejemplo 300bps, esto se hace con la orden FORMAT, indicando el modo en que se va a trabajar con el puerto, que puede ser binario o texto. Segun el manual, en modo binario se envian los caracteres tal como se especifican en las ordenes PRINT#, sin ninguna alteracion. Si se elige el modo texto en cambio, hay codigos reservados para los tokens del BASIC, y la ROM hace la conversion automatica de token a ASCII, esto es si tenemos un caracter que representa a la orden PRINT, se enviaran 5 caracteres (P, R, I, N y T) en vez del codigo correspondiente. Tambien se agrega automaticamente un avance de linea por cada retorno de carro.
Para ajustar entonces la velocidad a 300bps en modo texto hacemos:
FORMAT "t";300
Luego debemos abrir el puerto, que tambien especifica el modo, y el numero de canal a utilizar. Si se utiliza el canal 3, tambien se redireccionan automaticamente los comandos de impresora al puerto serie.
OPEN# 3;"t"
Para enviar datos simplemente se utiliza PRINT #:
PRINT #3;"RETROKOMPUTASIO+N PU+NTOKOM"
Si queremos enviar un listado al puerto serie, simplemente hacemos LLIST
Y por ultimo, cerramos el puerto:
CLOSE# 3
A continuacion sigue el video con las pruebas, y la descripcion en youtube:
Sintetizador de voz en PIC16F648A, conectado a una Sinclair Spectrum 48K a través de la conexión RS232 de la ZX Interface 1. Se pueden ver las conexiones, con el video saliendo por video compuesto, la salida serie conectada a un cable armado especialmente para estandarizar la conexión RS232 al mismo conector de una PC, y los parlantes conectados a la placa.
Se escribió un programa que dice "SINCLAIR SPECTRUM" en el arranque, y luego va pidiendo textos para enviar por la salida serie a la placa.
Hubo que cambiar el color de borde porque costaba mucho enfocar la imagen al ser la filmadora NTSC y la Spectrum PAL.
El PIC utiliza las lineas RX, TX, CTS y GND del puerto serie, pero la RS232 de la Interface 1 no lee CTS, sino DSR, por lo cual hubo que modificar la placa puenteando CTS con DTR para enviar la indicacion de que la placa esta lista para recibir datos por ambas señales.
Por último, se ve al sintetizador intentado leer un LLIST. El puerto serie puede abrirse como texto o binario, en este caso esta abierto como texto, lo que permite que al enviarle códigos pertenecientes a las instrucciones, estos se conviertan a texto, es decir la ROM convierte automaticamente tokens a ASCII, por eso es posible enviar el listado a la salida con LLIST. Al parecer tambien requiere que se abra el canal 3 para que la opcion del listado sea posible.
Si se abre el puerto serie como binario, se envían los códigos tal como salen con PRINT#, y se dispone de los 8 bits de datos.