Luminosidad en TFT 3,2.

Muy buenas a todos, sigo este foro desde hace un tiempo en el bicarbonato y ahora tengo una duda en la resumo a continuacion:

Hay alguna forma de cambiar la intensidad/luminosidad de una pantalla TFT de 3,2 en una atmega 2560 en el codigo de ejemplo,sin usar potenciometro? uso la protoshield atm 2560 y la tft 3,2.

Gracias por vuestro aporte,este es el codigo:

// Demo_Landscape 
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/
//
// This program is a demo of the loadBitmap()-function.
//
// This program requires UTFT_tinyFAT, UTFT v2.41 or higher, 
// as well as tinyFAT v3.0 or higher.
//
// The image files must be present in the root folder 
// of a FAT16 formatted SDcard in the module cardslot.
//
// Please note that this demo only supports the following
// display sizes:
//      220x176
//      320x240
//      400x240
//      480x272
//      800x480

#include <tinyFAT.h>
#include <UTFT.h>
#include <UTFT_tinyFAT.h>

// Declare which fonts we will be using
extern uint8_t SmallFont[];

UTFT         myGLCD(ITDB32S, 38, 39, 40, 41);   // Remember to change the model parameter to suit your display module!
UTFT_tinyFAT myFiles(&myGLCD);

// List of filenames for pictures to display. 
char* files320[]={"PIC301.RAW", "PIC302.RAW", "PIC303.RAW", "PIC304.RAW", "PIC305.RAW", "PIC306.RAW", "PIC307.RAW", "PIC308.RAW", "PIC309.RAW", "PIC310.RAW"}; // 320x240
char* files400[]={"PIC401.RAW", "PIC402.RAW", "PIC403.RAW", "PIC404.RAW", "PIC405.RAW", "PIC406.RAW", "PIC407.RAW", "PIC408.RAW", "PIC409.RAW", "PIC410.RAW"}; // 400x240
char* files220[]={"PIC601.RAW", "PIC602.RAW", "PIC603.RAW", "PIC604.RAW", "PIC605.RAW", "PIC606.RAW", "PIC607.RAW", "PIC608.RAW", "PIC609.RAW", "PIC610.RAW"}; // 220x176
char* files480[]={"PIC701.RAW", "PIC702.RAW", "PIC703.RAW", "PIC704.RAW", "PIC705.RAW", "", "", "", "", ""}; // 480x272
char* files800[]={"PIC801.RAW", "PIC802.RAW", "PIC803.RAW", "PIC804.RAW", "PIC805.RAW", "", "", "", "", ""}; // 800x480
char* files[10];

int picsize_x, picsize_y;
boolean display_rendertime=false;  // Set this to true if you want the rendertime to be displayed after a picture is loaded
boolean display_filename=true;  // Set this to false to disable showing of filename

word res;
long sm, em;

void setup()
{
  myGLCD.InitLCD();
  myGLCD.clrScr();
  file.initFAT();
  myGLCD.setColor(255,255,255);
  myGLCD.setFont(SmallFont);
  picsize_x=myGLCD.getDisplayXSize();
  picsize_y=myGLCD.getDisplayYSize();
  switch (picsize_x)
  {
    case 220:
      for (int z=0; z<sizeof(files220)/sizeof(*files220);z++)
        files[z] = files220[z];
      break;
    case 320:
      for (int z=0; z<sizeof(files320)/sizeof(*files320);z++)
        files[z] = files320[z];
      break;
    case 400:
      for (int z=0; z<sizeof(files400)/sizeof(*files400);z++)
        files[z] = files400[z];
      break;
    case 480:
      for (int z=0; z<sizeof(files480)/sizeof(*files480);z++)
        files[z] = files480[z];
      break;
    case 800:
      for (int z=0; z<sizeof(files800)/sizeof(*files800);z++)
        files[z] = files800[z];
      break;
  }
}

void loop()
{
  
  for (int i=0; i<(sizeof(files)/sizeof(*files)); i++)
  {
    if (files[i]!="")
    {
      sm=millis();
      res=myFiles.loadBitmap(0, 0, picsize_x, picsize_y, files[i]);
      em=millis();
      if (res!=0)
      {
        if (res==0x10)
        {
          myGLCD.print("File not found...", 0, 0);
          myGLCD.print(files[i], 0, 14);
        }
        else
        {
          myGLCD.print("ERROR: ", 0, 0);
          myGLCD.printNumI(res, 56, 0);
        }
        delay(3000);
        myGLCD.clrScr();
      }
      else
      {
        if (display_rendertime==true)
        {
          myGLCD.print("Rendertime (secs):", 0, 0);
          myGLCD.printNumF(float((em-sm)/1000.0), 2, 160,0);
        }
        if (display_filename==true)
        {
          myGLCD.print(files[i], CENTER, myGLCD.getDisplayYSize()-12);
        }
        delay(3000);
      }
    }
  }
}

En principio la retroiluminación de un TFT tiene leds y bien podría usarse un pin digital para controlarla por PWM.

La mayoría de esquemas de conexión mandan la retroiluminación directamente a 3.3V.

https://learn.adafruit.com/2-8-tft-touch-shield/controlling-the-backlight

En ese instructivo de conexión de un TFT, indican que se puede usar VCC, si se corta el puente en VCC y se unen los pads marcados con pin 3. Se puede usar ese pin del arduino para manipular el brillo de la retoriluminación, o bien apagarla para ahorrar energía.

Sería cuestión que experimentaras con el control de la retroiluminación de tu TFT, como si estuvieras controlando por PWM un simple led

PD: voy a experimentar ya que tengo la misma duda que tienes

Gracias TFTLCDyg por tu interes en querer ayudar,como te comento tengo la pantalla en una protoshield y directamente a la atmega 2560 y eso me deja sin opciones de tener ningun pin libre por eso es el tema de este post, pero como no se como hacerlo lo dejo en manos expertas,aunque yo no entiendo mucho,¿pero no se puede bajar subir intensidad de luminosidad en el codigo? por ay voy encaminado pero mal creo.

Gracias.

En ese caso te sugiero que uses un potenciometro entre la linea de alimentación del arduino y el pin que energiza la retroiluminación, con el podrías controlar el nivel de iluminación, también puedes instalar un switch simple.

Hay otra opción, si no estas usando los pines 0 (TX) y 1 (RX), puedes usar el comando digitalwrite en ellos.

Revisa este link, mencionan algunos consejos para usar salidas extra en un arduino UNO

Hay una tercer opción pero requiere de que aprendas el manejo de integrados de desplazamiento como este: 74HC595N.

Acá hay mas información al respecto

En cualquier caso debes considerar como medida de seguridad usar una resistencia limitadora de voltaje, ya que en PWM = 255, el voltaje de salida en un pin digital de una placa como el MEGA o el UNO, es de 5V. Los leds de retroiluminación toleran hasta 3.3V

Hola. Creo que tendrías que empezar por poner un esquema, fotos, links o algo para poder saber a ciencia cierta cómo lo tienes conectado y si es posible o no desviar la retroiluminación a un pin, porque si es imposible, como afirmas, no hay código capaz de hacerlo. No sé si has leído detalladamente la información que te dio TFTLCDCyg, o yo al menos no entiendo tu respuesta posterior, porque sigues haciendo hincapié en el código sin tener un pin sobre el que trabajar. Resuelto eso, el código se reduce a una línea analogWrite o digitalWrite.

Por cierto, TFTLCDCyg. ¿Sabes cuánto consume la retroiluminación? ¿Puede el arduino directamente con ella o sería necesario un circuito amplificador?

Las librerias que permiten controlar la mayoría de pantallas TFT que se pueden usar en arduino, no tienen habilitadas las instrucciones para el control de la retroiluminación.

En principio todos los controladores cuentan con esa opción, y en teoría se podría usar una instrucción tal como:

setbrightness(255);

Desafortunadamente ese nivel de control no está habilitado en las librerias. UTFT por ejemplo especifica que solo algunos modelos de pantallas permiten el acceso a ese control.

Por ejemplo, el ILI9341 (de acuerdo con el datasheet, pags 169-177) trae de fábrica 8 comandos para el control de la retroiluminación, no es necesario usar un pin digital, basta con suministrar los 3.3V, y que la libreria tenga el soporte de control.

Esto nos lleva a que para poder tener control de la retroiluminación con la libreria UTFT por ejemplo, primero hay que investigar que pantallas-TFT tienen ese soporte antes de comprar una.

Si la pantalla no tiene soporte, entonces hay que recurrir a un pin digital e intentar implementar un control PWM. Sin embargo hay posibilidades de que no haya efecto ya que el chipdriver del TFT está diseñado para controlar los leds de la retroiluminación y por default la intensidad debe estar fijada en el valor máximo.

Respecto al consumo, este es un display de retroiluminación para LCD´s de texto, tiene un solo led. Funciona con 3.3V y unos 25 mA, yo creo que en un TFT normal (hasta 5") se deben requerir entre unos 75 a 90 mA.

A menos que sea una pantalla de mas de 7", creo que basta con los 3.3V que suministra el arduino.

PD: por cierto también hice la tarea, en la pantalla FT843 que tengo en el proyecto, el chip de control FT800 tiene habilitados dos registros: brillo y frecuencia para PWM

Guia de programacion del FT800, pag 70 y pag 71.

Toca averiguar si la libreria para arduino me puede dar acceso a esos parámetros.