Arduino Forum

International => Español => Documentación => Topic started by: TFTLCDCyg on Aug 22, 2016, 11:57 am

Title: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Aug 22, 2016, 11:57 am
Introducción

Gracias al trabajo (y desveladas) realizado en conjunto con el usuario lightcalamar, hemos podido hacer funcionar un par de pantallas de la familia FT81X: FT811 y FT813, con la librería creada por James Bowman para el gameduino 2.



Aun es un trabajo en progreso, faltan algunas características por explorar, pero la librería es 100 % funcional.

Hardware usado en la modificación

Pantallas con chip FTDI:

- FT813, 5", de Riverdi
- FT801, 4.3", de Riverdi
- FT811, 5", de HotMCU
- FT800, Shield Gameduino 2
- FT800, FT843 de 4D Systems

Placas
- Arduino shield de Riverdi
- Breakout-20 de Riverdi

- Arduino Due
- Arduino MEGA

- Lector microSD casero
- Lector microSD lctech de 3.3V

Librería GD2 modificada

En el proceso no solo se trabajó con pantallas FT81X, también se usaron pantallas FT80X, hay algunos ajustes que aun deben hacerse para lograr unificar ambas familias en una librería.

En este link se pueden descargar las librerías modificadas. Una de ellas funciona para pantallas FT80X y la otra para pantallas FT81X.

Descarga de librerías GD2 modificadas FT80X y FT81X (http://www.mediafire.com/download/us0h1zpezob9bq8/GD2+FT80X_FT81X+Riverdi+Shield.rar)

18 Sep 2016:  (http://www.mediafire.com/download/44q5q8jz2uzahj4/GD2+lib+modified_18092016.rar)Adición de GD2-FT813 para Teensy 3.2 (ejemplos próximamente). Se empleó el breakboard20 de Riverdi para conectar el cable plano de la pantalla.

Primeras pruebas:


Adaptador para reducir fallas por el cableado:


20 Sep 2016: (http://www.mediafire.com/download/r1av3s6oa157dch/GD2_FT813+Riverdi+Due_Teensy32.rar) Homologación del conexionado para Teensy 3.2 con el de arduino.



23 Sep 2016: (http://www.mediafire.com/download/26ouvrp2tkhhln8/GD2+para+FT80X_GD3+para+FT81X.rar) Nombrando GD3 a la librería modificada para pantallas FT81X, con el fin de que pueda coexistir en la carpeta de librerías de Arduino. Ajuste de ejemplos en GD3 proximamente.

- La Librería GD2 funciona para pantallas de la familia FT80X: FT800, FT801, FT843 de 4D Systems (FT800)

- La Librería GD3 funciona para pantallas de la familia FT81X: FT810, FT811, FT812, FT813.

- Para que los ejemplos funcionen con GD3, debe modificarse el llamado de la librería por esta linea
Code: [Select]
#include <GD3.h>

Las librerías funcionan para pantallas diferentes al shield Gameduino 2, en las que se emplea el  shield arduino de Riverdi o el breakout-20 de Riverdi o el adaptador genérico de pantallas de HotMCU o eventualmente aquel adaptador que esté disponible comercialmente (o hecho en casa).

- El orden de conexionado puede modificarse dentro de la librerías, considerando cualquier pin equivalente al del shield gameduino 2(digital o analógico) disponible en el MCU arduino o Teensy 3.X seleccionado. La asignación actual se estableció para funcionar de forma directa con el shield arduino de Riverdi.

- Las pantallas y adaptadores que se emplearon en el desarrollo del presente experimento, no cuentan con acelerómetro, por lo que las instrucciones referentes a este dispositivo, no son operativas.

- MCU empleadas en el presente proyecto: Teensy 3.2 (TFTLCDCyg), Arduino Due (TFTLCDCyg), Arduino MEGA (lightcalamar).

- Para el shield Gameduino 2 se deben emplear las librerías originales.

17 de noviembre 2016 (http://www.mediafire.com/file/k100b8e4278w7qd/GD2+para+FT80X_GD3+para+FT81X_Nov2016.rar): corrección de ejemplos y ajustes menores en GD3.

- Adición de ejemplos para usar assets en FT81X
- Correcciones menores a la librería GD3
- GD2 sin cambios
- Corrección de ejemplos de la última versión de Septiembre
- Se retiraron ejemplos de GD2 que no funcionan en GD3
- Algunos ejemplos posiblemente no funcionen correctamente debido a que requieren del uso de hardware específico como el spectrum shield de Sparkfun y el RTC DS3231
- Algunos ejemplos conservan aspecto 480x272, ya que fueron adaptados a partir de sketchs de prueba para el shield gameduino 2
- La librería GD3 es 100% compatible con la placa Teensy 3.6



Importante: es probable que algunos ejemplos llamen pines que no tienen las placas comunes de arduino: A19, A20, A23, A24; esto es porque las pruebas las he estado realizando en una placa Teensy 3.6 y con algunos multisensores de temperatura como el MAX1668 y el MAX6697.

En la siguiente revisión revisaré este punto en los ejemplos para homologar a nomenclatura a Due o MEGA.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Aug 22, 2016, 11:58 am
Cableado

Se debe considerar una limitante en las dimensiones del cableado empleado para conectar la placa de control (arduino MEGA, DUE, UNO o teensy 3.X) y la pantalla. La longitud màxima debe estar en el rango de 15 a 20 cms.

Las pantallas emplean un cable plano (Riverdi: 20 pines, HotMCU: 10 pines) y un adaptador. En el caso de RIverdi, se puede conseguir un shield que incluye un lector microSD, un amplificador de audio y un selector de alimentación de los leds de retroiluminación de la pantalla.

Esquema de conexiones

Code: [Select]
Pantalla FT8XX       Arduino Due

MOSI                    11
MISO                    12
SCK                     13
TFT-CS                  10
SD-CS                    5


La libreria GD2 funciona en el arduino Due empleando un porteo de señales SPI, hacia los pines 11, 12, 13 equivalentes al SPI del arduino UNO; es por esta razón que el shield gameduino 2 se puede conectar directamente sobre el arduino Due.

Para que la librería funcione en el arduino MEGA, se deben usar las lineas SPI 51, 50, 52; adicionando esta linea en el encabezado:

Code: [Select]
#include <EEPROM.h>
En el arduino Due no es necesario usarla.

Las lineas PD e INT, no ha sido necesario emplearlas, por lo menos en las pantallas Riverdi y la FT843 de 4D systems.

En las pantallas HotMCU hay que usar la linea INT, el forero ligthcalamar ha documentado su uso con la libreria, acá se puede revisar su trabajo (http://forum.arduino.cc/index.php?topic=406170.0)

Parámetros de inicio para el chip FT813

La configuración para iniciar cada pantalla, debe corresponder al tipo de chip, es posible que existan ligeras variaciones entre cada chip, se deberá ajustar para cada caso y fabricante. En el caso de la  pantalla: RVT50UQFNWC00 (FT813 5" de Riverdi)

Estos son los parámetros de configuración:

Code: [Select]
    GDTR.wr32(REG_ROTATE, 1);
    GD.wr32(REG_HCYCLE, 1056);    // 900 //548
    GD.wr32(REG_HOFFSET, 47);     // 43
    GD.wr32(REG_HSIZE, 800);
    GD.wr32(REG_HSYNC0, 0);
    GD.wr32(REG_HSYNC1, 10);      // 41
    GD.wr32(REG_VCYCLE, 525);     // 500
    GD.wr32(REG_VOFFSET, 23);     // 12
    GD.wr32(REG_VSIZE, 480);
    GD.wr32(REG_VSYNC0, 0);
    GD.wr32(REG_VSYNC1, 10);
    GD.wr32(REG_PCLK, 2);
    GD.wr32(REG_PCLK_POL, 1);
    GD.wr32(REG_DITHER, 0);        // 1
    GD.wr32(REG_CSPREAD, 0);       // 1


La instrucción:
Code: [Select]
GDTR.wr32(REG_ROTATE, 1);
 
Forma parte de la libreria gameduino 2, permite establecer la rotación inicial similar a la que tiene el shield gameduino 2  (es equivalente a establecer la rotación del chip FT81X en modo 1).
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: Hector_A on Aug 29, 2016, 03:55 am

Excelente aporte, amigazo!

;)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Aug 30, 2016, 09:24 am
Excelente  !!!

Todos ustedes que deseen adquirir las pantallas basadas en chip FT8XX de HotMCU, como bien ha escrito TFTLCDCyg voy ampliar mas documentación.para su correcto funcionamiento.
Básicamente estas son mas económicas, pero sin perdida alguna de calidad, el acabado con su marco las hace muy atractivas.
Llegados a este punto, les aconsejo las que tienen mayor resolución, tales como las FT81X (800x480) frente a las FT80X (480x272), con la librería Gameduino 2 es una realidad su funcionamiento.
Estoy preparando una guia de mi experiencia con la cual la voy a compartir con todos vosotros. En esta misma semana la publicaré en este hilo de documentación.

Estos son los enlaces de las cuales tengo dos de cada unas;

Pantalla 5 pulgadas;  FT800 Resistiva (http://"http://www.hotmcu.com/5-graphical-lcd-touchscreen-480x272-spi-ft800-p-124.html?cPath=6_16")

Pantalla 5 pulgadas;  FT811 Capacitiva (http://"http://www.hotmcu.com/5-graphical-lcd-capacitive-touch-screen-800x480-spi-ft811-p-301.html?cPath=6_16")

Y todo ello, no hubiese sido posible sin la enorme ayuda que ha realizado TFTLCDCyg.
Saludos! :)



Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Nov 19, 2016, 08:45 am
19 Noviembre 2016: (http://www.mediafire.com/file/1rxf2d6srkfv5o0/GD2+para+FT80X_GD3+para+FT81X_Flotantes.rar)
- Adición de la función GD.printNfloat que permite imprimir números con decimales en GD2 y GD3.
- Adición de ejemplos básicos para la impresión de números con decimales en GD2 y GD3

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: michalkepa on Nov 20, 2016, 08:15 pm
Después de una ligera adaptación a mi Arduino MEGA+FT810CB-HY50HD funciona perfectamente.
Gracias amigo grande.





Lo siento por mi español porque vivo en Polonia :)

1+


Mi versión blobs and clock nixie. :)

IDE 1.0.6
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Nov 21, 2016, 10:26 am
Genial. Esperemos que la librería modificada funcione para tu proyecto. Ojalá y compartas mas avances de tu proyecto.

Saludos desde México.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: michalkepa on Nov 23, 2016, 10:36 pm
Estación meteorológica simple como un ejemplo del uso de un función GD.printNfloat..

(DHT22,LDR,DS18820,BMP180/085,RTC 3231/1307 MEGA+FT810CB-HY50HD

IDE 1.0.6 .

:)  





Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Nov 24, 2016, 01:39 pm
@michalkepa gracias por tus aportes !!!

@TFTLCDCyg buen trabajo !!!

Veo que la librería va aumentando en calidad. Voy a probar la función de imprimir números flotantes ya que estoy atascado en ellos.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Nov 25, 2016, 01:15 am
Llegué a pensar que la librería no serviría... y veo que hasta España y Polonia está "rodando"...

Estoy contento por ayudarles en el desarrollo de sus proyectos, al ver lo que están consiguiendo tengo que aplicarme para ponerme a nivel, he descuidado el diseño de ejemplos, pero en cuanto logre descifrar el MAX6697, seguiré con ellos... hay todavía mucha tela para cortar.

PD: es una pena que James aun no nos oriente respecto a como quitarle el limite de 256 kb a la herramienta gd2asset..., podríamos tener imágenes mas grandes, e incluso manejar otros tipos de letra para manejar texto.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: michalkepa on Nov 25, 2016, 05:56 pm
Mi nuevo proyecto, pero aún no está listo ... :)


Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Nov 25, 2016, 08:58 pm
Hoooo muy bonito michalkepa !!!

Mi nuevo proyecto MDC (mULTI dATA cENTER
Ya funcionando el GPS con números flotantes;




Tengo que ir modificando pero ya funciona correcto y gracias infinitas a TFTLCDCyg por la nueva función GD.printNfloat




Y esta la parte de la radio que va aumentando en funciones;





Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: michalkepa on Nov 30, 2016, 08:47 pm
l<ightcalamar>genial! :o

Podría usar su radio para mi proyecto hehe :)


Estoy con mi "Home INFO" lucho todo el tiempo...



 :)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Nov 30, 2016, 09:21 pm
Hola michalkepa.

Adjunto mi proyecto inicial del MDC (Multi Data Center) estoy trabajando en el poco a poco
La librería de la parte del radio es este enlace (http://www.mathertel.de/Arduino/RadioLibrary.aspx)

Todavia queda mucho pero ya empieza a estar fino. ;)
 
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 05, 2016, 04:07 am
Se ven muy bien esas FT81X mas allá de las fronteras de este escritorio XD. Esperemos que sigan los progresos y a la espera de que nos muestren sus logros.

Sigo batallando aún con los multi-sensores de temperatura MAXIM, sin embargo solo me hace falta acceder a los registros que permiten leer el sensor instalado en cada chip.

04 de diciembre de 2016 (http://www.mediafire.com/file/cr3lf3mlgdoyrrp/GD2+para+FT80X_GD3+para+FT81X_041216.rar): Reorganización de ejemplos.

- Corrección de la orientación táctil respecto a la orientación de la pantalla. Ahora ambos dependen de la instrucción GD.cmd_setrotate(x), ya no hay dependencia respecto a la instrucción interna GDTR.wr(REG_ROTATE, y);.

- Adición de ejemplos para el manejo de assets fuera de la región 512x512 y corrección menor de errores algunos ejemplos previos

- Cambio en la combinación de colores de la pantalla de calibración táctil. La personalización de colores se puede conseguir modificando las instrucciones de color dentro de void GDClass::self_calibrate(void), en GD3.ccp

- Cambio en la combinación de colores y mensaje de la pantalla de error de co-procesador.

- Adición de la instrucción: #define ORIENTACION 0   //0, 1, 2, 3, establece la orientación de trabajo, con la finalidad de que la pantalla de error se ajuste a la orientación de la pantalla. Esta variable se puede configurar dentro de GD3.ccp, su valor corresponde al valor definido para GD.cmd_setrotate(x)

- Ejemplo de uso del encoder KY-040 de keyes con un grupo de assets
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 06, 2016, 12:24 am
Buenas.

He recien probado tu nueva librería en mi FT811 y la verdad es muy asombroso del buen funcionamiento de todos los ejemplos, salvo uno el llamado GD3_Menu que me sale en pantalla;

ERROR
Revisar Comandos


Me ha llamado mucho la atención la pecera (Fish Tank) es muy buena aplicación y me esta dando ideas ....

Por otro lado veo lo fino que funciona el GD.cmd_setrotate() , es impresionante y si te digo de como funciona las barras de los MSGEQ7 es para una gran maravilla.
Has afinado muy mucho y te agradezco el enorme trabajo que has realizado, no me canso decirte que eres un gran maestro de los TFT. Así reza.

Leo mucho en el foro oficial actual en la sección de "Display" y me da risa, leo estos mensajes tuyos y me da enorme satisfacción, leo que son muy pocos los que se pueden dar el lujo de comprar estas magnificas pantallas FT8xx por su precio y esto me preocupa, aun así algunos, tu por ejemplos TFTLCDCyc le has dado otra vida.

Sobre mi FT811 (la que tiene el táctil mal) sigue igual, es el panel táctil, mas pruebas no he podido realizar e inclusive estuve a punto de cambiar el táctil, se que se hubiese roto. servirá de pantalla para solo representante y con algún teclado de botones externos. El chino ni pio me dijo. Lo mismo le pido otra y le pongo una disputa por PayPAL (casi seguro lo realizo).

Saludos!  :)



Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 06, 2016, 04:17 am
Vaya, vaya: ese error se debe a que no subí este archivo: PC1.jpg en la carpeta de archivos que van en la SD. En la siguiente actualización lo incluyo

Ese ejemplo en particular da soporte al RTC DS3231, están comentadas las lineas que dan acceso a las lecturas del RTC, ya que de mantenerlas activas, sin que esté presente el reloj, el programa se ralentiza. Ese comportamiento también se presenta en el ejemplo GD3_Nixie_numbers_DS3231.

La idea tras Tank_fish es poder dibujar en los 800x480 imagenes de un grupo de assets, mediante las instrucciones de traslación GD.VertexTranslateX y GD.VertexTranslateY. Está diseñado para usarse con un encoder.

Si se dibuja cualquier asset en la posisción (0,0) y trasladamos la posición a las instrucciones referidas, logramos acceso a los pixeles de toda la pantalla y no solo al sector 512x512.

Se pueden conseguir animaciones simples y porque nó, en una de esas, contar con un minijuego dentro de los proyectos.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: michalkepa on Dec 08, 2016, 10:58 pm
<TFTLCDCyg>

Muchas gracias por su trabajo !Todas las obras excelentes.  :)

Un pez en akwarjum son grandes! :)


Aquí está otra versión de mi proyecto, pero todavía no es definitivo ....





Modo nocturno  GD.wr(REG_PWM_DUTY, 1);

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 09, 2016, 11:14 am
Hola, muy buenas a todos y felicitaros por conseguir adaptar esta librería para poder usarla con cualquier pantalla ft80x, ft81x. En la actualidad estoy utilizando una Teensy 3.2 y si es posible me gustaría ver que esquema de conexionado estais utilizando con ella, ya que aqui casi todos los ejemplos que veo solo se muestra para el Arduino Due.
Un Saludo!
Javier
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 09, 2016, 12:34 pm
Hola Javier. Aquí te puedes descargar los ejemplos modificados (https://drive.google.com/file/d/0BxHMHtN-Pkp0YWJDOVRNZzBNMEk/view?usp=sharing) de la librería GD3 lista para funcionar en Arduino MEGA modificada por mi, aunque solo sea poner;

Code: [Select]

#include <EEPROM.h>

en cada hoja. De esta forma podrás usar los ejemplos. en cuanto al código;

Code: [Select]

#define PDNPin 8

no creo tengas problemas, ya que lo uso para mi pantalla fuera de la shield  de Riverdi

A todo esto @TFTLCDCyg ayer probé la ultima librería que has publicado GD2 del día 4 de Diciembre y veo que no está implementado la definición de la rotación. No admite ningún tipo variable, la pantalla siempre queda fija en una posición. Si lo tienes por la mano le hechas un vistazo, de lo contrario, voy a ver donde esta el problema.

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 09, 2016, 12:46 pm
Hola de nuevo, tengo el siguiente problema:
si conecto la tftshield de riverdi a un arduino mega, el ejemplo hello world de gD2 funciona sin problemas
si conecto la Teensy 3.2 a los pines de la tftshield: SCK 13, miso 12, mosi 11, TFT_cs 5, SD_CS 10, 3.3V A 3V
GND a GND, la pantalla ni se enciende. El probado a cambiar el jumper de 5v a 3.3v en la tft-shield y nada.
Cambio otra vez el jumper a los 5v por defecto.

Vuelvo a probar con el arduino Mega y todo bien.

Que paso estoy haciendo mal o que pin no conecto o conecto mal para que con la teensy 3.2 no me funcione?
 
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 09, 2016, 03:22 pm
Si conecto tension de 5v en la riverdi tft shield y no 3.3v la pantalla se enciende (se queda en blanco) pero no muestra nada. Necesita el FT813 5v para operar?
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 09, 2016, 10:50 pm
Como bien dices Javier quieres que te pongan como es el conexionado de los compañeros con Teensy.
Quien lo tiene funcionando es TFTLCDCyg según tengo entendido.

Por otro lado quisiera que pusieras los enlaces de tu pantalla donde la compraste y si puede ser también el enlace de la DataSheet de la misma.

Yo te puedo decir que casi todas las pantallas TFT del mercado a prototipos como la que usamos, sea FT81x / FT80x su voltaje a nivel de lógica es 3,3, otra cosa que otros / otras empresas le ponen un buffer para interactuar su voltaje a niveles TTL (5Vcc) casi en desuso, pero actual.

Yo de ti vigilaría el voltaje correcto, el que se encienda la pantalla en blanco, osea toda blanca es que el dimmer (DM_x) esta todo en alto, puede ser un problema que quemes el circuito llamado "BackLight" de la pantalla.

Se aconsejo un tiempo prudencial y que te conteste TFTLCDCyg.
Saludos.  :)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 10, 2016, 01:08 am
El problema está en la longitud del cableado que estás empleando debe estar entre 10 y 18 cms, debes jugar con la distancia hasta que logres ver algo en la pantalla. Recuerda que estás introduciendo cableado extra al cable plano que va entre la pantalla y el shield y eso afecta la señal de las lineas SPI.

Asegúrate de usar el cableado en los pines correctos, las librerías GD2 y GD3, referidas en este post, siguen el pinout del shield de Riverdi.

Para usar un Teensy 3.X lo mejor es usar el breakout-20, se introduce menos error por cableado extra

Teensy 3.6 + FT813 5" de Riverdi


¿Qué pantalla estás usando?
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 10, 2016, 01:46 am
...
A todo esto @TFTLCDCyg ayer probé la ultima librería que has publicado GD2 del día 4 de Diciembre y veo que no está implementado la definición de la rotación. No admite ningún tipo variable, la pantalla siempre queda fija en una posición. Si lo tienes por la mano le hechas un vistazo, de lo contrario, voy a ver donde esta el problema.
Las pantallas FT80X no admiten el comando de rotación, ese es exclusivo para las pantallas FT81X.

En la libreria GD2 (FT80X) se puede usar el comando interno GDTR.wr(REG_ROTATE, x), que solo admite 0 y 1.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 10, 2016, 09:47 am
Perdon por no poner fotografias pero ayer no tenia accesible la placa. Estoy utilizando
https://riverdi.com/product/rvt70uqfnwc0x/
Quiero hacer un shield con la teensy que encaje en el tft shield de riverdi ya que me gustaria aprovechar q ya tiene slot para tarjeta sd y el amplificador de audio.
Estoy pensando añadir un modulo que vi en aliexpress q amplifica audio hasta 3w para conectarle dos altavoces de 3w directamente:
https://es.aliexpress.com/store/product/5PCS-3W-2-Mini-Digital-Power-Audio-Amplifier-Board-USB-DC-5V-Power-Supply-PAM8403-for/1314203_32414413169.html?spm=2114.30011108.3.123.eQ2tcP&ws_ab_test=searchweb0_0,searchweb201602_6_10065_10068_10084_10083_10080_10082_10081_10060_10061_10062_10056_10055_10054_10059_10099_10078_10079_426_10073_10103_10102_10096_10052_10050_10051,searchweb201603_9&btsid=6f8c7974-0ecd-40b8-b132-07f651026144

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 10, 2016, 09:53 am
Por curiosidad, la velocidad del bus SPI que admite el FT81x puede aprovechar las mayores prestaciones de las placas teensy?
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 10, 2016, 10:04 am
La teensy 3.5 y 3.6 tambien acabo de recibirlas hace poco y me gustaria darles buen uso con el ft813 aprovechando que incluyen unidad de coma flotante y que teensyduino incluye la libreria CMSIS DSP de Arm para realizar calculos con vectores, matrices y otras funciones matemáticas. La idea es realizar calculos de transformaciones de objetos y transformacion de vista 3d a 2d en la teensy 3.5/3.6 y mandar la lista de vertices 2d al ft813 para renderizar como la demo que incluye pero con es escenas algo mas complejas o incluso para generar una interfaz tactil con efectos 3d.

Con la T3.5 ya he hecho alguna demo gráfica con pantallas monocromas:

https://drive.google.com/file/d/0By5wADoEOJ9fdkFSMFZFbU9lRUU/view?usp=drivesdk (https://drive.google.com/file/d/0By5wADoEOJ9fdkFSMFZFbU9lRUU/view?usp=drivesdk)

https://drive.google.com/file/d/0By5wADoEOJ9fa1Bpc0M3NWp3elE/view?usp=drivesdk (https://drive.google.com/file/d/0By5wADoEOJ9fa1Bpc0M3NWp3elE/view?usp=drivesdk)

https://drive.google.com/file/d/0By5wADoEOJ9fZHRjbFg5RkozS2s/view?usp=drivesdk (https://drive.google.com/file/d/0By5wADoEOJ9fZHRjbFg5RkozS2s/view?usp=drivesdk)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 10, 2016, 12:02 pm
@Javier
Sobre los módulos de audio yo los compro en esta tienda, concretamente son 3 y a un precio insuperable;
3 módulos de 3W x 2 (http://www.banggood.com/es/3Pcs-PAM8403-Mini-Digital-Power-Amplifier-Board-Class-D-Audio-Module-p-943578.html?rmmds=search) o bien este tipo con potenciómetro de control (http://www.banggood.com/es/PAM8403-2-Channel-USB-Power-Audio-Amplifier-Module-Board-3Wx2-Volume-Control-p-1068215.html?rmmds=search) pero solo es un modulo. Te he enviado un MP al respecto.

@TFTLCDCyg
Quote
Las pantallas FT80X no admiten el comando de rotación, ese es exclusivo para las pantallas FT81X.
En la librería GD2 (FT80X) se puede usar el comando interno GDTR.wr(REG_ROTATE, x), que solo admite 0 y 1.
Tienes toda la razón y eso que lo he leído en otros mensajes tuyos, no se en que estaba pensando  :)  :)  :)


Saludos
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 10, 2016, 05:24 pm
Con el shield-Riverdi hay que hacer varias pruebas con la distancia del cableado, hasta activar la pantalla.

(Por cierto debe ser impresionante ver esa pantalla RVT70UQFNWC0x en vivo y a todo color!!!, felicidades!)

Respecto a la velocidad extra en el bus SPI en las placas Teensy 3.5/3.6, no es posible acceder a ella ya que la libreria GD2 (y por ende la GD3), usan la "velocidad" normal del bus SPI de las placas arduino. Sería genial acceder al  SPI que tiene FIFO (https://www.sparkfun.com/products/14057) o acceder al lector micro SD-SDIO "on board", le darían un poder excepcional a las pantallas FT81X. En este punto necesitamos a "un manitas" que rediseñe la librería GD3 y obtenga "GD4" para aprovechar las prestaciones del teensy 3.5 o 3.6.

Adicionar un lector externo es posible, solo debes conseguir un break out que funcione directamente a 3.3V, los que tienen instalado un regulador de 5V no funcionan con la librería GDX.

PD: ¿ya dije hacer muchas pruebas con el cableado?, pues lo reitero nuevamente: muuuchas pruebas!
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 10, 2016, 07:07 pm
Hola buenas, he estado mirando el tema de como modificar la velocidad del bus SPI de las Teensy 3.x.
La cuestion es que no se puede hacer utilizando las funciones de la librería estandard de Arduino, porque
solo funciona con las placas con procesador AVR y con las placas Due (función setClockDivider).
Buscando en algunos foros, el desarrollador de las placas Teensy, PaulStoffregen, ha modificado una librería
para utilizar pantallas ST7735 con bus SPI alcanzando velocidades de hasta 24MHz. La clave está en manipular
los registros del procesador de la Teensy 3.x (CortexM4) a bajo nivel para inicializarlos a los valores correctos. Además habría que parchear todas las llamadas a funciones de inicialización y transferencia del bus SPI en el código fuente de GD2. Así que ya tengo tareas pendientes para solucionar:
- Solventar conexión Teensy 3.x a shield tft Riverdi.
- Modificar código SPI para utillizar optimizaciones para procesador CortexM4.

Dejo un fragmento del código que he extraído de la citada librería, extraído de aquí:
https://github.com/PaulStoffregen/Adafruit_ST7735/blob/master/Adafruit_ST7735.cpp (https://github.com/PaulStoffregen/Adafruit_ST7735/blob/master/Adafruit_ST7735.cpp):

Code: [Select]
/***************************************************************/
/*     Teensy 3.0, 3.1, 3.2, 3.5, 3.6                          */
/***************************************************************/
#elif defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__)

inline void Adafruit_ST7735::writebegin()
{
}

inline void Adafruit_ST7735::spiwrite(uint8_t c)
{
for (uint8_t bit = 0x80; bit; bit >>= 1) {
*datapin = ((c & bit) ? 1 : 0);
*clkpin = 1;
*clkpin = 0;
}
}

void Adafruit_ST7735::writecommand(uint8_t c)
{
if (hwSPI) {
KINETISK_SPI0.PUSHR = c | (pcs_command << 16) | SPI_PUSHR_CTAS(0);
while (((KINETISK_SPI0.SR) & (15 << 12)) > (3 << 12)) ; // wait if FIFO full
} else {
*rspin = 0;
*cspin = 0;
spiwrite(c);
*cspin = 1;
}
}

void Adafruit_ST7735::writedata(uint8_t c)
{
if (hwSPI) {
KINETISK_SPI0.PUSHR = c | (pcs_data << 16) | SPI_PUSHR_CTAS(0);
while (((KINETISK_SPI0.SR) & (15 << 12)) > (3 << 12)) ; // wait if FIFO full
} else {
*rspin = 1;
*cspin = 0;
spiwrite(c);
*cspin = 1;
}
}

void Adafruit_ST7735::writedata16(uint16_t d)
{
if (hwSPI) {
KINETISK_SPI0.PUSHR = d | (pcs_data << 16) | SPI_PUSHR_CTAS(1);
while (((KINETISK_SPI0.SR) & (15 << 12)) > (3 << 12)) ; // wait if FIFO full
} else {
*rspin = 1;
*cspin = 0;
spiwrite(d >> 8);
spiwrite(d);
*cspin = 1;
}
}

static bool spi_pin_is_cs(uint8_t pin)
{
if (pin == 2 || pin == 6 || pin == 9) return true;
if (pin == 10 || pin == 15) return true;
if (pin >= 20 && pin <= 23) return true;
return false;
}

static uint8_t spi_configure_cs_pin(uint8_t pin)
{
        switch (pin) {
                case 10: CORE_PIN10_CONFIG = PORT_PCR_MUX(2); return 0x01; // PTC4
                case 2:  CORE_PIN2_CONFIG  = PORT_PCR_MUX(2); return 0x01; // PTD0
                case 9:  CORE_PIN9_CONFIG  = PORT_PCR_MUX(2); return 0x02; // PTC3
                case 6:  CORE_PIN6_CONFIG  = PORT_PCR_MUX(2); return 0x02; // PTD4
                case 20: CORE_PIN20_CONFIG = PORT_PCR_MUX(2); return 0x04; // PTD5
                case 23: CORE_PIN23_CONFIG = PORT_PCR_MUX(2); return 0x04; // PTC2
                case 21: CORE_PIN21_CONFIG = PORT_PCR_MUX(2); return 0x08; // PTD6
                case 22: CORE_PIN22_CONFIG = PORT_PCR_MUX(2); return 0x08; // PTC1
                case 15: CORE_PIN15_CONFIG = PORT_PCR_MUX(2); return 0x10; // PTC0
        }
        return 0;
}

#define CTAR_24MHz   (SPI_CTAR_PBR(0) | SPI_CTAR_BR(0) | SPI_CTAR_CSSCK(0) | SPI_CTAR_DBR)
#define CTAR_16MHz   (SPI_CTAR_PBR(1) | SPI_CTAR_BR(0) | SPI_CTAR_CSSCK(0) | SPI_CTAR_DBR)
#define CTAR_12MHz   (SPI_CTAR_PBR(0) | SPI_CTAR_BR(0) | SPI_CTAR_CSSCK(0))
#define CTAR_8MHz    (SPI_CTAR_PBR(1) | SPI_CTAR_BR(0) | SPI_CTAR_CSSCK(0))
#define CTAR_6MHz    (SPI_CTAR_PBR(0) | SPI_CTAR_BR(1) | SPI_CTAR_CSSCK(1))
#define CTAR_4MHz    (SPI_CTAR_PBR(1) | SPI_CTAR_BR(1) | SPI_CTAR_CSSCK(1))

void Adafruit_ST7735::setBitrate(uint32_t n)
{
if (n >= 24000000) {
ctar = CTAR_24MHz;
} else if (n >= 16000000) {
ctar = CTAR_16MHz;
} else if (n >= 12000000) {
ctar = CTAR_12MHz;
} else if (n >= 8000000) {
ctar = CTAR_8MHz;
} else if (n >= 6000000) {
ctar = CTAR_6MHz;
} else {
ctar = CTAR_4MHz;
}
SIM_SCGC6 |= SIM_SCGC6_SPI0;
KINETISK_SPI0.MCR = SPI_MCR_MDIS | SPI_MCR_HALT;
KINETISK_SPI0.CTAR0 = ctar | SPI_CTAR_FMSZ(7);
KINETISK_SPI0.CTAR1 = ctar | SPI_CTAR_FMSZ(15);
KINETISK_SPI0.MCR = SPI_MCR_MSTR | SPI_MCR_PCSIS(0x1F) | SPI_MCR_CLR_TXF | SPI_MCR_CLR_RXF;
}


Saludos!
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 11, 2016, 07:44 pm
Esta tarde he realizado testeos sobre mi MDC que estoy realizando.

Con los sensores que tengo puestos a mi FT800, y no creo que sea por el números de ellos porque todavía faltan algunos mas, llegado al testeo como dije la pantalla se me congelaba, o dicho de otro modo "colgaba" a los 10 / 15 minutos muy eraticamente inclusive a los 2/3 minutos.

Unas semanas atrás estuve intentando averiguar cual es el problema y hoy hablando con Javier sobre velocidades del BUS SPI, he probado al menos en MEGA la velocidad adecuada al chip FT800Q en la cual la linea en el setup es esta;

Code: [Select]

SPI.setClockDivider(SPI_CLOCK_DIV32);


es decir la frecuencia de Arduino MEGA (16MHz) 16:32 = 0,5 es decir a 500kHz. De momento y después de mas de 40 minutos 0 cuelgues. Aqui va el dato para futuros problemas. Otra cosa sean las FT811 y familia... por averiguar hasta donde alcanzan. Veo a echar un vistazo a las DataSheet de las FT8xx a ver si maxima velocidad.

Saludos.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 11, 2016, 09:12 pm
Hola TFTLCDCyg,  necesito ayuda para ver que pines de la Teensy 3.2 deberia utilizar para los CS de la TFT y la SD. Si me pudieras adjuntar algun esquema de conexionado te lo agradecería un monton.

Saludos!
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 11, 2016, 09:19 pm
Mi idea es usar la shield que he creado con la teensu 3.2 para conectarla al shield tft de riverdi


https://drive.google.com/file/d/0By5wADoEOJ9fYzNNWlJOZU13a00/view?usp=drivesdk

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 11, 2016, 09:49 pm
https://drive.google.com/file/d/0By5wADoEOJ9fYzNNWlJOZU13a00/view?usp=drivesdk (https://drive.google.com/file/d/0By5wADoEOJ9fYzNNWlJOZU13a00/view?usp=drivesdk)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 12, 2016, 06:19 am
Tiene buen aspecto ese shield, de hecho yo uso esta placa de prototipado:


Sus dimensiones permiten construir shields para teensy que pueden conectarse a los shields de arduino UNO. Se pueden conectar tanto el teensy 3.2 y el 3.6.

Usé este conexionado:

Code: [Select]
FT8XX    Teensy 3.2/3.6

MOSI        11   (MOSI0)
MISO        12   (MISO0)
SCK         13   (SCK0)
CS          10   (CS0)
GND         GND
VCC         3.3 V
VDD-BL      3.3 V
GND-BL      GND

SD-CS       5


Es compatible con las librerías GD2 y GD3 referidas en este post.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 12, 2016, 07:18 am
Ok gracias, probaré a ver que tal. Si me puedes decir donde has comprado los pcb protoboard que utilizas porque los mios ya venian con los headers de arduino soldados y las conexiones ya estaban soldadas por lo que me ha complicado mas el tema de soldar el cableado de los pines de la teensy al header.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 12, 2016, 09:06 am
Hola Javier.

Yo he comprado la protoboard que ha puesto TFTLCDCyg en Ebay, concretamente este enlace (http://www.ebay.es/itm/371147678203?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT) todavia no me ha llegado pues lo pedí hace 3 semanas. A ver si esto te ayuda.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 13, 2016, 09:09 pm
He conseguido mantener estable RVT70UQFNWC0x. Después de varias pruebas he verificado que con una fuente de alimentación externa que la pantalla junto con el arduino mega requiere unos 700mA de corriente para funcionar. Asi que nada de alimentar directamente la pantalla a través de un puerto USB o el regulador de 3.3v de la Teensy 3.2.

https://drive.google.com/file/d/0By5wADoEOJ9fRTJmT2toR0JCNjg/view?usp=sharing (https://drive.google.com/file/d/0By5wADoEOJ9fRTJmT2toR0JCNjg/view?usp=sharing)

https://drive.google.com/file/d/0By5wADoEOJ9fWGpFdElMMWpMM28/view?usp=sharing (https://drive.google.com/file/d/0By5wADoEOJ9fWGpFdElMMWpMM28/view?usp=sharing)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 13, 2016, 09:16 pm
https://drive.google.com/file/d/0By5wADoEOJ9fMlVuMGt4UnlVejQ/view?usp=sharing (https://drive.google.com/file/d/0By5wADoEOJ9fMlVuMGt4UnlVejQ/view?usp=sharing)

Regulador de corriente que proporciona tanto 3.3v como 5v que he utilizado.
http://www.petervis.com/Raspberry_PI/Breadboard_Power_Supply/YwRobot_Breadboard_Power_Supply.html (http://www.petervis.com/Raspberry_PI/Breadboard_Power_Supply/YwRobot_Breadboard_Power_Supply.html)

https://drive.google.com/file/d/0By5wADoEOJ9fMlVuMGt4UnlVejQ/view?usp=sharing (https://drive.google.com/file/d/0By5wADoEOJ9fMlVuMGt4UnlVejQ/view?usp=sharing)

No lo recomiendo ya que la máxima corriente que puede suministrar son 700mA, con lo que estaría funcionando al 100% de sus posibilidades, algo nada recomendable.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 14, 2016, 07:39 pm
Esto ya va marchando. Probando demo de streaming de audio. He utilizado un amplificador digital PAM8403 para amplificar la señal hasta 3w.
https://drive.google.com/file/d/0By5wADoEOJ9fT2kyMlpMNE9QM1k/view?usp=drivesdk (https://drive.google.com/file/d/0By5wADoEOJ9fT2kyMlpMNE9QM1k/view?usp=drivesdk)

También quiero agradecer la ayuda prestada por lightcalamar, quien me ha dado algunos sabios consejos sin los que no hubiese progresado tan rapido.

Saludos!
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 14, 2016, 07:59 pm
Al final me he pasado a una fuente commutada en condiciones:
https://drive.google.com/file/d/0By5wADoEOJ9fOVJaZkRNRlo5U1k/view?usp=sharing (https://drive.google.com/file/d/0By5wADoEOJ9fOVJaZkRNRlo5U1k/view?usp=sharing)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 14, 2016, 11:25 pm
Examinando los esquemas de la riverdi tft shield me he dado cuenta de que hay un chip (NVT2008BQ) que convierte los niveles de 5v de arduino a los 3.3v del FT813. Con el shield Teensy que he intentado hacer no he tenido en cuenta esto y basicamente estaba metiendo las señales de la teensy (3.3v) a dicho conversor por el lado de los 5v. Tendre q realizar el conexionado de otra forma para evitar q las señales pasen por dicho chip, utilizando en conector CN2 que parece q maneja las señales directamente a 3.3v. El problema es que no se como acceder a la señal CS de 3.3v de la SD card del tft shield.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 15, 2016, 04:47 am
El Teensy 3.2 soporta lógica de 3.3V y de 5V, creo que no tendría que haber algún problema, sin embargo el teensy requiere de un cableado lo mas directo posible hacia la pantalla.

El camino que estás siguiendo es nuevo ya que desde un principio opté por el break out-20 de Riverdi, incluso para el Due y el teensy 3.2. Había experimentado previamente con lectores micro SD y di con el adecuado.



ligthcalamar decidió construir un lector a partir de uno de los adaptadores micro SD que tiene kingston y funciona correctamente. De cuando en cuando hay que formatear la tarjeta micro SD con el fin de eliminar alguno que otro error de lectura.

Te sugiero que trates de conseguir el break out-20 de Riverdi, te ahorrará muchos dolores de cabeza





El arreglo final es alimentado por USB y es suficiente para abastecer la demanda de la retroiluminación de la pantalla FT813 de 5". Recuerda que el teensy 3.2 tiene dos pines de 3.3V, uno de esos pines entrega un máximo de 250 mA. Te sugiero usar el segundo, ubicado cerca del procesador cortex.

El cableado que usé en el teensy 3.2 lo volví a usar en el teensy 3.6, lo aprendido con el lector micro SD ayudó a desistir en usar el shield de Riverdi.

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 15, 2016, 10:01 am
Tema sobre adaptador microSD

Como bien dices TFTLCDCyg mi primera shield la he realizado con un adaptador que se vende junto a la microSD (concretamente Kington) sin embargo esto es para usuarios avanzados porque los cables han de ser muy relativamente cortos.

Encontré la solución a los adaptadores microSD funcionando a lógica de 3V3 como tiene que ser, éste puede ser usado por usuarios no tan expertos y  es  este;



El enlace de la tienda para comprarlo es esta (http://www.dx.com/es/p/meeeno-micro-sd-module-for-arduino-orange-black-223647#.WFJWDLlgiZk)

Hay que realizar unas simples modificaciones y es la mejor opción. Esto lo tengo ya preparado en mi Manual PDF que estoy realizando para pantallas comprados en HotMCU.com y compatible con Arduino DUE como ejemplo. Esta shield microSD en su formato esta preparada para realizar un simple PCB con el "cabezal" SPI de Arduino ahorrando cables, longitudes etc... yo diría que es perfecta para su manejo de "plug and play".

Lógica / conversores 3V3 y/o 5V

Esto lo detallo sin haber realizado ninguna prueba sin embargo tengo todo lo necesario para intentar hacer funcionar las pantallas HotMCU de logica 5V a 3V3 y es mas usando hasta la shield de Riverdi dado el caso.
Los conversores de nivel lógico no solo realizan esta función, sino otra muy importante que es internamente estos poseen unos buffers los cuales "planchan" la señal y la generan sin ruidos hasta cierta longitud donde las señales pueden manejarse en su origen. Si la shield de Riverdi usa esta lógica desde su propio conversor a 5V, ya que el LCD (cristal liquido) de la pantalla trabaja a 3V3 lo que se podría usar en un segundo conversor y he aquí el motivo de mi mensaje.

Es decir poner un nuevo conversor de 5V a 3V3 sería este chip; TXS0108E  http://www.ti.com/lit/ds/symlink/txs0108e-q1.pdf (http://www.ti.com/lit/ds/symlink/txs0108e-q1.pdf) en el cual tendríamos: 3V3· a 5V y luego 5V a 3V3 este es la solución al menos hacer trabajar mis pantallas en un futuro con Teensy o DUE.

De estas pruebas os mantendré informados.




Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 15, 2016, 10:32 am
TFTLCDCyg pero la sd esta electricamente conectada en algun punto a las mismas lineas SCK, MISO y MOSI que las que van al tft no? No has utilizado ningun componente para adaptar dicha conexion como resistencias o condensadores.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 15, 2016, 10:38 am
https://www.dorkbotpdx.org/blog/paul/better_spi_bus_design_in_3_steps (https://www.dorkbotpdx.org/blog/paul/better_spi_bus_design_in_3_steps)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 15, 2016, 01:12 pm
Mientras me llegan los adaptadores SD probare con este metodo propuesto por Paul Stoffregen el desarrollador de las Teensy para conectar directamente una teensy 3.x a un adaptador SD soldando una tira de pines:
https://forum.pjrc.com/threads/16758-Teensy-3-MicroSD-guide?p=49387&viewfull=1#post49387 (https://forum.pjrc.com/threads/16758-Teensy-3-MicroSD-guide?p=49387&viewfull=1#post49387)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 16, 2016, 12:18 am
También se pueden usar estos conversores de 5 a 3.3 V



Usé uno de esos para poder controlar algunos led WS2812b (lógica de 5V) con el teensy 3.6 (lógica de 3.3V), creo que podría usarse sin problemas para conectar las pantallas HotMCU al Due o al Teensy 3.2/3.6
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 16, 2016, 07:01 am
El problema es cuando las señales empiezan a trabajar a altas velocidades y se distorsionar si el conversor no está diseñado específicamente para tales velocidadesvelocidades. No es lo mismo un bus i2c a 400Khz q un bus SPI a 5 o 24Mhz
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 16, 2016, 11:48 am
Una pequeña reflexión.

Es que ganamos que el BUS SPI funcione a 5MHz o a 24 MHz? cual es la diferencia?

Por mi experiencia a mayor velocidad a veces mayores errores. Por otro lado se tendrá que tener en cuenta que todos los componentes que se conecten al BUS SPI tendrán que trabajar a la misma velocidad. Por ejemplo trabajaría un lector microSD a 24MHz?
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 16, 2016, 11:01 pm
Buenas lightcalamar un par de reflexiones sobre la velocidad del bus spi en arduino:
+ Sobre la velocidad del bus en si una mayor velocidad permite una tasa de transferencia mayor entre el ucontrolador y la memoria de la pantalla. Si quieres enviar audio, enviar imagenes con una profundidad de color de 24bits o arrays de vertices para dibujar graficos vectoriales, esto puede ser un factor limitante si el ucontrolador tiene unas prestaciones elevadas pq el bus spi si funciona lento se convertiria en el cuello de botella del sistema. Con un ucontrolador de 8bits a 16Mhz no es tan evidente pero la teensy 3.6 con una cache de 8kb y funcionando hasta 240Mhz puede exprimir al limite una mayor velocidad de transferencia del bus spi.
+ En segundo lugar, arduino introdujo las transacciones spi para que usando un mismo bus fisico se puedan conectar dispositivos dispares en cuanto a velocidad y demas caracteristicas que pueden configurarse. Cada vez que el microcontrolador inicia una transferencia, modifica la configuracion del bus spi para que se adecue al dispositivo en cuestion. Por ejemplo si la pantalla es mucho mas rapida que una tarjeta sd, cada uno funcionaria a diferentes velocidades son ningun tipo de problema.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 17, 2016, 07:26 am
En este videi se ve de forma muy grafica las diferencias de prestaciones que se pueden conseguir con el bus SPI en la teensy:
https://youtu.be/tioOB3Ysz70 (https://youtu.be/tioOB3Ysz70)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 17, 2016, 05:36 pm
Recuerda que la librería GD2 la forzamos a funcionar con las pantallas FT81X, el tema pendiente es profundizar en el tema de optimización, pero antes hay algunas reflexiones que debemos considerar:

En este caso, la potencia gráfica no la da el MCU en que se conecte (arduino Due o teensy 3.6), el poder gráfico lo proporciona el chip FT810, FT811, FT812 o FT813 y la memoria que acompaña al chip (1 Mb en FT81X, 256 kb en FT80X). Hay que saber como se comunica el chip FT con la memoria y entender como interactuan con las señales SPI.

La librería GDX vincula el lector SD al funcionamiento del chip FTXX, para usar librerías como SD o SDFat, debemos deshabilitar ese vínculo, pero perdemos temporalmente la carga de assets.

Creo que no se necesita exprimir mas el bus SPI, dado que la pantalla no depende de la velocidad del MCU, al aumentar la frecuencia SPI, afectamos la distancia del cableado, es muy probable que debamos recortarlo más para que la pantalla funcione.

En el video usan pantallas ILI9341, en ese tipo de pantallas y en general la mayoría de pantallas económicas para arduino, la interacción entre el controlador de la pantalla y la unidad de procesamiento de la placa como arduino o teensy, es directa; es por eso que al insertar instrucciones FIFO o DMA vemos un aumento de potencia en los gráficos.

PD: para acceder a optimizaciones como FIFO o DMA en GD3, hay que personalizar aun mas la librería, pero esto implica diseñar desde cero la librería. Mis actividades actuales (léase familia, trabajo), me limitan a aventurarme a crear una librería GD4, partiendo de GD3.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 17, 2016, 10:16 pm
Gracias x la respuesta, estoy de acuerdo contigo la teensy lo que puede acelerar es por ejemplo calculos intensivos que utilicen x ejemplo operaciones matemáticas intensas, dejando al FT813 el procesamiento gráfico y la actualización de la pantalla. El tema del bus spi reconozco que tendre q ponerme a estudiarlo mas a fondo y el funcionamiento de la libreria GD2/GD3. Yo tambien dispongo de tiempo limitado porque tengo q atender otras responsabilidades, pero espero q al final conseguir hacer algo interesante aplicando todo lo que hw aprendido en este foro y de vosotros.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 17, 2016, 11:41 pm
Sigo reflexionando.

Estoy en total acuerdo con todo y lo subrayo ha escrito TFTLCDCyg porque una cosa es lograr tener una FT813 y como no una librería adecuada para su total funcionamiento.

A día de hoy se tiene con sus pros y menos contras que hace 6 meses anteriores.

Velocidades.
Bueno quizás después de los muchos años que tengo en experiencia en electrónica, se dice que por muy rápido que sea un procesador central, si el procesador  GRÁFICO, no es tan rápido se obtendrán los mismos resultados. No es ley de Ohm, es ley de la rapidez.

De que te vale que el FT813Q trabaje a como máximo a 15MHz y la Teensy puede con un BUS a 24 MHz por SPI, dime que es lo que pasa.... Ves mirando las DataSheet del chip FT813Q, por cierto; DATOS DEL CHIP (http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT81x.pdf) vas a la pagina numero 1, fíjate que solo puede como máximo llegar a un PLL de 60MHz del cual, a base de un oscilador externo de 12 MHz, tan solo puedes lograr en caso que tu  lo investigues un SPI de PLL / 4 que son aproximadamente 15MHz. Por lo tanto olvídate de 24MHz, serian 15 ...

A todo ello olvídate de tener SD (en GD3 si) a no ser que como se te dijo anteriormente tu diseñes una nueva librería. Que por cierto  estaremos muy encantados y por supuesto ayudarte en lo posible es tu cometido.

A todo ello, y mira que hemos hablado pero me queda la duda, y mis preguntas son estas;
 - que utilidad realmente le quieres dar a esta pantalla?
 - ver vídeos?
 - escuchar música?

Saludos.



Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 18, 2016, 05:13 am
De hecho el FT81X puede y tiene instrucciones para reproducir videos desde una memoria externa (microSD), sin embargo, nuestros amigos de FTDI se les olvidó subir el sketch para arduino, en el que podríamos acceder a esa parte del controlador.

Incluso en la ultima versión de GD2, que usamos como base para GD3, están habilitadas esas instrucciones, sin embargo no he podido dilucidar un camino para usarlas: Ejemplo 25 (EVE 2) Play Video (http://www.ftdichip.com/Support/SoftwareExamples/FT800_Projects.htm#Example25)

En el ejemplo para arduino, se les olvidó colocar el *.ino dentro del zip  >:(

No obstante, contamos con una librería que ha superado mis expectativas, costó varias desveladas (cierto ligthcalamar?), y aun con las expectativas que tenemos, me atrevo a decir, que nos permite usar las mejores pantallas que se podrían usar con arduino. Nuevamente gracias James Bowman, no tengo idea del tiempo que le has dedicado a la librería GD2.

Por el momento el limite lo fijarán las habilidades de programación del usuario.

PD: les he pedido a los de FTDI que corrijan el error y nos compartan el sketch, pero tal parece que están ocupados abriendo botellas de sidra!!
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 18, 2016, 08:14 am
Buenas a todos, despues de leer los ultimos post y filosofando un poco, creo que tendre que recorrer mi propio camino y empezar de cero de nuevo. Me llevará tiempo pero pero a veces uno tiene que descubrir su propia forma de hacer las cosas. Por ejemplo tengo en mente prescindir de la tarjeta sd de momento y guardar assets en flash, acortar el cable ffc al maximo con la idea de integrar la teensy detras de la pantalla y a mas largo plazo intentar reemplazar la libreria fat q usa gd2 por otra q soporte la sdio de la teensy para eliminar restricciones sobre la tarjeta sd q se puede utilizar. No pretendo hacer cosas imposibles, solo quiero aprovechar lo mejor de esta pantalla junto con un ucontrolador que tiene mucho q ofrecer todavía. Ahora toca probar, equivocarse y volver a probar. Seguire viendo los progresos que haceis que serán muchos pero ahora toca meterse a fondo a ver codigo fuente de FTDI, GAMEDUINO Y TEENSY y toda la documentación recopilada. Si consigo alguno de esos objetivos ya lo comentare por aqui con algo mas tangible.

Saludos!
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 18, 2016, 06:09 pm
Ofrezco el teensy 3.6 y la pantalla FT813 de 5" para las posibles pruebas de esa nueva GD4  :smiley-draw:

El datasheet de la pantalla RVT50UQFNWC0X (https://riverdi.com/product/rvt50uqfnwc0x/) (página 8 ) señala que solo está disponible el modo 0, en la configuración de comunicación SPI; los modos 1,2 y 3 que soporta la librería SPI de arduino (https://www.arduino.cc/en/Reference/SPISetDataMode), no están habilitados en el chip FT813.

Acá señalan como podemos seleccionar el modo y frecuencia de comunicación (http://arduino.stackexchange.com/questions/16348/how-do-you-use-spi-on-an-arduino)

El archivo wiring.h de la librería GD2/3 tiene las instrucciones de selección del modo.

PD: un buen punto de partida sería profundizar en la librería ILI9341_t3 y entender como fue configurada, luego intentaría aislar las instrucciones relacionadas con SPI y finalmente intentaría aplicarlas en GD3
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 18, 2016, 06:27 pm
Es muy bueno discutir estos temas porque aprendemos todos, los unos de los otros mi conclusión como bien dices Javier es seguir adelante.No te voy o y vamos a escribir lo que ha costado tener al menos a día de este mensaje un punto de partida.

Siempre dije que les tenia manía a los FTDI no porque personalmente me hayan realizado algo, sino ya los drivers en mi modo de ver los hacían retorcidos y muchos de ellos inclusive a día de hoy no me funcionan pero es otro tema.

Yo soy muy entusiasta de las pantallas, me gustan mucho tratarlas me apasionan y veo con gran envidia sana, lo muy mucho que algunos sabéis de estas y me animo. Lo mejor que me ha pasado dentro de este ocio a sino conocer las FT8xx, las horas, los cientos de pruebas realizadas dan su gratificación. Incluso les digo y no lo sé en cuantos años veremos las pantallas OLED´s como dios manda, no las actuales de una pulgada o poco mas, lo primero seran caras y haber quienes las publicaran para nosotros.

Quien a probado (y lo he escrito muchas veces en el foro) las FT8xx, no vuelve a las anteriores, bueno todo es matizable dependerá para que proyecto obviamente, pero son muy hermosas cuando las tienes funcionando, vamos lo mejor que he visto para esta plataforma de Arduino, y sé que funcionan con otras tales como Teensy. Esto es lo bueno del todo. En mi modestia me toco bailar con la mas fea, me compré (todas las que tengo) pantallas de http:hotmcd.com (http://http:hotmcd.com) , en una época donde en el mes de Junio con el calor que hacia me hicieron sudar de lo lindo.

Creo que no llegaré a vuestro nivel en programación, por mi parte aquí me tendréis para realizar cualquier tipo de investigación sobre el hardware de las mismas donde mas me defiendo. Llegado a este punto, tenemos la base de una librería donde es funcional y todo ello con el enorme trabajo que TFTLCDCyg a realizado. Solo tienen que observar que Gameduino2 se realizo como proyecto con aportación económica desinteresada sin embargo, los que estamos liados de una forma u otra o mejor dicho implicados, todo sale de nuestra costillas; nuestro dinero, nuestro tiempo y sin obtener nada a cambio, pues lo único la recompensa de obtener unos resultados satisfactorios los cuales nos llenan de alegría a las horas que les hemos robado a nuestras familias.

Me embarga una enorme frustración que los de FTDI no se impliquen, ellos han realizado estas pantallas y como se ha escrito anteriormente no sueltan cuerda alguna, una verdadera pena, yo he visto esos vídeos en youtube, un reproductor multimedia realizado con estas pantallas sin embargo las moscas muertas de FTDI no sueltan prenda. No hay que desanimarse, todo se logrará de una forma u otra, esto convencido.

Lo importante y acabo es desear que encontrarón una persona que es servidor que no me pienso rendir, lo hacen los que no les gusta este tipo de hobby.
Tomas.


Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 18, 2016, 07:17 pm
Por cierto hace tiempo que llevo siguiendo  LUNA (http://avr.myluna.de/doku.php) sobre las FT800, ya sé que no viene al caso de este hilo pero me parece interesante.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 18, 2016, 07:26 pm
Hola, he estado mirando el codigo de ejemplo para el EVE 2 y lo del video usa avi como formato contenedor de fotogramas jpg muy al estilo de las secuencias de video dr la PSX original q utilizaba motion jpeg. Estoy mirando a ver que formato utiliza exactamente y a partir de ahi ver como funciona el ejemplo de ellos por ejemplo en visual studio.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 18, 2016, 07:38 pm
Leyendo codigo fuente de FT_App_PlayVideo.c parece ser q el formato es motion jpeg:
Code: [Select]
char *info[] = { "FT800 Play Video Application",

"APP to demonstrate video playback,",
"using mpjeg decode feature",
"& fifo buffer."
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 18, 2016, 07:48 pm
En dicho archivo hay numerosos #if defined(ARDUINO_PLATFORM) para compilar codigo especifico como este fragmento:
Code: [Select]

/* Testing avi parser */
#if defined MSVC_PLATFORM | defined FT900_PLATFORM
/* Main entry point */
ft_int32_t main(ft_int32_t argc,ft_char8_t *argv[])
#endif
#if defined(ARDUINO_PLATFORM)||defined(MSVC_FT800EMU)
ft_void_t setup()
#endif
{


Esto lo estoy mirando desde el movil, mañana intentare ver si puedo compilar codigo del emulador en visual studio
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 18, 2016, 08:27 pm
En la Application Note AN_391 EVE Platform Guide, dice explicitamente que el ejemplo del reproductor de video solo esta disponible para la plataforma FT90x
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 19, 2016, 09:04 pm
Primeras pruebas funcionales de FT813 con Teensy 3.2
https://drive.google.com/file/d/0By5wADoEOJ9fNjJnV3VscWpzLUE/view?usp=drivesdk (https://drive.google.com/file/d/0By5wADoEOJ9fNjJnV3VscWpzLUE/view?usp=drivesdk)

https://drive.google.com/file/d/0By5wADoEOJ9femZvcGdKSzExQ2s/view?usp=drivesdk (https://drive.google.com/file/d/0By5wADoEOJ9femZvcGdKSzExQ2s/view?usp=drivesdk)

https://drive.google.com/file/d/0By5wADoEOJ9fak9QRDBtYzR4dG8/view?usp=drivesdk (https://drive.google.com/file/d/0By5wADoEOJ9fak9QRDBtYzR4dG8/view?usp=drivesdk)

Todavia tengo problemas de estabilidad y me da error al intentar cargar assets de la tarjeta SD.

error al cargar assets con demo de la pecera (https://drive.google.com/file/d/0By5wADoEOJ9fNVRmOGtwdGRFQVE/view?usp=drivesdk)

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 20, 2016, 12:54 am
Antes que nada me alegra que por fin puedas ver que la pantalla está en linea!!!. Me agrada ese soporte hecho con piezas de lego.

Vayamos a las sugerencias:

Procura formatear la tarjeta SD cuando veas que salte un error que tenga que ver con carga de imágenes o de assets.

En el video de desplazamiento de texto saltan errores aleatorios, es una falla de estabilidad posiblemente asociada con la fuente de energía, tal parece que la pantalla de 7" demanda mas corriente de la que demanda la de 5".

Revisa nuevamente los puentes que usaste para hacer las conexiones entre el breakout-20 y el teensy 32.

PD: aunque hice pruebas con el teensy 32 y pensé que aun funcionaba, alguna de las lineas que usé como puente entre el lector SD y el teensy debe estar desoldado, la revisaré y trataré de ponerlo a punto nuevamente.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 20, 2016, 07:06 am
Hola, gracias x las sugerencias. La cuestion de la alimentación creo tenerla resuelta con la fuente de alimentación conmutada de 3.3v y 6A, de hecho cuando la conecto por USB unicamente para reprogramar la teensy y SIEMPRE desconectando antes de la fuente de alimentación, la pantalla si acaso se enciende x unos segundos y se apaga. Las dudas me surgen por el tema de las divisiones del cableado para comunicar tanto con la sd card como con la pantalla, no se si la asimetria en las longitudes del cableado puedan estar jugando una mala pasada, o simplemente sea como comentas una soldadura en falso, pues tampoco me considero un experto en el tema y puede q haya soldado en frio alguna. Tengo mis dudas respecto al lector sd casero, tendre q testearlo x separado a ver si puedo leer del mismo.

Saludos!
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 20, 2016, 08:35 am
Recuerda que el lector externo debe ir a las mismas lineas SPI del TFT. Trata que las distancias de los puentes o cableado, sean lo mas corto posible.

Te sugiero que reconectes todo, hilo por hilo, no tendría que haber parpadeos extraños en las imágenes o texto. Empieza por el Hello world extremo: GD3_Logo_2.

Intenta con el demo FT81X_cicloJPG, lo diseñe justamente para estresar de forma segura el sistema MCU-FT81X. También FT81X_Rotacion puede servir para estresar al lector SD.

Es posible que algún asset no cargue y se generen fallos en pantalla, basta con cargar el sketch nuevamente.

Video: ejemplo de la pecera (https://www.youtube.com/watch?v=JzRr_wP4CiI)

Intenta conseguir algún lector comercial que funcione a 3.3 V, son bastante económicos y algunos tienden a fallar, te sugiero adquieras por lo menos unos 4 o 6 para entre ellos por lo menos esté uno que funcione al 100%. Recuerda que son de bajo presupuesto por lo que la calidad no será uniforme.

Por cierto, una de las desventajas del teensy es que al usar las lineas SDA/SCL, el chip principal no reinicia como debe al restablecer la energía de alimentación, tal parece que el dispositivo se "desincroniza" y afecta al procesador cortex.

En el proyecto tengo instalado un DS3231 en SDA/SCL, si dejo de alimentar el teensy y mantengo instalado el reloj, el conjunto no reinicia. Si desinstalo el DS3231, y reactivo la alimentación, el sistema carga el sketch normalmente.

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 20, 2016, 09:28 am
Javier, le has puesto unos divisores de tensión en los pin´s SCK, MOSI Y CS?
esto concretamente,




Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 20, 2016, 06:26 pm
https://drive.google.com/file/d/0By5wADoEOJ9fbHQ2WnVIaWZ4ekE/view?usp=sharing
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 20, 2016, 07:06 pm
https://drive.google.com/file/d/0By5wADoEOJ9fbHQ2WnVIaWZ4ekE/view?usp=sharing (https://drive.google.com/file/d/0By5wADoEOJ9fbHQ2WnVIaWZ4ekE/view?usp=sharing)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 20, 2016, 10:03 pm
Pantalla funcional al completo usando vertex2f:
https://drive.google.com/file/d/0By5wADoEOJ9fYjg2VVczTTBNMG8/view?usp=drivesdk (https://drive.google.com/file/d/0By5wADoEOJ9fYjg2VVczTTBNMG8/view?usp=drivesdk)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 20, 2016, 10:33 pm
https://drive.google.com/file/d/0By5wADoEOJ9fM01BMm5BZTBDWG8/view?usp=drivesdk (https://drive.google.com/file/d/0By5wADoEOJ9fM01BMm5BZTBDWG8/view?usp=drivesdk)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 21, 2016, 12:51 am
Podrías subir el código para representar en Arduino MEGA?

Saludos.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 21, 2016, 06:35 am
Codigo demo plasma teensy 3.5/3.6:
https://drive.google.com/folderview?id=0By5wADoEOJ9fZlVLYXJNeEY2emM (https://drive.google.com/folderview?id=0By5wADoEOJ9fZlVLYXJNeEY2emM)

Codigo demo plasma Arduino:
https://drive.google.com/folderview?id=0By5wADoEOJ9fZVV0b1VZVU52djg (https://drive.google.com/folderview?id=0By5wADoEOJ9fZVV0b1VZVU52djg)

P.D.: sustituir llamada a vertex2ii por vertex2f((int)(x*16), (int) (y*16)) en la función draw()

Estoy pensando hacer otra version que utilice una libreria matematica de coma fija y de aproximación de funcion seno y raiz cuadrada para acelerar un poco la presentación en arduino mega, ya que la libreria matemática estandar utiliza datos con precisión double qie funciona más lento en dicha placa.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 21, 2016, 07:04 am
Wow!. Gracias por compartir el código, con ejemplos así, creo que GD4 está mas cerca de lo que pensaba XD.

Para conseguir que los círculos ocupen la pantalla completa, ¿que linea hay que modificar?

PD: espero algún día comprender las instrucciones escritas en esa función XD.

Code: [Select]
void draw(void)
{
  GD.Begin(POINTS);
 
  for(float32_t y = 0; y < SCREEN_HEIGHT; y+=32.0)//speed up by drawing interlaced half width screen
    for(float32_t x = 0; x < SCREEN_WIDTH; x+=32.0) //speed up by drawing interlaced half width screen
    {
      arm_sqrt_f32((x*x+y*y+timeAnim+1), &sqrtsums);
      color=int(128.0 + (128.0 * arm_sin_f32((x+timeAnim) * inv32)) +
                128.0 + (128.0 * arm_sin_f32((y-timeAnim) * inv8))  +
                128.0 + (128.0 * arm_sin_f32((x+y+timeAnim) * inv16)) +
                128.0 + (128.0 * arm_sin_f32(sqrtsums * inv7)) )>>2;
       GD.ColorRGB(color+color*256);
      //if ( (color > 120) && (color < 136))u8g2.drawPixel(x, y);
      GD.PointSize(color);
      GD.Vertex2ii((int)x,(int)y);
  }
}


Incluido en la siguiente actualización de la librería XD.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 21, 2016, 08:43 am
si sabes como funciona la funcion seno y como calcular la distancia entre dos puntos no tiene mucho misterio, lo demás es tener algo de sentido estético.

 Yo todavía estoy en proceso de comprender la 'GD0' para ver como idearon la 'GD2', no estoy a ese nivel XD.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Dec 21, 2016, 05:19 pm
Simple y conciso, pero algún día me gustaría programar así de estético como le dices jejejeje, gracias por compartir el código.

PD: yo sigo liado con la optimización de las gráficas lineales y el trazo de elipses, tomaré ese ejemplo para reducir las lineas de código, por ahora mis recursos considero que son mas bien algo toscos.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 21, 2016, 08:21 pm
la cuestion es que la FT esta limitada por el numero de comandos q puede ejecutar por linea de pantalla o eso he creido entender. Con esa limitación en mente por ejemplo si quiero dibujar un modelo 3d en malla de alambre tengo q ver como maximizar el numero de lineas q puedo dibujar en un momento dado, ya q voy a estar mas  limitado x esto y no por la capacidad de la T3.5/3.6 para realizar los calculos
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 22, 2016, 01:30 am
Hola Javier.

He probado tu código en mi Arduino MEGA, y lo que has comentado muy leeeeeeeeeeeeeeeeeeento.
Bueno pero es un punto de apoyo y te doy las gracias por compartir el código.

Estoy estudiando la posibilidad de obtener una Teensy como te comenté. Al menos la versión 3.2 donde acepta lógicas de 5V, aunque como bien sabes tengo ya en posesión conversores de lógica a 3v3-5 y viceversa bidireccionales.

Sobre el tema del hardware no os preocupéis que aquí estoy yo, faltaría mas.   :)

A ver si realizamos por cierto un grupo de wathapp....
Hasta la próxima !

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 22, 2016, 12:33 pm
Hola buenas, analizando el codigo de la GD estoy viendo q esta diseñada o por lo mrnos lo contempla, el funcionamiento con la raspberry pi ademas de con arduino (AVR, Due Teensy).
Lo mas obvio este fragmento de codigo que aparece en GD2.cpp/GD3.cpp:

Code: [Select]

#ifdef RASPBERRY_PI
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdint.h>

#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>

#include "transports/spidev.h"
#endif




Cuando pueda, probare a intentar compilar el codigo en la raspberry pi, a ver como se puede tratar las posibles dependencias con el entorno de desarrollo de Arduino
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Dec 22, 2016, 12:55 pm
Acabo de mandar un post al foro de Gameduino comentando el tema.
http://gameduino2.proboards.com/thread/335/gd2-designed-used-raspberry-pi
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 23, 2016, 12:12 am
Buenas.

Hoy he estado investigando entre la librería primitiva de FTDI, sobre el ejemplo "Demo_Refrigerator", donde hay una opción de configuración y actuar sobre el "brillo" de la pantalla.
No es mas que regular el Dimer o vía registro modificar el ancho de impulso.

este es el ejemplo;
Code: [Select]

void change_brightness(uint32_t val,int16_t val_font)
{
  int32_t Read_tag,x;
  static uint32_t tracker = 0,track_val = 420;
  uint16_t pwmi_val = 0;
  sTrackTag sTracktag;
  val = 128;
  FTImpl.Cmd_Track(20,200,420,40,12);

  while(1)
  {
    Read_tag = Read_Keys();
FTImpl.GetTrackTag(sTracktag);
if((sTracktag.tag)==12)
    {
  pwmi_val = sTracktag.track;
      if(pwmi_val<65535)
  track_val=pwmi_val/154;
      }
      if(keypressed == 8)
      {
bitfield.brightness = 0;
return;
      }

      FTImpl.DLStart();
      FTImpl.Begin(FT_BITMAPS);
      FTImpl.SaveContext();
      FTImpl.BitmapTransformA(128);
      FTImpl.BitmapTransformE(128);
      FTImpl.Vertex2ii(0, 0, 1, 0);
      FTImpl.RestoreContext();
      animation();
      FTImpl.ColorA(255);
      FTImpl.Cmd_Text(210,10,pgm_read_byte(&font[val_font]),FT_OPT_CENTERX,"Track the bar to adjust the brightness ");
      FTImpl.Tag(8);
      FTImpl.Vertex2ii(450, 5, 3, 3);
               
      FTImpl.Tag(12);
      FTImpl.ScissorXY(20, 200); // Scissor rectangle bottom left at (20, 200)
      FTImpl.ScissorSize(420, 40); // Scissor rectangle is 420 x 40 pixels
      FTImpl.Cmd_Gradient( 20,0,0x0000ff,440,0,0xff0000);
      if(track_val){
val = 10+(track_val/3);
FTImpl.Write(REG_PWM_DUTY,val);
      }
    FTImpl.ColorRGB(255,255,255);
    FTImpl.Begin(FT_RECTS);
    FTImpl.Vertex2f((20 + track_val)*16,190*16);
    FTImpl.Vertex2f(440*16,250*16);
    FTImpl.DLEnd();
    FTImpl.Finish();
    }
}


y entonces me he dicho por ejemplo cuando cambio el volumen de mi radio que es este el código;
Code: [Select]

  GD.cmd_button(300, 95, 70, 25, 23, 0,  "Vol +");   
          if (GD.inputs.tag==101){
          int volume = radio.getVolume();
          if (volume < 15) radio.setVolume(++volume);
          GD.ColorRGB(0xffff00);
          GD.cmd_number(250, 100, 31, 0, volume + vol);
          radio.setMute(false);
          delay(100);
        }


Resulta que me imprime la variable del volumen y así lo realizaría con el dimmer. Todo por probar que es tarde hoy. A todo ello también he averiguado por fin desde la librería FTDI, el comando;

Code: [Select]

 FTImpl.Cmd.Write


equivale a;

Code: [Select]

GD.wr(xxxxx)


Vaya torpeza la mía después de 6 meses ....  :)
Ahora si que ya voy de cabeza a programar mas cosas....

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: michalkepa on Dec 23, 2016, 02:52 am
 
Mi luz de fondo de control de versiones :)
slider con pantalla digital:


.......
...

GD.SaveContext();
  GD.Tag(TAG_SLIDER);
  GD.ColorRGB(255,0,0);
  GD.cmd_fgcolor(0x005500);
  GD.cmd_bgcolor(0x000030);
  GD.cmd_slider(180,230,420,30,0,PWMi,60);
  GD.cmd_track( 180,230,420,30,TAG_SLIDER);
  GD.Tag(255);
  GD.get_inputs();
  switch (GD.inputs.track_tag & 0xff) {
  case TAG_SLIDER:
    PWMi = GD.inputs.track_val * 60L / 65535;
    GD.wr(REG_PWM_DUTY,(PWMi));
   break;
GD.RestoreContext();
   }   
    GD.SaveContext();
    GD.ColorRGB(0xffffff);   
    GD.cmd_number(100, 400, 31, 0, PWMi);
    GD.RestoreContext();
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 23, 2016, 01:18 pm
Gracias @michalkepa

Usaré tu código para mis pantallas. De nuevo muchas gracias.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Dec 28, 2016, 07:51 pm
Rotación de pantalla FT800 con GD2

En la ultima actualización de la librería realizado por TFTLCDCyg del día 4 de Diciembre de corriente año, hoy he logrado rotar mi pantalla en 2 modos. Antes era imposible. Pues bien lo acabo de lograr.
En el setup pondremos este código;
Code: [Select]

    GD.begin();
   
    GD.cmd_setrotate(0);
    GD.wr(REG_ROTATE, 4);       // CON 5 SE INVIERTE LA PANTALLA
    GD.wr(REG_SWIZZLE, 0);     // 3 for GD2
    GD.wr(REG_PWM_DUTY, BRILLO_LCD);  // 0-128  CONTROL BRILLO PANTALLA

donde;
GD.wr(REG_ROTATE, 4);   // 4 se vera de esta forma;


y si ponemos;
GD.wr(REG_ROTATE, 5);
se vera invertido hacia abajo;



Se tendrá que realizar la calibración de la pantalla una vez (subir el  código) y luego comentar esta linea adicional y volver a subir el código nuevamente;
Code: [Select]

    GD.cmd_setrotate(0);
    GD.wr(REG_ROTATE, 4);       // CON 5 SE INVIERTE LA PANTALLA
    GD.wr(REG_SWIZZLE, 0);      //3 for GD2
    GD.wr(REG_PWM_DUTY, BRILLO_LCD);  // 0-128  CONTROL BRILLO PANTALLA

    // ESTA LINEA
    // GD.self_calibrate();
    // ESTA LINEA


Saludos!
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Jan 04, 2017, 07:34 am
Actualización de ejemplos

04 de enero de 2017 (http://www.mediafire.com/file/f1hiaibkyci7uwi/GD2+para+FT80X_GD3+para+FT81X_040117.rar)

- Esta revisión incluye la librería Gameduino2, modifiqué el nombre GD2.h/ccp  por GMD2.h/ccp, para permitir su convivencia con la librería GD2. El conexionado corresponde al que hemos usado para el shield de Riverdi.

Esto lo hice para poder explorar mejor la librería original del gameduino 2, y poder usar las pantallas FT80X, sin tener que borrar alguna de las librerías que ya tenemos. Ademas lo hice como una forma de reconocimiento a James (que dicho sea de paso: es responsable de que me haya enganchado con este proyecto)

- Ejemplos adicionados para Teensy 3.6 en la librería GD3

Code: [Select]
  GD3 plasma:  gracias al aporte del buen [b]RndMnkIII[/b]
 
  GD3 Selector avanzado JPG: manejo avanzado de tags, lectura de nombres de archivo de la tarjeta SD
   implementación de teclado selector para carga de imágenes jpg, uso del parlante
 
  GD3 Test de velocidad 1: permite ver el poder de cálculo con números flotantes del Teensy 3.6


El primer ejemplo funciona solo en el Teensy 3.6, los otros dos pueden ser implementados en MEGA o Due, sin embargo, debo aclarar que la carga de proceso matemático llevará al límite sus MCU´s; ya que el teensy 3.6 tiene el poder necesario para manejar multiples tags y es capaz de procesar mejor los cálculos de posición relativa simultánea de 100 imágenes de assets con movimientos circulares.

Adicionalmente, las pantallas capacitivas tienen mejor tiempo de respuesta, que las resistivas.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Jan 09, 2017, 09:45 am
Ajusté el selector avanzado de imágenes jpg... faltaba incluir una máscara sobre el listado para una vez que se oculte, no sea posible seleccionar mas imágenes; claro, hasta que se active tal opción nuevamente.

GD3: Selector avanzado de jpg (http://www.mediafire.com/file/u0c7l3q5msy1358/GD3_Selector_avanzado_JPG_1.rar)

En la siguiente revisión de GD3 incluiré esta corrección. No sé como se comporte en pantallas resistivas, creo que las he dejado un poco rezagadas...

PD: espero poder conseguir una de estas pantallas, es un gameduino 2 con un FT801 (http://www.newhavendisplay.com/nhd43ctpshieldn-p-9520.html)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Jan 10, 2017, 12:01 am
Ajusté el selector avanzado de imágenes jpg... faltaba incluir una máscara sobre el listado para una vez que se oculte, no sea posible seleccionar mas imágenes; claro, hasta que se active tal opción nuevamente.

GD3: Selector avanzado de jpg (http://www.mediafire.com/file/u0c7l3q5msy1358/GD3_Selector_avanzado_JPG_1.rar)

Pues recién probado con mi nueva y flamante FT810, y me sale la pantalla de la sangre, es decir toda roja:


ERROR
Revisar comandos


 :o  :o  :o
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Jan 10, 2017, 05:57 am
Falta esta esta imagen en la tarjeta SD:

Code: [Select]
GD.load("HMI2.jpg");

PD: recuerda formatear la microSD cuando salten errores después de agregar archivos.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Jan 11, 2017, 10:03 am
Ok. Hoy lo probaré.

A todo ello, al final solucioné el problemazo que tenía a la hora de representar o mejor dicho imprimir los datos de mi GPS en estas pantallas. Con la instrucción GD.printFloat, que funciona bien, el problema que obtenía es que no era real la lectura de longitud y latitud exacta que me daba por el monitor serie. Y mas concretamente en los decimales. Este era el problema (digo era, porque ya no lo es)

Había errores muy significativos y me puse a investigar. Ya llevaba tiempo de esto desde luego.
Una cosa importante es dependiendo la librería usada del GPS se tienen que hacer algunos cambios u otros pero es lo de menos. He usado por tanto la libraría TinyGPS++ https://github.com/mikalhart/TinyGPSPlus/releases (https://github.com/mikalhart/TinyGPSPlus/releases)

Para imprimir latitud solo es cuestión de poner;
Code: [Select]

Serial.print(gps.location.lat() );


o en caso de la longitud;
Code: [Select]

Serial.print(gps.location.lng() );

Pero realizando lo siguente, como dije no es correcto los verdaderos datos que da el modulo GPS.
Code: [Select]

  GD.printNfloat(225, 140, gps.location.lat() , 5, 24);
  GD.printNfloat(225, 115, gps.location.lng() , 5, 24);


Leyendo y releyendo, me tope con este enlace (http://stackoverflow.com/questions/27651012/arduino-sprintf-float-not-formatting) donde use para convertir números a cadenas pero este era el problema. sprintf no lo hace correctamente.
No aclarándome mucho entonces realice búsquedas relacionadas con dtostrf() en Google.

Aparececieron al menos estas;

primer enlace (http://blog.protoneer.co.nz/arduino-float-to-string-that-actually-works/) y luego aquí esta la que me ayudo ; enlace Solución Final para Arduino (https://programarfacil.com/blog/arduino-blog/conversion-de-numeros-a-cadenas-en-arduino/) donde esta ultima he creado el siguiente código donde ya es funcional. Este el código que he usado;

Code: [Select]

       char lat [15];
       char lon [15];
       char milong [50];
       char milati [50];
   
       dtostrf(gps.location.lat(),3,6,lat);
       dtostrf(gps.location.lng(),3,6,lon);

       sprintf (milong,"%s", lat);
       sprintf (milati,"%s", lon);

       GD.cmd_text(182, 140, 24, 0, milong);
       GD.cmd_text(189, 115, 24, 0, milati);


Donde en dtostrf(gps.location.lat(),3,6,lat); el 3 son los enteros (el numero que sea) pero en GPS solo van a usar 3 y luego el 6 son los decimales.
Ahora lo veo sencillo, pero llevaba como unos 2 meses detrás de la solución.
Lo que se me escapa es no sé si ustedes podrían crear una instrucción que estuviese incluida en la libreríaGD2 o GD3 a partir del código que he usado. Esto si que no lo podré yo realizar

Hasta aquí es todo por hoy, seguiremos.
Saludos!

Title: Nueva funcionalidad GameDuino 2 con tarjetas Teensy 3.5/3.6
Post by: RndMnkIII on Jan 25, 2017, 12:55 pm
Hola, saludos a todos. Me gustaría compartir en este foro las modificaciones que he incluido en la librería GameDuino 2 para carga de assets desde la tarjeta SD conectada al puerto SDIO de las tarjetas Teensy 3.5/3.6, así como la modificación de la velocidad del bus SPI en la Teensy 3.5/3.6 hasta los 30Mhz. Con ello se consigue una rápida carga de datos desde la tarjeta SD hasta la memoria de la FT813. En el ejemplo que se incluye se simula la reproducción de un clip de video mediante la carga de una secuencia de imágenes JPG. En todo momento se obtiene una reproducción estable a 24 frames por segundo. Hacer hincapié en que se apoya en la libreria SdFat Beta que tiene soporte para el modo Sdio de dichas tarjetas teensy y que el vídeo muestra una teensy 3.6 con la velocidad del procesador elevada a 240Mhz. Para obtener esta reproducción fluida es necesario que los archivos jpg de media no superen los 50Kb, por la limitación del flujo de datos entre la Teensy y la FT813 a través del puerto SPI. Futuros desarrollos de placas que den soporte a buses Quad SPI serán decisivos para la transferencia masiva de datos en tiempo real.



-Video demostrando prestaciones:
https://www.youtube.com/watch?v=8vniu0Sy1Hg (https://www.youtube.com/watch?v=8vniu0Sy1Hg)

-Repositorio con la libreria GameDuino 2 modificada, es necesario instalar la SdFat Beta previamente:
https://github.com/RndMnkIII/GD3_SDIO.git (https://github.com/RndMnkIII/GD3_SDIO.git)

-Sketch de ejemplo que reproduce un video como una secuencia de jpgs:
https://drive.google.com/open?id=0By5wADoEOJ9faFM1RG5Pb0h6TTg (https://drive.google.com/open?id=0By5wADoEOJ9faFM1RG5Pb0h6TTg)

P.D: Probado con IDE Arduino 1.81 + TeensyDuino 1.35. Librería SdFat Beta:
https://github.com/greiman/SdFat-beta
Title: Añadida clase StreamerSDIO
Post by: RndMnkIII on Jan 26, 2017, 08:16 pm
Añadida clase StreamerSDIO a GameDuino 2, para reproducción de audio digital desde tarjeta SD utilizando interfaz SDIO de las placas Teensy 3.5/3.6
Se incluyen dos ejemplos en la propia libreria.

https://github.com/RndMnkIII/GD3_SDIO/commit/c7244a57060f9e0593992c61b86028e0d996b759
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Jan 27, 2017, 12:06 am
Magnifico trabajo Javier!!!

Lo que tu has logrado, ni los fabricantes de estos chips llamados FTDI al menos en su versión 8XX, es tu trabajo, solo digo que es impresionante. Ver vídeos en estas pantallas, mis ojos lo han visto y es una autentica maravilla. Darte las gracias porque se de las horas que le has dedicado.

Mis honores a tu sabiduría.
Saludos :)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Jan 27, 2017, 01:49 am
Javier: mis mas sinceras felicitaciones y agradecimiento por las contribuciones que nos has brindado en el desarrollo de este pasatiempo que tantas desveladas nos ha costado a todos: a ti, a Tomas y a un servidor.

Hay que aclarar que el trabajo y progresos que has hecho están centrados en la placa teensy 3.6 y 3.5, específicamente en el lector micro SD "de abordo" que tienen estas magníficas placas.

He probado algunos de los ejemplos que ya teníamos en la versión previa a GD3_SDIO y saltan errores que tienen que ver con la inclusión de la librería SdFat, básicamente son algunas duplicidades de nombres de variables.

Trabajaré en los ajustes para que los ejemplos funcionen correctamente en GD3_SDIO, son modificaciones menores.

También realizaré algunas pruebas con la carga de assets, subiré los comentarios en este hilo para que nos orientes en caso de que salten los pantallazos radiactivos...

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Feb 02, 2017, 10:56 pm
Buenas.
Al final de pelear muy mucho encontré la forma de poder poner cientos de imagenes a estas pantallas sea la libreria GD2 o bien GD3

En si no hay que realizar un BitmapHandle.
Muy sencillo. pongo un simple código en una condidional IF, siendo este ejemplo;

Code: [Select]

       if ( (numeroobtenido=calculadesdeASCII(cadena, 0) == 106)  &&  (numeroobtenido=calculadesdeASCII(cadena,4) == 60) )
       {
         GD.Vertex2ii(416, 206);
         GD.cmd_loadimage(0, 0);
         GD.load("estel.jpg");
         }   


y despues lo que deseemos. No hay que definir nada, solo cargar la imagen deseada en un determinado código del programa.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Feb 03, 2017, 05:57 am
Entonces sería algo así como:

Code: [Select]
if(condición){carga Imagen}

Solución simple para el caso de ocupar solo una de ellas, buen tip.

Con SDIO del T35 o T36 esa carga sería muy rápida
Title: Guia Linux para GD2ASSET superar limite 256 kb
Post by: lightcalamar on Feb 07, 2017, 01:16 am
Buenas hoy un día muy largo.
He aquí la contribución del EQUIPO FT81X a este hilo.

Dar las gracias infinitas a Javier  --> RndMnkIII

Code: [Select]
1. Instalar Ubuntu 16.04 nativo en un PC
Realizar dependencias;
Code: [Select]
sudo apt-get install python-setuptools python-imaging
Descargar las ultimas fuentes gd2asset ;
Code: [Select]
https://pypi.python.org/pypi/gameduino2

Una vez descomprimido, editar el fichero llamado prey.py y n la linea numero 433 donde pone :
Code: [Select]
if len(self.alldata) > 0x40000:
cambiar por;
Code: [Select]
if len(self.alldata) > 0x100000:

Se supone que que tiene que funcionar con la versión de Python 2.7. Mirar si es la correcta en el sistema realizando;
Code: [Select]
python -V
Si es 2.7 bien. Entonces en consola, nos vamos a donde se dencomprimio la descarga anterior. Soltamos en consola el siguiente comando;
Code: [Select]
python setup.py install
Ya nos ofrecera el binario en /usr/local/bin
Para converir nuevos assets de imagenes  tendremos que ponerlos en el directorio de /home/xxx/gameduino2 las imagenes a convertir.


Se adjunta un paquete de prueba
Title: Uso de slots de memoria en FT8XX
Post by: TFTLCDCyg on Feb 07, 2017, 06:28 am
En relación a la carga múltiple de imágenes podemos aplicar el siguiente procedimiento. Lo escribí camino a casa y compilaba en la portátil, lo pensé para el teensy 3.6

Funciona!!!. Lo dejo tal cual lo tengo ahora, funciona con el lector SDIO del Teensy 3.6

Code: [Select]
//#include <EEPROM.h>
#include <SPI.h>
#include <GD3_SDIO.h>

char GrupoJPG01[16][15]={"c100.jpg", "cope.jpg", "catin.jpg","europa.jpg","los40.jpg","m80.jpg","maxfm.jpg","melofm.jpg","ondac.jpg","rac1.jpg","radio5.jpg","rmarca.jpg","rne1.jpg","rockfm.jpg","rt.jpg","ser.jpg"};  //64x64
int IDJPG0, IDJPG1;

File archivo1, archivo2;
SdFatSdio SD;

long previousMillis0=0, interval0=0;
unsigned long start, Test;

void setup()
{
  GD.begin();
  SD.begin();

  CargaGrupoJPG01(IDJPG0, IDJPG1);
  MP();
}
void loop(){}

float Conteo;

void MP()
{
  while(1){
  GD.Clear();
  //GD.wr(REG_PWM_DUTY, 15);
  GD.Begin(BITMAPS);

  GD.Vertex2ii(0, 0, 0); //image 1
  GD.Vertex2ii(100, 100, 1); //image 2

 unsigned long currentMillis0 = millis();       
  if(currentMillis0 - previousMillis0 >= interval0)
  {
    previousMillis0 = currentMillis0;
       CargaGrupoJPG01(IDJPG0,IDJPG1);
       IDJPG1++;
       if(IDJPG1>=16){IDJPG1=0;}
  }
 
  GD.cmd_number(100, 250, 28, OPT_SIGNED|OPT_CENTER, Conteo);
  Conteo++; 
  GD.swap();
  }
}

void CargaGrupoJPG01(int ID0, int ID1)
{
  start = millis();

  // load image 1
  GD.BitmapHandle(0);
  //archivo1 = SD.open(GrupoJPG01[ID0]);
  archivo1 = SD.open("Fn1.jpg");
  GD.cmd_loadimage(0, 0);
  //GD.loadSDIO("Fn1.jpg");
  GD.loadSDIO(archivo1);

  // load image 2
  GD.BitmapHandle(1);
  archivo2 = SD.open(GrupoJPG01[ID1]);
  GD.cmd_loadimage(-1, 0);
  GD.loadSDIO(archivo2);

  Test = millis() - start;
}

Hay que mantener dentro del limite de 256 Kb (FT80X) o de 1 Mb (FT81X) la combinación de imágenes en pantalla. La clave es esta linea para llamado de imágenes jpg

Code: [Select]
char GrupoJPG01[16][15]={"c100.jpg", "cope.jpg", "catin.jpg","europa.jpg","los40.jpg","m80.jpg","maxfm.jpg","melofm.jpg","ondac.jpg","rac1.jpg","radio5.jpg","rmarca.jpg","rne1.jpg","rockfm.jpg","rt.jpg","ser.jpg"};  //64x64
int IDJPG0, IDJPG1;


El orden del array lo puedes ajustar de acuerdo a los presets de estaciones.

Reescribiré el sketch para que funcione con el lector SD externo, y lo puedas verificar en tu hardware.

PD: Gracias por el procedimiento para instalar los complementos de phyton para gameduino 2, en cuanto disponga de un tiempo libre me aplicaré con Linux, quiero trastear el funcionamiento de las celdas en GD3.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Feb 08, 2017, 07:35 am
Sketch ajustado para la librería GD3 normal.

Code: [Select]
//#include <EEPROM.h>
#include <SPI.h>
#include <GD3.h>

char GrupoJPG01[16][15]={"c100.jpg", "cope.jpg", "catin.jpg","europa.jpg","los40.jpg","m80.jpg","maxfm.jpg","melofm.jpg","ondac.jpg","rac1.jpg","radio5.jpg","rmarca.jpg","rne1.jpg","rockfm.jpg","rt.jpg","ser.jpg"};  //64x64
int IDJPG0, IDJPG1;

long previousMillis0=0, interval0=0;
unsigned long start, Test;

void setup()
{
  GD.begin();
  CargaGrupoJPG01(IDJPG0, IDJPG1);
  MP();
}
void loop(){}

float Conteo;

void MP()
{
  while(1){
  GD.Clear();
  //GD.wr(REG_PWM_DUTY, 15);
  GD.Begin(BITMAPS);

  GD.Vertex2ii(0, 0, 0); //image 1
  GD.Vertex2ii(100, 100, 1); //image 2

 unsigned long currentMillis0 = millis();       
  if(currentMillis0 - previousMillis0 >= interval0)
  {
    previousMillis0 = currentMillis0;
       CargaGrupoJPG01(IDJPG0,IDJPG1);
       IDJPG1++;
       if(IDJPG1>=16){IDJPG1=0;}
  }
 
  GD.cmd_number(100, 250, 28, OPT_SIGNED|OPT_CENTER, Conteo);
  Conteo++; 
  GD.swap();
  }
}

void CargaGrupoJPG01(int ID0, int ID1)
{
  start = millis();

  // load image 1
  GD.BitmapHandle(0);
  GD.cmd_loadimage(0, 0);
  GD.load("Fn1.jpg");

  // load image 2
  GD.BitmapHandle(1);
  GD.cmd_loadimage(-1, 0);
  GD.load(GrupoJPG01[ID1]);

  Test = millis() - start;
}


Ajustes:

- Incluir las instrucciones de inicio para las pantallas de HotMCU.
- La imagen FN1.jpg es de 800x480 px, sustituye la adecuada para la resolución de 480x272
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Feb 09, 2017, 05:54 am
Estuve revisando el código generado por el editor EVE para el manejo de slots de memoria en FT8XX. Para cargar dos imágenes jpg de 64x64 px, ésta es la secuencia:

Code: [Select]
#include <SPI.h>
#include <GD3.h>

#define RAM_L00 0

static const PROGMEM prog_uchar L00[] = {
 #include "L00.h"
};

#define RAM_L01 8192

static const PROGMEM prog_uchar L01[] = {
 #include "L01.h"
};

void setup()
{
 GD.begin();
 GD.cmd_inflate(RAM_L00);
 GD.copy(L00, sizeof(L00));
 GD.cmd_inflate(RAM_L01);
 GD.copy(L01, sizeof(L01));
 GD.BitmapHandle(0);
 GD.BitmapSource(0);
 GD.BitmapLayout(ARGB1555, 128, 64);
 GD.BitmapSize(NEAREST, BORDER, BORDER, 64, 64);
 GD.BitmapHandle(1);
 GD.BitmapSource(8192);
 GD.BitmapLayout(ARGB1555, 128, 64);
 GD.BitmapSize(NEAREST, BORDER, BORDER, 64, 64);
}

void loop()
{
 GD.Clear(1, 1, 1);
 GD.Begin(BITMAPS);
 GD.Vertex2ii(79, 70, 0, 0);
 GD.End();
 GD.Begin(BITMAPS);
 GD.Vertex2ii(250, 146, 1, 0);
 GD.End();
 
 GD.swap();
}

/* end of file */

El editor EVE exporta las imágenes para que se puedan cargar sin usar un lector externo, tomando como base la librería base del gameduino 2 (GD2, FT80X); cabe destacar que podemos usar el código resultante en las librerías para FT81X: GD3 o GD3_SDIO.

Para que el sketch previo funcione hay que incluir en su carpeta los archivos exportados L00.h y L01.h.

El código equivalente para cargar las imágenes desde el lector SD es:

Code: [Select]
#include <SPI.h>
#include <GD3.h>

void setup() {
  GD.begin();

  //imagen 1
  GD.BitmapHandle(0);
  GD.cmd_loadimage(0, 0);
  GD.load("L00.jpg");

  //imagen 2
  GD.BitmapHandle(1);
  GD.cmd_loadimage(-1, 0);
  GD.load("L01.jpg"); 
}

void loop() {
  GD.Clear();
  GD.Begin(BITMAPS);
    GD.Vertex2ii(0, 0, 0);      //imagen 1
    GD.Vertex2ii(100, 100, 1);  //imagen 2
  GD.swap();
}
Title: Actualización
Post by: TFTLCDCyg on Feb 09, 2017, 07:48 am
Dado que en el @equipo_FT81X, hemos versado mucho en el tema del manejo del lector SDIO incluido en el Teensy 3.X, opté por ampliar provisionalmente una linea paralela de ejemplos enfocados a Teensy 3.X.

Gracias RndMnkIII por todo el soporte que nos has brindado con el tema del Teensy.

Debo confesar que me faltan horas de estudio para el manejo de las prestaciones de SDIO del teensy 3.6; que se han incorporado a GD3; es por ello que incluí en la familia a GD3_SDIO, con la idea de agregar poco a poco ejemplos particulares para estas excelentes placas.

Mas adelante ya que tengamos una buena compilación de ejemplos, creo que será factible unificar ambas lineas de experimentación.

Versión mas reciente

9 de Febrero 2017 (http://www.mediafire.com/file/rd7384wawexqs7y/GDX+V5.rar): adición de la libreria GD3_SDIO enfocada al uso del lector SDIO del Teensy 3.X

- Adición de un logo de alerta en la pantalla de error (sin que se tenga instalado un lector SD)

Se incluyen nuevamente las librerías gameduino 2 y GD2, ajustadas para el shield-Arduino de RIverdi.

PD: es posible que existan errores en los ejemplos incluidos, he estado muy ocupado con el trabajo, en cuanto disponga de un tiempo libre razonable, daré una revisión a los ejemplos: paciencia.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Feb 09, 2017, 06:25 pm
Gracias por la información TFTLCDCyg

Tube problemas a la hora de compilar tu ejemplo dos imagenes JPG en array y encontré la solución
El problema es al exportar el script del editor FTDI EVE en la librería GD2, el IDE de Arduino 1.0.5 o superior no usa el termino;
Code: [Select]

static const PROGMEM prog_uchar

Sino este;
Code: [Select]

const unsigned char

Por lo tanto el código resultante es este adaptado a mi pantalla de HotMCU;
Code: [Select]

/*
 *  MODIFICADO POR lightcalamar
 *  Dia 09-02-2017
 *  
 *  
*/  

#include <EEPROM.h>
#include <SPI.h>
#include <GD2.h>

#define PDNPin 8

#define RAM_L00 0
const unsigned char  L00[] PROGMEM  = {
#include "L00.h"
};

#define RAM_L01 8192

const unsigned char  L01[] PROGMEM = {
#include "L01.h"
};

void setup()
{
    pinMode(PDNPin, OUTPUT);       // CONTROL P.O.R. Power On Reset
    digitalWrite(PDNPin, HIGH);    // Pantalla FT800 comparada
    delay(20);                     // en http://HotMCU.com
    digitalWrite(PDNPin, LOW);     //           |
    delay(20);                     //           |
    digitalWrite(PDNPin, HIGH);    //           |
    delay(20);
    //           |
 GD.begin();
 GD.cmd_inflate(RAM_L00);
 GD.copy(L00, sizeof(L00));
 GD.cmd_inflate(RAM_L01);
 GD.copy(L01, sizeof(L01));
 GD.BitmapHandle(0);
 GD.BitmapSource(0);
 GD.BitmapLayout(ARGB1555, 128, 64);
 GD.BitmapSize(NEAREST, BORDER, BORDER, 64, 64);
 GD.BitmapHandle(1);
 GD.BitmapSource(8192);
 GD.BitmapLayout(ARGB1555, 128, 64);
 GD.BitmapSize(NEAREST, BORDER, BORDER, 64, 64);
}

void loop()
{
 GD.Clear(1, 1, 1);
 GD.Begin(BITMAPS);
 GD.Vertex2ii(79, 70, 0, 0);
 GD.End();
 GD.Begin(BITMAPS);
 GD.Vertex2ii(250, 146, 1, 0);
 GD.End();
 
 GD.swap();
}



A todo esto, adjunto el código completo y por cierto en este mismo foro, le posó tambien a un usuario este enlace (http://forum.arduino.cc/index.php?topic=299928.0)   :)  

Me interesa muchisimo esta forma de representar varias imagenes sin usar el lector microSD para mi proyecto MDC v1.0
Voy a tratar de modificar el script ditado para cuando exporte no de problemas. Luego lo adjuntaré por si alguno le hace falta.
Title: Solución Script Python exportar imagenes a la librería GD2 / 3
Post by: lightcalamar on Feb 09, 2017, 07:39 pm
Solucionado el script de Python modificado por mi donde ya se exporta correctamente el array de las imagenes.

En la carpeta donde se instaló el FTDI EVE Editor, se tiene que borrar el fichero llamado; Export GameDuino2 Project.pyc y sobreescribir el fichero que adjunto.

EDITO
======

Este "parche" es solo para la version del Editor FTDI EVE Screen Editor v 1.17 . Si TFTLCDCyc lo desea compartir, porque el fue quien me paso el mismo. No se si esta en la pagina ofical, de lo contrario que mi amigo determine el mismo si lo comparte.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Feb 10, 2017, 06:42 am
Gracias amigo. He estado liado todo el día por el trabajo.

Aquí la liga de descarga del editor EVE V1.17 (http://www.mediafire.com/file/zm39ouyc679i88u/FTDI+EVE+Screen+Editor+V1.17.zip)

Vendrá bien esa corrección para quien tenga ese detalle con la definición. Pensé que había guardado el proyecto EVE con dos logos, pero al parecer no lo hice, solo extraje los archivos h y copié el código directamente en el IDE de arduino y allí guardé el ejemplo. Sin embargo te dejo un proyecto con tres imágenes, semejante al del ejemplo, sin usar el lector SD.

Proyecto tres logos sin lector SD (http://www.mediafire.com/file/npbk12nim3zlcfz/Proyecto+EVE+tres+logos.rar)

PD: ¿por cierto esa falla se presenta en el ejemplo del pantallazo de error con logo de la última versión de GD3?
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Feb 11, 2017, 12:50 pm
PD: ¿por cierto esa falla se presenta en el ejemplo del pantallazo de error con logo de la última versión de GD3?
No. Porque el error da al compilar el código y no lo sube a la placa.

Con el editor EVE me he dado cuenta y se confirma despues de algunas pruebas realizadas, al menos por mi e inclusive en un mensaje anterior mio de este hilo puse que se podría poner muchas imagenes. Es una realidad. Me explico.

Si tenemos una imagen en una posición GD.Vertex2ii(416, 206); siempre que usemosla misma posición podremos poner cientos de ellas, nunca se veran juntas si no cuando lo deseemos, Ahora de esta forma incluso se podrá hacer una pequeña animación...

Es mas sencillo usar la carga de una imagen directamente desde la microSD, sin embargo es tambien muy interesante dependiendo de nuestro proyecto y codigo usar la flash de la MCU para almacenar iconos pequeños en esta ultima. Si usamos el modelo Arduino MEGA opviamente en adelante. No recomiendo para nada modelo UNO el cual ya lo he descartado totalmente para estas pantallas.
Title: Actualización GDX_5.1
Post by: TFTLCDCyg on Feb 14, 2017, 12:19 am
13 febrero 207: Actualización GDX_V5.1 (http://www.mediafire.com/file/irl4c17ua523c8x/GDX+v5.1.rar)

Estas semanas han sido alucinantes con el tema del teensy 3.6 y su lector SDIO.

Además, la herramienta FTDI EVE screen editor (en su versión 1.17) ha resultado de gran ayuda para generar imágenes que podemos usar dentro de la librería sin hacer uso de un lector SD.

Este aspecto abre muchas posibilidades para quienes no se deseen aventurar con la instalación de un lector externo en sus arreglos, reduciendo cableado y "fallas inoportunas" causadas por un hilo defectuoso, un shield difícil de encontrar o bien una memoria SD dañada.

Claramente estamos limitados a placas que se pueden programar con el IDE de arduino que cuenten con el suficiente espacio de memoria de programación. Como ha señalado ligthcalamar, las placas como el UNO, NANO, MINI se van a quedar cortas de espacio de programación.

Definitivamente para diseños con espacios muy reducidos, sugiero usar MCU como la teensy 3.5 o la 3.6, ya que estamos en posibilidad de extraer todo el potencial de las pantallas FT8XX y disponemos de un extra: el lector SDIO que tienen estas placas.

Las adiciones en la versión consisten en:

- La inserción de imágenes en las pantallas de error y de calibración de la pantalla táctil, sin hacer uso de un lector SD. Estas mejoras se han incorporado a las librerías base gameduino2 y GD2, así como en GD3 y la versión especializada para placas teensy 3.5/3.6: GD3_SDIO.

Aviso de error en la librería Gameduino2:


Aviso de calibración en GD2:


- Reorganización de ejemplos e inserción de nuevos (trabajo en proceso...).

- La librería gameduino2 llama a las cabeceras como GMD2, en lugar de GD2, con esto podemos usar ambas librerías sin que interfieran entre sí en el IDE de arduino.

- En las librerías GD3 y GD3_SDIO, los avisos de error y de calibración se ajustan a la rotación base de trabajo seleccionada en el archivo .ccp correspondiente.

Aviso de calibración en GD3/GD3_SDIO (rotación 0):


Aviso de error en GD3/GD3_SDIO (rotación 2):


- Inclusión de una instrucción que permite ajustar manualmente en GD3_SDIO.ccp, la frecuencia de trabajo SPI, dependiendo de la longitud del cable plano usado como interface para la pantalla (LFFC):

Code: [Select]
#if (LFFC==15)
SPISettings settingsT36(26000000, MSBFIRST, SPI_MODE0);
#endif

#if (LFFC==5)
SPISettings settingsT36(30000000, MSBFIRST, SPI_MODE0);
#endif


En los experimentos realizados por RndMnkIII él optó por usar un cable plano de 5 cm de largo, armando un sistema que puede funcionar al tope de velocidad (FT813 de 7" con un teensy 3.6). El cable que acompaña al shield de Riverdi o a las pantallas FT8XX de Riverdi, es de 15 cms, alcanzando un 86.6% de la tasa de transferencia SPI.

Como hemos visto, la longitud del cableado afecta la señales SPI, a menor longitud, mayores frecuencias podrán emplearse para comunicar al MCU con la pantalla. Hay que vigilar este aspecto siempre para descartar fallas aleatorias.
Title: Nuevo bug Script EVE v1.17 [SOLUCIONADO]
Post by: lightcalamar on Feb 21, 2017, 12:14 am
Encontre un nuevo bug en el script de EVE Editor v1.17 cuando se realiza una sentencia BITMAP_LAYOUT
El resultado es este código incorrecto:

Code: [Select]

void WriteMemfromflash(uint32_t Addr, const prog_uchar *Src,uint32_t NBytes)
{
GD.cmd_memwrite(Addr,NBytes);
GD.copy(Src, NBytes);
}


Donde tendría que poner ;
Code: [Select]

void WriteMemfromflash(uint32_t Addr, const unsigned char *Src,uint32_t NBytes)
{
GD.cmd_memwrite(Addr,NBytes);
GD.copy(Src, NBytes);
}


El usar el GD.BITMAP_LAYOUT no es otra que se puede desde una imagen, inclusive en array tomar "celdas" de diferentes imagenes dentro de una misma.
Aqui adjuntado el nuevo Script para Python del EVE Editor.
Saludos.

Title: Carga de 20 iconos de 64x64 px en FT8XX
Post by: TFTLCDCyg on Feb 23, 2017, 01:42 pm
Carga de 20 iconos de 64x64 px

Tenemos una límitante con el número de imágenes que podemos manejar de forma simultánea en la memoria de los chips FT8XX, podemos usar varias técnicas para superar esta condición, pero en ocasiones tendremos mas de 16 imágenes con las que desearíamos contar, sin tener que cargar nuevos grupos en cada ocasión.

Adicionalmente lo podemos conseguir sin usar el lector SD.

Partiendo de la respuesta que nos compartió James en el foro del gameduino 2, en la que indica como cargar los assets luego de procesarlos con la herramienta gd2asset.exe

Code: [Select]
#include <EEPROM.h>
#include <SPI.h>
#include <GD2.h>

#include "logo.h"

void setup()
{
  GD.begin();
  LOAD_ASSETS();
  GD.BitmapLayout(ARGB4, 2 * 64, 64); // override the bitmap layout
}

void loop()
{
  GD.cmd_gradient(0, 0, 0x103010, 480, 480, 0x101030);
  GD.Begin(BITMAPS);
  GD.Vertex2ii(100, 100, 0, 0);
  GD.Vertex2ii(200, 100, 0, 1);
  GD.swap();
}


La usé como punto de partida para extender su aplicación de 2 a 20 iconos de 64x64. Los pasos a seguir son:

1 Crear un archivo base con las imágenes en arreglo vertical. Los iconos que vamos a anexar son de 64x64 px, por lo que el ancho de la imagen base debe ser de 64 px. La altura es un múltiplo de 64, dependiendo del numero de iconos a insertar en la fila.

En el experimento logré insertar 20 iconos, dando una altura de 20 x 64 = 1280 px. El archivo lo llamé I20.jpg

2 Crear el archivo con extensión .h con ayuda de la herramienta gd2asset.exe, desde la linea de comandos (CMD.exe), en el ejemplo lo llamé icx.h

La linea de creación es esta:
Code: [Select]
gd2asset -o icx.h I20.jpg,format=ARGB4



3 Copiar el archivo .h en la carpeta del sketch.

4 Este es el ejemplo terminado:

Code: [Select]
#include <SPI.h>
#include <GD3_SDIO.h>

#include "icx.h"

void setup()
{
  GD.begin();
  LOAD_ASSETS();
  GD.BitmapLayout(ARGB4, 2 * 64, 64); // override the bitmap layout
}

void loop()
{
  GD.cmd_gradient(0, 0, 0x103010, 480, 480, 0x101030);
  GD.Begin(BITMAPS);

  GD.Vertex2ii(25, 25, 0, 0);
  GD.Vertex2ii(125, 25, 0, 1);
  GD.Vertex2ii(225, 25, 0, 2);
  GD.Vertex2ii(325, 25, 0, 3);
  GD.Vertex2ii(25, 125, 0, 4);
  GD.Vertex2ii(125, 125, 0, 5);
  GD.Vertex2ii(225, 125, 0, 6);
  GD.Vertex2ii(325, 125, 0, 7);
  GD.Vertex2ii(25, 225, 0, 8);
  GD.Vertex2ii(125, 225, 0, 9);
  GD.Vertex2ii(225, 225, 0, 10);
  GD.Vertex2ii(325, 225, 0, 11);
  GD.Vertex2ii(25, 325, 0, 12);
  GD.Vertex2ii(125, 325, 0, 13);
  GD.Vertex2ii(225, 325, 0, 14);
  GD.Vertex2ii(325, 325, 0, 15);
  GD.Vertex2ii(25, 410, 0, 16);
  GD.Vertex2ii(125, 410, 0, 17);
  GD.Vertex2ii(225, 410, 0, 18);
  GD.Vertex2ii(325, 410, 0, 19);
 
  GD.swap();
}




En total el asset dispone de 20 celdas dentro de la primer posición de manejo de imagenes (0), queda experimentar la posibilidad de almacenar en los slots de memoria restantes, imagenes normales.

He intentado cargar un segundo grupo de sprites en el slot 1, pero parece que afecta slot 0 y al usar GD.Vertex2ii(325, 410, 0, 19); GD.Vertex2ii(325, 410, 1, 19); el resultado en pantalla no es el correcto.

Ésta técnica de manejo de múltiples imágenes en un solo archivo, se le llama "manejo de sprites"
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Feb 24, 2017, 12:15 am
Buenas noches.

Pues se de tu esfuerzo TFTLCDCyg, pero cuando veas mi nuevo mensaje en el foro de James (http://gameduino2.proboards.com/thread/344/convert-bitmap-cells) ya te puedes morir ...
esto es lo que buscaba yo y creo que hasta tu...

Es decir, ya lo tenemos TODO.

Lllevo con este tema muy atascado, otra cosa es pasar el fichero a gd2 en microSD que será lo mas importante y esto lo mas encillo



La solución pasa en estas lineas;
Code: [Select]

void setup()
{
            
    GD.begin();
    LOAD_ASSETS();

    GD.BitmapHandle(LOGO_HANDLE);
    GD.BitmapLayout(ARGB4, 2 * 64, 64);
    GD.BitmapHandle(LOGO2_HANDLE);
    GD.BitmapLayout(ARGB4, 2 * 64, 64);
}


Es decir definir los Handles de las imagenes convertidas ...
Comprobado y funciona.

Es decir en el fichero cabecera .h nos pone los diferentes "XXX_HANDLE" ...
Otra cosa es experiementar desde 16 Handles por 16 imagenes que son 256 ....
Saludos Tomas.


/* EDITO */

Por ejemplo no se si crear dentro del fichero .h otro de iconos de 32x32, seria otra imagen dentro  y luego hacer esto por ejemplo;
Code: [Select]

void setup()
{           
   GD.begin();
    LOAD_ASSETS();

    GD.BitmapHandle(LOGO_HANDLE);
    GD.BitmapLayout(ARGB4, 2 * 64, 64);
    GD.BitmapHandle(LOGO2_HANDLE);
    GD.BitmapLayout(ARGB4, 2 * 64, 64);
    GD.BitmapHandle(ICONOS_HANDLE);
    GD.BitmapLayout(ARGB4, 2 * 32, 32);
}





Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Feb 24, 2017, 02:23 am
Vaya así de simple!. Te digo: mas secretos..., eso no aparece en la librería GD2 y vaya que la he leído infinidad de veces.

Gracias por abrir el post en el foro de James. Me da gusto que por fin hayas solucionado ese "detallito", lo digo así, puesto que la solución estaba allí, y es muy simple... estaba en las mismas instrucciones que tantas vueltas les hemos dado.

Parece entonces que la herramienta para windows en efecto si tiene ese potencial. Experimentaré con mas arreglos de imágenes.

La duda que me queda es si es posible usar una imagen de fondo en conjunto con los sprites, tal como está el ejemplo "nightstrike" que viene en la librería.

Creo que con el tema de pasar al lector SDIO (felicidades por tu Teensy 3.5, pero... ya debes dormir menos que antes jejejeje), RndMnkIII nos podría dar una orientación ya que el domina el tema.

Trataré de crear un ejemplo con la respuesta que nos ha brindado James, estará incluido en la siguiente revisión de las librerías.

Gracias.
Title: Prueba diferentes resoluciones BITMAP_LAYOUT
Post by: lightcalamar on Feb 25, 2017, 03:38 pm
Vaya así de simple!. Te digo: mas secretos..., eso no aparece en la librería GD2 y vaya que la he leído infinidad de veces.
jejejeje ,pues aunque no lo creas despues de leerme bastantes veces el book de James he realizado un curso intensivo de Ingles, ahora me voy enterando mas.  :)

Bueno he realizado las pruebas, y escribo que es totalmente funcional. He usado iconos del tamaño 32x32, 64x64, 70x50 el problema no son las dimensiones sino de como se tiene que lograr realizar el "split" (dividir) las celdas de los mismo. En esta ocasión he usado 27 iconos. Con gd2asset:
Code: [Select]

gd2asset -f logos.gd2 player.jpg,format=ARGB4 tempo.jpg,format=ARGB4 icradio.jpg,format=ARGB4

Esto da el reporte:
Code: [Select]

Assets report
-------------
Header file:    default_assets.h
GD2 RAM used:   114016
Output file:    logos.gd2
File size:      28521

Osea que sobra y estoy a menos del  50% de la RAM para FT800 !!!! Genial entonces...
Las pruebas las he realizado con mi FT811 averiada del tactil por esto.

He de comentar que lo he realizado para un fichero .gd2 ( opción -f y no -o ) para no engordar la skets de trabajo y dejar el codigo mas limpio. En fin se puede hacerde ambas formas y no influiria el resultado, salvo que entonces inflamos la flash de la MCU. A libre elección.

Tambien en mensajes anterior escribí que con una condicional if en una zona de la pantalla (yo le llamo zona de batalla) se pueden subir con GD.cmd_loadimage() las que se desee porque estas siempre modificaran la misma zona. Para una imagen de 64x64 son unos 8k de RAM (bien!!!) hay espacio mas que suficiente.

El codigo usado es;
Code: [Select]

#include <EEPROM.h>
#include <SPI.h>
#include <GD3.h>

#include "logos.h"
#define PDNPin 8       // Señal P.O.R. TFT FT800

void setup()
{
    pinMode(PDNPin, OUTPUT);       // CONTROL P.O.R. Power On Reset
    digitalWrite(PDNPin, HIGH);    // Pantalla FT800 comparada
    delay(20);                     // en http://HotMCU.com
    digitalWrite(PDNPin, LOW);     //           |
    delay(20);                     //           |
    digitalWrite(PDNPin, HIGH);    //           |
    delay(20);                     //           |
  
    GD.begin();
    LOAD_ASSETS();
 
    GD.BitmapHandle(PLAYER_HANDLE);            // ICONOS REPRODUCTOR MP3
    GD.BitmapLayout(ARGB4, 2 * 32, 32);
    
    GD.BitmapHandle(TEMPO_HANDLE);             // ICONOS DEL TIEMPO
    GD.BitmapLayout(ARGB4, 2 * 70, 50);
    
    GD.BitmapHandle(ICRADIO_HANDLE);           // ICONOS LOGOS RADIO
    GD.BitmapLayout(ARGB4, 2 * 64, 64);
        
    GD.BitmapHandle(ALTA_HANDLE);               // VARIOS ICONOS LED Y ALTAVOCES
    GD.BitmapLayout(ARGB4, 2 * 32, 32);
}

void loop()
{
GD.ClearColorRGB(0, 0, 0);
 // GD.Clear(1, 1, 1);
  GD.Clear();
  /*
  GD.cmd_button(0, 0, 479, 45, 30, 0, "Estacion Meteo");

  GD.Begin(LINES);
  GD.Vertex2ii(0, 50, 20, 0);
  GD.Vertex2ii(480, 50, 20, 0);
  GD.Vertex2ii(0, 54, 20, 0);
  GD.Vertex2ii(480, 54, 20, 0);
  GD.End();

  */

 // GD.cmd_gradient(0, 0, 0x103010, 480, 480, 0x101030);
  GD.Begin(BITMAPS);
  GD.Vertex2ii(30, 50, 0, 0);
  GD.Vertex2ii(70, 50, 0, 1);
  GD.Vertex2ii(110, 50, 0, 2);
  GD.Vertex2ii(150, 50, 0, 3);
  GD.Vertex2ii(190, 50, 0, 4);
  GD.Vertex2ii(240, 50, 0, 5);
  GD.Vertex2ii(280, 50, 0, 6);
  GD.Vertex2ii(320, 50, 0, 7);
  GD.Vertex2ii(360, 50, 0, 8);
  GD.Vertex2ii(400, 50, 0, 9);
  GD.End();

  GD.Begin(BITMAPS);
  GD.Vertex2ii(50, 115, 1, 0);
  GD.Vertex2ii(120, 115, 1, 1);
  GD.Vertex2ii(190, 115, 1, 2);
  GD.Vertex2ii(270, 115, 1, 3);
  GD.End();

  GD.Begin(BITMAPS);
  GD.Vertex2ii(20, 200, 2, 0);
  GD.Vertex2ii(95, 200, 2, 1);
  GD.Vertex2ii(170, 200, 2, 2);
  GD.Vertex2ii(245, 200, 2, 3);
  
  GD.Vertex2ii(20, 300, 2, 4);
  GD.Vertex2ii(95, 300, 2, 5);
  GD.Vertex2ii(170, 300, 2, 6);
  GD.Vertex2ii(245, 300, 2, 7);

  GD.Vertex2ii(20, 400, 3, 0);
  GD.Vertex2ii(95, 400, 3, 1);
  GD.Vertex2ii(170, 400, 3, 2);
  GD.Vertex2ii(245, 400, 3, 3);
  GD.Vertex2ii(295, 400, 3, 4);
  GD.End();

  GD.swap();
  }

El fichero logos.h es;
Code: [Select]

#define LOAD_ASSETS()  GD.safeload("logos.gd2");
#define PLAYER_HANDLE 0
#define PLAYER_WIDTH 32
#define PLAYER_HEIGHT 320
#define PLAYER_CELLS 1
#define TEMPO_HANDLE 1
#define TEMPO_WIDTH 70
#define TEMPO_HEIGHT 200
#define TEMPO_CELLS 1
#define ICRADIO_HANDLE 2
#define ICRADIO_WIDTH 64
#define ICRADIO_HEIGHT 512
#define ICRADIO_CELLS 1
#define ALTA_HANDLE 3
#define ALTA_WIDTH 32
#define ALTA_HEIGHT 160
#define ALTA_CELLS 1
#define ASSETS_END 124256UL
static const shape_t PLAYER_SHAPE = {0, 32, 320, 0};
static const shape_t TEMPO_SHAPE = {1, 70, 200, 0};
static const shape_t ICRADIO_SHAPE = {2, 64, 512, 0};
static const shape_t ALTA_SHAPE = {3, 32, 160, 0};


Este es el resultado;



Resumiendo y lo mas importante: usando esta tecnica de sprites las FT(xx cobran una vida tridimensional con imagenes ..
Adjunto las imagenes del mismo.
Saludos!

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Mar 16, 2017, 12:12 am
Nuevas funciones para la futuras librerías en vista de esta grande GDx.

Leyendo el CodeBook vi este ejemplo de como poner un "outline" al texto de 1 pixel y la verdad queda muy llamativo:

Code: [Select]

static void blocktext(int x, int y, byte font, const char *s)
{
GD.SaveContext();
GD.ColorRGB(BLACK);
GD.cmd_text(x-2, y-2, font, 0, s);
GD.cmd_text(x+2, y-2, font, 0, s);
GD.cmd_text(x-2, y+2, font, 0, s);
GD.cmd_text(x+2, y+2, font, 0, s);
GD.RestoreContext();
GD.cmd_text(x, y, font, 0, s);


Sin embargo, despues de pruebas lo he realizado a la funcion GD.cmd_number para el mismo efecto.
Donde le llamo blockNum2() por tener dos pixels alrededor del numero, se puede hacer otra por ejemplo llamada blockNum1(), para solo un pixel ...
Vean el código para dos pixels ( blockNum2() );

Code: [Select]

static void blockNum2(int x, int y, byte font, int a)
{
GD.SaveContext();
GD.ColorRGB(BLACK);
GD.cmd_number(x-2, y-2, font, 0, a);
GD.cmd_number(x+2, y-2, font, 0, a);
GD.cmd_number(x-2, y+2, font, 0, a);
GD.cmd_number(x+2, y+2, font, 0, a);
GD.RestoreContext();
GD.cmd_number(x, y, font, 0, a);
}


Una aportación mas...
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Mar 16, 2017, 10:53 pm
Muy buena para resaltar encabezados.

Me permití hacer algunos ajustes para que la tengamos en modo "todo en uno":

Code: [Select]
static void blocktext(int x, int y, byte font, const char *s, int espesor, int CR, int CG, int CB)
{
  GD.SaveContext();
  GD.ColorRGB(CR, CG, CB);
  GD.cmd_text(x-espesor, y-espesor, font, 0, s);
  GD.cmd_text(x+espesor, y-espesor, font, 0, s);
  GD.cmd_text(x-espesor, y+espesor, font, 0, s);
  GD.cmd_text(x+espesor, y+espesor, font, 0, s);
  GD.RestoreContext();
}


También se puede usar con las fuentes extra de FT81X:

Code: [Select]
#include <SPI.h>
#include <GD3.h>

void setup()
{
  GD.begin();
  GD.cmd_setrotate(0);
}

void loop()
{
  GD.ClearColorRGB(0x000020);
  GD.Clear();
    GD.cmd_romfont(1,34);   //Usa las fuentes adicionales del FT81X: 32, 33, 34
    blocktext(220, 180, 1, "_]StarX[_", 2, 0,255,0);
    GD.cmd_text(220, 180, 1, 0, "_]StarX[_");
  GD.swap();
}

static void blocktext(int x, int y, byte font, const char *s, int espesor, int CR, int CG, int CB)
{
  GD.SaveContext();
  GD.ColorRGB(CR, CG, CB);
  GD.cmd_text(x-espesor, y-espesor, font, 0, s);
  GD.cmd_text(x+espesor, y-espesor, font, 0, s);
  GD.cmd_text(x-espesor, y+espesor, font, 0, s);
  GD.cmd_text(x+espesor, y+espesor, font, 0, s);
  GD.RestoreContext();
}


PD: éstos días si que han estado movidos con el trabajo, espero ya pronto disponer de algún tiempo libre para corregir fallos en los ejemplos y adicionar más.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: Metaconta on Mar 17, 2017, 11:36 am
Hola:

Un apregunta tonta.
¿No es más fácil y barato usar una tablet con Android y comunicarlo por USB con Arduino UNO?



Aquí les veo que usan hasta controladores de hardware y todo, lo veo más caro.

https://www.youtube.com/watch?v=zl0Mb5MISUw (https://www.youtube.com/watch?v=zl0Mb5MISUw)

Eso si, los poryectos que están haciendo por ahora que estoy viendo de ustedes son impresionantes.

Un cordial saludo.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Mar 17, 2017, 12:43 pm
¿No es más fácil y barato usar una tablet con Android y comunicarlo por USB con Arduino UNO?
Wow no, es totalmente diferente.

Usamos un MCU nativo con su pantalla y librería, donde se puede programar cualquier dispositivo dentro de  los rangos sea Arduino MEGA o Teensy, etc ... Con Android tienes un sistema operativo Linux, aunque pueda controlar a traves de Arduino, luego vendría la aplicación del mismo. Sería otro mundo

El usar este tipo de pantallas, a mi modo de ver es porque son las mejores al día de este mensaje mio de programar en esta plataforma. No hay otras que las superen. No solo por su enorme potencial, ademas siempre te sorprende su voracidaz de hacer muchas cosas. Sin embargo son algo problematicas en un primer contacto. Lo mas importante es tener mas funciones en librería para que realice infinidad de comandos visuales.

Y es cierto, un hobby y proyectos caros con estas pantallas FT8xx, pero a veces, el precio no es en sí, es mas sin duda un factor secundario cuando las tienes en tus manos realizando sofisticadas recreaciciones, y esto no tiene precio alguno.

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: Metaconta on Mar 17, 2017, 01:03 pm
Buenas:

Ya veo que es otro mundo. Recuerdo que hice cosas con Android, encender y apagar un Led, creado su aplicación, no es tan completo.

Si te digo la verdad, me recuerda manejar Raspberry Pi con su Linux y Arduino, esta puede conectar a un TV por HDMI.

¿Esto no se le han opcurrido?

Seguro que si, pero no es tan interesando como lo que están haciendo.

También se pueden usar pantalla de los coches.




Ya sabes, RAspberry como servidor y Arduino como actuador. Están haciendo mucho solo con Arduino, es un reto grande.

Ánimos y adelante.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Mar 20, 2017, 05:49 pm
Al recurrir a una R-Pi dentro de la ecuación, estaríamos introduciendo una segunda PC para programar lo que ya podemos programar con la primer PC.

Pronto nos quedaríamos limitados al soporte que podría darnos la R-Pi con el tema de hardware y software, sin olvidar las librerías tan escasas y el poco soporte que han dado los fabricantes a estas increíbles pantallas.

Hemos batallado mucho para compartir una librería 100% funcional partiendo de GD2 (la librería para el gameduino 2), por lo visto a medida que hemos caminado con ella, no alcanzamos a conocerla por completo.

Los chips FT81X son bastante quisquillosos con el tema de SPI y su programación es bastante caprichosa.

Estas pantallas son lo mas eficiente que he visto para trabajar en el IDE de arduino y por lo que hemos visto con plataformas mas veloces como el Teensy 3.2, Teensy 3.5 o Teensy 3.6, disponemos de prestaciones inigualables.

Conseguí un segundo Teensy 3.6, habilité la librería GD3_SDIO para experimentar con el lector SDIO con la pantalla FT801, de acuerdo a las pruebas que he podido hacer, la velocidad de carga de imágenes está limitada por el propio chip FT801.

Por cierto este chip en particular no puede manejar imágenes png, quizás por algún tema de construcción de la propia pantalla. La pantalla gameduino 2 si que puede manejar este tipo de imágenes. Trataré de averiguar mas al respecto, quizás estoy pasando por alto alguna configuración de hardware dentro de librería GD3_SDIO.
Title: Actualización GDX_V5.2
Post by: TFTLCDCyg on Apr 01, 2017, 03:40 am
31 marzo 2017: Actualización GDX_V5.2 (http://www.mediafire.com/file/icxxxwg6p47f1a5/GDX+v+5.2.rar)



IDE empleado en las pruebas: 1.8.0

Importante: eliminar las librerías GDX previas, con el fin de evitar errores de compilación por duplicidad de librerías.

Es un proyecto en proceso y como tal, aún pueden estar colados algunos errores, si los detectan en sus pruebas, por favor repórtenlos en el presente hilo con el fin de corregirlos y mejorar la calidad de la librería.

Modificaciones relevantes

- Ajustes en los archivos núcleo de la librería: wiring.h, GDX.h y en GDX.ccp para que la asignación de pines de control, modelo de chip FT8XX, orientación de la pantalla sea lo mas simple posible y se controle desde la propia librería.

- Ya no es necesario usar una instrucción en el setup del sketch para establecer la orientación de la pantalla, aunque para efectos de diseño se puede incluir. En el archivo GDX.h de cada variante de librería, dentro del encabezado, está definida la variable que controla la orientación de la pantalla

Para FT80X, con GD2 y GD2_SDIO:
Code: [Select]
#define ORIENTACION       0   //0,  1

Para FT81X, con GD3 y GD3_SDIO:
Code: [Select]
#define ORIENTACION       0   //0,  1, 3, 4

- Reorganización de los ejemplos de manejo de cada variante con el fin de que sea mas sencillo aprender a usar la librería en sus diferentes versiones.

- Esta versión GDX incluye dos variantes (GD2_SDIO y GD3_SDIO) que permiten el uso del lector SDIO de las placas teensy 3.5 y 3.6, con la idea de aprovechar las prestaciones de ese lector microSD.

- Las versiones para arduino, que dicho sea de paso funcionan sin problemas en las placas teensy 3.X, son GD2 y GD3, funcionan con un lector externo de 3.3V. Se reestructuraron en su apartado de ejemplos con el fin de eliminar errores de compilación y facilitar adiciones futuras de demos y extras.

Adjunto las librerías SD y SDFat para teensy 3.X que soportan al lector SDIO. Incluí las versiones actuales que trabajan en placas arduino. (http://www.mediafire.com/file/82zr8v73uonde86/SDFat+y+SD+Teensy_arduino.rar)

PD: lightcalamar, saludos amigo, he estado bastante liado con el trabajo; en la siguiente versión trataré de incluir los ajustes que se necesitan para activar las pantallas de HotMCU, con el fin de que ese ajuste se pueda conseguir desde la librería considerando los modelos específicos de ese fabricante.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 01, 2017, 01:14 pm
PD: lightcalamar, saludos amigo, he estado bastante liado con el trabajo; en la siguiente versión trataré de incluir los ajustes que se necesitan para activar las pantallas de HotMCU, con el fin de que ese ajuste se pueda conseguir desde la librería considerando los modelos específicos de ese fabricante.
Buen trabajo TFTLCDCyg.

Yo he estado tambien muy liado. Esta semana he realizado unas "excursiones" de las placas que compré las STM32F103 y al final he podido doblegarlas y ahora las tengo funcionando incluso con librerias que no te puedes imaginar... el problema es que hay que modificar los pins que tienen otras abreviaturas.

Mi T35 la tengo semi-abandonada sea dicho de paso pero voy a retomar el camino iniciado. Hoy leyendo tu mensaje voy a modificar de una vez por todas una parte de la librería para las pantallas de HotMCU por el tema del P.O.R. es decir el pin PD, de esta forma será solo definir el pin solo una vez en la librería.

Lo realice por hardware y va bien, el problema reside en y pensando en usuarios no tan avanzados al menos soldar unos chip a la placa del LCD y esto es un problema (no para nosotros obviamente) pero incluyendo esta opción en la libreria quedaría fenomenal.

En la semana que vine revisaré los ejemplos de las librerias GD2 y GD3, siempre con la función que incluiré y testear, si hubiese algún error las corrigiré. La lastima que las Teensy sean tan carisimas para tener varias y tratar de tener menos dolores de cabeza en cambiar una pantalla u otrra, sería mucho mas facil.

A todo ello  mi Teensy funciona en las HotMCU, las probé en todos mis modelos, FT800, FT810 y FT811 y no voy a decirte lo que corren, es ponerle su alimentación e instantaneamente la tienes funcional... no como en Arduino MEGA, hasta 2 segundos en ver la pantalla operativa a veces.

He de terminar mi proyecto MCD del cual lo tengo muy avanzado y ademas le estoy adaptando unos extras muy especiales.

No viene al caso, pero echale un vistazo a este  video (https://www.youtube.com/watch?v=bYnptuG2A0c) ...
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 01, 2017, 04:34 pm
Otra aquí.

La última actualización de las librarías saltan errores como conejos por todos lados.
Solo he revisado la GD2 y GD3 las GDX_SDIO no las he podido probar y seguramente hasta la semana que viene no podré.

Escribiré para la GD2 (que es valido para la GD3) los mismos errores al menos usando Arduino MEGA.

Los errores de compilación son estos:
1.- error prog_uchar (linea 399 GD2.cpp)
Code: [Select]
static const PROGMEM prog_uchar Tp1[] = {
tiene que ser este código;
Code: [Select]

const unsigned char Tp1[] PROGMEM  = {

2.- Mismo error pero en linea 1338
Code: [Select]
static const PROGMEM prog_uchar Rad1[] = {
3.- Una vez quitado los errores no compila por tener 285% de variables en placa...
Entonces he quitado el resto del codigo y va bien, luego no se tendrá los .h Tp1 y Rad1.

He pensado que voy a recuperar mi viejo Github y con tu permiso subiré las librerias, si quieres te paso los codigos por privado para acceder al mismo.
https://github.com/lightcalamar (https://github.com/lightcalamar)


P.S. He usado IDE 1.8.0, 1.8.1, 1.6.5 y el mismo resultado de errores.

EDITO.
======

Acabo de actualizar mi repositorio, donde la GD2_HOTMCU, es la que estoy usando libre de errores y ademas he incluido en la librería el POR_PIN con el fin de no poner códigos de inicialización en cada hoja.
Title: Corrección de la versión GDX_V5.2 para compilar en MCU avr
Post by: TFTLCDCyg on Apr 02, 2017, 12:03 pm
2 de abril 2017: Corrección de la versión GDX_V5.2 (http://www.mediafire.com/file/vv7qijl26ivikmi/GD3+v+5.2a.rar)

Gracias amigo, creo que ya he corregido el error que refieres, también lo habia detectado en pruebas hechas hace un par de semanas en un MEGA, pero no había podido investigar una solución, hasta hace unos días, omití incluir los ajustes en la versión publicada ayer. En efecto saltaban los conejos por todos lados.

Está asociado a la falta de definición de prog_uchar, por lo que las IDE recientes no compilan correctamente (el IDE 1.5.6r2 no presenta este error) al seleccionar placas avr como el MEGA. En el teensy 3.6 no aparecen estos errores, ya que prog_uchar está definido en las librerías núcleo del compilador. La solución que se me ocurrió fue: insertar esa definición dentro del llamado del archivo de imagen; por ejemplo, en el llamado de la imagen de error, la función ha quedado así:

Code: [Select]
#define RAM_RAD1 0
  typedef const unsigned char prog_uchar;

  static const PROGMEM prog_uchar Rad1[] = {
    #include "Rad1.h"
  };


Y de esta forma en el apartado de calibración:

Code: [Select]
#define RAM_TP1 0
  typedef const unsigned char prog_uchar;

  static const PROGMEM prog_uchar Tp1[] = {
    #include "Tp1.h"
  };


Por lo visto la inclusión de imágenes prediseñadas en el mensaje de error y en el mensaje de calibración afecta notablemente el volumen de la librería GDX, por ejemplo GD3 se vuelve inutilizable en el UNO.

El arduino MEGA se salva por el espacio que ofrece, tan solo en el ejemplo Hello world ya ocupa un 11%  de almacenamiento para GD2 y con GD3 alcanza hasta el 12%.

He estado orientado a conseguir que la libreria GDX funcione al 100% con la placa Teensy 3.6, descuidando la compatibilidad con placas como el UNO o el MEGA. Hace mucho tiempo que no he usado estas magnificas placas en los proyectos.

Mas adelante quizás me podría plantear rediseñar versiones GD2 y GD3 un poco más ligeras para explorar su uso en UNO.

Podría resultar el mismo impacto en las placas diminutas como la pro o la mini. No estoy en contra de su uso, sin embargo, considerando el factor tamaño y la frecuencia de trabajo, las placas teensy 3.2. 3.5 o 3.6 son una opción mucho mejor.

No puedo dejar de puntualizar que el tema de los costos toma mucha relevancia; como bien has señalado, las pantallas FT8XX ya requieren de una inversión importante, y tal parece que a medida que conseguimos evolucionar el manejo de la librería, los requerimientos de MCU también van creciendo.  :smiley-confuse:
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 02, 2017, 12:27 pm
2 de abril 2017: Corrección de la versión GDX_V5.2 (http://www.mediafire.com/file/vv7qijl26ivikmi/GD3+v+5.2a.rar)
La descarga no corresponde con la corrección ... :o   :smiley-confuse:

Ops ! lo siento me equivoque de fichero. Todo correcto ahora.   :)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 02, 2017, 01:30 pm
Estaba redactando algunas precisiones mientras subías tu comentario.

Vi tus observaciones y quería investigar un poco mas con esa prog_uchar, espero que éstas versiones ya compilen correctamente y se hayan calmado esos conejos...
Title: Slider o Progress modo vertical
Post by: lightcalamar on Apr 04, 2017, 01:06 am
Los Widget que aparecen en la librería por defecto leyendo el gdBook solo aparecen en modo horizontal.

Bien ya obtenemos otros códigos gracias a la respuesta de  James Bowman (http://gameduino2.proboards.com/thread/350/howto-rotate-slider) en su foro del cual se me respondió de muy amable forma, con mi total desconocimiento de como actuar sobre este problema.

Los Widget tambien se pueden representar o "dibujar" verticalmente ...

Realizaré un ejemplo tanto en GD2 y GD3 en mi GitHub ---> https://github.com/lightcalamar (https://github.com/lightcalamar)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 04, 2017, 05:58 am
Que bien que haya respondido James, tenemos mas herramientas.

Se me ocurre que podrías contar con GD2 y GD3 personalizadas para las pantallas HotMCU. Si logramos incorporar las lineas de ajuste para esas pantallas dentro de la librería, bastará solo con llamarlas sin necesidad de que introduzcas los ajustes específicos a cada momento.

Para personalizar las librerías hay que hacer el siguiente procedimiento:

Asignamos un nombre a la librería, por ejemplo: GD2_HMCU

1 Cambiamos el nombre de la carpeta de la librería al nombre seleccionado: GD2_HMCU

2 Modificamos el nombre del archivo h a: GD2_HMCU.h

3 Modificamos el nombre del archivo ccp a GD2_HMCU.ccp

4 Dentro del archivo GD2_HMCU.h, modificamos el encabezado, para que el llamado corresponda a la librería personalizada:

Code: [Select]
#ifndef _GD2_HMCU_H_INCLUDED
#define _GD2_HMCU_H_INCLUDED


5 Dentro del archivo GD2_HMCU.ccp, modificamos el encabezado, tal como en el punto previo:

Code: [Select]
#include <GD2_HMCU.h>

Con esto ya dispondrás las dos versiones GD2 y GD2_HMCU, conviviendo sin problemas en el IDE de arduino. Esto mismo aplica para GD3 con el fin de obtener GD3_HMCU.

De esta forma puedes contar con las dos variantes 3.3V y 5V, cuando te animes a conseguir una pantalla de Riverdi de 3.3V.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 04, 2017, 11:01 am
Gracias por tus consejos. Modificaré las  librerías con el fin puedan convir todas juntas.

Lo mismo, realizaré con las versiones SDIO para Teensy solo y exclusivamente para las HotMCU.
Ya modifique en ellas el problema del POR, quedando de esta forma;
GD2.h
Code: [Select]

#define POR_PIN           7   // Definir el pin PD de las pantallas http://hotmcu.com
#define CS_PIN           53   // FT80X enable signal
#define SD_PIN 5 // microSD enable signal

y en el wiring.h
Code: [Select]

public:
  void por(){
    pinMode(POR_PIN, OUTPUT);       // CONTROL P.O.R. Power On Reset
    digitalWrite(POR_PIN, HIGH);    // Pantalla FT800 comparada
    delay(20);                      // en http://HotMCU.com
    digitalWrite(POR_PIN, LOW);     //           |
    delay(20);                      //           |
    digitalWrite(POR_PIN, HIGH);    //           |
    delay(20);
  }
  void begin0() {
    por(); 
    ios();

SPI.begin();

lo puse exactamente antes de iniciar el pin CS del bus SPI y va fenomenal
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 04, 2017, 05:50 pm
Genial, de esa forma será mas fácil revisar los ejemplos que vayamos subiendo y lo mas importante, se facilita el manejo de la librería, ya que solo hay que modificar una linea en el encabezado del sketch, sin mover todo en cada ocasión.
Title: Rotación de imágenes
Post by: TFTLCDCyg on Apr 05, 2017, 02:48 am
Me he quedado pensando en la pregunta que le hiciste a James en el foro, respecto a la rotación del slider.

Me había preguntado si también es posible "girar" imágenes. Había buscado muchas veces esta respuesta en el apartado de galería del foro de James y dentro del propio libro de referencia, sin llegar a algo en claro.

Revisé a fondo el apartado de Displays de la comunidad arduino y creo que los gurus de las pantallas se reservan sus trucos para sus propios proyectos y hasta el momento no he dado con algún post que me guíe a la solución.

Hoy por fin dí con la respuesta al leer una vez mas el cook book del gameduino 2.


Rotación de imágenes

Hay cuatro instrucciones que permiten girar el campo de pixeles de una imagen respecto a un punto determinado:

Code: [Select]
cmd loadidentity (p. 117)
cmd rotate       (p. 120)
cmd setmatrix    (p. 122)
cmd_translate    (p. 126)


En concreto el apartado 3.8 Rotation, zoom and shrink (p. 42), muestra como se deben usar las  instrucciones. Permiten obtener la rotación de una imagen, como por ejemplo la aguja de un reloj, la aguja de un indicador de velocidad, o la aguja de una brújula.

La clave para dibujar una aguja indicadora, es crear una función que una a cmd_rotate y cmd_translate, en la que podamos seleccionar un punto específico para aplicar la rotación.

Puede usarse cualquier punto del campo de pixeles de la imagen, pero en el caso de la aguja indicadora (archivo Ag4.png), las condiciones que debemos cubrir son:

1 Que la imagen sea rectangular


2 Que el punto de rotación de la aguja coincida con el centro del campo de pixeles (mas o menos, ya ajustaré el centroide)


En este ejemplo usaremos el centro de la imagen Ag4.png como punto de rotación:

Code: [Select]
static void rotate_Center(uint16_t a, int CXY)
{
  GD.cmd_translate(F16(CXY),F16(CXY));
  GD.cmd_rotate(a);
  GD.cmd_translate(F16(-CXY), F16(-CXY));
}


Code: [Select]
Donde: uint16_t a       es el ángulo de rotación
            int CXY     es el centro de la imagen


PD: haré una pausa. Terminaré algunas pruebas mas, ya que me han surgido algunas dudas.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 05, 2017, 04:31 pm
Veras, antes de preguntar ya me voy dando "vueltecitas" por la librería a ver que encuentro.
De comandos hay para montar una granja de conejos.

Casi por el fichero de GDX.cpp;
Code: [Select]

void GDClass::cmd_slider(int16_t x, int16_t y, uint16_t w, uint16_t h, uint16_t options, uint16_t val, uint16_t range) {
  cFFFFFF(0x10);
  ch(x);
  ch(y);
  ch(w);
  ch(h);
  cH(options);
  cH(val);
  cH(range);
  cH(0);

Ahora lo veo muy claro... Los simples ejemplos del codebook de James estan incompletos desde la librería se de otra forma.
El GD.cmd_button (los botones) fijate en la definición:
Code: [Select]

void GDClass::cmd_button(int16_t x, int16_t y, uint16_t w, uint16_t h, byte font, uint16_t options, const char *s) {
  cFFFFFF(0x0d);
  ch(x);
  ch(y);
  ch(w);
  ch(h);
  ch(font);
  cH(options);
  cs(s);
}


tiene w y h donde se puede poner verticalmente sin necesidad de resolver problema alguno,  se puede poner en modo vertical por propia deducción. Hay mucho por explorar todavía e inclusive y dicho de paso por modificar...
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 05, 2017, 04:52 pm
Hay muchas instrucciones que aun tienen por dar mucho de sí, pero James deja muchos indicios para usarlas, tenemos que revisar a detalle lo que hizo en GD2.ccp y GD2.h.

A pesar de todo, la simplicidad con la que resolvió la librería de FTDI es como para pasarle por alto cualquier omisión jejeje. Nos toca explorar parte del camino que él abrió.

Veamos el ejemplo "Hello world" que tuve que aprender a usar para poner en marcha la primer pantalla FT800 que tuve en las manos (por cierto la única versíón de 4D Systems, nunca mas volvieron al FT8XX)

Code: [Select]
/* Arduino standard includes */
#include "SPI.h"
#include "Wire.h"

/* Platform specific includes */
#include "FT_ADAM_4DLCD_FT843.h"

/* Global object for FT800 Implementation */
FT800IMPL_SPI FTImpl(FT_CS_PIN,FT_PDN_PIN,FT_INT_PIN);

/* Api to bootup ft800, verify FT800 hardware and configure display/audio pins */
/* Returns 0 in case of success and 1 in case of failure */
int16_t BootupConfigure()
{
 uint32_t chipid = 0;
 FTImpl.Init(FT_DISPLAY_WQVGA_480x272);//configure the display to the WQVGA

 delay(20);//for safer side
 chipid = FTImpl.Read32(FT_ROM_CHIPID);
 
 /* Identify the chip */
 if(FT800_CHIPID != chipid)
 {
 Serial.print("Error in chip id read ");
 Serial.println(chipid,HEX);
 return 1;
 }
 
 /* Set the Display & audio pins */
 FTImpl.SetDisplayEnablePin(FT_DISPENABLE_PIN);
    FTImpl.SetAudioEnablePin(FT_AUDIOENABLE_PIN);
 FTImpl.DisplayOn();
 FTImpl.AudioOn();   
 return 0;
}

/* API to display Hello World string on the screen */
void HelloWorld()
{
 /* Change the below string for experimentation */
 const char Display_string[12] = "Hello World";
 
 /* Display list to display "Hello World" at the centre of display area */
 FTImpl.DLStart();//start the display list. Note DLStart and DLEnd are helper apis, Cmd_DLStart() and Display() can also be utilized.
 FTImpl.ColorRGB(0xFF,0xFF,0xFF);//set the color of the string to while color
 FTImpl.Cmd_Text(FT_DISPLAYWIDTH/2, FT_DISPLAYHEIGHT/2, 29, FT_OPT_CENTER, Display_string);//display "Hello World at the center of the screen using inbuilt font handle 29 "
 FTImpl.DLEnd();//end the display list
 FTImpl.Finish();//render the display list and wait for the completion of the DL
}

/* bootup the module and display "Hello World" on screen */
void setup()
{
 /* Initialize serial print related functionality */
 Serial.begin(9600);
 
 /* Set the Display Enable pin*/   
 Serial.println("--Start Application--");
 if(BootupConfigure())
 {
 //error case - do not do any thing
 }
   else
 {
 HelloWorld();
 }
 Serial.println("--End Application--");
}

/* Nothing in loop api */
void loop()
{
}


En GD2:

Code: [Select]
#include <SPI.h>
#include <GD2.h>

void setup(){GD.begin();}

void loop(){
  GD.ClearColorRGB(0x000020);   GD.Clear(); 
  GD.cmd_text(GD.w / 2, GD.h / 2, 31, OPT_CENTER, "Hello world");
  GD.swap();}
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 05, 2017, 06:52 pm
Si. La librería oficial tiene lo suyo.
Yo creo sinceramente el que la lee y tiene la pantalla, la vuelve a poner en la caja. Y sin comentarios. La aplicacion llamada Refrigerator, eso tiene tela marinera (asi decimos en España)

Cientos de lineas para darte un dolor de cabeza que no se quita en una semana... aunque ahora con el tiempo ya explorando las posibilidades mas o menos se podria transladar. Lo que no tiene desperdicio es la aplicación del logo oficial. Buena presentación desde luego.

Ya me gustaría conocer al que desarollo la librería de FTDI, lo mismo nos resolvería los numeros de la loteria que va a tocar  :)  :)  :)

Por cierto, explorando, en GD3 el ejemplo 4. Demos / GD3_MSGEQ7_Spectrum_analyzer, tienes las imagenes que realizastes antes de convertirlas el fichero llamado spect.gd2.

No tengo prisa. Si las tienes me las podrías pasar?
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 05, 2017, 07:06 pm
Acá las puedes descargar:  imágenes fuente spectrum (http://www.mediafire.com/file/gml6ratwt972aup/Spectrum.rar)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 05, 2017, 07:53 pm
Muchas gracias.

Tenía la intriga de como lograr las transparencias y he visto que se usan 15 imagenes. Bueno ya sé usando GD.ColorA
Las adaptaré a menor tamaño para mi FT800.
Title: Rotación de imágenes: complemento
Post by: TFTLCDCyg on Apr 06, 2017, 09:16 am
Así es, usa 15 imágenes con diferentes niveles de escala.

Existe una función que permite realizar un zoom en las imágenes, en alguno de los ejemplos está la función zoom. Mas adelante trataremos el tema con un ejercicio.

Rotación de imágenes: complemento

Para que la instrucción de rotación surta efecto hay que usar inmediatamente la instrucción:

Code: [Select]
GD.cmd_setmatrix();

Los ángulos que usemos son acumulativos y afectan a todas las imágenes dibujadas en pantalla, ubicadas después del primer llamado de rotación.

Con el fin de aislar cada giro, sin que se acumule o afecte a otras imágenes, hay que usar la instrucción:

Code: [Select]
GD.cmd_loadidentity();

Recomiendo conservar la plantilla de diseño previa (colores, transparencias, etc), insertando la función de giro entre las instrucciones

Code: [Select]
GD.SaveContext();
GD.RestoreContext();


De esta manera aislamos el giro solo en el elemento que deseamos mover, como por ejemplo las manecillas de un reloj o las agujas de un tablero de instrumentos.

Code: [Select]
//#include <EEPROM.h>
#include <SPI.h>
//#include <GD3.h>
#include <GD3_SDIO.h>

//SDIO
  File archivo1, archivo2;
  SdFatSdioEX SD;
//SDIO

//Aguja indicadora
  int Centro=400/2;  //AE8.png, 400x400 px, Centro=400/2
  float AnguloG=40;  //compensación para ajustar a la escala del dial
  float avance, rapidez;
//Aguja indicadora

void setup()
{
  GD.begin();

//Sin SDIO
//  GD.BitmapHandle(0);
//  GD.cmd_loadimage(0, 0);
//  GD.load("AE6.jpg");

  //GD.BitmapHandle(1);
  //GD.cmd_loadimage(-1, 0);
  //GD.load("AE8.png");
//Sin SDIO

//SDIO
  SD.begin();
  archivo1 = SD.open("AE6.jpg");
    GD.BitmapHandle(0);
    GD.cmd_loadimage(0, 0);
    GD.loadSDIO(archivo1);

  archivo2 = SD.open("AE8.png");
    GD.BitmapHandle(1);
    GD.cmd_loadimage(-1, 0);
    GD.loadSDIO(archivo2);
//SDIO


  tacometro();
}

void loop(){}

float dato;

void tacometro()
{
  while(1){
  GD.Clear();

  GD.Begin(BITMAPS);
    GD.Vertex2ii(175, 10, 0);
  GD.End();

  GD.SaveContext();
  GD.Begin(BITMAPS);
    avance = (1.27*2)*dato;
    dato = dato + rapidez;
    if((AnguloG+avance)>=294){rapidez=-0.5;}
    if((AnguloG+avance)<=40){rapidez=0.5;}
    rotate_Center(DEGREES(AnguloG+avance), Centro);
    //rotate_Center(DEGREES(40), Centro);  //0
    //rotate_Center(DEGREES(306), Centro);  // fin
    //rotate_Center(DEGREES(294), Centro);  // 10
    GD.cmd_setmatrix();
    //GD.Vertex2ii(250, 88, 1);
    GD.Vertex2ii(200, 38, 1);
    GD.cmd_loadidentity();
  GD.End();
  GD.RestoreContext();

  GD.SaveContext();
    GD.ColorA(100);  GD.ColorRGB(0,0,0); GD.printNfloat(405, 324, dato/10, 1, 29);  GD.ColorA(255);
    if (dato>=90){GD.ColorRGB(255,0,0);}else{GD.ColorRGB(255,255,255);}
        GD.printNfloat(400, 315, dato/10, 1, 29);
  GD.RestoreContext();
  
  GD.swap();}
}

static void rotate_Center(float a, int CXY)
{
  GD.cmd_translate(F16(CXY),F16(CXY));
  GD.cmd_rotate(a);
  GD.cmd_translate(F16(-CXY), F16(-CXY));
}




Video: FT813-tacómetro (https://www.youtube.com/watch?v=je1_sTNT1Tk)

Cabe señalar que las imágenes png son compatibles al 100% con las pantallas FT81X, en las pantallas FT80X no las podemos usar directamente; sin embargo, podemos crear un asset con la herramienta gd2asset.exe, con las imágenes png, conservando las transparencias.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 06, 2017, 11:04 am
Ayer le dí un vistazo a la DataSheet (http://www.ftdichip.com/Support/Documents/ProgramGuides/FT81X_Series_Programmer_Guide.pdf) en la pagina 203 y 205 viene muy bien explicado como rotar los widget.

La data esta basadas en FT81x y he visto que la GD2 originalde James incorpora funciones de esta guia. Aquí dejo este comentario... he visto inclusive unos comandos llamados "snapshot" (pagina 244) y lo estoy investigando.

Buen código el anterior. Se podría poner como otro ejemplo mas a la librería. Que bien!

Por cierto encontré el repositorio de NewHaven Display con lo cual compilan todos los ejemplos de la librería oficial de FTDI con IDE Arduino 1.8.1 este es el repositorio (https://github.com/NewhavenDisplay/FTDI_FT800)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 06, 2017, 04:35 pm
De hecho cuando Riverdi sacó por primera vez la linea FT80X, tuve oportunidad de bajar la librería FTDI para la serie FT801 y hasta el momento es la que mejor compila: en MEGA, UNO, Teensy 3.6, arduino Due, Teensy 3.2.

De cuando en cuando me aventuro al "mar de sargazos", pero luego de invertir algunas horas para tratar de convertir el código a algo que podamos usar en el gameduino 2, termino por darme por vencido, ya que solo saltan errores por todos lados.

La App que siempre he querido migrar a GDX es la que ellos llaman FT_AppImageviewer, me parece genial, es un visor de imágenes jpg que tiene la característica de crear un reflejo de la imagen en la parte inferior, y la parte que mas me llama la la atención es que pre-carga la siguiente imagen, proporcionando continuidad de imagenes, sin parpadeos.

Y no me aventuro con las otras demos: FT_App_Restaurant, FT_App_WashingMachine, FT_App_Refrigerator, FT_App_Jackpot...

Acá está el link de descarga (http://www.mediafire.com/file/fz7d0iparigzc33/FT80X_Arduino.rar)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 08, 2017, 12:03 am
La App que siempre he querido migrar a GDX es la que ellos llaman FT_AppImageviewer, me parece genial, es un visor de imágenes jpg que tiene la característica de crear un reflejo de la imagen en la parte inferior, y la parte que mas me llama la la atención es que pre-carga la siguiente imagen, proporcionando continuidad de imagenes, sin parpadeos.
Tienes toda la razón es de lo mejor que he visto. Ayer la probré y a cada imagen realiza el reflejo de la misma imagen en un tanto por ciento.

Crees realmente que es dificil exportantal?
Ayer al ver el código hasta me parece sencillo, no sé, posiblemente le meta mano y lo haga...
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 11, 2017, 08:45 pm
En mi repositorio he subido las fuentes modificadas para la herramienta GD3Asset. Con el fin de superar la barrera de sus antecesoras FT80X y con esta versión se llega a generar assets con 2MBytes de RAM.

La instalación esta también documentada para ser instalado en Linux. Concretamente la versión 16.04 de Ubuntu.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 12, 2017, 03:20 pm
Gracias por el instructivo y las modificaciones. En cuanto tenga a punto Linux en la PC instalaré las fuentes, mientras tanto les daré varias revisiones para aprenderme el procedimiento.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 12, 2017, 06:26 pm
En las fuentes observé el máximo de imagen a transformar, estas son de 480x272 (supongo que esto te tiene que sonar algo en tus oídos), bien es la máxima resolución.

Se puede modificar a 800x480 pixels siendo esta ultima la máxima para FT81x no lo realice por varios motivos entre otros no sería factible poner assets con estos pixels y ademas podría crear problemas en las imágenes de múltiples Handles supongo, esto sí se podría hacer y probar.

Sea de una forma u otra las fuentes ahora alcanzan el MByte que se necesita, otra cosa mas adelante veamos si lo mejoramos.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: RndMnkIII on Apr 13, 2017, 09:14 am
Saludos y animo con esos proyectos, me alegra ver esos progresos con las pantallas FT8xx. De momento no puedo dedicarme a echar una mano por aqui e investigar algunos desarrollos pendientes para las FT81x y placas Teensy 3.5/3.6 por cuestiones personales pero espero q en poco tiempo pueda ponerme al dia otra vez y compartirlo aqui en el foro.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 13, 2017, 04:24 pm
En las fuentes observé el máximo de imagen a transformar, estas son de 480x272 (supongo que esto te tiene que sonar algo en tus oídos), bien es la máxima resolución.

Se puede modificar a 800x480 pixels siendo esta ultima la máxima para FT81x no lo realice por varios motivos entre otros no sería factible poner assets con estos pixels y ademas podría crear problemas en las imágenes de múltiples Handles supongo, esto sí se podría hacer y probar.

Sea de una forma u otra las fuentes ahora alcanzan el MByte que se necesita, otra cosa mas adelante veamos si lo mejoramos.
Vaya pensé que esa parte no se podría modificar también. Otra razón mas para apresurarme con los pendientes del trabajo. Gracias

Saludos y animo con esos proyectos, me alegra ver esos progresos con las pantallas FT8xx. De momento no puedo dedicarme a echar una mano por aqui e investigar algunos desarrollos pendientes para las FT81x y placas Teensy 3.5/3.6 por cuestiones personales pero espero q en poco tiempo pueda ponerme al dia otra vez y compartirlo aqui en el foro.
Saludos mi estimado, esperemos que vaya todo bien con tus proyectos personales. Paciencia.

PD: aprovechando para dejar la pregunta en el aire... En efecto hay una petición aguardando: crear una lista de archivos con una determinada extensión (jpg, bmp, png) pero desde el lector SDIO. Luego con ayuda del FT8XX, presentar la lista y seleccionar aquella que nos interese.

Adjunto un ejemplo que está en el foro de James, lo modifiqué para que muestre el listado siempre y por tanto, la imagen que deseemos seleccionar. En el ejemplo original solo se carga una vez, hay que reiniciar el MCU para mostrar el listado inicial. Además se puede seleccionar la resolución de pantalla, con lo que podemos usarlo en FT80X o en FT81X.

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 13, 2017, 06:38 pm
Monitoreo de tags

Cuando estamos trabajando con las entradas táctiles, podemos usar la superficie completa de la pantalla. Sin embargo no asignamos posiciones (x, y) directamente. De eso se encarga la instrucción
Code: [Select]
GD.Tag(IDtag);

Donde IDtag comprende valores de 0 a 255.

Hay algunas consideraciones asociadas al rango de entradas táctiles

- 0 a veces causa conflictos al usarlo, por lo que sugiero no emplearlo en un sketch
- 255 indica que ya no se aplicará un tag o marcador de entrada táctil en las instrucciones siguientes

Técnicamente podemos asignar el rango 1-254, como entradas táctiles útiles, aparentemente es un rango limitado, sin embargo es mas que suficiente para trabajar con una sola pantalla a la vez.

Podemos asociar a un tag, cualquier elemento que decidamos enviar a pantalla, además de los típicos botones: un reloj, un polígono, un circulo, un texto, un numero, una imagen, etc. No tenemos que preocuparnos por la posición gráfica.

Para saber que tag estamos usando en un momento dado, podemos recurrir a la siguiente linea:

Code: [Select]
if((1<=GD.inputs.tag)&&(GD.inputs.tag<=TagMAX))

Donde TagMAX, puede tomar un valor entre 2 y 254. Resulta muy útil para asociar un determinado tag ya asignado a una acción específica, como por ejemplo cargar en pantalla un determinado archivo de imagen o de audio, de una lista creada previamente en la pantalla en uso o bien desde otra pantalla o menu.

Este es un ejemplo práctico:

Code: [Select]
//#include <EEPROM.h>
#include <SPI.h>
#include <GD3.h>

byte IDSeleccionada;

void setup()
{
  GD.begin();
  MP();
}

void loop(){}

void MP()
{
  while(1)
  {
    GD.ClearColorRGB(0x404040);
    GD.Clear(); GD.get_inputs();

    GD.SaveContext();
      GD.LineWidth(10); GD.Begin(RECTS);
      GD.ColorRGB(0x0000cc);  GD.Tag(206);  GD.Vertex2f(16*125,16*120);  GD.Vertex2f(16*275,16*150);
      GD.ColorRGB(0xffffff); GD.cmd_text(200, 133, 28, OPT_CENTER, "Menu 1 (206)"); GD.Tag(255);

      GD.LineWidth(10);  GD.Begin(RECTS);
      GD.ColorRGB(0x0000cc); GD.Tag(207); GD.Vertex2f(16*125,16*170); GD.Vertex2f(16*275,16*200);
      GD.ColorRGB(0xffffff); GD.cmd_text(200,183,28,OPT_CENTER,"Menu 2 (207)"); GD.Tag(255);
    GD.RestoreContext();

    if((1<=GD.inputs.tag)&&(GD.inputs.tag<=254))
      {
        IDSeleccionada=GD.inputs.tag;
      }
    GD.cmd_number(40,250,31,OPT_CENTER|OPT_SIGNED,IDSeleccionada);
  GD.swap();
  }
}
Title: Ficheros de Audio
Post by: lightcalamar on Apr 14, 2017, 12:58 am
SURPRISE !!!

En esta tarde he descubierto algunas cosas sobre la ultima revisión del GD2Assets del código fuente de James Bowman, concretamente la versión ultima 2.0.18 ...

Resulta que los ficheros de audio .wav también se pueden subir a la pantalla, sea FT80x o FT81x
Hasta me he emocionado y resulta que FUNCIONA!!!



En este caso use un gran fichero de 10MBytes y obviamente reprodujo solo hasta el mega... pero funcionó repito. Esto si con fichero "pequeños" por ejemplo el sonido de un reloj CUCU ... Wow que ideas me da el sistema de las FT81X ...

Ya pondré un ejemplo.



Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 14, 2017, 03:23 am
Impresionante!. Pensé que solo los archivos de audio comprimidos podían ser reproducidos.

Has descubierto nuevas posibilidades, a la espera de los avances que tengas con el tema.

PD: vaya si que la versión gd2asset para Linux tiene bastantes recursos por ofrecer.
Title: Marco para FT81X
Post by: lightcalamar on Apr 17, 2017, 10:38 am
He realizado esta función para poner un marco de color blanco alrededor de la pantalla. El problema al ser llamada solo sale el mismo sin lo previo.

Code: [Select]

void marco()  {
            
      do {
      GD.Clear();
      GD.Begin(LINES);
      GD.SaveContext();
      GD.Vertex2ii(0, 70, 20, 0);         // DOS LINEAS DEBAJO DEL MENU SUPERIOR
      GD.Vertex2ii(480, 70, 20, 0);
      GD.VertexTranslateX(16*320); GD.Vertex2ii(480, 70, 20, 0);
      GD.VertexTranslateX(16*320); GD.Vertex2ii(0, 70, 20, 0);
      GD.RestoreContext();

      
      GD.SaveContext();
      GD.Vertex2ii(0, 65, 20, 0);
      GD.Vertex2ii(480, 65, 20, 0);
      GD.VertexTranslateX(16*320); GD.Vertex2ii(480, 65, 20, 0);
      GD.VertexTranslateX(16*320); GD.Vertex2ii(0, 65, 20, 0);
      GD.RestoreContext();

      
      GD.SaveContext();
      GD.Vertex2ii(0, 478, 20, 0);        // LINEA INFERIOR DE LA PANTALLA
      GD.Vertex2ii(478, 478, 20, 0);
      GD.VertexTranslateX(16*320); GD.Vertex2ii(0, 478, 20, 0);
      GD.VertexTranslateX(16*320); GD.Vertex2ii(478, 478, 20, 0);    
      GD.RestoreContext();

      
      GD.SaveContext();
      GD.Vertex2ii(0, 480, 20, 0);        // LINEA LATERAL IZQUIERDA
      GD.Vertex2ii(0, 65, 20, 0);
      GD.RestoreContext();
      
                                          // LINEA LATERAL DERECHA
      GD.SaveContext();
      GD.VertexTranslateX(16*318); GD.Vertex2ii(480, 65, 20, 0);    
      GD.VertexTranslateX(8*636);  GD.Vertex2ii(480, 480, 20, 0);                    
      GD.RestoreContext();      
            
      GD.End();
      GD.swap();
      }
    while(1);  
}

luego la llamo dentro de otra función e.j.

Code: [Select]

void menu1() {
GD.ClearColorRGB(0x000000);
GD.cmd_fgcolor(CHERRY);  
GD.ColorRGB(WHITE);
GD.cmd_button(0, 0, 800, 62, 31, 0, "Multi Data Center");
marco();
}


Y el botón del menú no aparece. Alguna idea?

P.S. Saludos RndMnkIII !!! tiempo sin saber de ti. Espero tus proyectos sean fructíferos.
Title: Tips cambio de pantalla Tactil
Post by: lightcalamar on Apr 17, 2017, 07:17 pm
Añado un tips de estas pantallas. Supongo que lo saben, no obstante creo conveniente escribir.

Tenía en mi proyecto una FT800, y estoy emigrando el proyecto exactamente igual pero a pantalla FT810. Todo correcto, salvo una pequeñez...

Realizando la calibración de la pantalla, no guarda los cambios, por lo tanto siempre hay que poner el se setup;
Code: [Select]

  GD.begin();
  GD.cmd_setrotate(0);
  GD.self_calibrate();

 y llega a ser agotador tener que poner siempre la instrucción para calibrar. Esto pasa porque la anterior pantalla memorizó en la EEPROM del MCU sus datos.

Solución: abrir el ejemplo del IDE de Arduino EEPROM -> eeprom_clear y mano de santo.
Luego a cargar otra vez el proyecto con el anterior código, pide la pantalla por dos veces que se le calibre, como confirmación, luego desmarcamos el comando GD.self_calibrate(); yla pantalla vuelve a ser funcional sus posiciones táctiles nuevas. Ojo que hablo de Arduino MEGA.

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 18, 2017, 12:50 am
Simple y bastante útil. Como hace un buen rato que uso el teensy 3.6 y las pantallas en la misma posición, no había usado la calibración automática, que salta la primer vez en las tarjetas que tienen EEPROM.

Es un consejo bastante útil.

Por cierto, ¿funcionó en el MEGA la pantalla de calibración modificada?

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 18, 2017, 10:16 am
Si funcionó correctamente.

Siempre estuve preguntandome del porque usaba la EEPROM en Uno o MEGA, quizas sea debido a la calibración que requiere para ser grabados los datos del táctil.

Pero me pregunto como y donde se guardan los datos en DUE o Teensy... misterios.

He visto un comando llamado Snapshot en la referencia de FTDIChip, la has usado? creo realiza una captura de pantalla de baja resolución. Muy interesante.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 19, 2017, 04:37 am
Teensy cuenta con EEPROM:

Code: [Select]
T35/36   4 Kb
T31/32   2 Kb


El Due no tiene, sin embargo puede usar la orientación del gameduino 2 y usar la calibración default que tiene la librería. Por cierto, hasta la fecha no he instalado el FT813 en el arduino Due...

He visto ese comando, pero de acuerdo con James, la imagen se debe capturar con un programa extra, nuevamente phyton en linux es la solución
Title: Capturar pantalla
Post by: lightcalamar on Apr 20, 2017, 09:29 am
Realice ayer pruebas sobre capturar la pantalla y anviar al puerto serie de Linux.

El script no es correcto con la comunicación de Arduino. Lo he corregido y es este
Code: [Select]

import sys
import time

import serial

if __name__ == '__main__':
    import sys, getopt
    try:
        optlist, args = getopt.getopt(sys.argv[1:], "vh:s:")

    except getopt.GetoptError, reason:
        print reason
        print
        print 'usage: getppm.py -h <usb port> -s <usb speed>'
        print
        print
        sys.exit(1)
    optdict = dict(optlist)

    if '-s' in optdict:
        speed = int(optdict['-s'])
    else:
        speed = 1000000

    port = optdict.get('-h', "/dev/ttyACM0")
    print 'Opening %s at %d' % (port, speed)
    ser = serial.Serial(port, speed)

    ser.setDTR(0)
    time.sleep(0.1)
    ser.setDTR(1)

    # Expected size of the PPM. 15 bytes for the header, then 480x272 image
    expected_size = 15 + (3 * 480 * 272)
    for frame in xrange(9999):
        s = ser.read(expected_size)
        open("shot%04d.ppm" % frame, "w").write(s)
        print "frame %d written" % frame


Subir el programa y no funcionó.
Por cierto solo funciona en Python v2.7 (a tener en cuenta en Linux).

Exactamente despues de muchos intentos he averiguado que en las pantallas FT81x no funcionará nunca. Leí detenidamente la datasheet del chip FT800Q y este lleva los registros siguientes;
Code: [Select]

 REG_SCREENSHOT_EN  
 REG_SCREENSHOT_Y    
 REG_SCREENSHOT_START
 REG_SCREENSHOT_BUSY  
 REG_SCREENSHOT_READ
 RAM_SCREENSHOT

y en FT81X estos no existen, por lo tanto digo que solo funcionará en FT80X. Leí que parte de suprimir el SCREENSHOT en FT81X es para habilitar la RAM_G alcanzando el mega disponible para el usuario y parte de esta misma se realizó dos funciones;
Code: [Select]

REG_SNAPSHOT
REG_SNAPSHOT2

La primera con una maxima resolucion de 160x120 pixels y la segunda 32x32 por lo tanto afirmo que es imposible capturar la pantalla en FT81X y poder enviarla. Mala suerte.

No obstante no pude probar por tiempo, hoy realizaré la misma prueba pero con FT80X (480x272) y tiene que funcionar. Ademas el script inicializa correctamente la placa Arduino, problema del chip FT81X
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 20, 2017, 07:06 pm
Confirmado. Solo funciona con chipFTDI FT80X
Adjunto dos capturas.
Title: Proyecto FT813 móvil: conversión de coordenadas geográficas decimales a UTM
Post by: TFTLCDCyg on Apr 21, 2017, 08:55 am
Interesante lo que estas investigando, pensé que se podría conseguir con las pantallas FT81X, sería increíble poder obtener una captura de la propia librería; pero seguiremos tomando fotos como "turistas japoneses"

Estudiando el GPS que conseguiste en tu proyecto, opté por buscar uno similar pero con algo mas de precisión, decidí conseguir este: UBX-G7020-KT (https://www.u-blox.com/en/product/ubx-g7020-series). Acá hay una guía de uso para arduino (https://www.dfrobot.com/wiki/index.php/GPS_Module_With_Enclosure_(SKU:TEL0094)).

Tengo planeado incorporarlo al dispositivo móvil que estoy construyendo en base a una pantalla FT813, para usarlo en los recorridos en campo y compararlo contra el GPS que tengo para el trabajo, ya tiene unos años y la batería ya le está dando problemas.

Estoy a la espera de la carcasa diseñada para un arduino MEGA, que modificaré para el teensy; ya tengo una placa base donde instalar el teensy 3.2. Luego conseguiré un teensy 3.6 extra.

Conversión de coordenadas geográficas a coordenadas UTM

Le he dedicado un tiempo a estudiar la librería matemática del teensy 3.X y también a las fórmulas que permiten convertir grados decimales a coordenadas UTM. El ejemplo que he podido estudiar, parece que es el mejor que se ha elaborado con este tema y tal parece que varias calculadoras en linea, lo han usado como base. Este es el ejemplo paso a paso: http://www.gabrielortiz.com/index.asp?Info=058a (http://www.gabrielortiz.com/index.asp?Info=058a)

Todo parte de los trabajos de unos italianos inquietos con este mismo asunto, empleando las fórmulas Coticchia-Surace que son el resultado de sus esfuerzos

Sin mas, éste es el sketch que he podido obtener:

Code: [Select]
#include "arm_math.h"

float64_t a=6378137;
float64_t b=6356752.3142;

float64_t eprima=0.082094438; 
float64_t eprima2=eprima*eprima;
 
  float64_t ce=6399593.5;
  float64_t cc=0.12580398;
  float64_t c=ce+cc;
  float64_t  c9996= (0.9996*c+0.043332661);  //(corrección de c*0.9996)

float64_t LAT=19.310442;   
float64_t LONG=-99.621017;

 

double phi, lambda, Deltalambda, A, epsilon, ro, v, chi, Aa1;
double Aa2, J2, J4, J6, ALPHA, BETA, GAMMA, BPHI, XUTM, YUTM;

//float Pi=3.141592654;
float Pi=PI;

int huso, lambda0;

void setup() {
  Serial.begin(9600);
  while (!Serial) ;
  Serial.println("ARM math Test!");   Serial.println(" ");
  Geo_UTM();
}

void Geo_UTM()
{
  Serial.print(" e'= "); Serial.println(eprima, 8);
  Serial.print("e'2= "); Serial.println(eprima2, 8);
  Serial.print("  c= "); Serial.println(c, 6);
  Serial.print("  c9996= "); Serial.println(c9996, 6);

  Serial.println(" ");
  Serial.print("Latitud:   ");  Serial.println(LAT, 6);
  Serial.print("Longitud: ");  Serial.println(LONG, 6);
  Serial.println(" ");
 
  huso = int((LONG/6)+31);
  Serial.print("   huso=  "); Serial.print(huso);  Serial.println(" (Zona UTM)");

  lambda0=huso*6 - 183;
  Serial.print("lambda0= "); Serial.println(lambda0);
 
     phi = LAT*Pi/180;
  lambda = LONG*Pi/180;
  Serial.print("    phi=  ");  Serial.println(phi, 8);
  Serial.print(" lambda= ");  Serial.println(lambda,8);

  Deltalambda=lambda-(lambda0*Pi/180);
  Serial.print(" Delta lambda= ");  Serial.println(Deltalambda, 6);

  A=arm_cos_f32(phi)*arm_sin_f32(Deltalambda);
  Serial.print(" A= ");  Serial.println(A, 8);

  epsilon=0.5*log((1 + A) / (1 - A));
  Serial.print(" epsilon= ");  Serial.println(epsilon, 8);

  ro= atan(tan(phi) / arm_cos_f32(Deltalambda)) - phi;
  Serial.print(" ro= ");  Serial.println(ro, 8);

  v= c9996/sqrt((1+eprima2*arm_cos_f32(phi)*arm_cos_f32(phi)));
  Serial.print(" v= ");  Serial.println(v, 6);

  chi= 0.5*eprima2*epsilon*epsilon*arm_cos_f32(phi)*arm_cos_f32(phi);
  Serial.print(" chi= ");  Serial.println(chi, 9);

  Aa1= arm_sin_f32(2*phi);
  Serial.print(" Aa1= ");  Serial.println(Aa1, 9);

  Aa2= Aa1*arm_cos_f32(phi)*arm_cos_f32(phi);
  Serial.print(" Aa2= ");  Serial.println(Aa2, 9);

  J2= phi+0.5*Aa1;
  Serial.print(" J2= ");  Serial.println(J2, 9);

  J4= (3*J2+Aa2)/4;
  Serial.print(" J4= ");  Serial.println(J4, 9);

  J6= (5*J4+Aa2*arm_cos_f32(phi)*arm_cos_f32(phi))/3;
  Serial.print(" J6= ");  Serial.println(J6, 9);

  ALPHA= 3*eprima2/4;
  Serial.print(" ALPHA= ");  Serial.println(ALPHA, 9);

  BETA= 5*ALPHA*ALPHA/3;
  Serial.print(" BETA= ");  Serial.println(BETA, 9);

  GAMMA= 35*ALPHA*ALPHA*ALPHA/27;
  Serial.print(" GAMMA= ");  Serial.println(GAMMA, 9);

  BPHI= c9996*(phi-ALPHA*J2+BETA*J4-GAMMA*J6); 
  Serial.print(" BPHI= ");  Serial.println(BPHI, 9);

  Serial.println(" ");

  XUTM= 500000+(epsilon*v*(1 + (chi/3)));
  Serial.print(" XUTM= ");  Serial.println(XUTM, 0);

  YUTM= ro*v*(1+chi)+BPHI;
  Serial.print(" YUTM= ");  Serial.println(YUTM, 0);
}

void loop() {}


Técnicamente a y b  no las uso directamente, ya que al obtener c, los errores que introduce al usar las matemáticas del IDE de arduino en el teensy (o el arduino Due) hacen que los decimales se pierdan y parece que los 4 decimales que se obtienen afectan enormemente las magnitudes de J2, J4 y J6.

El efecto de la librería arm.math.h, no es lo que esperaba, aparecen los mismo errores de pérdida de decimales, que con la librería matemática default del IDE de arduino.

1 Hay que copiar el llamado de la librería arm_math.h, las definiciones de variables y constantes en el encabezado y crear una pestaña para la función  Geo_UTM()

2 Luego igualar los datos del GPS, con las variables de entrada de la función y llamarla

Code: [Select]
LAT = gps.location.lat()  //dato del GPS
LONG =gps.location.lat()  //dato del GPS

Geo_UTM();


PD: he hecho pruebas con un oled a color y me gusta el resultado, quizás lo deje un tiempo en tanto me ingenio una carcasa adecuada para el FT813
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 21, 2017, 09:52 am
Muy interesante este GPS, al menos veo que es mas profesional. Con el mio estoy muy contento y es muy exacto en coordenadas, sin embargo es algo lento (serie a 9600) y veo que este puede alcanzar velocidades de hasta 115200 baudios/sec.

Por cierto he visto un video tuyo https://www.youtube.com/watch?v=EJlAKQ7aP1Q (https://www.youtube.com/watch?v=EJlAKQ7aP1Q) sería mucho pedirte el código fuente del mismo?
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Apr 21, 2017, 11:14 am
Permíteme buscarlo, fue construido con la librería original de FTDI chip, por aquel entonces tenía el FT843 (basada en el FT800).

Empecé a hacer las primeras pruebas con un gameduino 2... uf que días aquellos... y yo que pensaba que la librería de FTDI era una pasada...

PD: he querido convertirlo a GDX, pero al ver la cantidad de código... caramba, ¿cómo pude programarlo con tanta linea?

Title: Gauges
Post by: lightcalamar on Apr 21, 2017, 04:26 pm
Hay, hay y hay ...
Si supieras ...

Yo estoy por romperme la cabeza y adaptar el ejemplo Gauges de la librería FTDI Oficial para tener dos Vu-Meters a lo grande y espacioso vamos como bien sabemos en 5 pulgadas. Me enamoró desde siempre estos "instrumentos y como no ... para optar en poner en mi MDC (proyecto) dos FT8XX.

Estoy a punto de hacerlo. Claro está la pantalla FT800 para el Gauge usaría por ejemplo un Arduino nano ya que con esto va sobrado y caso de no poder adaptarlo a la librería GDX usaría la propia oficial, pero me resisto a ello porque quiero profundizar en el codigo.

Me refiero a este ejemplo; Gauges (https://youtu.be/6JI8p74QcCw)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on Apr 22, 2017, 03:19 am
SURPRISE !!!

Al final he podido después de unas mas de 9 horas convertir el ejemplo Gauges de la libraría oficial FTDI a GD2 y luego posiblemente se pueda a GD3... lo dejo para TFTLCDCyg

Ha sido un sin vivir, he realizado un simple video https://www.youtube.com/watch?v=ckye3X-xI2w (https://www.youtube.com/watch?v=ckye3X-xI2w) y mañana subiré el código como no a los ejemplo de mi github.

Dejo el código adjunto(aunque un poco sucio). Tendré que ir quitando lineas que no se usan y otras como comentarios.

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 01, 2017, 09:52 am
Genial, gracias por el tiempo dedicado, hay que darle una mirada a fondo. Sigo liado con el jpg viewer de FTDI.

Otra duda que tengo es como podemos hacer convivir una fuente personalizada, como las que podemos obtener con el editor EVE, con alguna imagen jpg. He intentado varias veces, pero no consigo cargar ambos elementos al mismo tiempo.

Sigo trabajando en la gráfica lineal continua. Logré crearla en la librería de FTDI y he estado trabajando en  portarla a GDX. Solo falta afinar un par de detalles. El siguiente paso es implementar una función dentro de la librería; en cuanto tenga el ejemplo listo, me aplicare en ponerla a punto. (No prometo nada, ya que quizá sea muy ambicioso tener una función así...)


Las pruebas las he estado realizando con el analizador MSGEQ7, monitorizando los canales 2, 4 y 6. Cada linea se almacena en un array de 150 elementos y se muestra en tiempo real. Los 240 MHz del teensy 3.6 son una maravilla.

PD: he estado algo liado con la empresa de telefonía ya que me han bloqueado nuevamente el chip. Me han dicho que es un fallo en su sistema y que los vea hasta después del 1 de mayo...
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on May 02, 2017, 06:32 pm
Otra duda que tengo es como podemos hacer convivir una fuente personalizada, como las que podemos obtener con el editor EVE, con alguna imagen jpg. He intentado varias veces, pero no consigo cargar ambos elementos al mismo tiempo.
Esto no es problema.

NOVEDADES !!!


Las imágenes convertidas en un fichero .gd2 (asset) aparte de ser imágenes se puede incluir una o varias fuentes personalizadas, ejemplo (parte inferior izquierda es un digital.ttf);



luego con el gd2asset(Linux);


quedando la cabecera del fichero logo.h de esta forma;
Code: [Select]

#define LOAD_ASSETS()  GD.safeload("logos.gd2");
#define MULTI_HANDLE 0
#define MULTI_WIDTH 64
#define MULTI_HEIGHT 192
#define MULTI_CELLS 1
#define TIEMPO_HANDLE 1
#define TIEMPO_WIDTH 16
#define TIEMPO_HEIGHT 16
#define TIEMPO_CELLS 1
#define ICRADIO_HANDLE 2
#define ICRADIO_WIDTH 64
#define ICRADIO_HEIGHT 512
#define ICRADIO_CELLS 1
#define ICRADIO2_HANDLE 3
#define ICRADIO2_WIDTH 64
#define ICRADIO2_HEIGHT 512
#define ICRADIO2_CELLS 1
#define LEDS_HANDLE 4
#define LEDS_WIDTH 24
#define LEDS_HEIGHT 48
#define LEDS_CELLS 1
#define ICRADIO3_HANDLE 5
#define ICRADIO3_WIDTH 64
#define ICRADIO3_HEIGHT 576
#define ICRADIO3_CELLS 1
#define MP_HANDLE 6
#define MP_WIDTH 84
#define MP_HEIGHT 840
#define MP_CELLS 1
#define CUCU1_HANDLE 7
#define CUCU1_WIDTH 100
#define CUCU1_HEIGHT 100
#define CUCU1_CELLS 1
#define CUCU2_HANDLE 8
#define CUCU2_WIDTH 210
#define CUCU2_HEIGHT 350
#define CUCU2_CELLS 1
#define CUCU3_HANDLE 9
#define CUCU3_WIDTH 250
#define CUCU3_HEIGHT 250
#define CUCU3_CELLS 1
#define WATER_HANDLE 10
#define WATER_WIDTH 128
#define WATER_HEIGHT 768
#define WATER_CELLS 1
#define PLAYER1_HANDLE 11
#define PLAYER1_WIDTH 150
#define PLAYER1_HEIGHT 300
#define PLAYER1_CELLS 1
#define PLAYER2_HANDLE 12
#define PLAYER2_WIDTH 100
#define PLAYER2_HEIGHT 200
#define PLAYER2_CELLS 1
#define DIGITAL_HANDLE 13
#define DIGITAL_WIDTH 45
#define DIGITAL_HEIGHT 50
#define DIGITAL_CELLS 96
#define ASSETS_END 752508UL
static const shape_t MULTI_SHAPE = {0, 64, 192, 0};
static const shape_t TIEMPO_SHAPE = {1, 16, 16, 0};
static const shape_t ICRADIO_SHAPE = {2, 64, 512, 0};
static const shape_t ICRADIO2_SHAPE = {3, 64, 512, 0};
static const shape_t LEDS_SHAPE = {4, 24, 48, 0};
static const shape_t ICRADIO3_SHAPE = {5, 64, 576, 0};
static const shape_t MP_SHAPE = {6, 84, 840, 0};
static const shape_t CUCU1_SHAPE = {7, 100, 100, 0};
static const shape_t CUCU2_SHAPE = {8, 210, 350, 0};
static const shape_t CUCU3_SHAPE = {9, 250, 250, 0};
static const shape_t WATER_SHAPE = {10, 128, 768, 0};
static const shape_t PLAYER1_SHAPE = {11, 150, 300, 0};
static const shape_t PLAYER2_SHAPE = {12, 100, 200, 0};
static const shape_t DIGITAL_SHAPE = {13, 45, 50, 0};

pues bien el #define DIGITAL_HANDLE 13 es donde no hay que definir nada porque es una fuente, solo son las imágenes las cuales se tienen que definir por ejemplo en el setup;
Code: [Select]

 LOAD_ASSETS();

  GD.BitmapHandle(MULTI_HANDLE);           // ICONOS REPRODUCTOR MP3, RADIO Y LED's
  GD.BitmapLayout(ARGB2, 64, 64);

  GD.BitmapHandle(TIEMPO_HANDLE);    
  GD.BitmapLayout(ARGB2, 128, 128);        // ICONOS DEL TIEMPO
//   GD.BitmapLayout(ARGB4, 2 * 85, 85);     CUANDO ES ARGB4

  GD.BitmapHandle(ICRADIO_HANDLE);           // ICONOS LOGOS RADIO
  GD.BitmapLayout(ARGB2, 64, 64);

  GD.BitmapHandle(ICRADIO2_HANDLE);           // ICONOS LOGOS RADIO
  GD.BitmapLayout(ARGB2, 64, 64);
  //    GD.BitmapSize(NEAREST, BORDER, BORDER, 120, 70);

  GD.BitmapHandle(LEDS_HANDLE);                // ICONOS DEL MENU PRINCIPAL
  GD.BitmapLayout(ARGB2, 24, 24);

  GD.BitmapHandle(ICRADIO3_HANDLE);         // ICONOS DEL MENU PRINCIPAL
  GD.BitmapLayout(ARGB2, 64, 64);

  GD.BitmapHandle(MP_HANDLE);                   // ICONOS DEL MENU PRINCIPAL
  GD.BitmapLayout(ARGB2, 84, 84);

  GD.BitmapHandle(CUCU1_HANDLE);
  GD.BitmapLayout(ARGB4, 2 * 100, 100);

  GD.BitmapHandle(CUCU2_HANDLE);
  GD.BitmapLayout(ARGB4, 2 * 210, 350);

  GD.BitmapHandle(CUCU3_HANDLE);
  GD.BitmapLayout(ARGB4, 2 * 250, 250);

  GD.BitmapHandle(WATER_HANDLE);
  GD.BitmapLayout(ARGB2, 128, 128);

  GD.BitmapHandle(PLAYER1_HANDLE);
  GD.BitmapLayout(ARGB2, 150, 150);

  GD.BitmapHandle(PLAYER2_HANDLE);
  GD.BitmapLayout(ARGB2, 100, 100);

y basta con"llamar a la fuente" realizando un: GD.cmd_text(80, 359, DIGITAL_HANDLE, 0, "Tomas");, bueno eso ya lo sabes,

Te adjunto las fuentes de las imágenes, fuente digital.ttf (por cierto la elegí mal porque es Capital Letters) y los ficheros convertidos. A todo esto fijate en la captura, el valor de la RAM usada, unos 750KBytes y eso que tengo todas las imagenes de mi proyecto y quedan todavía unos 256K  :)


Edito.
====

No viene al caso del tema, pero creo es muy importante escribir.

Con una RaspberryPI (he usado la versión 3) es totalmente posible realizar la modificación de los asset para las pantallas FT81XX, osea que sobrepase el limite de los 256KB alcanzando 1MB de RAM para nuestros proyectos. Incluso se puede con una RB2.

He usado la distribución llamada OSMC, aun siendo un MediaCenter, desde la consola (Terminal) se puede entrar al sistema como no a nivel de comandos. Quizás sea para usuarios avanzados en Linux, sin embargo existiría la posibilidad de usar Ubuntu para RB y tener una solución gráfica este es el enlace de Mate para RB3 (https://ubuntu-mate.org/raspberry-pi/)

Aquí una guía de instalación (http://descubriendolaraspberrypi.blogspot.com.es/2016/04/como-instalar-ubuntu-1604-en-raspberry.html)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: juanjqh on May 05, 2017, 11:04 pm
hola muy interesante este tema, los felicito por el trabajo. Me he leido todo el tema y me surge una duda...
 Se podria acaso utilizar esta pantalla?? http://www.ftdichip.com/Products/Modules/CleO50.htm realizando algun cambio en la configuracion? muchas gracias
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 06, 2017, 07:00 am
hola muy interesante este tema, los felicito por el trabajo. Me he leido todo el tema y me surge una duda...
 Se podria acaso utilizar esta pantalla?? http://www.ftdichip.com/Products/Modules/CleO50.htm realizando algun cambio en la configuracion? muchas gracias
Para poder usar GD3 en esa pantalla hay que considerar:

- Se trata de una pantalla ligada a un MCU (FT90x) que funciona como procesador gráfico.
- Funciona con lógica de 5V, por lo que para evitar el uso de conversores de voltaje es preferible usar un arduino UNO o MEGA o un teensy 3.2
- Los pines de control de la pantalla no están disponibles a simple vista
- La interface serán cables

Toca la parte de experimentación: usar cables de prototipado cortos y tratar de conectar CS, INT, MOSI, MISO, SCK, GND y VCC (5V)

El resultado queda mas allá de los pronósticos.

A destacar...

FTDI trató de simplificar su libreria al estilo de la librería para gameduino 2, como resultado creó esas pantallas y les agregó la potencia de un procesador gráfico.

Estamos hablando de una pantalla que ya goza de la ventajas de la serie FT81X, con el soporte de un procesador extra para el manejo de primitivas, por lo que al usar directamente GD3, estarías dejando de lado esa "ayuda extra".

Veamos un ejemplo:

Cleo50:
Code: [Select]
#include <SPI.h>
#include <CleO.h>
void setup(){
  CleO.begin();
  CleO.Start();
  CleO.String(400, 240, "Hello world");
  CleO.Show();}

void loop() {}


GD3:
Code: [Select]
#include <SPI.h>
#include <GD3.h>
void setup(){
  GD.begin();
  GD.Clear();
  GD.cmd_text(GD.w / 2, GD.h / 2, 31, OPT_CENTER, "Hello world");
  GD.swap();}

void loop(){}


Desde mi punto de vista, esa pantalla no necesita de GD3.

La biblioteca de ejemplos en linea es excelente y tiene todo lo necesario para sacarle provecho a la pantalla
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 06, 2017, 07:37 am
Un segundo ejemplo tomado del tutorial para Cleo50, en específico este:

Tutorials > Tutorial 02 - Drawing Strings >d. Animated Strings

Este es el código empleado en Cleo50:

Code: [Select]
#include <SPI.h>
#include <CleO.h>

int minX = 75, minY = 15;
int maxX = 800 - minX, maxY = 480 - minY;
int startX = maxX / 2, startY = maxY / 2;
int deltaX = 2, deltaY = 2;
 
void setup() {
 CleO.begin();
}
void loop()
{
 CleO.Start();
 CleO.StringExt(FONT_MEDIUM, startX, startY, LIGHT_GREEN, MM, 0, 0, "Hello world");
 startX = startX + deltaX;   startY = startY + deltaY;
 
 if (startX >= maxX)
   deltaX = -deltaX;
 
 if (startX <= minX)
   deltaX = abs(deltaX);
 
 if (startY >= maxY)
   deltaY = -deltaY;
 
 if (startY <= minY)
   deltaY = abs(deltaY);
 
 CleO.Show();
}


Esta es la versión para GD3:

Code: [Select]
#include <SPI.h>
#include <GD3.h>

int minX = 75, minY = 15;
int maxX = 800 - minX, maxY = 480 - minY;
int startX = maxX / 2, startY = maxY / 2;
int deltaX = 2, deltaY = 2;

void setup()
{
  GD.begin();
}

void loop()
{
 GD.Clear();
 GD.cmd_text(startX, startY, 31, OPT_CENTER, "Hello world");
 startX = startX + deltaX;   startY = startY + deltaY;
 
 if (startX >= maxX)
   deltaX = -deltaX;
 
 if (startX <= minX)
   deltaX = abs(deltaX);
 
 if (startY >= maxY)
   deltaY = -deltaY;
 
 if (startY <= minY)
   deltaY = abs(deltaY);

 GD.swap();
}


Las analogías están por todas partes.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on May 06, 2017, 01:01 pm
Se podria acaso utilizar esta pantalla?? http://www.ftdichip.com/Products/Modules/CleO50.htm realizando algun cambio en la configuracion?
La analogía de la librería que estamos usando es muy parecida a la CleO.
Hay un problema muy serio; el precio.

La pagina que distribuye estos módulos es Bridgetek (http://brtchip.com/) y la verdad a mi me hecha atrás, estoy de acuerdo que estamos hablado de una FT90X, y ademas como bien dice TFTLCDCyg esta placa esta casada al MCU, por lo tanto otro gasto. Realizando por encima un pedido ficticio sale por unos 190€ el asunto ...

Mi consejo

Si empezamos desde 0, lo primero es asegurarse que vamos hacer con el proyecto, yo empezaría por;

1.- Un Arduino MEGA.
2.- Una pantalla FT811 de HotMCU.
3.- Una Teensy 3.5 (opcional).
(Esto rondaría los 100€)

De las tres indicadas tengo todas.  Y lo mejor es que se puede disponer de los pines del MEGA o Teensy al servicio propio, caso que CleO no. Bueno un matiz, modificando la propia placa, entonces si. Y esto supone un riesgo.

Por otro lado el desarrollo de la librería esta en manos de terceros, y hay que disponer de estos módulos para realizar las modificaciones oportunas. Quizás este punto anterior es lo mas importante, las librerías ... no hay que precipitarse o lanzarse por muy bonito que se exponga una determinada placa.

Y si deseamos una opción mas avanzada;

4.- Una FT813 a 7 pulgadas de Riverdi.
5.- Una Teensy 3.6.

Es otra buena elección e inclusive mas económica que CleO con librerías obviamente GD3_SDIO. Posiblemente en un futuro si los precios bajan sea propietario de una CleO, a día de hoy no.

P.S. Había visto estos ejemplos de CleO, sin embargo no les presté mucha atención, y como siempre es el tiempo que servidor y TFTLCDCyg le dedicamos como hobby, pues es interesante sacar partido. Estas pueden ser exportadas a la libraría GDX, en cuanto le dedique un tiempo las subo a mi GitHUB (https://github.com/lightcalamar), como hice con el ejemplo de gauge de la librería oficial FTDI.





Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: juanjqh on May 06, 2017, 05:47 pm
Muy buena la explicación de TTFLCDCyg, mejor imposible. Si, ciertamente no se aprovecha el recurso de la Cleo a su totalidad al usar la GD3, buen punto!

En cuanto al precio Lightcalamar si! Es un exceso la verdad no me fijé q costara tanto. Ahora mismo no es una alternativa para mí y creo q para muchos Jajajajaja.
 El proyecto q tengo en mente es un DASH automotriz al estilo de las marcas MoTec, AIM, etc. Creo q TTFLCDCyg sabe a lo que me refiero jajajjaa.
 En conclusión al hardware a utilizar como recomendación sería:

1- ft813 + teensy 3.6

2- ft811 Hotmcu + Mega o teensy

 Voy a sacar cuentas para ver cuál es la mejor opción costo/ benéficos.

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 06, 2017, 07:40 pm
Hay varios ejemplos con esbozos del proyecto que tienes en mente en la red diseñados con "legos" que parten de la librería FTDI... si es posible crearlos partiendo de una librería compleja, debe ser factible crearlos con GDX (y por lo visto también con Cleo).

Hemos puntualizado los costos. En el proceso (creo que todos los que hemos dirigido hacia un proyecto "TFT con arduino"), ligthcalamar y un servidor, hemos pasado por muchas pantallas, pensamos que la siguiente variante será mejor que la anterior... con el paso del tiempo das una mirada al trayecto y te encuentras con que hay varios TFT que ya no usarás, porque te diste cuenta de que las limitantes son mayores que las ventajas y porque no cumplen con las expectativas de ese proyecto, que ya tiene requisitos bien definidos para el TFT: un movimiento mas fluido, simplicidad en la programación, una determinada velocidad o bien que el manejo de táctiles no sea un dolor de cabeza. Este proceso lleva algunos años.

Hay un punto, en el que si sumas lo que has invertido... verás que corresponde al costo de alguna de las variantes que hemos tratado en este tema.

Quizás desde un punto de vista un tanto "paternalista", tratamos de ahorrarle esa cuesta a quienes amablemente se toman un tiempo a leernos. Ojalá que el grano de arena que estamos aportando, les ayude en alguna forma en sus proyectos.
Title: GD23L: Librería para pantallas FT80X y para FT81X
Post by: TFTLCDCyg on May 07, 2017, 11:46 pm
Desde hace algunos meses GD3 estaba dejando olvidadas a placas como el arduino UNO o el arduino NANO.

El tema volvió a la mesa gracias a algunas pruebas que está haciendo lightcalamar. El hecho de que la librería use casi toda la memoria, solo por la inclusión de un par de imágenes en la calibración o en el pantallazo de error, no me parece justo.

Al principio optamos por tener GD2 y GD3 por separado. Esa situación fue resultado de una falta de conocimiento personal de la modificación de la librería. Con el paso del tiempo y con muchas pruebas e infinidad de errores, hoy por fin tenemos una librería que puede usarse para FT81X como para FT80X, con tan solo manipular algunos "#defines" en el archivo GD23L.h

Librería GD23L

La versión es lo mas ligera posible. Funciona tanto para placas teensy 3.X como arduino UNO, Due, MEGA o NANO. Las pruebas se realizaron en el IDE 1.80.

Link: GD23L (http://www.mediafire.com/file/no27hnckvayg69l/GD23L.rar)

Code: [Select]
#define CS               10 //10 Riverdi-shield   8  gameduino2
#define SD_PIN            5 // 5 Riverdi-shield   9  gameduino2

#define TFT_FT81X_ENABLE  1   //            FT81x
#define ORIENTACION       0   //0, 1, 2, 3, FT81X

#define PROTO             0   //0 FT80x alternatives, 1 gameduino2
#define ROTACION          0   //0,  1       FT80x



Cuando establecemos:
Code: [Select]
TFT_FT81X_ENABLE   1

Los parámetros de frecuencia y de configuración de las pantallas FT81X, se seleccionan de forma automática

Esta linea:
Code: [Select]
#define ORIENTACION       0   //0, 1, 2, 3, FT81X
Permite establecer la orientación que deseamos en la pantalla

PROTO y ROTACION solo funcionan cuando:
Code: [Select]
TFT_FT81X_ENABLE   0
Esto permite establecer que la pantalla que está conectada al MCU, es una pantalla de la familia FT80X. Nuevamente los parámetros de frecuencia, orientación y manejo de colores (instrucción PROTO) se establecen de forma automática, sin interaccionar con los parámetros de la familia FT81X.

Hay pocos ejemplos, no obstante se pueden usar los que hemos tratado a lo largo del post para GD2 o GD3; siempre y cuando no superen el espacio de memoria de programación. En una subsecuente revisión trataré de incluir algunos más e insertaré la función para imprimir números decimales.

Ésta versión inicial solo cuenta con los ajustes para FT813, trataré de incluir los correspondientes a FT810, FT811 y FT812.

Resta obtener la versión para SDIO (Teensy 3.5/3.6). No prometo una versión con imágenes en la calibración o en el pantallazo de error; pero, intentaré ver que tanto se incrementa el uso de memoria de programación.

PD: por cierto faltan los parámetros de configuración para las pantallas de HotMCU.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: juanjqh on May 08, 2017, 12:35 am
Pues si! Tienes mucha razón y claro q ese grano de arena aporta mucho, en lo personal me Ayuda un montón. Aunq mi proyecto no sería tan complejo, me gusta la idea de poder trabajar con la librerías de GDx por su mayor capacidad de recursos.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on May 08, 2017, 12:14 pm
Ok.

En el transcurso de la semana actualizaré el repositorio.
Quedando mas o menos de esta forma;

 - GD2_HOTMCU (Arduino MEGA)
 - GD3_HOTMCU (Arduino MEGA)
 - GD23L_HOTMCU (Arduino NANO y UNO

De esta forma prefiero qeu convivan las 3 librerías para las pantallas HOTMCU.

@juanjqh, si te inclinas hacia las pantallas de HOTMCU y quieres usar Teensy, te aconsejo la versión 3.5, porque la versión 3,6 no es tolerante a pins de 5v. Si vas a usar Arduino UNO o mega no hay problema.
Title: BOMBAZO al canto para pantallas FT81X
Post by: lightcalamar on May 10, 2017, 12:07 am
El enunciado.

BOMBAZO al canto para pantallas FT81X

Este mensaje trata de obtener múltiples ASSETS con lo cual podemos superar la barrera del Mega de RAM de las pantallas FT81X (y posiblemente en creces también las pobre FT80X). Hoy he realizado un simple test y funciona correctamente.
Que es lo que funciona?

Por ejemplo podemos tener 4 MEGAS de RAM (o mas... indefinido por la flash de nuestra placa ARV o ARM) para estas FT81X ... pero si solo admiten 1 MEGA de RAM ?... si pero hay una técnica que lo hace viable. Voy a resumir y escribir lo mas preciso posible.

Hace meses atrás concretamente antes de Navidad del año 2016 leí este mensaje en Foro de James (http://gameduino2.proboards.com/thread/265/assets-loaded-load) de como se podría leer en la microSD múltiples ASSETS convertidos y me puse manos en la obra y como es obvio, ni me llegó a compilar por errores, y estos eran debidos, hoy me dí cuenta por la falta de no presentar correctamente las definiciones de las imágenes convertidas a través de la herramienta gd2asset para windows. Este es uno de los errores que cometí. Bueno yo no, la tools no puede mas en el sistema de las ventanas.

Mensajes míos atrás, he escrito que existe otra herramienta (Gd3asset) en mi repositorio del cual está modificado por mi y listo para compilar en Linux(documentación adjuntada en el mismo) el cual es totalmente operacional sea para FT81x o FT80x da igual, las limitaciones la pondrá el chip de su sistema.

Vamos al caso y porque se puede usar superiormente en las FT81x mas alla del mega de RAM.

Supongamos que nos hemos leído mi proyecto MDC v1.0 (https://forum.arduino.cc/index.php?topic=448606.0) y aparte que fué escrito en FT800(480x272 pixels)  y hace unas semanas lo estoy exportando a FT810(800x480 pixels) la realidad he encontrado, aun subiendo el tamaño de los iconos del proyecto y siempre observando el "limite" del MEGA que da la RAM de FT810, he realizado maravillas ... y hoy leí sin querer el mensaje de James;

Quote
Right, if you manually edit the LOAD_ASSETS() macro in each file - e.g. to LOAD_ASSETS_1(), LOAD_ASSETS_2() etc. then you can load each set in turn using the appropriate macro.

Each set of assets will load at address 0, overwriting the previously loaded set.

If you're displaying existing assets and you load new assets, then the overwrite will be visible. This may not be what you want, so to prevent the glitching you can show a loading message:

GD.Clear()
GD.cmd_text(240, 136, 31, OPT_CENTER, "Loading...");
GD.swap();
LOAD_ASSETS_1();
Esto, hoy me dio una idea, porque no usar esta técnica? En la cita se dice que al cargar un assets nuevo se sobrescribe el anterior cargado ... esto quiere decir lo que es una memoria RAM, es volátil. Revisé la posibilidad de unas funciones para borrar la RAM Gráfica de las FT8XX sin resultado en la documentación de FTDI (la del fabricante, vamos). Después la lógica, una RAM solo se escribe y si deseas sobrescribir en un "tiempo" determinado es realizar una nueva escritura desde el inicio ...  Si señor así reza la técnica.

Escribo un simple ejemplo;

Code: [Select]

void radio() {
  LOAD_ASSETS_1();
    GD.BitmapHandle(RADIOA_HANDLE);          
    GD.BitmapLayout(ARGB4, 2 * 450, 450);
}

....

....

....

void gps() {
  LOAD_ASSETS_2();
    GD.BitmapHandle(GPS_HANDLE);          
    GD.BitmapLayout(ARGB4, 2 * 150, 150);
}


y así mas. Se define en cada función, los iconos, imágenes convertidas, pero esto si importante, en cada función no puede superar el MEGA de RAM, pero ya si nos vamos a otra función la segunda "machaca" a la primera y así infinito ... Aquí una DEMO de todo lo escrito (https://www.youtube.com/watch?v=iSWcwizWpNY)

En pocas palabras, en mi proyecto, tengo que "resubir" los logotipos del Radio de FM de mi proyecto (actualmente 64x64 a 150x150) podré inclusive en el apartado del radio poner iconos de mayor tamaño, en mi GPS poner iconos por ejemplo de unas antenas en "movimiento" ... etc ... vuelta a empezar.


Adjunto mi código actual de mi proyecto.

Exportando las imágenes png (transparentes) en formato ARGB4, son de una calidad infinita y muy buenas, esto sí en mi T35 (Teensy 3.5) ahora sí que voy a quizás a exportar el proyecto definitivamente, simplemente por velocidad, que ya la experimenté en su día con el ejemplo "Hello Wold" ...
Title: LOAD_ASSETS_X()
Post by: lightcalamar on May 11, 2017, 10:17 pm
Buenas.
He realizado mas pruebas y todo es correcto.

He podido realizar ASSETS inclusive con fuentes personalizadas en cada "pantallazo" o función, una autentica maravilla el camino que está tomando estas técnicas hacía pantallas FT8XX.

Las transiciones son muy aceptables, llegado el caso que estoy usando Arduino modelo MEGA.

En mi trabajo he reparado amplificadores de alta gama de marcas como; Panasonic, Denon, Harman Kardon etc y lo bueno son los VFD que usan como display por puntos, entonces estoy buscando estas fuentes para poder adaptarlas a mi necesidad de mi MDC (Multi Data Center), por cierto ya va en fase de la v2.0.

Concretamente el superar que la pantalla en mi mensaje anterior tengamos múltiples ASSET_LOADx, es sin lugar a dudas lo mejor que le han podido pasar a estas, y como escribí hasta las pobres FT800 ...

Pondré en breve algunas capturas.

He aquí un tipo de fuente VFD (http://www.fontspace.com/grafito-design/lcd-phone)


Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 11, 2017, 10:58 pm
Aportazo mi estimado, eso significa que cada pantalla individualmente, puede usar toda la memoria gráfica disponible. Gracias.

Si tienes salidas a 10 pantallas diferentes, con la técnica que has usado potencialmente dispones 10 megas de memoria gráfica!!!

Sin olvidar que tienes a la mano la posibilidad de arreglos en forma de celdas mas grandes. En verdad que ese gd3asset tiene mucho que dar. Me viene a la mente el trabajo que tratamos de sacar adelante con los iconos de las emisoras de radio que tienes en el proyecto en un solo asset, al parecer has superado el limite de 16 que tantos dolores de cabeza dio.

PD: aun no he encontrado mi RPi-3, me da que tendré que ahorrar para conseguir otro y meterle mano a Linux para sacarle provecho a GD3asset.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on May 12, 2017, 12:09 am
Es totalmente impresionante esta nueva forma de exprimir la RAM de las FT8xx. Y decirte que globalmente la flash del MCU no se "infla" es decir ni espacio, ni variables, todo queda en la microSD. digamos que es otra forma de "carga" de imágenes desde la microSD, sin usar el cmd_loadimage()

He usado no obstante la técnica de los sprites donde un fichero, por ejemplo mis logotipos del Radio, son de 120x120 pixels y van 10 osea 120x1200 pixels por 3 y sin problemas. Convertidos en ARGB4, una máxima calidad y eso que estuve meses atrás de como convertir todo el sistema en un solo mega de RAM, ZAS !!! Adiós !!!

Solo puedo decirte amigo mio TFTLCDCyg, cuando vi que funcionaba, hasta unas lagrimas salieron de mis ojos y posiblemente ha sido la alegría mas grande que estas "caprichosas y cabronas" de pantallas me han dado.

Hace dos semanas recibí mis flamantes 2 FT810 y 1 FT811 de HotMCU, estas van a tener una buena vida y por que no decir usar la misma técnica en FT80x? con 256K de RAM se hacen muchas cosas ... tu bien lo sabes ...  :)

Otra cosa que he investigado una vez incluido el fichero en el inicio de la hoja por ejemplo;
Code: [Select]

#include "logos.h"


En este mismo se puede incluir todos los .h que usaremos de "todas" las pantallas. Ejemplo;
Code: [Select]

#define LOAD_ASSETS_3()  GD.safeload("fontad7.gd2");
#define FONTAD7_HANDLE 0
#define FONTAD7_WIDTH 22
#define FONTAD7_HEIGHT 32
#define FONTAD7_CELLS 96
// #define ASSETS_END 33940UL
static const shape_t FONTAD7_SHAPE = {0, 22, 32, 0};


#define LOAD_ASSETS_6()  GD.safeload("radiofm.gd2");
#define RADIOFM_HANDLE 0
#define RADIOFM_WIDTH 100
#define RADIOFM_HEIGHT 200
#define RADIOFM_CELLS 1
// #define ASSETS_END 40000UL
static const shape_t RADIOFM_SHAPE = {0, 100, 200, 0};

#define LOAD_ASSETS_1()  GD.safeload("master.gd2");
#define MASTER_HANDLE 0
#define MASTER_WIDTH 128
#define MASTER_HEIGHT 1280
#define MASTER_CELLS 1
// #define ASSETS_END 327680UL
static const shape_t MASTER_SHAPE = {0, 128, 1280, 0};

#define LOAD_ASSETS_2()  GD.safeload("radioa.gd2");
#define RADIOA_HANDLE 0
#define RADIOA_WIDTH 120
#define RADIOA_HEIGHT 960
#define RADIOA_CELLS 1
#define RADIOB_HANDLE 1
#define RADIOB_WIDTH 120
#define RADIOB_HEIGHT 960
#define RADIOB_CELLS 1
#define RADIOC_HANDLE 2
#define RADIOC_WIDTH 120
#define RADIOC_HEIGHT 960
#define RADIOC_CELLS 1
#define LEDS_HANDLE 3
#define LEDS_WIDTH 32
#define LEDS_HEIGHT 64
#define LEDS_CELLS 1
#define SPEAKER_HANDLE 4
#define SPEAKER_WIDTH 64
#define SPEAKER_HEIGHT 192
#define SPEAKER_CELLS 1
// #define ASSETS_END 707584UL
static const shape_t RADIOA_SHAPE = {0, 120, 960, 0};
static const shape_t RADIOB_SHAPE = {1, 120, 960, 0};
static const shape_t RADIOC_SHAPE = {2, 120, 960, 0};
static const shape_t LEDS_SHAPE = {3, 32, 64, 0};
static const shape_t SPEAKER_SHAPE = {4, 64, 192, 0};


y hay que tener cuidado en los desmarcados;
Code: [Select]

// #define ASSETS_END 33940UL

o eliminar o desmarcar, porque lo que hace la instrucción es definir donde acaba de escribir en RAM. Al desmarcar o borrar la linea significa que no hay fin de escritura. Esto es muy importante.
Title: Mejoras LOAD_ASSETS_x Multiples
Post by: lightcalamar on May 15, 2017, 02:11 pm
Despues de experimentar con cada "pantalla" para imprimir las imágenes de los múltiples assets, he descubierto un bug.

Si definimos el comando;
Code: [Select]

LOAD_ASSETS_x();

fuera de un "loop", sí la memoria "no se ha limpiado del todo" obtendremos rayas y no concuerda la imagen a representar con la elegida en el comando.



Entonces para que todo vaya correcto, tenemos que posicionar muy bien la forma. He aquí un ejemplo:
Code: [Select]

void relojes() {

   
      delay(1000);
      GD.BitmapHandle(CUCUA_HANDLE);           
      GD.BitmapLayout(ARGB4, 2 * 100, 100);

      GD.BitmapHandle(CUCUB_HANDLE);           
      GD.BitmapLayout(ARGB4, 2 * 210, 350);

      GD.BitmapHandle(CUCUC_HANDLE);           
      GD.BitmapLayout(ARGB4, 2 * 250, 250);               

      do {
     
      // ********* MUY IMPORTANTE **************************
      LOAD_ASSETS_4();       //  <----  AQUI DE CARGA LOS ASSETS
      // **************************************************     
      DateTime now = rtc.now();
      GD.get_inputs();
      GD.ClearColorRGB(BLUEDARK);
      GD.Clear(1, 1, 1);
     
      GD.ColorRGB(WHITE);

      GD.Begin(BITMAPS);   
      GD.SaveContext();
      GD.VertexTranslateX(16*150);
      GD.Vertex2ii(400, 95, 1, 0);
      GD.RestoreContext();

      GD.SaveContext();
      GD.VertexTranslateX(16*150);
      GD.Vertex2ii(380, 185, 2, 0);
      GD.RestoreContext();

      GD.SaveContext();
      GD.VertexTranslateX(16*150);
      GD.Vertex2ii(350, 75, 0, 0);
      GD.RestoreContext();

... ... ...

... ... ...

      GD.swap();
     }
   while(1);
 }


Donde se incluye las imágenes;

Code: [Select]

#define LOAD_ASSETS_4()  GD.safeload("relojes.gd2");
#define CUCUA_HANDLE 0
#define CUCUA_WIDTH 100
#define CUCUA_HEIGHT 100
#define CUCUA_CELLS 1
#define CUCUB_HANDLE 1
#define CUCUB_WIDTH 210
#define CUCUB_HEIGHT 350
#define CUCUB_CELLS 1
#define CUCUC_HANDLE 2
#define CUCUC_WIDTH 250
#define CUCUC_HEIGHT 250
#define CUCUC_CELLS 1
// #define ASSETS_END 292000UL
static const shape_t CUCUA_SHAPE = {0, 100, 100, 0};
static const shape_t CUCUB_SHAPE = {1, 210, 350, 0};
static const shape_t CUCUC_SHAPE = {2, 250, 250, 0};

Es decir dentro del "loop" hemos de poner el LOAD_ASSETS_4 si lo ponemos fuera, obtendremos solo rayas
Saludos.!
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 16, 2017, 01:06 am
Esas lineas que ves en la transición de imágenes, ocurren debido a la baja velocidad del MCU, aun en el teensy 3.6@240 Mhz pueden llegar a verse. Se acentúan en FT80X, debido a la velocidad de procesamiento de imágenes que tiene ese chip, aunque el FT81X es 500 a 1000 veces mas rápido en la carga de JPG (http://www.ftdichip.com/Products/ICs/FT81X.html), debemos considerar que en los assets estamos adicionando el manejo de los slots de memoria para imagenes, que no cuentan con la misma velocidad de procesamiento.

Una técnica que permite eliminar esas distorsiones visuales, es llamando una pantalla intermedia de procesamiento, como en este ejemplo:

Carga de grupos de assets (https://www.youtube.com/watch?v=45auLwBeFCs)


Merece la pena que un día nos compartas un pequeño manual con el manejo de assets en FT81X. Todo lo que has podido experimentar con ellos, vale un libro XD. Gracias.

Debido a la falta de tiempo por varias circunstancias, creo que se me está olvidando como usar los assets!!!...

PD: ya que tenga la R-Pi3 en las manos le dedicaré un tiempo a liarme con la consola de linux para luego adentrarme en esa gd3asset que has creado, tengo algunos pequeños juegos de video en mente y me vendrá muy bien aprender a crear archivos de sprites: el siguiente nivel con el tema de los assets y solo se consiguen crear en Linux. Por supuesto que subiré los pasos y los códigos.

Aun no he localizado el código del ejemplo que me pediste, no recuerdo como lo llamé en su momento XD, pero ten por seguro que lo encontraré.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on May 17, 2017, 06:16 pm
Esas lineas que ves en la transición de imágenes, ocurren debido a la baja velocidad del MCU, aun en el teensy 3.6@240 Mhz pueden llegar a verse.
Merece la pena que un día nos compartas un pequeño manual con el manejo de assets en FT81X. Todo lo que has podido experimentar con ellos, vale un libro XD. Gracias.
Creo que estriba en la velocidad del MCU, Arduino MEGA da mucho juego pero muy lento. En fin,, por cierto localicé una Teensy 3,2 en china muy barata, unos 12€ y estoy a la espera.

Novedades de hoy 17 de Mayo de 2017

Hoy será un buen día para recordar sin lugar a dudas. Hoy después de 3 días por fin pude compilar la herramienta GD3assets para las pantallas FT81x en Windows. Es decir ya existe tal herramienta pero es una versión privada y si todo es decidir, posiblemente sea publica para todos aquellos que nos leen.

No me gusta adjudicarme nada que no sea mio. Ahora bien si desde las fuentes al autor de las mismas se respeta su "copyright", ademas con su consentimiento y posiblemente al mismo pedirle que lo modificase él creo sería un poco desafortunado. Si las fuentes se dejan "otros" las puedan usar para sus fines, es otra etapa nuevas para usar, si partimos que la shield Gameduino2 esta muerta(no se consique por ningún lado) , pantallas de HotMCU, Riverdi, etc ... porque no pueden usar una herramienta altruista?

Creo que soy el único que la usaba en Linux (así lo hice publico), por la facilidad de compilar un ejecutable, sin embargo sé de los dolores de cabeza que puede producir, entrar en un sistema desconocido, (aunque para mi sencillo) desde las fuentes originales he tenido que combatir con Python en windows y ha sido una batalla ganada.

Bien sabes TFTLCDCyg que ya no uso Windows, sin embargo me gustan los retos, casi dos noches con pesadillas de "errores" y después de empezar desde cero, ya que el ejecutable de GD2Asset esta originalmente escrito para compilar en Linux y no Windows. Toda una aventura ...

Una contribución mas a estas grandes y cabronas ( :)  :)  :)  ) de pantallas.

P.D. No voy a olvidar a Javier, la persona que condujo parte del código a modificar superando las barrera de los 256KBytes, desde estas lineas un saludo si nos lee!
P.D.2 Amigo TFTLCDCyg no desistes con la RB pi3, sin embargo la puedes poner en su cajón.  ;)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 17, 2017, 09:59 pm
El hecho es que GD2 se quedó a la espera de algunas modificaciones y con las desveladas de los tres, hemos llegado hasta este punto. He podido ver en todo este tiempo, que varios entusiastas la han tomado como base, pero no se han aventurado a lo que se ha conseguido acá.

GD3 merece llamarse así, tanto como GD3ASSET debe tener su lugar. En cuanto disponga de un tiempo abriré un post en aquel foro, que por supuesto llevaré el nombre de los tres involucrados en este proyecto que parecía muy ambicioso, y que poco a poco nos ha llevado a este punto.

Lo mas probable es que hayan sido los costos del hardware para ensamblar el gameduino3, sin olvidar alguno que otro hecho de la vida real; que a todos nos afecta en un momento dado.

Debo darles las gracias: ligthcalamar y RndMnkIII, por embarcarse en un hobby algo extraño, lleno de desveladas y que parece que nos ha enganchado a mas de uno.

Un primer ejemplo con GD3ASSET:

30 iconos de 64 x 64, con la famosa imagen aquella como fondo... (http://www.mediafire.com/file/qn9pwda8f06a405/GD3_Iconos_radio.rar)

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on May 18, 2017, 12:24 am
El hecho es que GD2 se quedó a la espera de algunas modificaciones y con las desveladas de los tres, hemos llegado hasta este punto. He podido ver en todo este tiempo, que varios entusiastas la han tomado como base, pero no se han aventurado a lo que se ha conseguido acá.

GD3 merece llamarse así, tanto como GD3ASSET debe tener su lugar. En cuanto disponga de un tiempo abriré un post en aquel foro, que por supuesto llevaré el nombre de los tres involucrados en este proyecto que parecía muy ambicioso, y que poco a poco nos ha llevado a este punto.
Opino igual que tu amigo mio TFTLCDCyg, lo que se ha conseguido aquí no tiene precio, no tiene quizás un premio, sin embargo, y yo soy de aquellas personas, ya me conoces, lo mejor que me pasó en un año y algo fue conoceros a los dos, osea tu y RndMnkIII, algo desaparecido por cierto su nuevo trabajo actual, pero volverá a darnos sorpresas estoy muy seguro.

Nuestro precio a sido, robar días, horas a nuestras familias, depositar en nuestra cuenta y comprar pantallas, artilugios etc ... sin ningún tipo de subvención y que contar mas !!!

No me da envidia lo que mucho sabe como es nuestro amigo James Bowman (http://gameduino2.proboards.com/) al contrario gracias a él se sabe infinidad de "acertijos" ... y como no las gracias a él obviamente.

Gracias a él, por dejar las fuentes he podido modificar a mi antojo, y a ti te funcioné a día de hoy, y ten la seguridad que ha sido mas por manía mía o llamarle antojo propio, pero sé que leyendo el foro de James, muchos con  son los que tienen el problema de convertir los Assets con Python.

Después de dos días de algunas "pesadillas" y (esto que conmigo lo tenía solucionado en Linux) y  sea factible en Windows a día de hoy, la verdad que doy por enterrado éstas, me alegro muy, pero que muy mucho. Y como bien dices, si tu ya eres feliz, hagamos a los demás lo sean también.

A todo esto, quizás en un futuro, (dependiendo de nuestro hobby, claro está) se podría modificar el apartado por ejemplo de generar los ficheros dentro de los script que localicé y tienen una resolución de FT800 (480x272) esto se puede modificar comprimiendo con zlib a Python en 800x480 y dejar mas espacio para RAM. De esto sé un poco como desarrollarlo, y mas cosas. El tema de modificar el fichero .gd2 está "casado" con la librería y esto entonces es otro trabajo mas, Se puede hacer, una salida .gd3 como ficheros, pero es un poco laborioso. Bastantes cosas se pueden modificar ya sabiendo que cada "pantalla" es un MegaByte!!!

Saludos.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 18, 2017, 05:01 am
Bueno pues tratando de retomar las notas de escuela, directo me fui con el tema de las fuentes y una primer excepción:



Creo que es pedirle demasiado a la herramienta en el entorno de Windows. ¿Crees que es posible solventar esa falla?

PD: no pasa nada si no es factible, no me escaparé de aprender el manejo de la consola de Linux, para poder darte una mano; ya viene en camino una segunda R-Pi3. Tengo mucha curiosidad.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on May 18, 2017, 10:25 am
Es un problema de las fuentes usadas por Python con el modulo PIL en Windows. En Linux no da este problema.
Este es el código usado.
Code: [Select]

def load_ttf(self, name, ttfname, size, format):
        font = ImageFont.truetype(ttfname, size)
        sizes = [font.getsize(chr(c)) for c in range(32, 128)]
        fw = max([w for (w, _) in sizes])
        fh = max([h for (_, h) in sizes])
        # print fw, fh
        alle = {}

He encontrado esta posible solución modificando el modulo PIL, http://stackoverflow.com/questions/24085996/how-i-can-load-a-font-file-with-pil-imagefont-truetype-without-specifying-the-ab (http://stackoverflow.com/questions/24085996/how-i-can-load-a-font-file-with-pil-imagefont-truetype-without-specifying-the-ab)

y el repositorio: https://github.com/python-pillow/Pillow/pull/682 (https://github.com/python-pillow/Pillow/pull/682)
Le echaré un vistazo a ver que se puede hacer.
Title: Rolling graph
Post by: TFTLCDCyg on May 18, 2017, 11:55 am
Jejeje tenías razón... he estado algo ocupado con GD3ASSET y tratando de arreglar la PC, que en días pasados se fastidió la fuente y se llevó consigo el disco del sistema operativo y otro más de respaldo... estoy tratando de recuperar lo mas posible.

FT81X: MSGEQ7 Rolling Graph

Dejo un ejemplo para dibujar gráficas lineales, el cual he podido rescatar de entre los escombros de la anterior PC...

Traza en forma de linea continua, 7 bases de datos; en el ejemplo almacenan 145 datos cada una.
En este arreglo especifico, el máximo posible es de 185 datos, mas allá de este valor el FT813 colapsa debido a que supera el limite de instrucciones que puede presentar en pantalla.

Al reducir el número de bases de datos, la capacidad de almacenamiento se va incrementando, alcanzando hasta 780 datos en el caso de presentar una base.

Este ejercicio, permite ver la capacidad de procesamiento gráfico que tiene el chip FT81X. Hay algo de complicidad con el MCU, por lo que el orden de velocidad quedaría (mayor a menor) T36-Due-MEGA; el UNO que da fuera por el tema de la memoria.



Software:
IDE 181, teensy loader 1.35 beta 2, librería GD23L

Hardware:
Pantalla: Riverdi FT813 5"
MCU: Teensy 3.6@240 MHz  
Otros: Riverdi breakout 20, Quad MSGEQ7
Fuente de audio: placa de audio de la PC



Link del sketch (http://www.mediafire.com/file/4qazc7b65l11b99/GD3_MSGEQ7_Lineal.rar)

PD: alguna vez alguien me dijo que este tipo de gráficas solo eran viables en STM32...  estas pantallas aun tienen sorpresas bajo la chistera... solo falta que salten conejos!
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on May 20, 2017, 07:48 pm
Wow!! que bien esto me da ideas ...

Ahora soy yo el que está atascado. He usado tu ejemplo del GD3_MSGEQ7_Spectrum_analyzer (https://github.com/lightcalamar/GD3_HOTMCU/tree/master/4.Demos/GD3_MSGEQ7_Spectrum_analyzer) y va bien, pero un problema.

Asi es como me queda una vez modificado;



Para ello he usado los 15 handles de las 15 imagenes y lo que quiero es ponerlas todas en un fichero concretamente lo adjunto ya preparado, sin embargo en la parte del código donde se representa es;
Code: [Select]

 
  GD.Vertex2ii(XbaseD+Xdelta*0, 215, map(left[0],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*2, 215, map(left[1],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*4, 215, map(left[2],0,1024,0,15));   
  GD.Vertex2ii(XbaseD+Xdelta*6, 215, map(left[3],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*8, 215, map(left[4],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*10, 215, map(left[5],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*12, 215, map(left[6],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*14, 215, map(R[0],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*16, 215, map(R[1],0,1024,0,15)); 
 
 
  GD.SaveContext();
   GD.VertexTranslateX(16*260);
   GD.Vertex2ii(440-165, 215, map(R[2],0,1024,0,15));     
   GD.Vertex2ii(440-110, 215, map(R[3],0,1024,0,15));   
   GD.Vertex2ii(440-55, 215, map(R[4],0,1024,0,15));
   GD.Vertex2ii(500-60, 215, map(R[5],0,1024,0,15));   
   GD.Vertex2ii(500, 215, map(R[6],0,1024,0,15));   
  GD.RestoreContext();


en donde pone  GD.Vertex2ii(440-165, 215, map(R[2],0,1024,0,15 en negrilla significa las imágenes, sin embargo yo las tengo por celdas.

Realice la conversión con;
Code: [Select]

gd2asset -f barras2.gd2 -o barras2.h sp0.png,format=ARGB4 sp1.png,format=ARGB4 sp2.png,format=ARGB4 sp3.png,format=ARGB4 sp4.png,format=ARGB4 sp5.png,format=ARGB4 sp6.png,format=ARGB4 sp7.png,format=ARGB4 sp8.png,format=ARGB4 sp9.png,format=ARGB4 sp10.png,format=ARGB4 sp11.png,format=ARGB4 sp12.png,format=ARGB4 sp13.png,format=ARGB4 sp14.png,format=ARGB4
para las 15, de este modo no puedo poner mas assets. He realizado un nuevo fichero donde es un asset solo con las 15 imágenes en un solo fichero que adjunto, su peso en RAM es de 230kb y claro quiero todos esos 750kb que me sobran.

Adjunto el código que estoy usando y las imágenes en una sola.

Crees TFTLCDCyg se podria hacer como digo?
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 21, 2017, 05:54 am
Suena interesante, pero tenemos una frontera en el formato base del dibujo: hay un límite vertical y horizontal en pixeles que no podemos superar con la herramienta gdxasset.exe.

En este mensaje James lo explica (http://gameduino2.proboards.com/thread/127/bitmap-cells-frustration), tal parece que la herramienta para phyton lo puede hacer. No solo dividir de forma vertical, sino que también se puede de forma horizontal.

No debemos dejar de lado aquellas 2048 instrucciones por pantalla del motor EVE/EVE2.

El ejemplo de 2000 sprites de la librería de James, muestra como deben "empaquetarse" las imágenes para el caso de que deseemos presentarlas todas de una vez, pero en esos extremos la velocidad del MCU se torna relevante y las dimensiones de las imágenes también.

Debe existir una forma de "mapear" una imagen de 800x480 (o de 480x272) de tal forma que la carguemos en pantalla una vez, y podamos solo usar fragmentos de la misma. Este aspecto lo he tocado varias veces pero, por falta de tiempo lo he explorado a fondo. No prometo nada, pero puede ser una buena solución gráfica.

Se me ocurre que podamos simplificar todas esas barras en tan solo "6 minibarras": "tres apagadas" y "tres iluminadas", pero no sé si todos los MCU logren soportar la carga de proceso.

Veamos lo que dice el cook-book del FT813 (FT81X_Series_Programmer_Guide) (http://www.ftdichip.com/Support/Documents/ProgramGuides/FT81X_Series_Programmer_Guide.pdf)

Code: [Select]
"...The graphics engine has no frame buffer: it uses dynamic compositing to build up each display line during scan out. Because of this, there is a finite amount of time available to draw each line. This time depends on the scan out parameters (decided by REG_PCLK and REG_HCYCLE) but is never less than 2048 internal clock cycles. FT81X's internal clock runs at 60MHz.
Some performance limits:
 The display list length must be less than 2048 instructions, because the graphics engine fetches display list commands one per clock.
 The usual performance of rending pixels is 16 pixels per clock
 For some bitmap formats, the drawing rate is 8 pixels per clock. These are TEXT8X8, TEXTVGA and PALETTED4444/565.
 For bilinear filtered pixels, the drawing rate is reduced to ¼ pixel per clock..."
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 21, 2017, 08:51 am
La librería gameduino 2 prioriza placas como la UNO.

Basados en este principio, opté por darle un enfoque diferente a las celdas, ¿por qué llevar a límite al FTXX?, es mejor mantenerlo relajado. Sabemos que gd3asset puede con eso y por lo visto bastante más.

No sé como se comporte el siguiente código en placas AVR, pero en el Teensy 3.6 va muy fluido. Espero te ayude con el proyecto, está diseñado para FT81X. La celda se reduce a 6 dots de 32x18 pixeles. El archivo de imagen no es necesario cargarlo en la SD, pesa apenas 2.55 Kb.

GD23L Analizador MSGEQ7 (http://www.mediafire.com/file/eaxra65oyc5wtk6/GD23L_Analizador.rar)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on May 24, 2017, 10:03 am
Ayer por fin, casi he terminado de realizar a toda pantalla FT811 con Arduino MEGA, la representación del Spectrum Audio con 225 led´s ...  (código adaptado del ejemplo de TFTLCDCyg, obviamente) y la verdad toda una elegancia.

Nunca me imagine tanta belleza con este ejemplo a estas pantallas.

Aquí el video (https://www.youtube.com/watch?v=WTwDLci7E4A)

También se muestra una gráfica tipo "osciloscopio" donde el pobre Arduino MEGA, por su baja velocidad no alcanza mas, ahora toca probar en Teensy!

Nota muy importante. Cuando realice mi proyecto RadioFM, use 4 MGSEQ7, en este caso solamente 1, sin embargo con otro MSGEQ7 se pueden usar las 14 bandas de audio para diferentes frecuencias, por defecto en la datasheet del integrado se usa un condensador de 33pF, si el segundo MGSEQ7, doblamos esta capacidad es decir 66pF el espectro de frecuencias varía intermediamente donde tendremos desde los 40Hz a 16KHz con 14 filtros. Lo pondré en practica en otros video.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 25, 2017, 12:20 am
Aplicando algo de trigonometría para dibujar alguno que otro arco...

Velocímetro (http://www.mediafire.com/file/tmmoiyyffylpidq/GD3_Gauge_NG_3.rar)

Video: Gauge para FT813 (https://www.youtube.com/watch?v=Yb60PmJu5S0)

Title: GD23L con función para imprimir números flotantes
Post by: TFTLCDCyg on May 25, 2017, 06:48 am
24 Mayo 2017: Actualización de la librería ligera GD23L (http://www.mediafire.com/file/h65f6c6bwp19caw/GD23L+flotantes.rar)

Cambios:

- Adición de la función GD.prinNfloat
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on May 25, 2017, 08:10 pm
Este es el código de las 14 bandas con 2 chip MGSEQ7

Code: [Select]

  GD.Vertex2ii(XbaseD+Xdelta*0, 215,  map(left[0],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*2, 215,     map(R[0],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*4, 215,  map(left[1],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*6, 215,     map(R[1],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*8, 215,  map(left[2],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*10, 215,    map(R[2],0,1024,0,15));   
  GD.Vertex2ii(XbaseD+Xdelta*12, 215,  map(left[3],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*14, 215,    map(R[3],0,1024,0,15));
  GD.Vertex2ii(XbaseD+Xdelta*16, 215,  map(left[4],0,1024,0,15));

GD.SaveContext();
   GD.VertexTranslateX(16*260);
   GD.Vertex2ii(440-165, 215,        map(R[4],0,1024,0,15));   
   GD.Vertex2ii(440-110, 215, map(left[5],0,1024,0,15));
   GD.Vertex2ii(440-55, 215,         map(R[5],0,1024,0,15));
   GD.Vertex2ii(500-60, 215, map(left[6],0,1024,0,15));
   GD.Vertex2ii(500, 215,            map(R[6],0,1024,0,15));
GD.RestoreContext();


El espectro de frecuencias van desde 40Hz a los 16KHz, centradas en la pantalla.
Title: Interupciones y mas registros
Post by: lightcalamar on May 29, 2017, 10:13 am
Estube estudiando este fin de semana las interupciones del chip FT81xQ que usan las pantallas y no es algo nuevo pero si muy llamativo.

Parte INTERUPCIONES

Entonrtré que existen tres modos;

1.- Stand-By
2.- Sleep
3.- PowerDown

La opción 3, es realizando un POR (Power On Reset) y luego se trataría de averiguar como posicionar la 1 y 2 para realizar un Stand-by y Sleep del mismo.

Desde EVE, hay un bloque tiene un generador de Interupciones, donde las señales que controlan son; PD_N, CS_N y INT_N. esta ultima es de salida hacia el MCU. Concretamente en la pagina 20 del manual del enlace (abajo del todo), existen unos registros que no ví por ningún lado en la libraría GDx, donde se podría realizar alguna que otra función.

Este pin llamado INT_N, es muy interesante.

Ya puestos inclusive lei que se puede variar la resolución del chip a voluntad propia y creo esto si puede ser muy interesante. Por ejemplo pasar de 800x480 a 480x272 ... jugando con los registros HSYNC y VSYNC donde se realizaria un POR sin que el MCU "sufriera" alteraciones alguno.

Parte AUDIO

A todo esto existen dos registros sobre el audio del chip; REG_VOL_PB y REG_VOL_SOUND, estos tienen en la librería su registros pero, no tienen una función determinada, caso del primer registro sería tener el control del mismo de la salida PWM_AUDIO de la pantalla.


Parte BACKLIGHT

Esta ya la conocemos y su uso es muy extendido realizando un REG_PWM_DUTY, desde 0-128 el minimo y maximo de señal para la retroiluminación de los led´s de la pantalla. Sin embargo existe un registro llamado; REG_PWM_HZ, donde el rango de frecuencia que le podamos enviar estan comprendidos entre 250-10000Hz y puede llegar el caso de ser factible para ahorrar dolores de cabeza si algún dispositivo del MCU tiene problemas con la frecuencia emitidas (he tenido reciente un caso con un receptor RF433, donde su frecuencia intermodulaba a la del REG_PWM_DUTY), y consiguientemente realizaba lecturas erroneas.

He aquí otra información mas. Creo llegaré a realizar alguna función extra e imcorporarla a la librería GDx

Este es el enlace de la documentación (http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT81x.pdf)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on May 30, 2017, 07:15 pm
Interesante recopilación.

La que tiene mejores prestaciones es la que permite controlar la intensidad de la retroiluminación; incluso permite "apagar" los leds para ahorrar algo de energía.

Menu-slider

El aspecto mas relevante de los controladores FT8XX, es la simplicidad con la que se vincula la pantalla táctil al uso del TFT con tan solo una librería, ya sea la original de FTDI o GDX.

La posibilidad de desplazar objetos en toda la pantalla, podría conseguirse manipulando la coordenada de origen o aquella que deseemos usar como centro de desplazamiento (X,Y) del objeto.

La aproximación mas simple puede conseguirse manipulando dos instrucciones: GD.cmd_slider y GD.cmd_track. Se usan en combinación. El resultado es un botón deslizante que puede ser monitoreado usando una sola entrada táctil.

Por default, el arreglo produce un slider horizontal; el slider vertical, puede obtenerse manipulando las componentes: espesor y longitud.

PP: lo dejo aquí, resuelvo algunos asuntos del trabajo. Sigue ejemplo de uso
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: lightcalamar on May 31, 2017, 09:51 am
Hace unos meses observé este video (https://www.youtube.com/watch?v=VSr89J3Q8JM) no tiene despecdicio alguno ...

Me llamo muy mucho el menu de iconos con mutiples paginas !
Title: GDX para STM32F103X
Post by: TFTLCDCyg on Jun 21, 2017, 09:06 am
GDX para STM32F103X

A pesar de estar liado con el trabajo y aun con detalles de la mudanza, he podido encontrar un rato para seguir con los experimentos con la plaquita STM32F103ZET6 de HotMCU.

Este es el avance de la modificación de la librería GDX, aun está en proceso de optimización, pero ya compila con ayuda de las herramientas de stm32duino

GDX para STM32F103X (http://www.mediafire.com/file/7m30t0c67rai0nr/GD23STM32.rar)

Las pruebas las estoy haciendo en el IDE 1.8.1. Diseñé algunos ejemplos con los que creo se puede partir para proyectos mas complejos.

La parte táctil tiene algunas fallas aleatorias en la calibración, pero con paciencia y usando el reset de la placa, es posible conseguir calibrar correctamente.

Las lineas SPI (MOSI, MISO, SCK) las soldé directamente al cabezal SPI que tiene la placa. El pin CS corresponde al pin PC5, el pin PC4 lo usaré para el chip select del lector SD.

Para la carga de imagenes estoy usando el Editor EVE versión 1.17, por el momento no he instalado un lector externo SD. Mas adelante me daré a la tarea de instalar uno, para seguir con las pruebas.

La corriente que demanda la pantalla debe suplirse usando el conector usb y el propio ST-Link V2, por lo que necesitamos 2 puertos usb libres.
Title: STM32F103C8T6 Funcionando ...
Post by: lightcalamar on Jun 23, 2017, 09:27 am
Buenas.

Con la librería del mensaje anterior y con 2 tardes de trabajo he podido hacer funcionar mi pantalla de HotMCU con esta plaquita diminuta de ST, concretamente la : STM32F103C8T6



De momento las pruebas realizadas han sido para la FT800.

Buscando en Google no encontraran nada, tan solo unos códigos para la placa Discovery de ST con IDE Keil, y los que llevamos algún tiempo con Arduino nos hecha atras (personalmente yo mismo)

Sinceramente y poniendome serio, me estoy preguntando, donde estará el fin de las modificaciones de esta grandisima libreria? creo no hallar respuesta.

Esta placa de ST, tiene un procesador ARM de 72 MHz de reloj, con 20Kb de RAM y 64Kb de flash para nuestros códigos. A todo esto, he de comentar que posee dos BUS SPI, el primero trabaja con logica de 3,3 voltios, y el SPI_2, tolerante con 5 Voltios, pues bien las pantallas de HotMCU, su salida es tolerante a 5 voltios, es decir que se pueden usar en MCU, tal como Arduino UNO, Nano o MEGA, pero lo que aprendí ayer, estas pantallas trabajan con lógica de 3,3.

Ampliaré esta documentación en el hilo que cree especificamente dedicado a estas.

Volviendo atras, todavía queda por realizar de poner el lector microSD a estas placas.

Sea como sea, por 2$ de esta MCU + 28$ de una pantalla FT800, se tiene todo un arsenal de hardware donde el juego esta asegurado, quien puede dar mas?

Pondré unas capturas y video en breve, donde podran ver en acción esta novedad, y sin olvidarme del enorme trabajo realizado por @TFTLCDCyg
Title: STM32 librería para FT8xx
Post by: lightcalamar on Jun 23, 2017, 11:00 pm
Aquí 2 nuevos videos de esta pequeña placa con pantallas FT8xx.

FT800 (480x272px) (https://www.youtube.com/watch?v=JROL8ReRy3Q)

FT810 (800x480px) (https://www.youtube.com/watch?v=b0LLHY_8Zww)
Title: STM32 librería para FT8xx
Post by: TFTLCDCyg on Jul 04, 2017, 08:41 pm
Han sido días explorando esta opción. Espero subir pronto algún ejemplo y por supuesto, a la espera de que otros experimenten con este tipo de MCU, que también se pueden programar con el IDE de arduino.

Saludos
FT81XMania (http://ft81xmania.com/)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: Donziboy2 on Dec 31, 2017, 06:46 pm
Hello everyone, I wanted to thank you guys for all the work you have done.

I recently started playing with some HotMCU FT811 5" screens and was wondering if there would be any easy way to run multiple screens on a Teensy 3.2 or 3.6.  So far the only thought I have had is to use a second MCU to run the second screen and just send data from the Teensy.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: TFTLCDCyg on Jan 03, 2018, 02:15 am
Two screens FT8XX on the same teensy, is not possible with the  library.

Maybe through serial communication between two teensy´s boards, with one TFT in each MCU

For some time I put two screens: FT801 and oled SD1331 on an arduino due

Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: Donziboy2 on Feb 06, 2018, 12:02 am
Hmm, are resources kept on the Teensy?
If not maybe we could just sneak an external CS control to jump between selecting one screen and the next.
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: Armadafg on Aug 28, 2018, 12:31 pm
HI,

Have you seen the replacements for the FT81x ? THE BT815 / 6

http://www.ftdicommunity.com/index.php?topic=89.new;topicseen#new (http://www.ftdicommunity.com/index.php?topic=89.new;topicseen#new)

http://brtchip.com/bt81x/ (http://brtchip.com/bt81x/)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: surbyte on Aug 28, 2018, 03:35 pm
Este es un foro en Español, y mas allá del interés que tenga una persona de otro idioma debe respetar el idioma del foro.
Asi que no usar inglés para preguntar/responder

Lean las Normas del foro (http://forum.arduino.cc/index.php?topic=310951.0).
How to use this forum (http://forum.arduino.cc/index.php?topic=148850.0)
Title: Re: Librería gameduino 2 modificada para pantallas FT81X
Post by: Armadafg on Aug 28, 2018, 03:44 pm
Buenos dias,

viste los reemplazos para el FT81x? EL BT815 / 6

http://www.ftdicommunity.com/index.php?topic=89.new;topicseen#new (http://www.ftdicommunity.com/index.php?topic=89.new;topicseen#new)

http://brtchip.com/bt81x/ (http://brtchip.com/bt81x/)