PLC en Raspberry PI: classicladder

El proyecto “classicladder” consiste en un PLC (en inglés Programmable Logic Controller, autómata programable o solo autómata en español) programable en ladder (diagrama de contactos en español) o en grafcet. También integra un entorno de monitorización y comunicaciones, incluyendo MODBUS para las entradas y salidas. Esta escrito en C y usa el entorno GTK+2, puede compilarse para Windows y para Linux.
El autor de este programa es Marc Le Douarain, yo he hecho pequeñas contribuciones: https://sites.google.com/site/classicladder/
El software interpreta el programa, al contrario que otros PLCs que ejecutan código compilado en un PLC virtual, y es totalmente funcional. Es posible ejecutar el software en una máquina sin entorno gráfico y controlarlo desde otra con entorno gráfico mediante comunicaciones (tcp/ip o serie).
Compilarlo para Raspberry pi no debería ser dificil, corre un linux.

Trabajando en la propia raspberry pi con conexión a internet, primero descargamos los fuentes en C de la última versión a 18/2/2013 classicladder 0.9.6 desde el directorio de usuario PI:
“wget http://sourceforge.net/projects/classicladder/files/classicladder/classicladder-0.9.006.tar.gz”
Y lo descomprimimos con:
“tar -xvzf classicladder-0.9.006.tar.gz”
Esto crea el arbol de diecorios en ~/classicladder, ahora cambiamos los permisos de los ficheros, por seguridad.
Entrar en el directorio:
“cd “~/classicladder/projects_examples”
y hacer
“chmod 644 *”
Salir al directorio “~/classicladder”:
“cd ..”
y hacer:
“chmod 644 *”
“chmod 755 projects_examples”

Ya tenemos todos os fuentes listos.
Ahora podemos compilar el software CON o SIN entorno gráfico. Si lo hacemos sin entorno gráfico no podremos controlar el PLC classicladder si no es comunicándolo con otro classicladder que si tenga entorno gráfico.

Para compilar con entorno gráfico es necesario instalar las librerías del entorno GTK+2:
“sudo apt-get install libgtk2.0-dev”

Ya esta todo listo, compilar simplemente ejecutando make desde el directorio de los fuentes, el makefile que acompaña al royecto ya esta configurado para linux y funcionará perfectamente en la raspberry pi:
“cd “~/classicladder”
“make”
Esto habrá creado un fichero ejecutable “classicladder”. Ya podemos probarlo ejecutarlo “./classicladder”. Se desplegrán varias ventanas y podremos ver el estado del PLC…:

Escritorio de raspberry con classicladder

Podemos salvar esta versión del ejecutable con entorno gráfico con otro nombre:
“cp classicladder classicladder_gtk”

Para compilarlo SIN entorno gráfico y usarlo como aplicación embebida, mucho mas ligero (la aplicación gráfica con GTK+2 consume bastante CPU de la raspberry), hay que modificar un para de cosas en el fichero “Makefile”:

Comentar la siguiente línea:
“GTK_INTERFACE = 1” -> “#GTK_INTERFACE = 1”
Esto le dice al makefile que compile el proyecto SIN entorno gráfico.
Comentar las siguientes líneas:
“OWN_CFLAGS = -march=i486” -> “#OWN_CFLAGS= -march=i486”
“OWN_LIBS = -march=i486” -> “#OWN_LIBS = -march=i486”
Estas líneas son específicas para entornos intel x86, nosotros vamos a compilarlo para ARM.
Salvar el fichero modificado, hacer:
“make clean”
para limpiar cualquier compilación anterior y compilar de nuevo con:
“make”
Se habrá creado un nuevo ejecutable “classicladder”.

Para que funcione correctamente en modo embebido SIN entorno gráfico hay que crear un directorio donde se almacenarán los programas recibidos y donde classicladder buscará para cargar automáticamente el programa en el arranque:
“cd /usr/local”
“md classicladder”
Esto creará un directorio “/usr/local/classicladder”

Ejecutar classicladder desde el directorio donde se creó:
“cd ~/classicladder/
“./classicladder”
Podremos ver una serie de mensajes y al final “SOCKET WAITING”. Este será el PLC tarjet y ya esta funcionando y esperando órdenes. Ahora podremos comunicarnos con este PLC desde otra máquina con entorno gráfico.
Conectar la red a la raspberry y hacer “ifconfig” para ver su IP, si no la hemos anotado cuando arrancó.
En otro PC o raspberry arrancar el classicladder con entorno gráfico.
Cargar un programa con File->Load
Transferirlo al PLC tarjet con PLC->FileTransfer->Send Current Project To Tarjet y poner la IP del PLC tarjet (la raspberry pi).
Una vez que el PLC tarjet tenga el programa cargado arrancará en RUN cada vez que arranquemos classicladder en la raspberry pi.
Ahora podremos hacer PLC->Connect y poner la IP del PLC tarjet para monitorizar el estado y las variables del PLC. También podemos pararlo etc.

Podrá verse en el PLC tarjet distintos mensajes durante la recepción de datos.
Si todo va bién el programa recibido se grabará en “/usr/local/classicladder/nombredelprograma.clprjz”

CONECTANDOLO CON EL MUNDO REAL
Vale, esto es muy bonito, pero ¿y controlar directamente entradas y salidas reales desde la reaspberry pi y classicladder?. En principio basta con conectar el puerto serie de la raspberry, en el conector P1 pines 6(GND), 8(TXD) y 10(RXD) a cualquier dispositivo que use protocolo MODBUS (con el adaptador de nivel adecuado, la raspberry pi usa TTL a 3,3V).
Se puede usar un módulo IO MODBUS el propio autor del programa Marc Le Douarain: https://sites.google.com/site/classicladder/classicladder_io_module
También se pueden usar módulos ADAM de Advantech: http://www.advantech.es/producto/adquisicion-de-datos/data-acquisition-modules

Los pines tienen dos nombres: uno el original del chip (broadcom) y otro el que da el sistema operativo (raspberry pi):
Pines GPIO

¿Y por que no usar los pines GPIO directamente?. Son pocos, y puede que nos interese usarlos para mas cosas… pero como hace años ya diseñé una placa de ampliación de I/O (SIO) basada en registros de desplazamiento voy a revivirla y usarla aquí!!!!
Esta es el esquema adaptado a la raspberry pi, hay que conectar 8 hilos del conector P1 (6 señales y dos de alimentación) y listo.:

Esquema Shifted Input Output
Esquemas Eagle: http://heli.xbot.es/wp-content/uploads/2014/01/Raspberry_SIO.zip

La placa de registros de desplazamiento queda alimentada desde la raspberry pi. Ahora hay que modificar classicladder para que use este hardware. Hay varias formas de usar los GPIOs de la raspberry pi:
Mediante el sistema de archivos virtual “/sys/class/gpio”
Usando una librería como: http://www.open.com.au/mikem/bcm2835.
Accediendo directamente al hardware, esta es la que yo usaré: http://elinux.org/RPi_Low-level_peripherals#GPIO_Driving_Example_.28C.29
Despues de escribir el código mostrado y hacer unas pruebas veo que puedo escribir en los puertos sin problemas. Pero ¿y leer?. No hay ninguna función para leer los puertos en el ejemplo… Busco la datasheet del chip bcm2835 y busco el periférico GPIO. Perfecto en el apartado 6.1 (página 90), describe las direcciones de memoria donde estan mapeados los GPIOs, los pines se pueden en el offset 34h desde el inicio del mapa de GPIO. Como los accesos a memoria a 32 bit, para acceder a la dirección 34h usaré (gpio+13) porque (13*4) = 53d = 34h
Por lo tanto para leer los 32 GPIOs sería (g es el número de GPIO 0-53, gpio es la dirección base del periférico):
PINS_READ(g) *(gpio+(13+(g*3)) // Lee los 32 bits donde esta incluido el GPIO g
y para leer un pin individual:
PIN_READ(g) (((*(gpio+13)) & 1<< g)==1<< g) // Retorna el estado del GPIO g: 0 or 1 Me ha costado mucho que esto funcione, aunque hay mucha información acerca de la raspberry pi es dificil reunirla de forma consistente. Un problema que me ha hecho perder varias horas picando código y mirando con el osciloscopio es que el pin 13 de P1 (GPIO21 según Broadcom, o GPIO2 según Raspberry pi) en la versión V2 esta conectado a GPIO27 (según broadcom). El sistema operativo de la raspberry lo mapea a GPIO2 igual que en las V1, pero si se accede al hardware y no se usa el sistema operativo hay que tenerlo en cuenta!!! Ahora solo hay que incluir todo lo probado en el fichero "hardware.c" de classicladder y modificar "Makefile" para que se pueda compilar con o sin este hardware experiemental. Mis versiones de Makefile y hardware.c: http://heli.xbot.es/wp-content/uploads/2014/01/Makefile_y_hardware.zip
En Makeile ahora hay dos nuevos switches:
RASPBERRY_PI = 1
Si no se comenta con # al principio compila para raspberry pi.
MAKE_SIO_ACCESS = 1
Si no se comenta con # al principio compila con el hardware experimental SIO, esta opción puede usarse también para windows y para linux en entorno PC usando el puerto paralelo. Es similar a MAKE_IO_ACCESS.
Descargarse mi version desde la raspberry pi en el directorio “~/classicladder”:
“wget http://heli.xbot.es/wp-content/uploads/2014/01/Makefile_y_hardware.zip”
descomprimirla:
“unzip Makefile_y_hardware.zip”
Contestar “yes” cuando nos pregunte que si sobreescribe los ficheros existentes.
Compilarla:
“make”
Ahora para ejecutarla hay que hacerlo como superusuario. Esto es así porque necesita acceder a la menoria física del sistema (para leer y escribir en los GPIOs). Supongo que también funcionaría si el usuario tiene permisos de lectura y escritura sobre el dispositivo “/dev/mem”.
“sudo ./classicladder”
Si alguien esta interesado en inspeccionar el código, las modificaciones hechas en “hardware.c” estan entre las directivas
#if defined (MAKE_SIO_ACCESS) – #endif

Asi se ve la placa SIO con la raspberry pi funcionando:
Esquema Shifted Input Output

CLASSICLADDER CON SIO EN PC
También podemos compilarlo para PC, si comentamos:
#RASPBERRY_PI = 1
en makefile. Si vamos a compilar bajo windows descomentamos:
WINDOWS = 1
Si lo hacemos bajo linux es necesario dejarlo comentado:
#WINDOWS = 1
Para usar el la placa SIO conectada al puerto paralelo hay que poner en “hardware.c” la dirección física del puerto LPT del PC:
#define SIO_PORT 0x378 // Base port for PC hardware LPT1, LPT2=0x278, LPT3=0x3BC
Y usamos este cable para conectar el PC con la placa SIO:

Esquema Shifted Input Output
Esquemas Eagle: http://heli.xbot.es/wp-content/uploads/2014/01/Raspberry_SIO.zip (El fichero contiene los dos esquemas, placa SIO para raspberry pi y cable PC).

El software es experimental, los parámetros de configuración deberían poder modificarse a través de los menús de “config_gtk.c”, y estar definidos en “classicladder.h” en la estructura “infos_gene”, por ejemplo. Pero para comenzar sirve…

He comprobado que con la raspberry pi es muy estable, sin embargo bajo windows se producen glitches periódicos que desactivan las salidas… Bajo linux (suse 12) también, pero en menor medida.
En windows con mas de un procesador va francamente mal, he tenido que incluir código para forzar el proceso en una sola CPU:
SetProcessAffinityMask(GetCurrentProcess(), 1); // Ejecutar solo en la CPU #1
Supongo que estos problemas son debidos al entorno multitarea, este mismo hardware con un micro PIC, atmel o similar y las mismas rutinas funciona perfectamente.

Yo no he usado una placa completa de 32 salidas y 32 entradas, sino una mas pequeña pero con entradas optoaisladas y con relés en las salidas (16 entradas y 8 salidas).

Raspberry PI y arduino UNO

Resulta que me entero en la página de Arduino http://arduino.cc/es/Main/Buy que la tienda de un amigo aquí en Alcalá de Henares (Componentes Escobedos, http://www.electronicaalcala.net) es distribuidora de arduino y voy el martes a comprar uno…
Y no les queda ninguno… cuando me voy a ir desilusionado me dicen: si quieres tenemos una raspberry pi…
Coño!, resulta que tienen una, modelo B Versión 2 (512Mb de ram, 2 Usb, ethernet) y esta esperándome en el expositor… y ademas me prometen que al dia siguiente tendrán un arduino UNO V3 para mí.
Efectivamente, justo el día de San Valentín, tenía mi equipo completo para programar arduinos desde la raspberry pi.
Así empieza esta historia de ¿amor? entre una raspberry pi y un arduino UNO…

Para empezar a trabajar hay que conectar la raspberry e instalar el sistema operativo en la SD. Yo he usado una de 2Gb y el sistema operativo raspbian descargado de http://www.raspberrypi.org/downloads
Concretamente la versión http://downloads.raspberrypi.org/images/raspbian/2013-02-09-wheezy-raspbian/2013-02-09-wheezy-raspbian.zip
Como voy a cargar el sistema operativo en la SD desde Windows necesito el copiador de imágenes http://sourceforge.net/projects/win32diskimager/files/latest/download
Desde mi portatil Acer 5920 he tenido problemas para que me detecte la SD, he tenido que usar una versión vieja del Win32DiskImager.exe, http://learn-gdx.googlecode.com/files/win32diskimager-RELEASE-0.1-r15-win32.zip
Otras versiones pueden encontrarse aquí: http://sourceforge.net/projects/win32diskimager/files/Archive/

Descomprimir la imagen del Raspbian y copiarla a la SD mediante el Win32DiskImager.exe
Conectar la SD en la rasperry y alimentar… Aparece una pantalla de configuración del sistema operativo de la raspberry. Yo he cambiado pocas cosas:

Overscan -> no lo he tocado, disable (por defecto)
Configure_keyboard -> Cambiarlo: Generic 105 (mi caso)
Keyboard layout -> Other -> Spanish -> Spanish
Key to function as AltGr -> Right Alt (AltGr)
Compose Key -> Right Logo Key (mi caso)
Use Control+Alt+Backspace to terminate the X server -> TES
Change_pass: Las raspberry se estan haciendo muy populares y si se usa la con conexion a internet mejor cambiarlo.
Change_locale -> cambiarlo a: es_ES.UTF-8 UTF-8, por defecto viene en_GB_UTF-8 UTF-8
Default Locale for the sysstem enviroment -> es_ES.UTF-8
Change Timezone -> Geographic area -> Europe
Time Zone -> Madrid
Memory Split -> No lo he tocado, 64 (por defecto)
Overclock -> No lo he tocado.
ssh -> Enable. Opción muy interesante!!!
boot_behaviour -> no lo he tocado, por defecto: NO (Me gusta mas que arranque en linea de comandos, luego puedo arrancar el entorno gráfico con startx).
update -> Si, como ya tengo la conexión a internet lista por cable actualizo ahora el sistema…
Expand_rootfs
Finish

Se reinicia el sistema y aparecerá el prompt. Nos logeamos como usuario “pi”, el password por defecto es “raspberry”, si no lo hemos cambiado antes:
Pi puede hacer sudo sin password, es la mejor opción en vez de usar el usuario root.
El superusuario root no tiene password por defecto, mejor ponerlo con “sudo passwd root”.

También podemos actualizar ahora el sistema con “sudo apt-get update”

Este es el entorno de desarrollo minimalista para arduino, basado en raspberry pi:

Estación de trabajo para arduino raspberry con raspberry pi

Para instalar el entorno arduino basta con hacer “sudo apt-get install arduino”. Esto instalará el entorno versión 1.0.1 (a fecha 14/2/2013) y todos los paquetes necesarios, java, compilador avr-gcc etc.
También pueden instalarse los paquetes por separado, o actualizar alguno de forma independiente (con :”sudo apt-get install paquete” o “sudo apt-get update paquete”)

avr-libc
libftdi1
avrdude
openjdk-6-jre
librxtx-java

Si falla alguna instalación se puede recuperar con “sudo apt-get install paquete –fix-missing”.

Con esto basta, se crea un acceso directo en el menú de inicio llamado arduino…
Arrancar el entorno gráfico con “startx” y ejecutar arduino. También puede ejecutarse una ventana de terminal, el navegador web…

Escritorio de raspberry con arduino

He usado un viejo teclado multimedia que tiene un hub con dos USB, de forma que el teclado, el ratón y el arduino solo me consumen un puerto USB y el otro lo tengo disponible para el pendrive de intercambio de datos…

Puede verse que he instalado un par de programas adicionales, el MC (soy de la vieja escuela y para trabajar desde terminal me gusta ese gestor de ficheros):

sudo apt-get install mc

Para usarlo basta con hacer “mc” desde un terminal. Si el terminal es de putty (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) mejor hacer “mc -a” para que muestre correctamente los caracteres gráficos que componen el dibujo de los paneles.

Otra herramiente que he instalado es un capturador de pantallas scrot:

sudo apt-get install scrot

Desde un terminal, para capturar la pantalla despues de 5 segundos teclear “scrot -d 5”.
Para capturar inmediatamente basta “scrot”

Si queremos la ultima versión del entorno arduino 1.0.3 (a fecha 14/2/2013) podemos descargarla con “wget http://arduino.googlecode.com/files/arduino-1.0.3-linux64.tgz”.
Descomprimirla en el directorio de usuario con “tar zxvf arduino-1.0.3-linux64.tgz”.
La pega es que los binarios vienen compilados para Intel x64 y estamos trabajando con ARM, no nos valen. Eliminamos la carpeta “~/arduino-1.0.3/hardware/tools” de forma que el entorno de programación trabaje con los binarios ya instalados del entorno 1.0.1.
No estan desactualizados, si havemos “avr-gcc -v” desde un terminal veremos que tenemos instalada la versión 4.7.2 que es la última disponible.
También eliminamos de la carpeta “~/arduino-1.0.3/lib” los ficheros “librxtxSerial.so” y “librxtxSerial64.so”, estan compilados también para intel x86 y el entorno 1.0.1 instalado ya nos los proporciona.
Ahora podemos arrancar el entorno 1.0.1 desde el enlace en el menú de inicio o el entorno 1.0.3 esde la carpeta “~/arduino-1.0.3/”. Podemos hacerle un enlace al escritorio llamado “arduino1.0.3” y otro al entorno antiguo “arduino1.0.1”. Es posible usar los dos indistintamente sin interferencias. Hay que tener en cuenta que el compilador y todos los binarios compilados (el entorno esta escrito en java) que se usan son los que se instalaron con la versión 1.0.1, los que hemos descargado con la versión 1.0.3 los hemos borrado anteriormente porque estan compilados para intel x86.

Al conectar el arduino, en mi caso el UNO V3, el entorno detecta automáticamente y nos añade el puerto “/dev/ttyACM0” a la lista de puertos disponibles.

Aunque el entorno arduino es un poco pesado para la raspberry pi a (ARM11 a 700Mhz, 512Mb Ram) funciona perfectamente y no es necesario un PC para programar arduinos!!

Super Probe Plus: Sencillo multitester con PIc y 20 funciones

Rebuscando por la red encontré hace tiempo el SuperProbe aquí: http://mondo-technology.com/super.html
El diseño original con firmware V38 cuenta con 18 funciones. Me pareció un proyecto muy sencillo para un aficionado, y muy completo para llevar siempre en la caja de herramientas. El coste del proyecto es de solo unos 15 Euros!!
Usando partes del código original y otras escritas por mi he creado este clon con 20 funciones.
La única diferencia con el SuperProbe original es que el SuperProbePlus lleva intercambiadas entre si las resistencias R13 y R14 de 150 Ohmios y 100K. Esto es necesario para usar el generador de tensión de referencia interno del PIC a través del pin 4 (RA2) y dejar libre el pin 17 (RC6). Este pin antes se usaba para crear un divisor resistivo y generar 2.5 V para la detección de nivel flotante en el probador lógico. Ahora se usa para detectar el estado del nuevo selector de voltaje alto (25V) – bajo (5V). Permutando estas dos resistencias puede usarse mi código en un SuperProbe original. Si no se usa el conmutador del selector de voltaje alto – bajo poner el pin 17 (RC6) a nivel bajo (masa).
Opcionalmente puede conectarse un altavoz sustitución de la resistencia de 150 Ohmios y, prescindiendo de la generación de señal NTSC que necesita esa resistencia, tener un zumbador para medir cotinuidad.

Esquema Super Probe Plus 1.1

Las mejoras sobre el SuperProbe original son muchas:

Prob: nuevos modos
Puls: nuevas frecuencias y calibración exacta.
Voll: Calibración exacta y filtrado.
Diod: Salida de 10mA al pulsar PB1 para encender LED.
Ohms: Nuevo modo.
Cap: Mejorada la precisión.
Coil: Ahora solo inicia medida al pulsar PB1 para evitar bloqueo al entrar en el modo.
Freq: Calibrado exacto, nuevo modo RPM.
Cnt: Mejorada la visualización low-all.
Sig: Calibrado exacto.
Ser: Nuevas velocidades y modo auto.
rc.ou: repetición de los pulsos exacta a 50hz.
rc.in: Nuevo modo.
[]: Nueva forma de cambiar frecuencia, calibración exacta a 1Hz.
ir.ou: Nuevas frecuencias.
stop: ahora trabaja en milisegundos y formato h:mm:ss:nnn

Además ahora el programa fuente compatible con MPLAB esta mejor comentado y es mas versatil. Usando las directivas #define puede configurarse para distintas versiones de hardware y con distintas funciones.
Los datos de calibración y escalado se guardan en EEPROM de forma que es posible cambiarlos sin reprogramar el IC, por ejemplo para usar un divisor de tensión distinto.
Usando el regulador LP2950 se mejora la precisión analógica hasta 1,5%, bastante mejor del 5% del LM28L05 o del LM2931. El consumo es de alrededor de 40mA a 9V con multiplexado 1:32 (el original) ó 75mA a 9V con multiplexado 4:32 (usando transistores, da mas brillo y menos parpadeo).

Este es el manual del Super Probe Plus V42:

A fecha 8 de Marzo de 2012 he actualizado algunos errores y POR FIN HAY PCB!!

SuperProbe2

En el siguiente RAR hay: Fuentes para MPASM, esquema con Eagle, ficheros .ps listos para imprimir y “planchar” la placa, lista de componentes con los precios y códigos de RS etc.
He ensamblado dos versiones lista para usar, sin transistores para displays de ánodo común, una con generador NTSC y otra con zumbador en medición de continuidad. Cambiando los defines adecuados en el código fuente puede compilarse con o sin transistores, para displays de ánodo o cátodo común, con generador de señal o no y con ntsc o zumbador.

Descargar todos los ficheros del proyecto.

Esquema Super Probe Plus 1.1

Galeria de fotos de SuperProbe

Grabador de EPROM para ZX Spectrum (1985)

Historia de un abuelo informático

Zx Spectrum 48K (Wikimedia)

Estamos en el año 1985 y yo tengo 15 años, mi padre me ha regalado un ZX Spectrum con la esperanza de que deje de acudir a casa de un amigo a trastear con su ORIC-ATMOS.

El spectrum me parece peor que el oric y usaba un Z80 (yo ya había comenzado a programar en ensamblador el R6502) sin embargo el zx spectrum tiene muchísimas ventajas: una comunidad enorme de usuarios, programadores y desarrolladores.
Había comenzado a comprar la revista Microhobby (todavía conservo desde el numero 1 hasta no recuerdo cual) y a animarme con sus programas, cursos y esquemas.

En los números 35, 36 37 y 38 de la primera época de la revista aparece un esquema interesante y su correspondiente programa de control: un grabador de EPROM.
Entremos en situación: la carga de programas en los ordenadores de esa época era mediante cintas de cassette a velocidades entre 600 y 1200 bps (esta última velodidad era la usada por el spectrum) y con muchos fallos. Una verdadera desesperación. El grabador de EPROM (yo tenía muchas EPROM 2764 de 8Kbytes procedentes de mis desguaces electrónicos) era la solución ideal para cargar programas de forma instantánea.
Solo necesitaba un pequeño programa cargador en cinta mediante el que leía la EEPROM a la memoria del spectrum. Instantáneo. Hasta conseguí alguna 27256 y 27512 (32K y 64K, una enormidad para la época).

Claro, que con 15 años y viviendo en un pueblo de 3000 habitantes no tenía acceso a medios técnicos sofisticados para construírlo (y menos a dinero para comprarlo, o comprar piezas) así que, como pude, construí esto:

Grabador de EPROM para Spectrum

Grabador de EPROM para Spectrum

Todos los componentes son reciclados de placas electrónicas de máquinas tragaperras, el soldador que utilicé fué uno de calderero de 60W (comprado en la ferretería local) y los hilos de conexionado son de pares telefónicos. La base no es circuito impreso de baquelita, es cartón de las tapas de los cuadernos de clase, que taladraba con un punzón para pasar las patillas de los componentes. Rústico pero funcionaba!!

Cableado del grabador de EPROM

Para borrar las memorias bastaba ponerlas al sol directo durante un par de días. Todavía conservo mi EEPROM mas preciada (de las que tenía dos copias, la seguridad ante todo): la que contiene el software de grabación y el ensamblador Z80.
Con este grabador programé la EPROM de mi primer ordenador autoconstruido (también sobre cartón y con hilos telefónicos) con Z80, 1K de RAM y 32 displays de 7 segmentos. Desgraciadamente lo desguacé unos años después para reutilizar sus componentes.

El zx-spectrum no esta muerto, todavía vive en la red en las páginas de los nostálgicos:

Microhobby

Hardware del spectrum

Programas de microhobby para Spectrum

Spectrum +3

El Spectrum en el siglo 21

PLC clónico de Hitachi EC

Puerto serie en PDA Acer n35