Подключение SPI TFT LCD

PsihA
Offline
Зарегистрирован: 05.06.2015

Добрый день. Есть вот такой экран http://www.ebay.com/itm/181500077459 Купить купил но как подлючить не могу понять( все инструкции что есть в инете на китайском. На одном сайте нашел вот такой исходник, а ссылка нa Datasheet была битая из как разобраться. подключил пины как в дефайне не работает. Подскажите как ее правильно подключать ? Заранее благодарен !
П.С. Вставил код как есть, не нашел спойлер.

#include "pins_arduino.h"
#define LCD_CS		2
#define LCD_REST	3
#define LCD_DC		4
#define LCD_MOSI	5
#define LCD_CLK		6


volatile uint8_t *P_SCK,*P_MOSI,*P_DC,*P_RST,*P_CS;
volatile uint8_t B_SCK,B_MOSI,B_DC,B_RST,B_CS;



#define LCD_W	240
#define LCD_H	320
//color define
#define WHITE         	 0xFFFF
#define BLACK         	 0x0000	  
#define BLUE         	 0x001F  
#define BRED             0XF81F
#define GRED 		 0XFFE0
#define GBLUE		 0X07FF
#define RED           	 0xF800
#define MAGENTA       	 0xF81F
#define GREEN         	 0x07E0
#define CYAN          	 0x7FFF
#define YELLOW        	 0xFFE0
#define BROWN 		 0XBC40 
#define BRRED 		 0XFC07 
#define GRAY  		 0X8430 



void LCD_Write_Bus(char dat)
{
  *P_CS &= ~B_CS;
  for(uint8_t i=0;i<8;i++)
  {
    if(dat&0x80)
      *P_MOSI |= B_MOSI;
    else
      *P_MOSI &= ~B_MOSI;
    dat <<= 1;
    *P_SCK &= ~B_SCK;
    asm("nop");
    *P_SCK |= B_SCK;
  }
  *P_CS |= B_CS;
}

void LCD_WR_DATA8(char dat)
{
	digitalWrite(LCD_DC,HIGH);
	LCD_Write_Bus(dat);
}
void LCD_WR_DATA(int dat)
{
	digitalWrite(LCD_DC,HIGH);
	LCD_Write_Bus(dat>>8);
	LCD_Write_Bus(dat);
}
void LCD_WR_REG(char dat)
{
	digitalWrite(LCD_DC,LOW);
	LCD_Write_Bus(dat);
}
void LCD_WR_REG_DATA(int reg,int dat)
{
	LCD_WR_REG(reg);
	LCD_WR_DATA(dat);
}
void Address_set(unsigned int x1,unsigned y1,unsigned int x2,unsigned int y2)
{
	LCD_WR_REG(0x2a);
   	LCD_WR_DATA8(x1>>8);
   	LCD_WR_DATA8(x1);
   	LCD_WR_DATA8(x2>>8);
   	LCD_WR_DATA8(x2);
  
   	LCD_WR_REG(0x2b);
   	LCD_WR_DATA8(y1>>8);
   	LCD_WR_DATA8(y1);
   	LCD_WR_DATA8(y2>>8);
   	LCD_WR_DATA8(y2);

   	LCD_WR_REG(0x2C);
}
void LCD_Init(void)
{
        P_SCK	= portOutputRegister(digitalPinToPort(LCD_CLK));
        B_SCK	= digitalPinToBitMask(LCD_CLK);
	P_MOSI	= portOutputRegister(digitalPinToPort(LCD_MOSI));
	B_MOSI	= digitalPinToBitMask(LCD_MOSI);
	P_DC	= portOutputRegister(digitalPinToPort(LCD_DC));
	B_DC	= digitalPinToBitMask(LCD_DC);
	P_RST	= portOutputRegister(digitalPinToPort(LCD_REST));
	B_RST	= digitalPinToBitMask(LCD_REST);
	P_CS	= portOutputRegister(digitalPinToPort(LCD_CS));
	B_CS	= digitalPinToBitMask(LCD_CS);
        *P_RST &= ~B_RST;
	delay(20);
        *P_RST |= B_RST;

 	LCD_WR_REG(0xCB);  
      LCD_WR_DATA8(0x39); 
      LCD_WR_DATA8(0x2C); 
      LCD_WR_DATA8(0x00); 
      LCD_WR_DATA8(0x34); 
      LCD_WR_DATA8(0x02); 
  
      LCD_WR_REG(0xCF);  
      LCD_WR_DATA8(0x00); 
      LCD_WR_DATA8(0XC1); 
      LCD_WR_DATA8(0X30); 
   	
  	LCD_WR_REG(0xE8);  
      LCD_WR_DATA8(0x85); 
      LCD_WR_DATA8(0x00); 
      LCD_WR_DATA8(0x78); 
   	
  	LCD_WR_REG(0xEA);  
      LCD_WR_DATA8(0x00); 
      LCD_WR_DATA8(0x00); 
   	
  	LCD_WR_REG(0xED);  
      LCD_WR_DATA8(0x64); 
      LCD_WR_DATA8(0x03); 
      LCD_WR_DATA8(0X12); 
      LCD_WR_DATA8(0X81); 
  
      LCD_WR_REG(0xF7);  
      LCD_WR_DATA8(0x20); 
     
      LCD_WR_REG(0xC0);    //Power control 
      LCD_WR_DATA8(0x23);   //VRH[5:0] 
     
      LCD_WR_REG(0xC1);    //Power control 
      LCD_WR_DATA8(0x10);   //SAP[2:0];BT[3:0] 
   
      LCD_WR_REG(0xC5);    //VCM control 
      LCD_WR_DATA8(0x3e); 
      LCD_WR_DATA8(0x28); 
   
      LCD_WR_REG(0xC7);    //VCM control2 
      LCD_WR_DATA8(0x86);  //--
   
      LCD_WR_REG(0x36);    // Memory Access Control 
      LCD_WR_DATA8(0x48); //	   
  
      LCD_WR_REG(0x3A);    
      LCD_WR_DATA8(0x55); 
  
      LCD_WR_REG(0xB1);    
      LCD_WR_DATA8(0x00);  
      LCD_WR_DATA8(0x18); 
 
    LCD_WR_REG(0xB6);    // Display Function Control 
    LCD_WR_DATA8(0x08); 
    LCD_WR_DATA8(0x82);
    LCD_WR_DATA8(0x27);  
 	
	LCD_WR_REG(0xF2);    // 3Gamma Function Disable 
    LCD_WR_DATA8(0x00); 
 	
	LCD_WR_REG(0x26);    //Gamma curve selected 
    LCD_WR_DATA8(0x01); 
 
 	LCD_WR_REG(0xE0);    //Set Gamma 
    LCD_WR_DATA8(0x0F); 
    LCD_WR_DATA8(0x31); 
    LCD_WR_DATA8(0x2B); 
    LCD_WR_DATA8(0x0C); 
    LCD_WR_DATA8(0x0E); 
    LCD_WR_DATA8(0x08); 
    LCD_WR_DATA8(0x4E); 
    LCD_WR_DATA8(0xF1); 
    LCD_WR_DATA8(0x37); 
    LCD_WR_DATA8(0x07); 
    LCD_WR_DATA8(0x10); 
    LCD_WR_DATA8(0x03); 
    LCD_WR_DATA8(0x0E); 
    LCD_WR_DATA8(0x09); 
    LCD_WR_DATA8(0x00); 

    LCD_WR_REG(0XE1);    //Set Gamma 
    LCD_WR_DATA8(0x00); 
    LCD_WR_DATA8(0x0E); 
    LCD_WR_DATA8(0x14); 
    LCD_WR_DATA8(0x03); 
    LCD_WR_DATA8(0x11); 
    LCD_WR_DATA8(0x07); 
    LCD_WR_DATA8(0x31); 
    LCD_WR_DATA8(0xC1); 
    LCD_WR_DATA8(0x48); 
    LCD_WR_DATA8(0x08); 
    LCD_WR_DATA8(0x0F); 
    LCD_WR_DATA8(0x0C); 
    LCD_WR_DATA8(0x31); 
    LCD_WR_DATA8(0x36); 
    LCD_WR_DATA8(0x0F); 
 
	LCD_WR_REG(0x2A);
    LCD_WR_DATA8(0x00);
    LCD_WR_DATA8(0x00);
    LCD_WR_DATA8(0x00);
    LCD_WR_DATA8(0xEF);
  
    LCD_WR_REG(0x2B);
    LCD_WR_DATA8(0x00);
    LCD_WR_DATA8(0x00);
    LCD_WR_DATA8(0x01);
    LCD_WR_DATA8(0x3F);
    LCD_WR_REG(0x11);    //Exit Sleep 
    delay(120); 
			
    LCD_WR_REG(0x29);    //Display on 
    LCD_WR_REG(0x2c); 
}
void LCD_Clear(unsigned int color)
{
	unsigned int i,j;  	
	Address_set(0,0,LCD_W-1,LCD_H-1);
    for(i=0;i<LCD_W;i++)
 	{
    	for (j=0;j<LCD_H;j++)
	   	{
        	LCD_WR_DATA(color);	 			 
	    }
	}
}

void setup()
{
  unsigned char p;
  for(p=0;p<14;p++)
    pinMode(p,OUTPUT);

  LCD_Init();
}

void loop()
{
    LCD_Clear(RED);
  delay(1000);
  LCD_Clear(BLUE);
  delay(1000);
  LCD_Clear(GRED);
  delay(1000);
}

 

alex_r61
Offline
Зарегистрирован: 20.06.2012

Для такого дисплея есть библиотеки от Adafruit.  Adafruit_ILI9341 и Adafruit-GFX.

Можно подключить к SPI. 

#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

#define TFT_DC 8
#define TFT_CS 7

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);

void setup() {
  tft.begin();
  tft.fillScreen(ILI9341_BLACK);
  tft.setRotation(3);

 

PsihA
Offline
Зарегистрирован: 05.06.2015

Что-то опять не получается.

скачал я библеотеку , скопировал, подключил ucc (3,3v) cs и d/c , выбрал скетч graphicstest,

загружаю, но ничего не происходи с экраном(

нашел вот этот ролик http://www.youtube.com/watch?v=9RIKzXANbOY но походу дела я что-то не понимаю

pav2000
Offline
Зарегистрирован: 15.12.2014

Такой дисплей подключал по спаю. Все работает и на Adafruit_ILI9341 и на ucglib и кажется на utft.

Обращаю внимание что дисплей понимает только 3 в уровни. Если используете 5 в ардуину то надо ставить преобразователь уровней (микросхема или резисторы). Ну и конечно правильно подключить к спаю.