[Solucionado]Problemas con SPI TFT 1.8

Muy buenas, hace un mes mas o menos adquirí esta pantalla para iniciarme un poco con ellas antes de pasar a algunas mas grandes (y mas caras xD)

He mirado muchos tutoriales por aquí sobre como conectarla y hacerla funcionar y hay un compañero que tiene el mismo problema que yo, creo, que no se llegó a solucionar este es su hilo.

Tengo una Arduino Mega como él y los pines los tengo conectados igual (salvo los de la sd, que no me interesan de momento) y al cargar el sketch de prueba de la librería ST7735 de Adafruit, me salen unas lineas horizontales y poco más, os adjunto algunas imágenes.

He probado poner resistencias de 1K en los pines de CS,DC,RST,SCLK y MOSI y nada.

Los pines los tengo conectados así:

TFT MEGA
GND GND
VCC 5V
NC
NC
NC
RESET 9
A0(DC) 8
SDA(MOSI) 51
SCK(SCLK) 52
CS 10

¿Alguna idea?

Foto1
Foto2
Foto3

Muchas gracias y un saludo! :slight_smile:

Edit: Como solucionarlo:
Mi pantalla aun indicando que tenia el controlador ST7735 tenia el ILI9163, lo comprobe mirando el serial que tiene el marquito blanco de la pantalla, el mio es el: MX128ILI9163CN18TN10087 110705R

Bajate esta libreria: ILI9163 y antes de importarla, en la carpeta _settings modifica el TFT_ILI9163C_settings.h para que quede asi:

#ifndef _TFT_ILI9163C_USETT_H_
#define _TFT_ILI9163C_USETT_H_


//DID YOU HAVE A RED PCB, BLACk PCB or WHAT DISPLAY TYPE???????????? 
//  ---> SELECT HERE <----
#define __144_RED_PCB__//128x128
//#define __144_BLACK_PCB__//128x128
//#define __22_RED_PCB__//240x320
//---------------------------------------


#if defined(__144_RED_PCB__)
/*
This display:
http://www.ebay.com/itm/Replace-Nokia-5110-LCD-1-44-Red-Serial-128X128-SPI-Color-TFT-LCD-Display-Module-/271422122271
This particular display has a design error! The controller has 3 pins to configure to constrain
the memory and resolution to a fixed dimension (in that case 128x128) but they leaved those pins
configured for 128x160 so there was several pixel memory addressing problems.
I solved by setup several parameters that dinamically fix the resolution as needed so below
the parameters for this diplay. If you have a strain or a correct display (can happen with chinese)
you can copy those parameters and create setup for different displays.
*/
	#define _TFTWIDTH  		128//the REAL W resolution of the TFT
	#define _TFTHEIGHT 		160//the REAL H resolution of the TFT
	#define _GRAMWIDTH      128
	#define _GRAMHEIGH      160//160
	#define _GRAMSIZE		_GRAMWIDTH * _GRAMHEIGH//*see note 1
	#define __COLORSPC		1// 1:GBR - 0:RGB
	#define __GAMMASET3		//uncomment for another gamma
	#define __OFFSET		0//*see note 2
	//Tested!
#elif defined (__144_BLACK_PCB__)
	#define _TFTWIDTH  		128//the REAL W resolution of the TFT
	#define _TFTHEIGHT 		128//the REAL H resolution of the TFT
	#define _GRAMWIDTH      128
	#define _GRAMHEIGH      128
	#define _GRAMSIZE		_GRAMWIDTH * _GRAMHEIGH//*see note 1
	#define __COLORSPC		1// 1:GBR - 0:RGB
	#define __GAMMASET1		//uncomment for another gamma
	#define __OFFSET		0
	//not tested
#elif defined (__22_RED_PCB__)
/*
Like this one:
http://www.ebay.it/itm/2-2-Serial-SPI-TFT-LCD-Display-Module-240x320-Chip-ILI9340C-PCB-Adapter-SD-Card-/281304733556
Not tested!
*/
	#define _TFTWIDTH  		240//the REAL W resolution of the TFT
	#define _TFTHEIGHT 		320//the REAL H resolution of the TFT
	#define _GRAMWIDTH      240
	#define _GRAMHEIGH      320
	#define _GRAMSIZE		_GRAMWIDTH * _GRAMHEIGH
	#define __COLORSPC		1// 1:GBR - 0:RGB
	#define __GAMMASET1		//uncomment for another gamma
	#define __OFFSET		0
#else
	#define _TFTWIDTH  		128//128
	#define _TFTHEIGHT 		160//160
	#define _GRAMWIDTH      128
	#define _GRAMHEIGH      160
	#define _GRAMSIZE		_GRAMWIDTH * _GRAMHEIGH
	#define __COLORSPC		1// 1:GBR - 0:RGB
	#define __GAMMASET1
	#define __OFFSET		0
#endif

	#if defined(__GAMMASET1)
		const uint8_t pGammaSet[15]= {0x36,0x29,0x12,0x22,0x1C,0x15,0x42,0xB7,0x2F,0x13,0x12,0x0A,0x11,0x0B,0x06};
		const uint8_t nGammaSet[15]= {0x09,0x16,0x2D,0x0D,0x13,0x15,0x40,0x48,0x53,0x0C,0x1D,0x25,0x2E,0x34,0x39};
	#elif defined(__GAMMASET2)
		const uint8_t pGammaSet[15]= {0x3F,0x21,0x12,0x22,0x1C,0x15,0x42,0xB7,0x2F,0x13,0x02,0x0A,0x01,0x00,0x00};
		const uint8_t nGammaSet[15]= {0x09,0x18,0x2D,0x0D,0x13,0x15,0x40,0x48,0x53,0x0C,0x1D,0x25,0x2E,0x24,0x29};
	#elif defined(__GAMMASET3)
		const uint8_t pGammaSet[15]= {0x3F,0x26,0x23,0x30,0x28,0x10,0x55,0xB7,0x40,0x19,0x10,0x1E,0x02,0x01,0x00};
		const uint8_t nGammaSet[15]= {0x09,0x18,0x2D,0x0D,0x13,0x15,0x40,0x48,0x53,0x0C,0x1D,0x25,0x2E,0x24,0x29};
	#else
		const uint8_t pGammaSet[15]= {0x3F,0x25,0x1C,0x1E,0x20,0x12,0x2A,0x90,0x24,0x11,0x00,0x00,0x00,0x00,0x00};
		const uint8_t nGammaSet[15]= {0x20,0x20,0x20,0x20,0x05,0x15,0x00,0xA7,0x3D,0x18,0x25,0x2A,0x2B,0x2B,0x3A};
	#endif
/*
	Note 1: The __144_RED_PCB__ display has hardware addressing of 128 x 160
	but the tft resolution it's 128 x 128 so the dram should be set correctly
	
	Note 2: This is the offset between image in RAM and TFT. In that case 160 - 128 = 32;
*/
#endif

/*

Benchmark                Time (microseconds)
Screen fill              74698
Text                     4253
Text2                    15366
Lines                    16034
Horiz/Vert Lines         5028
Rectangles (outline)     4183
Rectangles (filled)      91226
Circles (filled)         14436
Circles (outline)        14910
Triangles (outline)      5069
Triangles (filled)       30717
Rounded rects (outline)  9910
Rounded rects (filled)   99550
Done!

*/

Importa la libreria con el ide de arduino y carga el ejemplo.
Espero que os sirva, un saludo![/code]

Buenas, he contactado con la vendedor y cuando le he comentado lo que pasaba me ha dicho que la librería que estoy usando no es la correcta y que me iba a pasar el código para hacerla funcionar.

Si os soy sincero, al ver el codigo que me ha pasado no tiene mucho sentido, para mi al menos no lo tiene, porque las funciones que tiene en Arduino no existen, creo. Os pongo el código para que lo veáis:

void INIT()
{   

    write_command(0x11);       //start OSC
    delay(100);
    
    write_command(0x3a);       //start OSC
    write_para(0x05);
   
    write_command(0x26);       //start OSC
    write_para(0x04);

    write_command(0xf2);              //Driver Output Control(1)
    write_para(0x01);
    
    write_command(0xe0);              //Driver Output Control(1)
    write_para(0x3f);
    write_para(0x25);
    write_para(0x1c);
    write_para(0x1e);
    write_para(0x20);
    write_para(0x12);
    write_para(0x2a);
    write_para(0x90);
    write_para(0x24);
    write_para(0x11);
    write_para(0x00);
    write_para(0x00);
    write_para(0x00);
    write_para(0x00);
    write_para(0x00);
     
    write_command(0xe1);              //Driver Output Control(1)
    write_para(0x20);
    write_para(0x20);
    write_para(0x20);
    write_para(0x20);
    write_para(0x05);
    write_para(0x00);
    write_para(0x15);
    write_para(0xa7);
    write_para(0x3d);
    write_para(0x18);
    write_para(0x25);
    write_para(0x2a);
    write_para(0x2b);
    write_para(0x2b);  
    write_para(0x3a);  
    
    write_command(0xb1);              //LCD Driveing control
    write_para(0x08);
    write_para(0x08);
    
    write_command(0xb4);              //LCD Driveing control
    write_para(0x07);
   
   
    write_command(0xc0);              //LCD Driveing control
    write_para(0x0a);
    write_para(0x02);
      
    write_command(0xc1);              //LCD Driveing control
    write_para(0x02);

    write_command(0xc5);              //LCD Driveing control
    write_para(0x4f); //4f
    write_para(0x5a); //5a

    write_command(0xc7);              //LCD Driveing control
    write_para(0x40);  //
    
    write_command(0x2a);              //LCD Driveing control
    write_para(0x00);
    write_para(0x00);
    write_para(0x00);
    write_para(0x7f);
   
    write_command(0x2b);              //LCD Driveing control
    write_para(0x00);
    write_para(0x00);
    write_para(0x00);
    write_para(0x9f);
    write_command(0x36);              //LCD Driveing control
    write_para(0xc8);
    write_command(0xb7);              //LCD Driveing control
    write_para(0x00);
//    write_command(0xb8);              //LCD Driveing control
//    write_para(0x01);
       
    write_command(0x29);   
    write_command(0x2c); 
}

Cuando le he dicho que no sabia como usarlo me ha respondido diciendome y cito textualmente:

Dear buyer,

Thanks for your mail.Could you please kindly ask help from the professionals ?It is complicated.

If you have any other questions, welcome to contact us.

Best regards

Un vendedor que no sabe como hacer funcionar su producto xD

A ver si alguien puede echarme una mano por favor, que la pantalla no sirve ni como pisapapeles xD

Un saludo!

La respuesta de tu vendedor es la típica de alguien que compra a 2 y vende a 4 (por dar un número). No tiene idea y como bien dices eso no es arduino.

Ahora no has visto que hay otra persona que pregunta exactamente lo mismo que tu en el mismo foro? Busca ahi por favor.

surbyte: La respuesta de tu vendedor es la típica de alguien que compra a 2 y vende a 4 (por dar un número). No tiene idea y como bien dices eso no es arduino.

Ahora no has visto que hay otra persona que pregunta exactamente lo mismo que tu en el mismo foro? Busca ahi por favor.

Si que la he visto, es mas, he puesto que vengo de ese post y hago este porque ese estaba un poco abandonado y sin solucion. Siento abrir otro nuevo.

Y traigo buenas nuevas, mirando un poco la LCD, al lado de la pantalla viene como un numero de serie o algo asi. El codigo es este: [u]MX128ILI9163CN18TN10087 110705R[/u].

Al leer ILI me he dado cuenta de que he estado usando la libreria incorrecta y me descargue la libreria del ILI9163 y cargar un ejemplo. El sketch ha funcionado bien, excepto por que parte por una parte de la pantalla, que tiene algo como ruido. Las librerias son para LCDs de 128x128, pero la mia es de 128x160 y no encuentro nada para eso, ni por el foro.

La libreria que he usado es esta: https://github.com/sumotoy/TFT_ILI9163C

Sabeis de alguna libreria parecida para ese controlador?

Un saludo!

Chequea este archivo TFT_ILI9163C_settings.h y ve si cambiando las configuraciones funciona mejor. Sino habrá que comparar las hojas de datos de ambos chips

Ya funciona completamente, muchas gracias por la ayuda. Ahora edito el post principal para se vea solucionado y como lo he hecho.

Un saludo y gracias de nuevo!

¡¡¡¡¡¡¡ Muchas gracias !!!!!!!!!

A mí también me hace la franja de "ruido". Intuyo que tendrá algo que ver con el parámetro OFFSET que creo que tendría que ser 32 pero, a 0, FUNCIONA!!.

A ver si encontramos a alguien que nos pueda dar más luz sobre eso.

Un saludo.

Hola compañeros, retomo el hilo.

Antes que nada agradecer a ToskaBNK y Lluis_tgn todo el esfuerzo para poner la pantalla KMR 1.8 SPI en marcha. Me encuentro en la misma situación que vosotros en el inicio. He seguido los dos hilos y no hay manera de ponerla en marcha. Me salen varias incongruencias que no se averiguar. El tema de conexionado con la tarjeta Mega de 2560, no me queda claro. ToskaBNK, en la foto 1 del primer post se ven que los cables no van donde muestras en el esquema ¿?. Eso me hace despistar. Luego me he peleado con las librerías y modificaciones que dabas como solucionadas en el post 1, sin obtener resultado. No hay manera, la pantalla sigue en blanco. Te agradezco el soporte de antemano.

Saludos.

¡Ya lo pude solucionar!

Solución:

1.- Cambio de cable con mala continuidad. 2.- Cambio de protoboard por mal contacto. 3.- Usé la librería que mostraba en otro tema relacionado del foro el compañero Riaanc.

https://forum.arduino.cc/index.php?topic=228667.0

Os dejo también las librerías que yo he utilizado, basadas en las que tenía Riaanc en su tema.

https://github.com/adafruit/Adafruit-ST7735-Library.

Saludos y gracias. Espero que sirva de ayuda a alguien. Ahora a jugar con la pantalla.