Mostrando entradas con la etiqueta pal. Mostrar todas las entradas
Mostrando entradas con la etiqueta pal. Mostrar todas las entradas

jueves, 6 de abril de 2023

ESP32 Emulador ZX SPECTRUM - Vídeo PAL

  Página principal

ESP32
Emulador
ZX SPECTRUM - PAL


Cada uno tiene mitificado el ordenador en el cual empezó, y el mio es el ZX SPECTRUM.
Otro circuito que encontré para hacer con el ESP32 es un emulador de Spectrum.
    https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv
Existe otro emulador pero la salida es por VGA, es mucha de mejor su calidad de video, pero no se podría conectar a televisiones antiguas.
El entorno de desarrollo es MX21, es una distribución basada en Debian, pero bastante mas actualizada, recomiendo que la probéis.

$ python3 --version
Python 3.9.2

$ uname -a
Linux mx21 6.0.0-6mx-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.0.12-1~mx21+1 (2022-12-15) x86_64 GNU/Linux

El primer paso es instalar el entorno de desarrollo ESP, esto me dio mucho trabajo, hasta que descubrí que con la última versión la 5, producía errores en la compilación, por lo que tuve que instalar la versión 4.4.4

mkdir -p ~/esp
cd ~/esp
git clone -b v4.4.4 --recursive https://github.com/espressif/esp-idf.git
cd ~/esp/esp-idf
./install.sh esp32

cd esp-idf/
. ./export.sh

Este último paso ./export.sh configura el entorno del terminal, si se cierra el terminal deberemos volver a ejecutarlo.

Ahora nos toca bajar el emulador desde la página del proyecto.

cd ..
git clone https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv

No metemos en el directorio del proyecto y lo compilamos y grabamos el ejecutable en la ESP32 .

cd spectrum128_esp32_usb_host_pal_tv-main/
idf.py -p /dev/ttyUSB0 flash

Si todo fue bien, después de un rato de compilación, grabará los ficheros *.bin en el ESP32, para luego reiniciarse.
....
....
Writing at 0x000665df... (100 %)
Wrote 368880 bytes (223758 compressed) at 0x00010000 in 5.2 seconds (effective 567.4 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 103...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.1 seconds (effective 377.3 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
Done

Si tenemos conectado la salida de vídeo a un televisor, veremos que arranca el emulador de el Spectrum.
Aconsejo que no conectéis la tarjeta SD la primera vez, de esta forma entraremos en el menú de selección de tipo 48K/128K
Tal y como compilamos las fuentes originales, el brillo es muy bajo, por lo que decidí estudiar el código.
En el fichero smain.c debemos retocar un poco el código para aumentar los niveles de salida de video.
Existen 2 líneas una comentada y otra descomentada, cambiarlas de forma que queden así.

//#define IRE(_x)            ((uint32_t)(((_x)+40)*255/3.3/147.5) << 8)   // 3.3V DAC
#define IRE(_x)          ((uint32_t)(((_x)+40)*255*2/3.3/147.5) << 8)   // 3.3V DAC

Esto lo que hace es cambiar los niveles iniciales de la señal de vídeo.
Ahora el nivel de brillo es bastante mejor, y aún se podría poner mejor, pero no he querido retocar el código original.

Las ROMS de programas del Spectrum deberán grabarse dentro de un directorio z48 si son del modelo 48K y en un directorio z128 si son del modelo de 128K.
Todo esto está documentado en el fichero README.md que se encuentra en las fuentes.
En este mismo fichero se explica la conexiones del ESP32 al teclado y a la SD.

1 Analog color PAL-TV 50 Hz output: (GPIO25)
2 Two  (bitband) USB-HID controllers (DP/DM) GPIO16/ GPIO17 - USB 1 GPIO18/ GPIO19 - USB 2
3 Emulation  AY-3-8910 (GPIO27)
4 SDCard control (.tap .z80 .sna) read pins:
    PIN_NUM_MISO 2
    PIN_NUM_MOSI 15
    PIN_NUM_CLK 14
    PIN_NUM_CS 13
5 Screen width F4/F5
6 Tape speed normal/fast F11/F12


Esquema de conexión.


He utilizado la placa de mi anterior montaje.


Menú de selección de ROMS


Jugando al JET PAC.


Muestra de una línea de la señal PAL.

Ya puedo jugar a mi juego preferido en el ZX Spectrum   PENETRATOR
Como podemos observar, la calidad del video compuesto no es el mejor, y sobre todo si utilizamos las pantalla planas, pero se puede jugar perfectamente.

Gracias Samsonov Dima


Saludos.
Juan Galaz



Bibliografía:

https://github.com/sdima1357
https://github.com/sdima1357/spectrum128_esp32_usb_host_pal_tv




martes, 12 de octubre de 2021

Generador de vídeo PAL con ATmega328.

  Página principal


Generador de vídeo  PAL
ATmega328 -> Video
Visualizar  temperatura y humedad en TV
 
Arduino


Cuando el vídeo compuesto PAL/NTSC empieza a  no usarse, incluso algunos televisores no tienen entrada de video compuesto, he encontrado una página donde explica como generarlo con un procesador ATMEGA 328.
Existen otros montajes para generar video compuesto mediante ATMEGA328, pero no son buenos como este.
    http://searle.x10host.com/MonitorKeyboard/index.html
Este montaje solo genera vídeo, y su control se realiza con dos líneas mediante el protocolo I2C.
Los modos de vídeo pueden ser:

40 Character normal
80 Character normal
40 Character bold
80 Character bold
40 Character normal double-height
80 Character normal double-height
40 Character bold double-height
80 Character bold double-height
Modo gráfico 160x100

La conexión al dispositivo maestro en mi montaje se realiza mediante I2C de dos líneas, pero existe la posibilidad de realizarlo mediante 4, y 8 líneas, con lo cual será más rápida su comunicación.
Para mas detalles os recomiendo que visitéis su página, esta muy bien explicado todas su configuraciones.
También tiene otros muchos proyectos interesantes, gracias
Grant Searle .

Para mi proyecto he utilizado un arduino nano que lee el sensor DHT22  (AM2302), para luego mandar los datos de temperatura y humedad al circuito de generación de vídeo.
Como no tenía la versión del 74HC166 he utilizado el modelo 74LS166, existe diferencias en la impedancia de entrada, pero después de probarlo funciona.

Circuito original.


Circuito para interface I2C de dos líneas, y generación de video PAL.

Como quería hacer prácticas con el programa KiCad lo realizado también para este programa.

Esquema con KiCad.



Circuito impreso con KiCad.


Vista 3D con KiCad.

El circuito impreso no lo he probado, por lo que no garantizo que esté bien, lo he realizado a modo de práctica.


 El sensor de temperatura se conecta a un arduino, para luego mandar los datos al generador de vídeo.


Circuito montado y funcionando.


Visualización de la señal de video compuesto en un televisor.

PROGRAMA

Para programar el ATmega328 he utilizado un arduino en modo programador.
En mi anterior artículo (simuld.html) explico como programar el microcontrolador con un arduino.
Una vez montado el circuito programador debemos grabar el programa con la orden:

avrdude -C/usr/share/arduino/hardware/tools/avrdude.conf -v -v -patmega328p -cstk500v1 -P/dev/ttyUSB0 -b19200 -U flash:w:SBCVideo.hex:i -U lfuse:w:0xf7:m -U hfuse:w:0xd9:m -U efuse:w:0xff:m

Este proyecto está realizado en Debian 10.
Espero que disfrutéis haciendo este proyecto.

Saludos.
Juan Galaz


Bibliografía:

simuld.html
http://searle.x10host.com/MonitorKeyboard/index.html