Go Down

Topic: Control de luces de Acuario (Read 5923 times) previous topic - next topic

Perdido

los tiempos son:

con color y tamaño: 0.048

sin color: 0.017
sin tamaño:0.010

sin color y sin tamaño: entre 0.006 y 0.004

surbyte

 A ver si te comprendo
con color y tamaño gueHora() que antes tardaba 1800 mseg ahora 48 mseg? o hablas de otro ejemplo?

Has esas pruebas con queHora() y queFecha() no nos olvidemos que tienes dos.

Perdido

#62
Jan 06, 2019, 08:33 pm Last Edit: Jan 06, 2019, 08:34 pm by Perdido
Bueno los tiempos de queSegundo() son :

con color y tamaño: 10048

sin color: 10017
sin tamaño:10010

sin color y sin tamaño: entre 10006 y 10004

Lo había puesto abreviado
Code: [Select]

void queSegundo(){
  Segundo = HoraFecha.second();

  sprintf(Vsegundo,"%02d", Segundo);
  tft.setCursor(155, 60);
  tft.setTextColor(WHITE, BLACK);
  tft.setTextSize(4);
  tft.println(Vsegundo);
}

surbyte

#63
Jan 06, 2019, 09:48 pm Last Edit: Jan 06, 2019, 09:59 pm by surbyte
Como van a ser 10048 debe ser seran 1048 mseg o no?
Lo primero son 10.048 segundos y lo segundo 1.048 segundos.

Si esto

Code: [Select]
void queSegundo(){
  Segundo = HoraFecha.second();

  sprintf(Vsegundo,"%02d", Segundo);
  tft.println(Vsegundo);
}


demora 1004 mseg


Mira este hilo reportando en 2015 los problemas de lentitud de este TFT.
Parece ser que el problema es el manejo de pines.

Acá otro hilo interesante Link


Cambia de TFT

Perdido

Tienes razón 1048 he puesto un 0 de mas...

Pues menuda castaña si no vale el tft... en cuanto se supone que debería cargar?

cual me recomiendas?

Perdido

#65
Jan 06, 2019, 11:14 pm Last Edit: Jan 06, 2019, 11:15 pm by Perdido
He puesto ya por curiosidad las librerías del enlace que me has indicado, y la pantalla se queda en negro o blanco, lo que si he conseguido es que me carga estos valores de lectura  en el monitor, aunque la pantalla estaba en negro.

TFT LCD test
LCD driver chip: 0
Benchmark                Time (microseconds)
Screen fill                    1379324
Text                              189572
Lines                           1066340
Horiz/Vert Lines             144860
Rectangles (outline)       104680
Rectangles (filled)        3267948
Circles (filled)              1227028
Circles (outline)             446792
Triangles (outline)          338316
Triangles (filled)           1728440
Rounded rects (outline)  212860
Rounded rects (filled)   3798436
Done!

surbyte

@Perdido, si hablas de un programa menciona cual es el sketch y en que contexto ocurre todo.

Cuando dices Texto insume 189572 useg, cuanto texto? Cual es la rutina, tiene cambio de color, no lo tiene.. son condiciones que no se como comparar con el anterior.

Claro que debe aportar pero no veo la referencia en este momento.

Ayúdanos por favor!!

Perdido

jeje ese es el problema que no lo se el contexto exactamente :smiley-eek:

he ejecutado la librería\ejemplo: SWTFT-Shield\examples\graphicstest (me he olvidado de ponerlo antes)

El ejemplo funciona parcialmente solo muestra los datos que os he puesto en el monitor de programación, la pantalla tft se queda en blanco. Si la conoces igual podria valer para comparar con respecto a alguna que tengas por ahí... sino supongo que no valdrá para mucho por lo que comentas.

TFT LCD test
LCD driver chip: 0
Benchmark                Time (microseconds)
Screen fill              1379324
Text                     189572
Lines                    1066340
Horiz/Vert Lines         144860
Rectangles (outline)     104680
Rectangles (filled)      3267948
Circles (filled)         1227028
Circles (outline)        446792
Triangles (outline)      338316
Triangles (filled)       1728440
Rounded rects (outline)  212860
Rounded rects (filled)   3798436
Done!


La única librería que he conseguido que funcione mas o menos es la MCUFRIEND_kbv modificada, ni siquiera funciona la ultima versión oficial... solo ha funcionado la que os puse creo que en el #45


surbyte

No puedo ubicar el ejemplo dentro del .zip

Perdido

#69
Jan 07, 2019, 12:02 pm Last Edit: Jan 07, 2019, 12:04 pm by Perdido
Parece que no me he explicado bien, son dos librerías diferentes!

La del test que funciona a medias, esta sacada del link que has puesto antes y pertenece a la librería SWTFT-Shield que viene en ese paquete. Por desgracia solo funciona parcialmente, en la pantalla no muestra nada.

Por otro lado tengo puesta la que si que funciona, la MCUFRIEND_kbv modificada pero es la que da retardos. Por lo que he visto en comentarios es mas lenta en MEGA que en UNO

surbyte

#70
Jan 07, 2019, 01:48 pm Last Edit: Jan 07, 2019, 02:02 pm by surbyte
Yo solo quería ver que se habia mostrado en la pantalla con el testText y creo que fue esto

Code: [Select]
unsigned long testText() {
  tft.fillScreen(BLACK);
  unsigned long start = micros();
  tft.setCursor(0, 0);
  tft.setTextColor(WHITE);  tft.setTextSize(1);
  tft.println("Hello World!");
  tft.setTextColor(YELLOW); tft.setTextSize(2);
  tft.println(1234.56);
  tft.setTextColor(RED);    tft.setTextSize(3);
  tft.println(0xDEADBEEF, HEX);
  tft.println();
  tft.setTextColor(GREEN);
  tft.setTextSize(5);
  tft.println("Groop");
  tft.setTextSize(2);
  tft.println("I implore thee,");
  tft.setTextSize(1);
  tft.println("my foonting turlingdromes.");
  tft.println("And hooptiously drangle me");
  tft.println("with crinkly bindlewurdles,");
  tft.println("Or I will rend thee");
  tft.println("in the gobberwarts");
  tft.println("with my blurglecruncheon,");
  tft.println("see if I don't!");
  return micros() - start;
}


Si es así y esto toma 189572 useg = 189.5 mseg entonces tenemos un ganador.
Hace lo que quieres a esa velocidad.

Crea un nuevo sketch modificando este. Quitando todo lo demás y que quede el texto, elimina lo que no sirve y agrega el soporte RTC para leer la hora.

Perdido

No se si entiendo a lo que te refieres, he creado este código:

Code: [Select]
#include <Wire.h>
#include "RTClib.h"
#include <UTFTGLUE.h>             //tft
UTFTGLUE tft(0,A2,A1,A3,A4,A0);   //tft

RTC_DS3231 rtc; // Declaramos un RTC DS3231

unsigned long S ;

//Declaramos variables monitor TFT---------------------------------------
int Segundo,Minuto,hora,dia,mes,diaDeLaSemana;
char Vsegundo[2];

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
#define GRAY    0x8410

uint16_t version = MCUFRIEND_KBV_H_;

DateTime HoraFecha;

void setup () {
  Serial.begin(9600);

   // Comprobamos si tenemos el RTC conectado
  if (! rtc.begin()) {
   Serial.println("No hay un módulo RTC");
   while (1);
  }

  //definimos propiedades monitor tft------------------------------------------------
    uint16_t ID = tft.readID(); //
    tft.begin(ID);
    tft.setRotation(1); //pantalla horizontal
    tft.fillScreen(0x0000); //Rellenamos la pantalla de color negro
}

 
void loop () {
  DateTime now = rtc.now();
  HoraFecha = rtc.now(); //obtenemos la hora y fecha actual
 
  if (millis() - S> 1000UL) {   //mostrará la hora cada 1 segundo o 1000 mseg
    queSegundo(); 
    testText();
                     
      S = millis();
      Serial.println(S);
  }
}

void queSegundo(){
  Segundo = HoraFecha.second();
}

unsigned long testText() {
  sprintf(Vsegundo,"%02d", Segundo);
  tft.setCursor(155, 60);
  tft.setTextColor(WHITE, BLACK);
  tft.setTextSize(4);
  tft.println(Vsegundo);
 
 /* tft.fillScreen(BLACK);
  unsigned long start = micros();
  tft.setCursor(0, 0);
  tft.setTextColor(WHITE);  tft.setTextSize(1);
  tft.println("Hello World!");
  tft.setTextColor(YELLOW); tft.setTextSize(2);
  tft.println(1234.56);
  tft.setTextColor(RED);    tft.setTextSize(3);
  tft.println(0xDEADBEEF, HEX);
  tft.println();
  tft.setTextColor(GREEN);
  tft.setTextSize(5);
  tft.println("Groop");
  tft.setTextSize(2);
  tft.println("I implore thee,");
  tft.setTextSize(1);
  tft.println("my foonting turlingdromes.");
  tft.println("And hooptiously drangle me");
  tft.println("with crinkly bindlewurdles,");
  tft.println("Or I will rend thee");
  tft.println("in the gobberwarts");
  tft.println("with my blurglecruncheon,");
  tft.println("see if I don't!");
  return micros() - start;*/
}


Si pongo el ejemplo que has puesto antes me da de resultado que tarda S=1876
Si pongo el segundero mas el código que has puesto (este código sin comentarios) S=1922
Si pongo solo el segundero S=1047

En los tres casos dura mas de 1 seg, así que no se....

surbyte

No es posible.
dijiste que te llevaba 189.5 mseg como ahora te toma 1 segundo.

Como calculas el tiempo transcurrido?

Perdido

Por un lado tenemos el testText que es el que ha dado esos 189.5 mseg...

Y aquí debe de venir mi confusión, seguramente no lo estoy calculando bien o me estoy liando con las unidades o no se... pero cuando lo pongo ahí, si resto los tiempos que me va dando, por ejemplo entre el segundo valor y el tercero me da que tarda los tiempos que he indicado antes

Code: [Select]
  if (millis() - S> 1000UL) {   //mostrará la hora cada 1 segundo o 1000 mseg
    queSegundo(); 
    testText();
                     
      S = millis();
      Serial.println(S);
  }


Si pongo el ejemplo que has puesto antes me da de resultado que tarda S=1876
Si pongo el segundero mas el código que has puesto (este código sin comentarios) S=1922
Si pongo solo el segundero S=1047

Lo curioso es que antes hice una prueba sacando del if la función testText(); como resultado da un error, tiempo 00 y entre medias de forma muy rápida e intermitente si que pinta el segundero de forma correcta.... con lo que creo que no es un problema de velocidad del tft sino de programación, vamos que algo no estoy haciendo bien.

(Antes de que me caiga la bronca... si vale de algo decir que no soy programador ;))

surbyte

#74
Jan 08, 2019, 12:01 am Last Edit: Jan 08, 2019, 02:47 pm by surbyte
Asi estas midiendo mal
Como vas a medir el tiempo Absoulto.

Code: [Select]
S = millis();
 Serial.println(S);


Lees S y lo imprimes eso no dice que tarde 1876 mseg o mayor.


A ver.. voy a revistar el código. Y luego lo posteo aca. Asi que revista esta respueta que editaré luego.


Code: [Select]
void loop () {
  DateTime now = rtc.now();
  HoraFecha = rtc.now(); //obtenemos la hora y fecha actual
 
  if (millis() - S> 1000UL) {   //mostrará la hora cada 1 segundo o 1000 mseg
      unsigned long start = micros();
      testText();
      Serial.println(micros() - start);
      S = millis();
  }
}


Asi debe ser!

Go Up