Un autómata programable (PLC) casero, otra vez.

Viene de aqui: https://heli.xbot.es/?p=33

Han pasado otros diez años (alguno más), y nos hemos metido en 2020. El PLC casero no esta muerto, una tarjeta con un micro H8-500 y la versión 3.8 en su EPROM 27C256 continúa trabajando. Todavía controla, con sus 32 entradas y sus 32 salidas digitales, sus dos puertos serie y sus 32K de RAM con RTC y batería de backup, un filtro prensa destinado a desecar lodos.

Aprovechando el parón por el coronavirus me he puesto a revisar el software de programación ECP. La intención era portarlo a Windows. ECP solo corre en MSDOS debido a que hace acceso directo al hardware. Esto era una necesidad en su momento, ni la BIOS ni MSDOS proporcionaban una API adecuada para manejar el hardware. Por ejemplo, la velocidad más alta que podía programarse en los puertos serie era 19200 bauds, aunque los chip UART 8250 podían trabajar hasta 115200 bauds. Solo escribiendo directamente en los registros adecuados de la UART podían conseguirse todas las velocidades diponibles.

Con la llegada de sistemas operativos más avanzados (XP y posteriores) ya no es posible interactuar directamente con el hardware de la máquina. De eso se encarga el propio sistema operativo mediante los drivers, pero proporciona una API para que los programas de usuario puedan acceder al hardware.

El plan era el siguiente: cambios mínimos en el programa ECP para eliminar todas los accesos al hardware y hacerlo a través de la API de Windows. El programa ECP estaba escrito en ANSI C (Borland Turbo C 2.0, todavía se puede mediante DOSBOX bajo Windows XP). Para la nueva versión usaría GCC 9.30 bajo Msys2 y MinGW en Windows 7 x64 ( y en otros momentos máquinas bajo Windows 10 x64). No uso interfaz gráfico, mantengo el interfaz en texto pero usando la librería ncurses.

El resultado es una vesión (alfa todavía) que corre en desde Windows Vista hasta Windows 10 (incluidos Windows 7 y 8.x) de 32 o 64 bits, y también en Windows XP de 32 bits: https://heli.xbot.es/wp-content/uploads/2020/05/EcDuino4.51.zip.

Del mismo modo he tomado los fuentes en C del firmware del PLC V3.8 y lo he portado a Arduino (uso en entorno arduino 1.8.12, aunque compilará con otros anteriores). Junto con algunas librerías he conseguido que entre en la limitada RAM (2K) del Arduino UNO (Atmega328). Teniendo en cuenta que las versiones antiguas trabajaban en micros con 32K de ram es todo un lograo. Para conseguirlo he tenido que rehacer el mapa de memoria del PLC, menos E/S, menos reles internos etc. El resultado es un PLC con las siguientes características:

256 pasos de programa, 32 temporicadores/contadores, 32 entradas y 32 salidas. Dos entradas analógicas 0 a 5V de 10 bit y una salida analógica de 10 bit de 0 a 5V. 64 + 64 relés internos y reloj (si se usa el módulo RTC DS3231).

Como extra he mantenido el HMI (human-machine interface), con teclado de 6 teclas por I2C mediante PCF8754 y pantalla LCD d e16 caracteres por 2 líneas por I2C. Esto nos permite interactuar con el PLC.

Este es el montaje de prueba:

Este es el software para el Arduino UNO. Yo he usado el entorno 1.8.12, pero funcionará con otros más antiguos. Son necesarias 3 librerías que se encuentran en el directorio «libraries» dentro del ZIP: https://heli.xbot.es/wp-content/uploads/2020/04/EcDuinoUno0.2

El reloj no es imprescindible para el funcionamiento del programa, eliminarse de forma opcional. También es posible eliminar el conjunto del display y teclado dejando sin conectar los dos hilos del I2C amarillo y gris que val a los pines A4 y A5 del arduino. En caso de eliminar todo es recomendable conectar en esos pines un par de resistencias de 10K a positivo, o mejor eliminar la línea 65 de header.h «#define _DISPLAY_» para que no se compile la parte del display.

Algunos programas para el PLC para hacer pruebas: https://heli.xbot.es/wp-content/uploads/2020/04/ProgramasTest.zip

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