Подключить дисплей к Arduino Mega

razario
Offline
Зарегистрирован: 10.01.2014

Добрый день! Прошу Вашей помощи в подключении дисплея к Arduino Mega, гуглил, искал, читал, учил матчасть, но видать плохо.

Итак, дисплей http://www.ebay.com/itm/181181869412 , работает на ILI9225B. В спеках есть следующая схема подключения:

2 CS Chip Select Signal(low active)
3 SCL Serial clock
4 SDI Serial data input/output PIN
5 RS Register Subselect Terminal
6 RESET Hardware Reset Signal
7 VSS Ground
8 VDD VCI,Power Supply 2.8-3.3V
9 VDD2 VDD,Power Supply for Internal Logic(2.8-3.3V)
10 LED+ LED Anode(+)
11 LEDK1 LED Cathode(-)
12 LEDK2 LED Cathode(-)
13 LEDK3 LED Cathode(-)
14 YD Y-
15 XR X+
16 YU Y+
17 XL X-

так же есть пример кода:

#define RED  	0xf800
#define GREEN	0x07e0
#define BLUE 	0x001f
#define WHITE	0xffff
#define BLACK	0x0000
#define YELLOW  0xFFE0
#define GRAY0   0xEF7D
#define GRAY1   0x8410
#define GRAY2   0x4208

#define X_MAX_PIXEL	        176
#define Y_MAX_PIXEL	        220

void setCS(byte value)
{
    digitalWrite(2, value ? HIGH : LOW);
}

void setSCL(byte value)
{
    digitalWrite(3, value ? HIGH : LOW);
}

void setSDA(byte value)
{
    digitalWrite(4, value ? HIGH : LOW);
}

void setRS(byte value)
{
    digitalWrite(5, value ? HIGH : LOW);
}

void setRESET(byte value)
{
    digitalWrite(6, value ? HIGH : LOW);
}

void Lcd_WriteIndex(unsigned char Index)
{
    setCS(0);

    setRS(0);

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setCS(1);
}

void Lcd_WriteData(unsigned char Data)
{
    setCS(0);

    setRS(1);

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setCS(1);
}

void Lcd_WriteIndex16Bit(unsigned char DataH,unsigned char DataL)
{
    Lcd_WriteIndex(DataH);
    Lcd_WriteIndex(DataL);
}

void Lcd_WriteData16Bit(unsigned char DataH,unsigned char DataL)
{
    Lcd_WriteData(DataH);
    Lcd_WriteData(DataL);
}


void Lcd_WriteReg(unsigned int Cmd,unsigned int Data)    
{         
    Lcd_WriteIndex16Bit(Cmd>>8,Cmd);      
    Lcd_WriteData16Bit(Data>>8,Data);   
}


void Lcd_Reset(void)
{
    setRESET(0);
    delay(100);
    setRESET(1);
    delay(50);
}

void Lcd_SetXY(unsigned int x,unsigned int y)
{
    Lcd_WriteIndex(0x20);
    Lcd_WriteData16Bit(x>>8,x);
    Lcd_WriteIndex(0x21);
    Lcd_WriteData16Bit(y>>8,y);

    Lcd_WriteIndex(0x22);
}

void Lcd_Clear(unsigned int Color)               
{	
    unsigned int i,m;
    Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);
    for(i=0;i<Y_MAX_PIXEL;i++) {
        for(m=0;m<X_MAX_PIXEL;m++) {	
            Lcd_WriteData(Color>>8);
            Lcd_WriteData(Color);
        }
    }
}

void Lcd_SetRegion(unsigned int x_start,unsigned int y_start,unsigned int x_end,unsigned int y_end)
{		
    Lcd_WriteIndex(0x20);
    Lcd_WriteData16Bit(x_start>>8,x_start);
    Lcd_WriteIndex(0x21);
    Lcd_WriteData16Bit(y_start>>8,y_start);

    Lcd_WriteIndex(0x50);
    Lcd_WriteData16Bit(x_start>>8,x_start);
    Lcd_WriteIndex(0x51);
    Lcd_WriteData16Bit(x_end>>8,x_end);

    Lcd_WriteIndex(0x52);
    Lcd_WriteData16Bit(y_start>>8,y_start);
    Lcd_WriteIndex(0x53);
    Lcd_WriteData16Bit(y_end>>8,y_end);

    Lcd_WriteIndex(0x22);
}

void Gui_DrawPoint(unsigned int x,unsigned int y,unsigned int Data)
{
    Lcd_SetRegion(x,y,x,y);
    Lcd_WriteData(Data>>8);
    Lcd_WriteData(Data);
}

unsigned int Lcd_ReadPoint(unsigned int x,unsigned int y)
{
    unsigned int Data;
    Lcd_SetXY(x,y);

    //Lcd_ReadData();
    //Data=Lcd_ReadData();
    Lcd_WriteData(Data);
    return Data;
}

void Lcd_Init(void)
{ 
    Lcd_Reset();

    Lcd_WriteIndex(0x28);  // !!!!!! THIS HAS BEEN MISSING - CRUCIAL !!!!!
    delay(20);

    //************* Start Initial Sequence **********//
    Lcd_WriteIndex16Bit(0x00,0x01);
    Lcd_WriteData16Bit(0x01,0x1C); // set SS and NL bit
    Lcd_WriteIndex16Bit(0x00,0x02);
    Lcd_WriteData16Bit(0x01,0x00); // set 1 line inversion
    Lcd_WriteIndex16Bit(0x00,0x03);
    Lcd_WriteData16Bit(0x10,0x30); // set GRAM write direction and BGR=1.//1030
    Lcd_WriteIndex16Bit(0x00,0x08);
    Lcd_WriteData16Bit(0x08,0x08); // set BP and FP
    Lcd_WriteIndex16Bit(0x00,0x0C);
    Lcd_WriteData16Bit(0x00,0x00); // RGB interface setting R0Ch=0x0110 for RGB 18Bit and R0Ch=0111for RGB16Bit
    Lcd_WriteIndex16Bit(0x00,0x0F);
    Lcd_WriteData16Bit(0x0b,0x01); // Set frame rate//0b01
    delay(5);
    Lcd_WriteIndex16Bit(0x00,0x20);
    Lcd_WriteData16Bit(0x00,0x00); // Set GRAM Address
    Lcd_WriteIndex16Bit(0x00,0x21);
    Lcd_WriteData16Bit(0x00,0x00); // Set GRAM Address
    //*************Power On sequence ****************//
    delay(50);                         // Delay 50ms
    Lcd_WriteIndex16Bit(0x00,0x10);
    Lcd_WriteData16Bit(0x0a,0x00); // Set SAP,DSTB,STB//0800
    Lcd_WriteIndex16Bit(0x00,0x11);
    Lcd_WriteData16Bit(0x10,0x38); // Set APON,PON,AON,VCI1EN,VC
    delay(50);                  // Delay 50ms
    Lcd_WriteIndex16Bit(0x00,0x12);
    Lcd_WriteData16Bit(0x11,0x21); // Internal reference voltage= Vci;
    Lcd_WriteIndex16Bit(0x00,0x13);
    Lcd_WriteData16Bit(0x00,0x63); // Set GVDD
    Lcd_WriteIndex16Bit(0x00,0x14);
    Lcd_WriteData16Bit(0x4b,0x44); // Set VCOMH/VCOML voltage//3944
    //------------- Set GRAM area ------------------//
    Lcd_WriteIndex16Bit(0x00,0x30);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x31);
    Lcd_WriteData16Bit(0x00,0xDB);
    Lcd_WriteIndex16Bit(0x00,0x32);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x33);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x34);
    Lcd_WriteData16Bit(0x00,0xDB);
    Lcd_WriteIndex16Bit(0x00,0x35);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x36);
    Lcd_WriteData16Bit(0x00,0xAF);
    Lcd_WriteIndex16Bit(0x00,0x37);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x38);
    Lcd_WriteData16Bit(0x00,0xDB);
    Lcd_WriteIndex16Bit(0x00,0x39);
    Lcd_WriteData16Bit(0x00,0x00);
    // ----------- Adjust the Gamma Curve ----------//
    Lcd_WriteIndex16Bit(0x00,0x50);
    Lcd_WriteData16Bit(0x00,0x03);
    Lcd_WriteIndex16Bit(0x00,0x51);
    Lcd_WriteData16Bit(0x09,0x00);
    Lcd_WriteIndex16Bit(0x00,0x52);
    Lcd_WriteData16Bit(0x0d,0x05);
    Lcd_WriteIndex16Bit(0x00,0x53);
    Lcd_WriteData16Bit(0x09,0x00);
    Lcd_WriteIndex16Bit(0x00,0x54);
    Lcd_WriteData16Bit(0x04,0x07);
    Lcd_WriteIndex16Bit(0x00,0x55);
    Lcd_WriteData16Bit(0x05,0x02);
    Lcd_WriteIndex16Bit(0x00,0x56);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x57);
    Lcd_WriteData16Bit(0x00,0x05);
    Lcd_WriteIndex16Bit(0x00,0x58);
    Lcd_WriteData16Bit(0x17,0x00);
    Lcd_WriteIndex16Bit(0x00,0x59);
    Lcd_WriteData16Bit(0x00,0x1F);
    delay(50);                    // Delay 50ms
    Lcd_WriteIndex16Bit(0x00,0x07);
    Lcd_WriteData16Bit(0x10,0x17);
    Lcd_WriteIndex16Bit(0x00,0x22);		
    delay(200);

}

void setup()
{
    pinMode(2, OUTPUT);
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);

    Lcd_Init();

    Lcd_Clear(BLUE);

    Gui_DrawPoint(X_MAX_PIXEL/2-1, Y_MAX_PIXEL/2-1, RED);
    Gui_DrawPoint(X_MAX_PIXEL/2-1, Y_MAX_PIXEL/2+1, RED);
    Gui_DrawPoint(X_MAX_PIXEL/2+1, Y_MAX_PIXEL/2-1, RED);
    Gui_DrawPoint(X_MAX_PIXEL/2+1, Y_MAX_PIXEL/2+1, RED);
}

void loop()
{
}

вроде особо сложного ничего нет, но не работает и все, причем в моем понимании когда на дисплей приходит питание должна хотябы подсветка вкючиться, а нет, реакции совсем 0. Еще мне не очень понятно зачем нужны:

10 LED+ LED Anode(+)
11 LEDK1 LED Cathode(-)
12 LEDK2 LED Cathode(-)
13 LEDK3 LED Cathode(-)

и куда их подключать?

Так же питание на дисплей взял с 3V3, но вопрос по "управляющим" 2-6 порты, если это digitalWrite как в примере, то туда будет уходить 5 волт, это нормально?

В общем подскажите кто чем сможет, гуглил про SPI, я так понимаю, что какие то из портов как раз надо подключать на SPI (50-53 порт на Меге), но так и не понял, что к чему.

Уже появляются мысли, что дисплей мертвый, кстати как проверить работоспособность? Наверняка куда то можно кинуть питание и как то проверить.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

10 LED+ LED Anode(+)
11 LEDK1 LED Cathode(-)
12 LEDK2 LED Cathode(-)
13 LEDK3 LED Cathode(-)

это подсветка/ только вот напряжение/ток не знаю

можно попробовать плавно увеличивать напряжение. хотя это ведь для ардуины. значит 3.3 или 5 вольт должно быть. пробуйте сначала 3.3В. все минусы на землю, + на на 3.3В

razario
Offline
Зарегистрирован: 10.01.2014

Так пробовал вчера, так и подумал, просто не очень понятно зачем 3 земли. В общем тоже никакой реакции. Кидал только на 3.3В, на 5 не пробовал.

Мне кажется это очень странно если часть работает от 5В, а часть от 3.3В

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

это подсветка и ей пофигу что у тебя на дисплее и каким напряжением управляется

razario
Offline
Зарегистрирован: 10.01.2014

а порты со 2го по 6ой я цепляю на Мегу на те же 2-6 порты, пробовал ШИМом 3.3 вольта, пробовал 5в, реакции никакой. Может их нужно на другие порты подключать или без разницы?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хз. или экспериментировать регулируя напряжение, либо описание искать на дисплей

razario
Offline
Зарегистрирован: 10.01.2014

а дисплей то причем, там же шилд стоит ILI9225B, я так понимаю может какие то заморочки с SPI? В других подобных темах везде пишут подключать надо к портам SPI, но с другой стороны у них у всех белым экран светится. Может китайское дерьмо где то непрапаяно и просто реально мертвый? Когда питание на подсветку кидаешь она сразу должна включится? То есть если 3 земли кинуть и один плюс подсветка включится (в теории)?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

в теории вроде как должно

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ILI9225B это контроллер, и подсветка здесь ни при чем. какая разница какой контроллер если подсветка независимый элемент дисплея

razario
Offline
Зарегистрирован: 10.01.2014

да это понятно, предыдущий вопрос про работу дисплея в целом. Экран у людей светится белым всмысле не подсветка а пиксели белые все.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

так у вас голый дисплей, не шилд получается. сейчас обратил внимание. а вообще некачесвенная пайка довольно частое явление, но не факт что у вас. пробуйте

а вообще этот очень похож на ваш

http://www.kosmodrom.com.ua/pdf/TFT176220-20.pdf

+ хотя нет. разъемы разные да и паралельный интерфейс

++ мое личное мнение что покупать дисплей на который мало инфы неразумно. хотел так купить шилд. все хорошо. но ни библиотеки ни описания, ни даже инфы у продавца не было кроме такой дисплей совместимый с ардуино

razario
Offline
Зарегистрирован: 10.01.2014

согласен, но дисплей уже куплен, да и инфы вроде как достаточно, драйвер есть семплы есть, только он почему то работать не хочет :( попробую сегодня снять крышку прозвонить его, хотя это сумашествию подобно, ну хотябы подсветку прозвонить.

razario
Offline
Зарегистрирован: 10.01.2014

кто нибудь еще что нибудь может посоветовать?

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Светодиодов подсветки три, анод общий, катоды отдельно, подключать через ограничительные резисторы, на каждый катод свой резистор.

Для работы с ардуино вероятно придется подключать через делители.

Для работы очень важно правильно инициализировать дисплей.

Пример подключения аналогичного девайса http://cxem.net/mc/mc221.php

Вообще в инете много информации, по Вашей ссылке выше, на ебее есть ссылка на даташит, но скачать его сейчас мне не удалось.

Свой инициализировал так(проверял на уно, где брал скетч не помню, адаптировал под себя, коменты писал сам, эксперементировал, чтоб разобрать, что для чего):

//Выводит последовательно желтый, красный, голубой цвета по кругу
//Определяем пины для подключения дисплея
#define LCD_CS 2
#define LCD_RESET 3
#define LCD_RS 4
#define LCD_CLK 5
#define LCD_DATA 6

//Определяем значения  вкл/выкл пинов
#define LCD_CLK_ON       digitalWrite(LCD_CLK,HIGH); 
#define LCD_CLK_OFF      digitalWrite(LCD_CLK,LOW);
#define LCD_RS_ON       digitalWrite(LCD_RS,HIGH); 
#define LCD_RS_OFF      digitalWrite(LCD_RS,LOW);
#define LCD_CS_OFF      digitalWrite(LCD_CS,LOW);
#define LCD_CS_ON       digitalWrite(LCD_CS,HIGH);
#define LCD_RESET_ON    digitalWrite(LCD_RESET,HIGH);
#define LCD_RESET_OFF   digitalWrite(LCD_RESET,LOW);

int i,j; //переменная для цикла

//Пины выходные
void setup ()
{
  pinMode (LCD_CS, OUTPUT);
  pinMode (LCD_RESET, OUTPUT);
  pinMode (LCD_RS, OUTPUT);
  pinMode (LCD_CLK, OUTPUT);
  pinMode (LCD_DATA, OUTPUT);
}

void loop ()
{
  digitalWrite(LCD_DATA,LOW);
  LCD_RESET_OFF;
  delay(100);
  LCD_RESET_ON;
  delay(250);
  delay(250);
  LCD_CS_ON;
  delay(50);//5
  LCD_CS_OFF;


  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x01);  //софтовый сброс дисплея
  delay(50);

  
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0xc6); //
  delay(50);
  
  
  
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0xb9);
 
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);//00

  
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0xb6);
 
 
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x80);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x04);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x8a);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x54);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x45);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x52);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x43);

  
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0xb3); //УРОВЕНЬ СЕРОГО


  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x02);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x0a);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x15);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x1f);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x28);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x30);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x37);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x3f);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x47);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x4c);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x54);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x65);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x75);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x80);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x85);
  
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0xb5); // КРИВАЯ ГАММЫ
 
 
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x01);//0x01
  
 //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0xb7);
  
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  /*
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);// на всех 0х00
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
*/
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0xbd);
  
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x36);
 
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x48);
  
  
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x2d);
 
  
 

  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);//закоментировал- получил грязные цвета
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x03);
 shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x05);//закоментировал- получил грязные цвета
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x07);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x09);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x0b);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x0d);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x0f);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x03);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x05);   //видимо настройка цветопередачи, коментируя разные строки, получаем разные цвета
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x07);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x09);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x0b);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x0b);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x0f);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x00);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x05);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x0b);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x0f);



//command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0xba);
  
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x6d);//6d яркость??? уменьшил, цвет стал насыщеней, большое уменьшение делает все слишком темным
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x03); // 03 закоментировал, получил очень темные цвета, практически черные
  
  
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
 shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x25); //УСТАНОВИТЬ КОНТРАСТ, в других значениях ничего не видно.
  
 
 
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x29);//тоже контрастность, не понятно!!!
 //shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x61);
 // shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x25);
  
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0xbe);
  
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
 shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x58);//закоментировал, получил много синего, грязный цвет
  
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x3a);
 
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x02);//закоментировал, все остановилось, только обновление экрана осталось
  
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x03);
  delay(40);
   
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x11);
   delay(20);
  
  //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x29);


   for (i = 0; i < 101; i++) {  //закрасить дисплей в черный цвет
      for (j = 0; j < 80; j++) {
         
    //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x2a);
   //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, i);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 100);//100
  
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
 shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x2b); //0x2b выводит красный цвет, закоментировал и он пропал
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, j+1);//+1
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 80);//80
  
   LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x2c);
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x60);
  //00- закрашивалось черным цветом, 33 стал голубовато-белым, 55- грязно белый, 64- розовый, 78-бежевый, 60-красный
  //62-малиновый, 
 
      
      }
   }
  
  
    for (i = 0; i < 101; i++) {  //закрасить дисплей в черный цвет
      for (j = 0; j < 80; j++) {
         
    //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x2a);
   //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, i);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 100);
  
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x2b);
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, j+1);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 80);
  
   LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x2c);
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x03);//0x03
 
      
      }
   }
   
    for (i = 0; i < 101; i++) {  //закрасить дисплей в черный цвет
      for (j = 0; j < 80; j++) {
         
    //command
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x2a);//0x2a
   //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, i);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 100);
  
  LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x2b);
  //data
  LCD_RS_ON;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, j+1);
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 80);
  
   LCD_CS_ON;
  LCD_RS_OFF;
  LCD_CS_OFF;
  LCD_CLK_OFF;
  shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x2c);
  //data
  LCD_RS_ON;
 LCD_CLK_OFF;
 shiftOut(LCD_DATA, LCD_CLK, MSBFIRST, 0x1c);//0x1c

  }
 }
}
  







 

razario
Offline
Зарегистрирован: 10.01.2014

Gres пишет:

Светодиодов подсветки три, анод общий, катоды отдельно, подключать через ограничительные резисторы, на каждый катод свой резистор.

Для работы с ардуино вероятно придется подключать через делители.

можно поподробнее про ограничительные резисторы? нигде не встречал такой информации, могу скинуть даташит куда нибудь

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

В даташите должна быть схема включения подсветки, светодиоды наверняка расчитаны на напряжение порядка 2-3 вольт и ток примерно 20mА(точно нужно смотреть в мануале), светодиод такая штука, после включения его споротивление стремится к нулю, тем самым потребляя все больший ток, пока ток не превысит максимально возможный и светодиод не сгорит, поэтому и используют ограничительные резисторы или специальные драйверы поддерживающие ток на заданном уровне.Спалить светодиод без ограничителя не просто, а очень просто... :)

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Да, добавлю, контроллер дисплея работает на 3,3 вольта максимум, порты дуины 5 вольтовые, нужно согласование уровней, иначе работать не будет, для этого и стоят делители.

razario
Offline
Зарегистрирован: 10.01.2014

Порты 5ти вольтовые но ШИМ же никто не отменял, там их вполне достаточно, чтобы все 5 управляющих портов и подсветку экрана туда посадить. Скольки вольтовые диоды на подсветке не нашел, но от 3,3 вольта ничего не моргнули даже

razario
Offline
Зарегистрирован: 10.01.2014

А ограничительные резисторы не должны стоять в контроллере? Зачем он тогда вообще нужен если такие сложности, они же понимали когда делали его, что есть 3 вольта и 5 вольт, остальное это уже лишние не нужные сложности.

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Какой ШИМ, Вы о чем, Вы хоть прочтите, что означает маркировка тех ног, что Вы собрались ШИМом рулить, да и что означает ШИМ почитать Вам стоит...

Конечно лишнее, сейчас кругом армы ставят, а они 3,3 вольта...

Поймите, если взять отдельно микроконтроллер, то его можно запитать от 3,3 вольт(в зависимости от модели конечно же) и тогда никакого соглавования не требуется, но в дуине питание МК 5 вольт и изаменить там просто так не получится, нужно согласовать уровни управляющих сигналов. Насчет подсветки согласен, можно и ШИМом управлять, но для начала Вы ее хоть просто включите, прежде чем в дебри лезть.

Контроллер дисплея расчитан на работу с МК 3,3 вольта, в настоящий момент это уже можно считать стандартом для мелких девайсов(сотиков, плееров и т.д.) и далеко не все производители делают порты этих контроллеров толерантными к 5 вольтовым уровням.

Я Вам выше дал ссылку, там есть схема согласования, да и в инете их море, не согласовывают с STM32 потому, что питание его 3,3 вольта...

Добавлю, включение подсветки может быть и программным, вот пример такой реализации:

Вот и у меня дошло дело до дисплея Nokia N95 8Gb, прочитал инит лог. анализатором с телефона-донора.
У кого проблемы с включением подсветки пробуйте код:
LCD_WR_REG(0x53); //WRITE_CTRL_DISPLAY
LCD_WR_Data(0x6C); //Включение подсветки
LCD_WR_REG(0x51); //WRITE_DISPLAY_BRIGHTNESS
LCD_WR_Data(0xFF); //яркость подсветки дисплея

Очень много информации по дисплеям от сотовых есть тут: http://vrtp.ru/index.php?showtopic=1120&st=0

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Посмотрел даташиты указанные Вами, там все есть, подсветка включается отдельно, 3,4 вольта 20mA максимум, код инициализации тоже есть:

Arduino Working Sampe Code -20130722.txt

/* working example code for Arduino
 * remember to wire all 5 wires: CS, SCLK, SDA, RS and RESET
 */

#define RED  	0xf800
#define GREEN	0x07e0
#define BLUE 	0x001f
#define WHITE	0xffff
#define BLACK	0x0000
#define YELLOW  0xFFE0
#define GRAY0   0xEF7D
#define GRAY1   0x8410
#define GRAY2   0x4208

#define X_MAX_PIXEL	        176
#define Y_MAX_PIXEL	        220

void setCS(byte value)
{
    digitalWrite(2, value ? HIGH : LOW);
}

void setSCL(byte value)
{
    digitalWrite(3, value ? HIGH : LOW);
}

void setSDA(byte value)
{
    digitalWrite(4, value ? HIGH : LOW);
}

void setRS(byte value)
{
    digitalWrite(5, value ? HIGH : LOW);
}

void setRESET(byte value)
{
    digitalWrite(6, value ? HIGH : LOW);
}

void Lcd_WriteIndex(unsigned char Index)
{
    setCS(0);

    setRS(0);

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setSDA((Index&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Index<<=1; 

    setCS(1);
}

void Lcd_WriteData(unsigned char Data)
{
    setCS(0);

    setRS(1);

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setSDA((Data&0x80) ? 1 : 0);
    setSCL(0);
    setSCL(1);
    Data<<=1; 

    setCS(1);
}

void Lcd_WriteIndex16Bit(unsigned char DataH,unsigned char DataL)
{
    Lcd_WriteIndex(DataH);
    Lcd_WriteIndex(DataL);
}

void Lcd_WriteData16Bit(unsigned char DataH,unsigned char DataL)
{
    Lcd_WriteData(DataH);
    Lcd_WriteData(DataL);
}


void Lcd_WriteReg(unsigned int Cmd,unsigned int Data)    
{         
    Lcd_WriteIndex16Bit(Cmd>>8,Cmd);      
    Lcd_WriteData16Bit(Data>>8,Data);   
}


void Lcd_Reset(void)
{
    setRESET(0);
    delay(100);
    setRESET(1);
    delay(50);
}

void Lcd_SetXY(unsigned int x,unsigned int y)
{
    Lcd_WriteIndex(0x20);
    Lcd_WriteData16Bit(x>>8,x);
    Lcd_WriteIndex(0x21);
    Lcd_WriteData16Bit(y>>8,y);

    Lcd_WriteIndex(0x22);
}

void Lcd_Clear(unsigned int Color)               
{	
    unsigned int i,m;
    Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);
    for(i=0;i<Y_MAX_PIXEL;i++) {
        for(m=0;m<X_MAX_PIXEL;m++) {	
            Lcd_WriteData(Color>>8);
            Lcd_WriteData(Color);
        }
    }
}

void Lcd_SetRegion(unsigned int x_start,unsigned int y_start,unsigned int x_end,unsigned int y_end)
{		
    Lcd_WriteIndex(0x20);
    Lcd_WriteData16Bit(x_start>>8,x_start);
    Lcd_WriteIndex(0x21);
    Lcd_WriteData16Bit(y_start>>8,y_start);

    Lcd_WriteIndex(0x50);
    Lcd_WriteData16Bit(x_start>>8,x_start);
    Lcd_WriteIndex(0x51);
    Lcd_WriteData16Bit(x_end>>8,x_end);

    Lcd_WriteIndex(0x52);
    Lcd_WriteData16Bit(y_start>>8,y_start);
    Lcd_WriteIndex(0x53);
    Lcd_WriteData16Bit(y_end>>8,y_end);

    Lcd_WriteIndex(0x22);
}

void Gui_DrawPoint(unsigned int x,unsigned int y,unsigned int Data)
{
    Lcd_SetRegion(x,y,x,y);
    Lcd_WriteData(Data>>8);
    Lcd_WriteData(Data);
}

unsigned int Lcd_ReadPoint(unsigned int x,unsigned int y)
{
    unsigned int Data;
    Lcd_SetXY(x,y);

    //Lcd_ReadData();
    //Data=Lcd_ReadData();
    Lcd_WriteData(Data);
    return Data;
}

void Lcd_Init(void)
{ 
    Lcd_Reset();

    Lcd_WriteIndex(0x28);  // !!!!!! THIS HAS BEEN MISSING - CRUCIAL !!!!!
    delay(20);

    //************* Start Initial Sequence **********//
    Lcd_WriteIndex16Bit(0x00,0x01);
    Lcd_WriteData16Bit(0x01,0x1C); // set SS and NL bit
    Lcd_WriteIndex16Bit(0x00,0x02);
    Lcd_WriteData16Bit(0x01,0x00); // set 1 line inversion
    Lcd_WriteIndex16Bit(0x00,0x03);
    Lcd_WriteData16Bit(0x10,0x30); // set GRAM write direction and BGR=1.//1030
    Lcd_WriteIndex16Bit(0x00,0x08);
    Lcd_WriteData16Bit(0x08,0x08); // set BP and FP
    Lcd_WriteIndex16Bit(0x00,0x0C);
    Lcd_WriteData16Bit(0x00,0x00); // RGB interface setting R0Ch=0x0110 for RGB 18Bit and R0Ch=0111for RGB16Bit
    Lcd_WriteIndex16Bit(0x00,0x0F);
    Lcd_WriteData16Bit(0x0b,0x01); // Set frame rate//0b01
    delay(5);
    Lcd_WriteIndex16Bit(0x00,0x20);
    Lcd_WriteData16Bit(0x00,0x00); // Set GRAM Address
    Lcd_WriteIndex16Bit(0x00,0x21);
    Lcd_WriteData16Bit(0x00,0x00); // Set GRAM Address
    //*************Power On sequence ****************//
    delay(50);                         // Delay 50ms
    Lcd_WriteIndex16Bit(0x00,0x10);
    Lcd_WriteData16Bit(0x0a,0x00); // Set SAP,DSTB,STB//0800
    Lcd_WriteIndex16Bit(0x00,0x11);
    Lcd_WriteData16Bit(0x10,0x38); // Set APON,PON,AON,VCI1EN,VC
    delay(50);                  // Delay 50ms
    Lcd_WriteIndex16Bit(0x00,0x12);
    Lcd_WriteData16Bit(0x11,0x21); // Internal reference voltage= Vci;
    Lcd_WriteIndex16Bit(0x00,0x13);
    Lcd_WriteData16Bit(0x00,0x63); // Set GVDD
    Lcd_WriteIndex16Bit(0x00,0x14);
    Lcd_WriteData16Bit(0x4b,0x44); // Set VCOMH/VCOML voltage//3944
    //------------- Set GRAM area ------------------//
    Lcd_WriteIndex16Bit(0x00,0x30);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x31);
    Lcd_WriteData16Bit(0x00,0xDB);
    Lcd_WriteIndex16Bit(0x00,0x32);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x33);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x34);
    Lcd_WriteData16Bit(0x00,0xDB);
    Lcd_WriteIndex16Bit(0x00,0x35);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x36);
    Lcd_WriteData16Bit(0x00,0xAF);
    Lcd_WriteIndex16Bit(0x00,0x37);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x38);
    Lcd_WriteData16Bit(0x00,0xDB);
    Lcd_WriteIndex16Bit(0x00,0x39);
    Lcd_WriteData16Bit(0x00,0x00);
    // ----------- Adjust the Gamma Curve ----------//
    Lcd_WriteIndex16Bit(0x00,0x50);
    Lcd_WriteData16Bit(0x00,0x03);
    Lcd_WriteIndex16Bit(0x00,0x51);
    Lcd_WriteData16Bit(0x09,0x00);
    Lcd_WriteIndex16Bit(0x00,0x52);
    Lcd_WriteData16Bit(0x0d,0x05);
    Lcd_WriteIndex16Bit(0x00,0x53);
    Lcd_WriteData16Bit(0x09,0x00);
    Lcd_WriteIndex16Bit(0x00,0x54);
    Lcd_WriteData16Bit(0x04,0x07);
    Lcd_WriteIndex16Bit(0x00,0x55);
    Lcd_WriteData16Bit(0x05,0x02);
    Lcd_WriteIndex16Bit(0x00,0x56);
    Lcd_WriteData16Bit(0x00,0x00);
    Lcd_WriteIndex16Bit(0x00,0x57);
    Lcd_WriteData16Bit(0x00,0x05);
    Lcd_WriteIndex16Bit(0x00,0x58);
    Lcd_WriteData16Bit(0x17,0x00);
    Lcd_WriteIndex16Bit(0x00,0x59);
    Lcd_WriteData16Bit(0x00,0x1F);
    delay(50);                    // Delay 50ms
    Lcd_WriteIndex16Bit(0x00,0x07);
    Lcd_WriteData16Bit(0x10,0x17);
    Lcd_WriteIndex16Bit(0x00,0x22);		
    delay(200);

}

void setup()
{
    pinMode(2, OUTPUT);
    pinMode(3, OUTPUT);
    pinMode(4, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(6, OUTPUT);

    Lcd_Init();

    Lcd_Clear(BLUE);

    Gui_DrawPoint(X_MAX_PIXEL/2-1, Y_MAX_PIXEL/2-1, RED);
    Gui_DrawPoint(X_MAX_PIXEL/2-1, Y_MAX_PIXEL/2+1, RED);
    Gui_DrawPoint(X_MAX_PIXEL/2+1, Y_MAX_PIXEL/2-1, RED);
    Gui_DrawPoint(X_MAX_PIXEL/2+1, Y_MAX_PIXEL/2+1, RED);
}

void loop()
{
}

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

специально для тех кто в танке :)

несмотря на то что написано в заголовке  SPI подключение... и это на меге совсем на на 1-6 выводах...

в описании указано что подключать нужно через I2C что опять же на меге тоже совсем не на 1-6 пинах...

но вам наверно пофигу. вас же есть ШИМ :)

razario
Offline
Зарегистрирован: 10.01.2014

Puhlyaviy пишет:

специально для тех кто в танке :)

несмотря на то что написано в заголовке  SPI подключение... и это на меге совсем на на 1-6 выводах...

в описании указано что подключать нужно через I2C что опять же на меге тоже совсем не на 1-6 пинах...

но вам наверно пофигу. вас же есть ШИМ :)

обажаю таких людей, которые что то знают не хрен чо скажут, нужно же блестнуть, что я мол знаю, но не скажу... 

razario
Offline
Зарегистрирован: 10.01.2014

Походу если рыть в сторону SPI, то подключаем так:

2ой пин дисплея подключаем к 53ему на Меге
3ий пин дисплея подключаем к 52ому на Меге
4ый пин дисплея подключаем к 51ому на Меге

остается вопрос куда подключать:

5 RS Register Subselect Terminal
6 RESET Hardware Reset Signal

если на обычные пины, то как они должны работь (3,3 или 5В)?

про ограничительные резисторы вопрос так же остается открытим, может ли кто нибудь все таки ответить, нужно ли что то менять в коде примера кроме номеров портов?

razario
Offline
Зарегистрирован: 10.01.2014

Только на русских форумах могут быть такие ответы, неделю мучаюсь и даже подсветка не светится, неужели никто не подключал дисплей к меге? Кроме ха ха чувак, читай описание вменяемого ничего не услышал.

Пробовал уже и SPI порты и I2C один хрен ничего не работает...

Печально это все, остается только выкинуть дисплей в помойку...

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

razario пишет:

.... Кроме ха ха чувак, читай описание вменяемого ничего не услышал.

Нескромный вопрос - так читал или нет?

razario пишет:

Печально это все, остается только выкинуть дисплей в помойку...

Подари кому-нить, зачем выкидывать?

ПС: Нет, мне не надо :)

razario
Offline
Зарегистрирован: 10.01.2014

JollyBiber пишет:

razario пишет:

.... Кроме ха ха чувак, читай описание вменяемого ничего не услышал.

Нескромный вопрос - так читал или нет?

razario пишет:

Печально это все, остается только выкинуть дисплей в помойку...

Подари кому-нить, зачем выкидывать?

ПС: Нет, мне не надо :)

Читал, но то ли я чего то не допонял, толи мне с дисплеем не овезло, судя по всему я не один такой http://www.eevblog.com/forum/microcontrollers/2-2'-spi-tft-anyone-recognize-this-model/

Я просто не очень понимаю неужели так сложно сказать куда цеплять эти 5 проводов

inspiritus
Offline
Зарегистрирован: 17.12.2012

Почитайте по ссылке про дисплеи вообще ( подсветка) 

http://playground.arduino.cc//Code/LCD

и с I2c интерфейсом в особенности там есть инфа по различным производителям, в тч с подключением.

http://playground.arduino.cc//Code/LCDi2c

razario
Offline
Зарегистрирован: 10.01.2014

вообще у меня нет цели понять полностью как работают дисплеи и какой геморой их подключить, мне конкретно нужно подключить данный дисплей и реализовывать свою задумку. Мне конкретно нужен ответ что куда подключить, почитай то почитай это - я уже пол интернета перечитал, у меня уже голова пухнет.

Хорошему человеку, который поможет таки его подключить, готов пренести в дар ардуину или что нибудь нужное.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Наверно при таком раскладе Вам в раздел "ищу исполнителя".

razario
Offline
Зарегистрирован: 10.01.2014

написал, но наверное это очень сложная задача и никто с ней не справиться :) хотя если честно, мне кажется что это просто мертвый форум, тут 20-30 человек, все уже давно прочитали сообщение и если б кто то понимал, то уже бы посоветовали, или я не прав?

com
Offline
Зарегистрирован: 06.09.2013

razario пишет:

вообще у меня нет цели понять полностью как работают дисплеи и какой геморой их подключить, мне конкретно нужно подключить данный дисплей и реализовывать свою задумку.

афигителдьный подход! представьте себе, приходит новичок в автошколу, ему там начинают про руль, тормоза, передачи, пдд и прочее рассказывать, а он в ответ - "да мне не надо про то, как ездить вообще, мне надо по-быстрому научиться с дачи картошку вывезти".

чтобы что-то делать - надо знать и понимать. не хотите учиться - купите готовое устройство

Клапауций
Offline
Зарегистрирован: 10.02.2013

ну, я не знаю - была бы эта халабуда у меня в руках, я бы так или иначе ея запустил, а изучать чужое железо ради разовой акции демонстрации... даже не знаю чего - самому себе своей усидчивости и настойчивости?

razario, рисуйте схему подключения и публикуйте сюда - может хоть неправильным картинком дадите народу повод вникнуть в суть своей проблемы.

razario
Offline
Зарегистрирован: 10.01.2014

com пишет:

афигителдьный подход! представьте себе, приходит новичок в автошколу, ему там начинают про руль, тормоза, передачи, пдд и прочее рассказывать, а он в ответ - "да мне не надо про то, как ездить вообще, мне надо по-быстрому научиться с дачи картошку вывезти".

чтобы что-то делать - надо знать и понимать. не хотите учиться - купите готовое устройство

мне интересна именно реализация задумки а не геморой с подключением дисплея, с тем с чем мне нужно работать я разбираюсь, разбираться как подключить дисплей, который при покупке был обозначен как Arduino compatible желания нету. Чтобы ездить на машине не нужно понимать как работает ДВС и сколько килограмм давит топливный насос. В моем понимании я купил дисплей, открыл инструкцию, подключил 10 проводов, запустил пример и все работает. Я не думал, что купив дисплей мне нужно будет покупать ограничительные резисторы, самостоятельно искать драйвер, реализовывать протоколы и т.д., ведь продавец реализует сотни дисплеев ежемесячно. Опять же если написано Arduino compatible, то в моем понимании это совместимость "из коробки", то есть взял и работает, не нужно ничего докупать. А при подходе, чувак, ну докупишь потрахов на 1000 рублей, месяц попаяешь и заработает это не есть совместимость. 

razario
Offline
Зарегистрирован: 10.01.2014

Клапауций пишет:

ну, я не знаю - была бы эта халабуда у меня в руках, я бы так или иначе ея запустил, а изучать чужое железо ради разовой акции демонстрации... даже не знаю чего - самому себе своей усидчивости и настойчивости?

razario, рисуйте схему подключения и публикуйте сюда - может хоть неправильным картинком дадите народу повод вникнуть в суть своей проблемы.

какую схему, все в шапке, вопрос куда подключить 5 проводов на меге, простой вопрос простой ответ. Изучать железо ни ради разовой демонстрации, а потому как форомы созданы для помощи, для некого разового наставничества. Если все такие умные, то какого за две недели я не услышал ни одного ответа кроме понтов типа учи мат.часть.

Клапауций
Offline
Зарегистрирован: 10.02.2013

razario пишет:

какую схему, все в шапке, вопрос куда подключить 5 проводов на меге, простой вопрос простой ответ. Изучать железо ни ради разовой демонстрации, а потому как форомы созданы для помощи, для некого разового наставничества. Если все такие умные, то какого за две недели я не услышал ни одного ответа кроме понтов типа учи мат.часть.

razario, идите в пень.

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

razario пишет:

void setCS(byte value) { digitalWrite(2, value ? HIGH : LOW); }

void setSCL(byte value) { digitalWrite(3, value ? HIGH : LOW); }

void setSDA(byte value) { digitalWrite(4, value ? HIGH : LOW); }

void setRS(byte value) { digitalWrite(5, value ? HIGH : LOW); }

void setRESET(byte value) { digitalWrite(6, value ? HIGH : LOW); }

Вы вчитайтесь в Ваш первый пост, там ведь все есть, интерфейс реализован программно, пины ардуино к котрым должен быть подключен дисплей описаны в коде.