Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

09/12/2013 #1

Avatar de Meta

Controlar relés con Spectrum y PIC
Hola:

Tengo un ZX Spectrum +2A 128K negro. Veo que tiene el puerto serie. Para comunicarlo con los demás dispositivos externo e incluso enviar mensajes por ahí para comunicarlo con otro Spectrum por poner un ejemplo.

Sólo necesito usar el pin 2, 3 y masa, con eso me basta para hacer experimento con él. Quiero hacerles unas preguntas.



He reparado como dude el Spectrum de antes. He hecho un programa muy básico, mostrar pantallas. No se si alguien de aquí sabe manejar este PC de los 80.

Quiero hacer los menús indicado abajo, al menos desplazarme hacia a ellos, es decir, escoja la opción que escoja, me aparece dicha pantalla y luego volver atrás con una tecla indicada, la que programes.



Lo que quiero hacer es controlar relés desde el Spectrum, lo hago por mera curiosidad y probar cosas nuevas, ajjajaja a jjajaja jajajaja, se que es una tontería controlar relés con un Spectrum y no hace falta, pero quiero hacer que se muestre en gráfico a travez del Spectrum como encender Led, girar motor y más tonterías.

El menú rpincipal que se muestra es teste, ya lo mejoraré esteticamente, ahora ando con prisas.


Código del Spectrum.


En resumen, controlar desde el Spectrum por puerto serie una placa que tiene un PIC y estas sus relés.

El problema que tengo que no se programar para Spectrum hacer menús y que funcione. Solo se mostrar mensajes en pantalla sin cambiarla o ir a otra y luego volver. Aunque no sea funcinal al principio, para coger el hilo está bien.

Necesito ayudita.

Gracias por leer hasta aquí.
09/12/2013 #2
Excluido


A ver si recuerdo donde vi hacer algo parecido con optoacopladores, triacs y usando la instrucción OUT con el valor correspondiente al puerto de salida con 0/1 seguro que salía en algún artículo de la Microhobby o Elektor

---------- Actualizado después de 16 minutos ----------

Ya que tienes el ordenador podrías bajarte el manual de instrucciones de una web que se llama "el trastero del spectrum", con INPUT puedes hacerte un menú, incluso usando PLAY y BEEP ponerle sonidos, lo mejor es que lo descargues y le eches un vistazo, gran microordenador, todavía hay fans que hacen programas para él
09/12/2013 #3

Avatar de Meta

Buenas:

Hay demasiada gente que programa para el Spectrum y siguen así. Hasta están haciendo placas nuevas y funcionan, todo con componentes DIP. Existe uno que es muy pequeño con tarjeta SD. ejjeje, hay de todo.

Buscando la revista, están aquí todas, son unas 200, si que tengo que leer, jajajajajajaj.

http://www.microhobby.org/
http://trastero.speccy.org/cosas/Revi/revistas.htm

En la de Elektor no tengo idea, si alguien sabe, lo hace saber en qué número sale.

Un saludo.
09/12/2013 #4

Avatar de Scooter

Puedes mirar en www.zonadepruebas.com y/o www.speccy.org

Aún queda mucha gente programando spectrum

Hasta donde se el spectrum no tiene uart así que el pruero seri va via software loq ue es un grave handicap creo que lleva cts rts obligatoriamente.
09/12/2013 #5
Excluido


Amigo, basta que te descargues sólo el manual del spectrum y ya interpretes, supongo que hará descripción de los puertos de salida e instrucciones a utilizar.
09/12/2013 #6

Avatar de Meta

Hola:

Los manuales precismante para el mio no hay. Solo foto de la portada, grgrgrggrgrgrg
http://trastero.speccy.org/cosas/manuales/manuales.htm

¿Qué es eso de que no tiene UART y teniendo RS232?

Espero que no tenga que usar obligatoriamente los demás conectores del puerto serie, ya que me basta con masa, Rx t Tx. Si hay que usar todo, estoy jodido, lo demás pines no los entiendo para que son o como manejarlo. Rercuerdo que uno era para saber si el dispositivo está conectado y otro más para saber si los datos a llegado o enviado, cosas así.

Le iba a poner el MAX232 entre el PIC y el Spectrum.

Veo que tiene dos preciosos entradas del JoyStick para entrada de datos. Uno hizo algo para controlar el Spectrum con el mando de la PlayStation 2.

http://trastero.speccy.org/cosas/JL/ps2/ps2.html

En mi caso lo haría como entradas para otras cosas, detectar algo, poner sensores digirales, cosas así.

Por cierto, no es que sigan programando, es que los nuevos chicos de ahora, lo están programando también pero con emuladores, luego los pasa a los Spectrum.

Un saludo.

PD: Mirando bien el Spectrum, com me gustaría hacer con un PIC o Arduino mostrar una imagen en pantalla de un televisor por vídeo compuerto, el RCA amarillo. Hacer esto parece muy complicado, sobre todo cuando está la Raspberry Pi por RCA y HDMI.
09/12/2013 #7
Excluido


Sería cuestión de implementar los cores en una CPLD o FPGA y supongo que añadir una RAM y algo de circuiteria
09/12/2013 #8

Avatar de Meta

Hola foreros:

Por lo que he estado viendo, hay puerto llamado "E/S EXPANSION" del ZX Spectrum +2A 128 K y un puerto paralelo de la impresora.

Con ella se puede hacer cositas también.

Si alguien sabe el manual para descargarlo avisen.

Lo que me llama la curiosidad que el procesador Z80 (no es un microcontrolador), con un IC controla el vídeo para formar imágenes y crear letras y gráficos.

Como tengo ganas de hacer eso con los PIC y Arduino. Lo que no se si es posible.

Saludo.
09/12/2013 #9

Avatar de Meta

Hola de nuevo.

No se programar para Spectrum pero si para C# y ensamblador para PIC, jejejejeje. He hecho como un emulador no funcional para le puerto serie (cosa que si me animo lo haré funcional en todos los aspectos pero debo dejarlo bonito).

En el Spectrum veo que tiene "E/S EXPANSION", puerto paralelo, joyStick, así que lo miraré a fondo que se pueden hacer cosillas, cualquier sugerencia es bienvenida, estoy a tiempo para recibir ideas.



El ejecutable quien quiera mirarlo a fondo me lo dicen y se los paso por correo.

Hecho bajo Visual C# 2013 Express.
Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spectrum_Menu
{
    class Program
    {
        static void Main(string[] args)
        {
            // Muestra título de la ventana del programa.
            Console.Title = "ZX Spectrum +2A 128 K (Sinclair) - Zona de Pruebas"; 
            Console.BackgroundColor = ConsoleColor.White; // Fondo de las letras blanco.
            Console.ForegroundColor = ConsoleColor.Black;

            while (true)
            {
                Console.Clear(); // Limpia la pantalla y se pone blanco indicado arriba.
                Console.WriteLine(@"********** MENÚ PRINCIPAL **********

(1) Sistema de monitorización.

(2) Sistema de gobierno desde ZX Spectrum.

(3) Modo sistema de gobierno gráfico.

(4) Test.

(5) Información.

(6) Ayuda.
");

                string menu = Console.ReadKey(true).KeyChar.ToString(); // Lectura del teclado para las opciones del menú.
                int switch_menu;

                if (!int.TryParse(menu, out switch_menu)) continue;
                Console.Clear();

                switch (switch_menu)
                {
                    case 1:
                        Console.WriteLine(@"****************** Sistema de monitorización ******************

IN 1      IN2     IN 3      IN 4      IN 5     IN 6      IN 7      IN 8
----     ----     ----      ----      ----     ----      ----      ----
 0        1        0         0         1        0         0         1




Para salir pulse 'P'.
");
                        break;

                    case 2:
                        Console.WriteLine(@"*** Sistema de gobierno desde Spectrum ***

RL1  RL2    RL3   RL4   RL5   RL6    RL7   RL8
0     1      1     0     1     0      1     0
Mensajes de avisos o alarmas



Para salir pulse 'P'.
");
                        break;

                    case 3:
                        Console.WriteLine(@"**** Modo sistema de gobierno gráfico ****

");
                        break;

                    case 4:
                        Console.WriteLine(@"**************** Test ****************

Todo lo que escribas aquí se enviará por puerto
serie y se visualiza en el LCD.

Para salir pulsa la letra 'P'.

");
                        break;

                    case 5:
                        Console.WriteLine(@"************* Información *************

Desde que pulse 'I' o 'i' muestra información
en forma de texto leído desde Spectrum y el
microcontrolador como versión del programa,
firmware, contacto, foro de información como
Zona de Pruebas, etc. 

Lo que se nos ocurra. 'P para salir'.

");
                        break;

                    case 6:
                        Console.WriteLine(@"*************** Ayuda ***************

En esta ventana se mostrarán textos y
explicaciones de ayudas sobre los menús.

Ya lo explicaré más adelante.

");
                        break;

                    default:
                        Console.WriteLine("Pulsa solo 'P' o 'p' para salir al menú  principal");
                        break;

                }
                while (Console.ReadKey(true).Key != ConsoleKey.P) ;
            }
        }
    }
}
Basic + del Spectrum por ahora me parece complicado hacer menús. Quien se anime a echarme una mano o dar pistas.

Un saludo.
10/12/2013 #10

Avatar de Scooter

Que yo sepa el spectrum no lleva una uart hardware, usa una sofware con todas las pegas que ello conlleva.
No es sorprendente ya que eso es marca de la casa; los spectrum eran baratos por la racanería de su hardware. Mirándolo de otro modo eran equipos realmente ingeniosos ya que sacaban muuuucho partido de "la nada".

También puedes hacer una placa con unos latches en alguna dirección de E/S no usada y con simples OUT e IN controlar lo que quieras.
10/12/2013 #11

Avatar de Meta

¿Entonces para que el puerto serie? hasta el midi es otro serie.

El puerto paralelo o el EXPANSION E/S, a lo mejor funciiona mejor.
10/12/2013 #12

Avatar de arrivaellobo

A ver, a lo que se refieren es que tiene puerto serie pero no por hardware, es decir, el procesador que lleve no tiene hardware dentro para manejarlo, por lo que se las ingeniaron para hacerlo via software. Algo así como un emulador, no sé si me comprendes.
Por cierto muy bueno tu proyecto
10/12/2013 #13

Avatar de Dr. Zoidberg

Hasta donde recuerdo, en el puerto de Expansión E/S estaban disponibles todos los buses (datos, direcciones y control) del Z80. No recuerdo el mapa de memoria I/O que tenía el Spectrum por que yo terminé programando en una MSX, pero con ese conector de expansión se puede hacer mucho.
Por otra parte, la salida para "grabador" era una salida serie que usaba la norma de Kansas City (o algo así ) que eran tonos de 1200 y 2400 Hz para los 1 y los 0's pero no recuerdo cual era cual .

En fin... no me acuerdo de nada pero cuando era joven le conectaba cualquier cosa a las Spectrum y a las MSX por el conector de expansión.
10/12/2013 #14


Dr. Zoidberg dijo: Ver Mensaje
Hasta donde recuerdo, en el puerto de Expansión E/S estaban disponibles todos los buses (datos, direcciones y control) del Z80. No recuerdo el mapa de memoria I/O que tenía el Spectrum por que yo terminé programando en una MSX, pero con ese conector de expansión se puede hacer mucho.
Por otra parte, la salida para "grabador" era una salida serie que usaba la norma de Kansas City (o algo así ) que eran tonos de 1200 y 2400 Hz para los 1 y los 0's pero no recuerdo cual era cual .

En fin... no me acuerdo de nada pero cuando era joven le conectaba cualquier cosa a las Spectrum y a las MSX por el conector de expansión.
En efecto, lo que comenta Zoidber es correcto, mas bien necesitas conseguirte la descripción de pines del spectrum y buscarte diagramas básicos de i/o de un Z80; necesitas hacer un decodificador del bus de direcciones, un buffer del bus de datos y después conectar todos los Reles que requieras...

http://www.bneven.com/zxio.html

En este sitio explican muy claro el asunto...Claro...habrá que ver si se consigue por ahí un 8255, sin embargo como ya te comentaron, hasta con circuiteria TTL comun puedes hacer tu puerto de I/O...

http://galia.fc.uaslp.mx/~cantocar/m...F_S/16_PPI.PDF


Saludos y suerte con tu proyecto.
10/12/2013 #15

Avatar de diegomj1973

Qué época esa!!!!!

Tuve una Sinclair CZ1000 con expansión externa de memoria de 16K (toda una novedad para la época). Original venía con sólo 2K de memoria. Luego, mudé a TK85 y posteriormente a TK90X con 16K (que no me alcanzaba para los mejores juegos que sí solían correr en opciones de 48K).

Estaban las Sinclair CZ1500, las TK83, TK85, TK90, TK90X, TK2000, Spectrum y Spectrum plus. Las TK90X eran la inmediata competencia de la Spectrum (color y sonido). Las "hermanas mayores" eran las Commodore 16, 32, 64 y 128, las MSX de Talent, las TI99, ATARI, etc.

Dispongo el manual de la TK90X: si logro escanearlo, te lo paso. El modo de programación tiene bastante similitud con Qbasic, por ejemplo (salvo variaciones muy específicas). Si has manejado Qbasic bajo entorno DOS 6.22 en las primeras PC (XT), seguramente no se te va a complicar mucho programar en la Spectrum.

Saludos
11/12/2013 #16

Avatar de Meta

Hola gente:

Veo que han tocado este tipo de máquinas en el pasado y hay mucha nostalgia aunque ahora no esté interesados.

Que casualidad en mi época de estudiante del Libro electronica general 1. dispositivos y sistemas digitales, me viene el 8255 muy bien documentado, controlado con el 8085A,y dice que se puede gobernar con más dispositivos diferentes. Por lo que se ve, parece que hasta con PIC. Es de lógica.
Son muchas páginas para leer pero es muy curioso, de todas maneras un buen PIC o AVR lo puede emular. Aún lo estudiaré.

Lo que me llama la atención es hacer gráficos en TV, nunca lo he hecho.

Es bueno encontrar el esquema y funcionamiento tanto del puerto paralelo de las impresoras y la "EXPANSION E/S". Que pena en España o donde sea ya no saquen revistas de antes.

Las revistas de antes sobre Spectrum, había secciones en algunos números para hacer un hardware, algunos usaban el PIC16F876, se que ahora el sustituto es el 16F886 pero bueno. Esta revista la estoy mirando poco a poco por números a ver su hardware y que tiene de interesante.

http://www.microhobby.org/

Vuestros consejos, lo estudiaré a fondo. El PIC16F84A maneja el puerto serie emulado y funciona de maravilla, así que será compatible con el Spectrum por mucho que no tenga UART, tampoco lo tiene ese PIC. Adapté los datos del 16F84A y lo puse con el 16F887 como si no tuviera UART y funciona. Lo que pasa que puedo escoger cualquier puerto o pin que me de la gana, la UART física tiene sus pines correspondientes y lo puedo elegir. Se que es mejor UART por hardware que emulado como el 16F84A, pero funcona y sin problemas. Todo bien documentado aquí.

Gracias por los consejos. Cuanto más, mejor.
11/12/2013 #17


Scooter dijo: Ver Mensaje

Hasta donde se el spectrum no tiene uart así que el pruero seri va via software loq ue es un grave handicap creo que lleva cts rts obligatoriamente.
Perdón Meta, en mi comentario anterior se me olvido decirte que en efecto, el spectrum no tenia UART y por tanto en el Interprete de BASIC no vienen contempladas instrucciones para el uso del puerto serial. Dicho esto veo muy difícil que puedas implementar una comunicación serial con el zx spectrum (no imposible) ya que el uso de este puerto solo se podía implementar por medio de un software en ensamblador que venia embebido en un ROM(firmware) a manera de expansión del propio zx spectrum...de ahí que para uno era mucho mas fácil; decodificar el bus de direcciones y un buffer de 8 bits para el bus de datos para conectarse al mundo real con una simple instrucción OUT o un IN segun se necesite...pero regresando al tema de la comunicación entre espectrums, en su momento recuerdo conectar dos spectrums y transferir información entre ellos usando los comandos LOAD, SAVE, MERGE y VERIFY, que son los que sirven para cargar y grabar programas, sin embargo cuando usas estos comandos la pantalla se pone en negro o se desliga el video con lo que no ves nada durante la transferencia y la velocidad era de 19200 baud pero todo esto era via Software con lo que eran muy comunes los errores.


Con respecto a los gráficos en el spectrum también eran muy, pero muy limitados y generalmente se generaban vía ensamblador o lenguaje maquina.

Saludos
11/12/2013 #18

Avatar de Dr. Zoidberg

@Meta:
Me parece que estás haciendo mas lío del necesario, por que si vas a usar un PIC para recrear un puerto serie y enviar info a otro PIC que va a controlar los relays... pues bueno, va lindo como proyecto para aprender cosas pero es completamente anti-práctico ().
Si querés controlar algunos relays con el Spectrum, lo más fácil es decodificar el bus de direcciones del subsistema I/O aislado usando un par de 74LS138 y poner un latch en el bus de datos (tipo 74LS273 ... ya ni me acuerdo) donde vas a capturar la info de activación de cada relay (1 o 0). Luego ponés un ULN2803 y podés mover hasta 8 relays por medio de instrucciones out port_dir, valor.
Pero claro... tenés que conseguir la distribución de pines del conector y averiguar que parte del mapa de memoria I/O está libre para poder colocar este engendro... que es bastante fácil de hacer y MUUUY barato en términos económicos.
11/12/2013 #19

Avatar de Meta

Hola:

No voy a usar un PIC para enviar a datos a otro PIC, ejjejeje. Explicaba que PIC16F84A tiene emulado un puerto serie y funciona bien. Si Spectrum hace de puerto serie, no creo que haya problemas para enviar o recibir información. Deja encontrar el santo libro para ZX Spectrum +2A 128 K.

Encontrar dicha documentación sobre construir hardware está muy bien.
http://trastero.speccy.org/cosas/JL/...Flash/CF2.html
http://trastero.speccy.org/cosas/JL/...tFlash/CF.html
http://trastero.speccy.org/cosas/dro...artuchos_s.htm
http://trastero.speccy.org/cosas/dro...lashcart_s.htm

Saludo.
11/12/2013 #20

Avatar de Dr. Zoidberg

OK. Este link que subiste tiene la distribución de los buses en el conector trasero de la Spectrum. Solo tenés que averiguar cuales direcciones I/O tenés disponibles para usar y decodificarlas del bus de direcciones junto a la linea \IOREQ que es la que indica la ejecución de una in o una out. (vas a tener que revisar las otras líneas por si fuera necesario usar alguna otra en la decodificación). Las líneas \WR y \RD te indican la operación de escritura o lectura respectivamente, y vos deberías usar la \WR y la direccion decodificada para generar la captura del bus de datos en el latch.
Psssss.....es bastaaaante simple....
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.