Go Down

Topic: Algunos consejos para usar TFT´s (Read 58842 times) previous topic - next topic

TFTLCDCyg

#60
Jul 23, 2016, 04:24 am Last Edit: Jul 23, 2016, 04:29 am by TFTLCDCyg
Geniales esas fotos, me alegra saber que no solo yo veo que la pantalla está viva.

¿Podrías subir el sketch que usaste para cargar imagenes en la pantalla FT81X?, creo que el lector micro SD del shield no hace buen contacto con el arduino.

Por cierto, cuando tengas el shield de Riverdi, debes asegurarte que los pines del shield hagan contacto con los zócalos de tu arduino, trae pines algo disparejos y muy delgados; hay que ajustarlos manualmente.

PD: no entiendo a los de FTDI chip, siguen argumentando que solo sus placas FT900 son capaces de hacer funcionar las pantallas FT81X, y que no tienen planes para sacar una libreria para arduino.

¿Es en serio?, ustedes crearon estas pantallas!!!!
ft81xmania.com/comunidad/

lightcalamar

¿Es en serio?, ustedes crearon estas pantallas!!!!
Opino como tu, son impresentables!!! por este camino no se anda. Tendrían que dar mas facilidad si es que desean comer el marcado pero esto los hace poco creíbles.

Tengo que decir que siempre les tuve manía a los chip driver FTDI, que las pantallas con estos son de lo mejor, sí, pero hay que dar soporte. No te preocupes, ya sabes que estoy aquí para averiguar estudiar y como no realizar lo que haga falta porque estas pantallas me tienen enganchado.  A la tarde edito el mensaje y pongo el código que he usado.
Mi proyecto Radio FM con RDS -  MDC v1.0;
https://forum.arduino.cc/index.php?topic=400484.0
https://forum.arduino.cc/index.php?topic=448606.0
https://github.com/lightcalamar

TFTLCDCyg

#62
Jul 23, 2016, 04:31 pm Last Edit: Jul 23, 2016, 04:42 pm by TFTLCDCyg
Opino como tu, son impresentables!!! por este camino no se anda. Tendrían que dar mas facilidad si es que desean comer el marcado pero esto los hace poco creíbles.

Tengo que decir que siempre les tuve manía a los chip driver FTDI, que las pantallas con estos son de lo mejor, sí, pero hay que dar soporte. No te preocupes, ya sabes que estoy aquí para averiguar estudiar y como no realizar lo que haga falta porque estas pantallas me tienen enganchado.  A la tarde edito el mensaje y pongo el código que he usado.
Gracias estaré al pendiente del sketch para cargar jpg, y ¿cómo no?, cualquier progreso que consigas; para adicionarlos a la librería, que para eso está. Aún le faltan muchos puntos por cubrir.

Les he enviado la FT813_lib a los de FTDI,  a ver si la abren y ven que tiene dentro!!!. Soporte de Riverdi si que se aplicó y estuvo ajustando los registros de inicio para FT81X.

"Abrí el capó de la GD2", inserté los registros de inicio para FT80X que trae la FT813_lib y la  gameduino 2 activa sin problemas la pantalla FT801 que está en la mesa de pruebas.

Inserté los datos de registro para FT81X y simplemente veo una pantalla negra. Creo que el problema radica en separar los registros de inicio: RAM, REG, CMD, y funciones prediseñadas; de los registros para las pantallas FT80X, por allí debe haber alguno que no sirve en la serie 81X.

En caso extremo será necesario crear una librería GD2_FT81X, para facilitar las cosas.

PD: bajé la hoja de datos del FT81X, creo que habrá que meterse linea a linea y registro por registro, antes de pedir ayuda al creador de la librería del gameduino 2 y no llegar con las manos vacías.

http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT81x.pdf
ft81xmania.com/comunidad/

lightcalamar

He aquí el código;
Code: [Select]

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

#define PDNPin 8

void setup(){

  Serial.begin(115200);
  pinMode(PDNPin, OUTPUT);   // Código para realizar el POR por solftware pin PD
  digitalWrite(PDNPin, HIGH); 
  delay(20);
  digitalWrite(PDNPin, LOW);
  delay(20);
  digitalWrite(PDNPin, HIGH);
  delay(20);                         // Hasta fin
  GD.begin();
   GD.wr(REG_SWIZZLE, 0);
 //  GD.wr(REG_ROTATE, 4);   // INVERTIR LA PANTALLA

 
GD.cmd_loadimage(1, 0);
GD.load("image.jpg");
 
}

void loop()
{
   
 GD.Clear();
 
GD.Begin(BITMAPS);
GD.Vertex2ii(0, 0);

 GD.swap();
}



Te adjunto la imagen también.

Mi proyecto Radio FM con RDS -  MDC v1.0;
https://forum.arduino.cc/index.php?topic=400484.0
https://forum.arduino.cc/index.php?topic=448606.0
https://github.com/lightcalamar

TFTLCDCyg

#64
Jul 23, 2016, 04:46 pm Last Edit: Jul 23, 2016, 04:51 pm by TFTLCDCyg
Gracias, ¿la pantalla que usaste para cargar la imagen es la FT80X?

Si fué la FT811, ¿podrías subir tu librería para gameduino 2 modificada?.

Quizás me esté faltando alguna instrucción relacionada con el arduino Due.

PD: para subir archivos comprimidos, imagenes e incluso videos, creé una cuenta en mediafire allí he estado respaldando el avance de la librería para compartirlo.

Saludos
ft81xmania.com/comunidad/

lightcalamar

#65
Jul 23, 2016, 05:38 pm Last Edit: Jul 23, 2016, 05:54 pm by lightcalamar
Aquí esta la librería GD2 adjunta que he usado.
La pantalla que usé es la FT811 la captura que salen las rayas en la parte izquierda, con la FT800 todo perfecto, no hay error.

A todo esto, la FT811 es de 18 bit y la que tu tienes la FT813 es de 24 he leído en esta DataSheet concretamente en la pagina 8 el apartado del reloj del chip en las FT81x es de 60MHz por defecto y en las FT80x es de 48MHz y esto en la librería GD2 lo he visto definido el reloj, pero solo para la FT80x, creo que es muy importante.

Y también, todas las pruebas las estoy realizando por Arduino MEGA, lo digo para referencia, ya que tengo ahora el Due en un proyecto de dos pantallas para GPS, y solo tengo una. Creo que voy a montar otro prototipo de las dos pantallas o no sé si mejor esperarme esta semana ya que los de Riverdi la tendría que recibir en unos 4-5 días ademas Polonia esta a unos 2.500 kilómetros y no esta en Asia.
Mi proyecto Radio FM con RDS -  MDC v1.0;
https://forum.arduino.cc/index.php?topic=400484.0
https://forum.arduino.cc/index.php?topic=448606.0
https://github.com/lightcalamar

TFTLCDCyg

#66
Jul 24, 2016, 09:06 pm Last Edit: Jul 24, 2016, 10:32 pm by TFTLCDCyg
Gracias por la librería GD2 que usaste, voy a experimentar con un MEGA.

... no sé si mejor esperarme esta semana ya que los de Riverdi la tendría que recibir en unos 4-5 días ademas Polonia esta a unos 2.500 kilómetros y no esta en Asia.
Es como 1/4 de la paciencia que tuve que tener para que me llegara la pantalla!!!  (+/- 10,250 km hasta la mesa de trabajo XD).

En otro orden de ideas, he seguido experimentando con pantallas pequeñas, quiero sustituir el LCD de texto que tiene el depósito de agua de la refrigeración liquida de la PC. He pensado en un ST7735 o una pantalla oled a color.

Para ambos casos hay librerías de adafruit, creo que es posible extender a esas pantallas, el ejemplo de indicadores analógicos para ILI9341.

Indicadores analógicos en ST7735 de 1.8", SPI

Varios dispositivos como TFT´s, matrices de leds e incluso leds WS2812, pueden funcionar con la libreria GFX creada por adafruit. Basta con modificar la carga de librerias, las lineas de activación del setup y ajustar los gráficos a las medidas de cada pantalla.

Las pantallas ILI9341 tiene en general 320x240 px, el ST7735 tiene 160x128 px, la pantalla oled que tengo a mano tiene 96x64 px.

En el caso de la pantalla ST7735, las modificaciones son estas:

En el llamado de librerias y definición de colores:
Code: [Select]
#include <SPI.h>         
#include "Adafruit_GFX.h"
//#include "Adafruit_ILI9341.h"                             //ILI9341
//#define TFT_DC 9                                          //ILI9341
//#define TFT_CS 10                                         //ILI9341
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);  //ILI9341
#include <Adafruit_ST7735.h> // Hardware-specific library
#define cs   10
#define dc   8
#define rst  9 
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
//#define Personal tft.color565(20, 20, 20)    //ILI9341
//#define fondo tft.color565(0, 0, 0)          //ILI9341
#define Personal 0x2205
#define fondo   0x0000
#define YELLOW  0xFFE0 
#define WHITE   0xFFFF


En la función principal:
Code: [Select]
void Principal()
{
//  tft.setRotation(1);    //ILI9341
  tft.setRotation(3);
  tft.fillScreen(0x0000); 


En el setup:
Code: [Select]
void setup()
{
//   tft.begin();  //ILI9341
   tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
   Principal();
}


Resultado:


ST7735: indicadores analógicos

Vídeo: ST7735_indicadores analógicos

Vídeo: ILI9341_indicadores analógicos

Aunque el código funciona en el ST7735, pude medir el espacio en el que está el LCD del depósito, los pines del TFT no caben en el espacio disponible, pero el oled se ajusta perfectamente.

Queda por llevar el código a la pantalla oled. Luego de eso me aplicaré con la modificación del depósito de agua, instalación del FT801, instalación de los sensores NTC y de las rejillas de ventilación del domo, movidas por un servo controlado desde la pantalla táctil.

Quería usar el FT813, pero va a tener que estar un rato en la mesa de pruebas, instalaré el FT801

ft81xmania.com/comunidad/

TFTLCDCyg

#67
Jul 24, 2016, 09:20 pm Last Edit: Jul 24, 2016, 10:21 pm by TFTLCDCyg
Actualmente tengo instalado en el gabinete de la PC el FT843 (chip FT800) de 4D Systems con su ADAM. Está modificado para funcionar con la librería GD2. Lo usaré en otros proyectos, y prefiero instalar el FT801 que es mas resistente.



Vídeo: desplazamiento de objetos en el FT800
ft81xmania.com/comunidad/

lightcalamar

#68
Jul 25, 2016, 09:17 am Last Edit: Jul 25, 2016, 09:32 am by lightcalamar
Queda muy bien este ultimo vídeo. Podrías pasarme el código para probarlo? Gracias :)
En Riverdi compré 6 conectores de 10 pin´s;

El sábado hable con un amigo mio ingeniero de una empresa I+D y le comenté el problema de los cables del bus SPI de las pantallas FTDI, me comentó lo que tu escribiste concretamente la longitud y me añadió que también influye la impedancia del mismo, es decir la longitud crea unas determinadas capacidades a las entradas del chip en el cual produce un ruido y desacoplos, que unicamente se pueden eliminar realizando un buffer esto me hizo reflexionar. Desmonté ayer mi pantalla FT800 y he visto que  el bus SPI van directamente al chip FT800Q y he pensado realizarle un "plantacho" de las señales. No tengo problema ya que tengo los adaptadores de PCB y tengo varios SN74LV125A de los cuales van 4 buffer. Lo malo para lograr la mejor estabilidad del mismo, voy a tener que sacrificar un PCB virgen y realizarlo.

De paso como la placas PCB hacer de 100x160 podré realizar varias y el conector al control de Arduino le incluiré otra mas ya con la microSD.

A ver si lo tengo listo para el fin de semana.
Mi proyecto Radio FM con RDS -  MDC v1.0;
https://forum.arduino.cc/index.php?topic=400484.0
https://forum.arduino.cc/index.php?topic=448606.0
https://github.com/lightcalamar

TFTLCDCyg

#69
Jul 25, 2016, 10:19 am Last Edit: Jul 25, 2016, 10:43 am by TFTLCDCyg
Va el proyecto, hay muchas partes por optimizar, otras son solo experimentos. Espero no te resulte complicado entenderlo.

Desactivé la lectura de la hora del reloj DS3231, de lo contrario el programa se ralentiza demasiado por no estar conectado el 3231.

Probablemente te de falla en las librerías neopixel de adafruit, solo hay que descargarlas e instalarlas. También puedes eliminar/comentar las instrucciones que hagan el llamado.

No creo que te cause problemas la falta del analizador MSGEQ7, salvo que tendrás ruido en las bandas de cada canal y gráfica lineal. Los pines que usa son 2, 3 y A1.

Van las imágenes jpg que debes cargar en la microSD.

Avance del proyecto

PD: para el arduino MEGA hay que adicionar esta linea
Code: [Select]
#include <EEPROM.h>
ft81xmania.com/comunidad/

lightcalamar

Bueno lo estado probando y me da error en todas las lineas que pone;
Code: [Select]
GD.swap();

El error que devuelve el IDE es;

Code: [Select]
Analizador.ino:54:14: error: macro "swap" requires 2 arguments, but only 1 given
Analizador.ino: In function 'void Analizador()':
Analizador.ino:54:15: error: statement cannot resolve address of overloaded function
macro "swap" requires 2 arguments, but only 1 given


He probado varios como 1.5.2, 1.6.3 1.6.2 y todos el mismo error.
Mi proyecto Radio FM con RDS -  MDC v1.0;
https://forum.arduino.cc/index.php?topic=400484.0
https://forum.arduino.cc/index.php?topic=448606.0
https://github.com/lightcalamar

TFTLCDCyg

#71
Jul 25, 2016, 08:10 pm Last Edit: Jul 25, 2016, 08:33 pm by TFTLCDCyg
¿Podrías copiar todos los códigos de error que marca el IDE?

Estoy usando el IDE 1.6.3, el sketch compila sin problemas con las dos versiones de la librería para gameduino 2:


El error relacionado con swap, tiene que ver con las librerias NeoMatrix de adafruit, ya que usaban también una instrucción llamada swap con dos argumentos. La versión actualizada de las librerías NeoMatrix no tiene conflictos con esa función del gameduino 2, me parece recordar que la eliminaron.

Sustituye la librería Adafruit_NeoMatrix por la versión reciente. Te paso la librería NeoMatrix actualizada
ft81xmania.com/comunidad/

lightcalamar

Gracias.
He puesto la librería y me sigue dando error. Bien he comentado la librería Adafruit_GFX.h y no me daba problemas, entonces la que entraba en conflicto es esta anterior.

La he descargado y actualizado desde repositorio y sin  problemas.
Acabo de realizar un test sin subir a la placa y como estoy en el trabajo no puedo probar, pero ya compila sin dar problemas. En cuanto llegue a casa y después de comer lo pruebo.

Ayer casi me vuelvo loco. a todo ello, voy comprendiendo como funciona los Tag en la librería Gameduino 2 con tus ejemplos. Ayer después de mucho dar vueltas y claro tirando del Book de la librería no encontré como ponerlos. He entado jugando con la librería de mathertel sobre Radio y se me colgaba constantemente y con tu código voy entendiendo de como se hace. A veces se necesita un empujón.

Total que no fue que perdiera la tarde, simplemente con el fracaso se aprende. Luego comento a la tarde.
Saludos!
Mi proyecto Radio FM con RDS -  MDC v1.0;
https://forum.arduino.cc/index.php?topic=400484.0
https://forum.arduino.cc/index.php?topic=448606.0
https://github.com/lightcalamar

lightcalamar

#73
Jul 28, 2016, 10:04 am Last Edit: Jul 28, 2016, 11:43 am by lightcalamar
Quote
La instrucción PROTO en GD2

PROTO, definida en la linea siguiente:
Code: [Select]
Code: [Select]
#define PROTO                0

Permite controlar la disposición de la tabla de colores, orientación de pixeles y orientación del panel táctil de las pantallas FT80x. El gameduino 2 tiene una disposición "invertida", respecto al diseño original de FTDI, la razón posiblemente se deba al ángulo de visión de la pantalla del shield gameduino 2.

En la libreria nueva (GD2), esa linea ha sido suprimida, es importante rescatarla, ya que resulta mucho mas fácil manipular el cableado, con la orientación que tiene el gameduino 2, que con la disposición que tiene de fábrica el FT80x.
Hoy es Jueves. empiezo este mensaje con la cita de la pagina numero 3 donde arriba he puesto.
He llevado 3 días de peleas de lo GRANDE. Por esto lo he escrito en mayusculas.

La pantalla FT800CB que tengo, me presentaba inestabilidad, cuelgues he inclusive pantalla negra y la famosa pantalla de la muerte, concretamente esta;



Bueno, he realizado unas 8 u diez shields con diferentes lectores microSD y incluso con los adaptadores de SD y llegó a ser preocupante y recortar cables, cambiar y nada siempre cuelgues, rayas en pantalla y al final se congelaba el Arduino MEGA.

A sido muy frustrante. Use Arduino UNO y llegaba a ser mas estable pero al cabo de 3 minutos el mismo problema... Y ayer (toda la tarde)  puse los ejemplos de las librerías oficiales de FTDI y todo correcto. Llegue a pensar que Arduino MEGA no funcionaba bien con la pantalla, pero al principio si recuerdo que era correcto, entonces que pasa?

Como tenía otra pantalla igual, mismo problema y 2 pantallas no pueden hacer lo mismo... O bien que fueran defectuosas las 2, sin embargo como tengo otras 2 FT811 esto no ocurre. Iba por el buen camino. La variable PROTO como bien escibistes es para una definición del hardware y posiblemente como no uso la shield de gameduino esta me da problemas y es mas consultando el esquema de mi pantalla, suerte que el vendedor de la tienda donde lo compré tiene la DataSheet investigue que el pin GPIO0 no se usa y creo que tiene que ver sobre esa variable....

El hardware de mi pantalla adjunto es un breakout y por ello quizás no está todo definido, simplemente por ello su precio y sin duda para usuarios muy avanzados al menos en hardware no me pongo flores, porque aun así ha sido posiblemente en su 90% fruto de la casualidad, ésta a veces funciona.

La conclusión que he llegado, no solo el lector, cables pueden congelar, dejar de funcionar al menos mi pantalla, porque si con librería original funcionaba, entonces era la libraría Gameduino2 y que realice? borrar la linea que pone;

Code: [Select]
#define PROTO   0

En mi pantalla no es correcto. No digo que como se ha recomendado usarla, pero en mi caso me daba estos problemas. A todo esto ya he subido el código tuyo @TFTLCDCyg y funciona a la perfección.  las imágenes se muestran todas, sin ralentizaciones. Y rapidez

A todo esto, con una vieja shield de pantalla de 2.4 LCD, la cual tenía el LCD roto (ya me vino de China así) lo quité, desoldé los IC´s y recupere la microSD integrada en el circuito impreso, he añadido los conectores hembra y la shield, ha quedado de maravilla. A la tarde pongo unas capturas de como me ha quedado.


Añado mas información.

resulta que hay problemas con PROTO desde enlace foro Gameduino donde pongo la cita del sexto mensaje de James;



Quote
After from making the SPI hookup - if you change this line:

github.com/jamesbowman/gd2-lib/blob/master/GD2.cpp#L8

in the library so that PROTO is 0, and on the next line set STORAGE to 0, then it should work fine with 3rd party FT800 boards like this - apart from not having the SDcard/accelerometer function.
La cuestión es que si se usa la variable hay que desmarcar la opción de STORAGE a 0 es decir, que la pantalla no podrá usar el lector microSD... (Mala suerte)
Bien entonces, hay un dilema; elegir y mi caso es quitar la variable PROTO.


Espero que otros usuarios tengan en cuenta mi comentario para futuros problemas con esta pantalla.
Saludos :)
Mi proyecto Radio FM con RDS -  MDC v1.0;
https://forum.arduino.cc/index.php?topic=400484.0
https://forum.arduino.cc/index.php?topic=448606.0
https://github.com/lightcalamar

TFTLCDCyg

#74
Jul 28, 2016, 09:46 pm Last Edit: Jul 28, 2016, 09:47 pm by TFTLCDCyg
Eso que llevas solo un par de semanas experimentando, y con un punto de partida... me tocó leer todo el foro del gameduino 2 y pasar muchas desveladas, los pantallazos azules ocurrían todos los días!!!.

1. En principio te sugiero que veas primero el pinout del shield del gameduino 2. Es muy importante que identifiques los pines que se deben conectar en tus pantallas FT800, ya que estamos en estos experimentos, hay que tener ese pinout todo el tiempo en mente.

2. El cableado del lector micro SD, debe ir conectado directamente en las lineas SPI de la pantalla.

3. El tema del PROTO 0/1, funciona para algunos casos (como lo has podido comprobar), de hecho la pantalla FT801 de riverdi funciona sin modificar la librería del gameduino 2, pero la FT843 de 4D Systems (un FT800), solo funciona con PROTO = 1, con PROTO = 0, la tabla de colores se invierte.

Este punto creo que se puede manejar, si primero se usan las librerias del gameduino 2 sin modificar nada. Si se detectan problemas, se debería considerar el uso de PROTO 0/1.

Finalmente: las pantallas FT811 que tienes, ¿con que librería las has hecho funcionar?

(Mi FT813 no responde con las librerías del gameduino 2, tendré que seguir revisando a detalle los comandos que tiene la FT813_lib. Por cierto, envié esa librería a soporte de FTDI, me respondieron este lunes que atenderán la petición. Específicamente les solicité que me den un ejemplo de como subir imagenes jpg desde un lector micro SD, ya que ni su manual de programación tiene instrucciones de como hacer tal cosa, un fallo bastante crítico: ustedes crearon esos chips!!!! -no les dije eso XD-).

FT813_lib: comando de rotación de pantalla

Los chips de la familia FT81X tienen una instrucción que permite definir la rotación de pantalla.

La instrucción es esta:
Code: [Select]
Ft_Gpu_CoCmd_SetRotate(phost,R);   
Donde R puede ser: 0, 1, 2 o 3

0 da la orientación de fábrica: x=800, y=480


1 da la orientación que tiene el gameduino 2: x=800, y=480


Rotación 2 da la orientación: x=480, y=800


Rotación 3 da la orientación: x=480, y=800


La he podido usar dentro del setup, de esta forma:
Code: [Select]
void setup()
{
  Serial.begin(9600);
  FT813begin();
   Ft_Gpu_CoCmd_SetRotate(phost,1);   
   SAMAPP_CoPro_Widget_Calibrate();
 
   MP(); 
}   


ft81xmania.com/comunidad/

Go Up