miércoles, 7 de junio de 2023

NAVE (mata-mata) SDL

  Página principal

SDL
  NAVE


Un simple mata mata que aumenta la velocidad en cada nivel.



Está compilado tanto para Windows como para Linux.

Programa SDL
Programa SDL2

Librerías DLL_SDL2 Windows
Librerías DLL SDL1 Windows

Saludos.
Juan Galaz


 
Bibliografía:


lunes, 29 de mayo de 2023

SDL - culebra (SNAKE) Versión 2

  Página principal

SDL
  culebra (SNAKE)

Versión 2

Vuelvo a programar SNAKE, méjoro los gráficos, cambio los vectores por matrices de estructuras el estilo de C.




Ahora es muy vistoso, la música de fondo, y el aumento de velocidad según pasa el tiempo lo hace adictivo.
Con F1 se pasa de modeo pantalla completa a modo ventana.
También está compilado para Windows.

Programa SDL
Programa SDL2

Librerías DLL_SDL Windows

Saludos.
Juan Galaz



Bibliografía:


martes, 23 de mayo de 2023

SDL culebra (SNAKE)

  Página principal

SDL
  culebra (SNAKE)


Navegando por la RED recale en un foro de SDL, y encontre el famoso programa SNAKE escrito en C y utilizando la biblioteca SDL.

https://foro.elhacker.net/programacion_cc/tutorial_snake_en_csdl-t396746.0.html;msg1878499


Es bastante simple, pero funciona bien.

Como yo no puedo estarme quieto, me dispuse a mejorarlo un poco.
Le añadí sonidos y algún gráfico, no demasiados, y quedo como sigue:


No es demasiado vistoso, pero la música de fondo, y el aumento de velocidad según pasa el tiempo lo hace adictivo.
Con F1 se pasa de modeo pantalla completa a modo ventana.
También está compilado para Windows.

Programa original.

Programa modificado



Saludos.
Juan Galaz



Bibliografía:

https://foro.elhacker.net/programacion_cc/tutorial_snake_en_csdl-t396746.0.html;msg1878499

https://motionarray.com/royalty-free-music/cowardly-harry-1573176/

jueves, 20 de abril de 2023

Tira de LEDS elk-bledom. Bluetooth Control desde Debian 11

  Página principal

Tira de LEDS
elk-bledom bluetooth
Control desde Debian 11



El otro día me compré una tira de LEDS por 2€, no esperaba mucho.

Para hacerla funcionar debías instalar una aplicación en el teléfono.
Instalada la aplicación y alimentada la tira a un cargador, funcionaba bien.
Lo que más me sorprende en estas aplicaciones es que des permisos de ubicación.
Y esto fue lo que me indujo a crear una aplicación en Linux.

Buscando por internet encontré esta página:
https://linuxthings.co.uk/blog/control-an-elk-bledom-bluetooth-led-strip

Explicaba como funcionaba la comunicación entre el ordenador y la tira de LEDS mediante el bluetooth.
Probando todas la instrucciones conseguí manejar la tira de LEDS.

Como quería automatizar un poco el encendido y apagado de los LEDS me dispuse hacer una aplicación mediante comandos bash .
El primer problema es que debemos ser roor para mandar los datos mediante bluetooth.
Para arreglar esto hago lo siguiente:

chown root:root luces5
chown root:root bscan

chmod u+rwx,g+rx,o+rx bscan
chmod u+rwx,g+rx,o+rx luces5
chmod u+rwx,g+rwx tiraLed.py


Lo que hago es dar permisos de ejecución, pero no de escritura, de esta forma queda seguro el sistema, y podemos manejar los LEDS.

En realidad son 2 aplicaciones:
 La primera es bscan, que se encarga de scanear los dispositivos bluetooth existentes, para luego almacenar la dirección de ELK-BLEDOM en un fichero llamado blue.dat .
 La segunda es luces5, que se encarga de mandar los valores RGB a la tira con la dirección almacenada en
blue.dat .
Ejemplo:
    ./luces 255 0 0       Enciende luz roja

    ./luces 0 0 255       Enciende luz azul

Como me parecía poco interactivo, he realizado un pequeño programa en python para manejar los colores.


Espero que os sirva este artículo para vuestros proyectos.

VIDEO


PROGRAMA


Saludos.
Juan Galaz



Bibliografía:

https://linuxthings.co.uk/blog/control-an-elk-bledom-bluetooth-led-strip

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, 28 de marzo de 2023

ESP32 emulador de consolas

Página principal

ESP32
Emulador
esp_8_bit



Buscando montajes curiosos con la ESP32 encontré esp_8_bit ,un emulador de:

Atari 400/800, XL, XEGS, 5200
Sega Master System, Game Gear
Nintendo Entertainment System


y los mas interesante es que genera video compuesto, tanto PAL o NTSC.
Generar video compuesto(color) con arduino era realmente difícil, pero con el ESP32 de doble núcleo es posible.

    -----------
    |         |
    |      25 |------------------> video out
    |         |
    |      18 |---/\/\/\/----|---> audio out
    |         |     1k       |
    |         |             ---
    |  ESP32  |             --- 10nf
    |         |              |
    |         |              v gnd
    |         |
    |         |     3.3v <--+-+   IR Receiver
    |         |      gnd <--|  )  TSOP4838 etc.
    |       0 |-------------+-+   (Optional)
    -----------

Al disponer el ESP32 de conexión bluetooth, he utilizado un viejo mando de la consola wii, que funciona perfectamente.

El entorno de trabajo y compilación fué Debian 11 y el IDE de arduino VER. 1.9.19 .
Una de las cosas que me llevo mas tiempo fue un error en la compilación bajo Debian 11, decía que no tenia instalado la librería serial de python.
Para instalar la librería serie para python se puede hacer de dos métodos:
   sudo pip3 install pyserial
  python3 -m pip install pyserial
y la respuesta era : Requirement already satisfied: pyserial in /usr/lib/python3/dist-packages (3.5b0)
En teoría ya las tenía instalada.
Después de muchas pruebas descubrí que en Debian 11 el enlace directo de python apunta al python2,  y debía apuntar a python3.
Muchas de estas cosas pasan con Debian, al ser en muchos casos demasiado conservador.
Para cambiar el enlace directo tecleamos desde root:
   rm /usr/bin/python
  ln -s /usr/bin/python3 /usr/bin/python

Para compilar nuestro emulador, debemos bajar las fuentes de: esp_8_bit
Descomprimimos en el directorio de compilación, en mi caso es Arduino.
Arrancamos la IDE de arduino y configuramos el tipo de emulador y el sistema de televisión (PAL o NTSC) en el fichero config.h.
Si todo fue bien nos saldrán el video compuesto por el pin25 y el audio por el pin18.

Existen unos cuantos incluidos en el emulador, pero si queremos incluir otros juegos debemos instalar una utilidad en la IDE de arduino, ESP32FS.
El ESP32 normal tiene 4Mbytes de memoria, de los cuales para nuestro proyecto utilizamos la mitad para el programa, y la otra mitad para una especie de disco con el formato SPIFSS.
Las ROMS de los juegos se almacenan en el disco SPIFF, y para subir ficheros a este disco utilizamos ESP32FS.
Para instalar la utilidad ESP32FS la descargamos y la descomprimimos en:
~/Arduino/tools/   quedando como    ~/Arduino/tools/ESP32FS/tool/esp32fs.jar  .

Cuando reiniciamos la IDE de arduino nos aparecerá en el menu de Herramientas/ESP32_Sketch_Data_Upload
Si ejecutamos esta opción del menú, los ficheros (ROMS) que se encuentran en el directorio de esp_8_bit/data se subirán a la memoria del ESP32.


En algún caso algunas entradas de video compuesto la impedancia es bastante baja y la salida del ESP32 no alcanza a dar la señal correcta.
Para estos casos he creado un pequeño circuito:

 
Como me funcionaba en la protoboard , lo he pasado a circuito impreso.


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.
También he observado que con algunas ROMS se bloquea el emulador en algún momento.

Gracias Peter Barrett


Saludos.
Juan Galaz



Bibliografía:

https://github.com/rossumur/esp_8_bit
https://github.com/me-no-dev/arduino-esp32fs-plugin/releases/