TFT 3,5" и Ардуино

diger67
Offline
Зарегистрирован: 25.07.2015

Roman2344 пишет:

А кто  - нибудь браль в Украине рабочий тач с дисплеем в Украине для меги 2560, если можно ссылочку.

Вопрос везения, я к примеру брал как 3.6 дюйми ili9327. получил 3.95 ili9488. Пришлось поковырять готовую библиотеку, почитать даташиты и все заработало. Но не всегда так везет.

mazahaker
Offline
Зарегистрирован: 02.11.2015

Вопрос на рассуждение - есть 7" 1024Х600 дисплей от планшета, шлейф 40 контактный вот такой http://ru.aliexpress.com/store/product/LCD-Display-7-inch-TABLET-RD070HD28-V1-RO070HD28-1024-600-TFT-LCD-Screen-Panel-Replacement-Matrix/1241118_1839988140.html

Можно ли его прикрутить к ардуино мега?)

diger67
Offline
Зарегистрирован: 25.07.2015

Первое, этот дисплэй работает по RGB интерфейсу, впринципе можно сэмулировать. Второе 1024х600=614400 pix. это примерно в сто раз болше чем 320х240, следовательно запись фрэйма будет около 1 минуты, если принять во внимание обработку примитивов или символов, вообще шляпа. К томуже памяти самого arduino не хватет для записи фрэйма, т.к. в этом TFT нет памяти GGC.

vis22
Offline
Зарегистрирован: 24.10.2015

slider пишет:

....Померьте ещё, если будет возможность, при работе ардуиновкое напряжение +3,3в без дисплея и с диплеем, не поднимается ли оно?

 

Напряжение без дисплея 3,27В, напряжение с дисплеем 3,27В, ток потребления 2мА.

У  меня от +3,3В запитан только контакт BL (backlite) дисплея.

По +5В   без дисплея 4,93В, с дисплеем 4,82В.

 

pshonia
Offline
Зарегистрирован: 29.03.2015

 

// Кому интересно  TFT_320QVT  + atmega2560

// Тест летает на 8 секунд быстрее

// файл UTFT.cpp

// в основной проге подкоректировать строку  UTFT myGLCD(38,39,40,41);  

#include "UTFT.h"

UTFT::UTFT()
{
}
UTFT::UTFT(int RS, int WR, int CS, int RST)              // 38,39,40,41
{   disp_x_size = 239; // наш инд 240
     disp_y_size = 319; // наш инд 320
    // 16 бит передаем по двум портам А С
}
void UTFT::_set_direction_registers(void)    // выход 0 порт А С
{   DDRA = 0xFF; // выход 00000000
     DDRC = 0xFF; // выход 00000000
}
void UTFT::_convert_float(char *buf, double num, int width, byte prec)
{   dtostrf(num, width, prec, buf);
}
void UTFT::_fast_fill_16(int ch, int cl, long pix)
{   long blocks;
     PORTA = ch;           // приняли и передали
     PORTC = cl;           // приняли и передали
     blocks = pix/16;
for(int i=0; i < blocks; i++)
{   for(int i=0; i < 16; i++)
   {   PORTG&=~_BV(PG2);         // импульс 0 1 low         
        PORTG|=_BV(PG2);    
        }
}
if((pix % 16) != 0)
for(int i=0; i<(pix % 16)+1; i++)
{   PORTG&=~_BV(PG2);              // импульс 0 1 low   
     PORTG|=_BV(PG2);         
}
}
void UTFT::LCD_Writ_Bus(char VH,char VL)
{   PORTA = VH;          // приняли и передали
     PORTC = VL;          // приняли и передали
     PORTG&=~_BV(PG2);    // импульс 0 1 low        
     PORTG|=_BV(PG2);   
}
void UTFT::LCD_Write_COM(char VL)          // записать в индиакатор команду
{   PORTD&=~_BV(PD7);                     
     LCD_Writ_Bus(0x00,VL);
}
void UTFT::LCD_Write_DATA(char VH,char VL) // записать в индиакатор даные старш младш
{   PORTD|=_BV(PD7);                      
     LCD_Writ_Bus(VH,VL);
}
void UTFT::LCD_Write_DATA(char VL)         // записать в индиакатор даные младш
{   PORTD|=_BV(PD7);                       
     LCD_Writ_Bus(0x00,VL);
}
void UTFT::LCD_Write_COM_DATA(char com1,int dat1) // записать в индиакатор команда, даные 
{   LCD_Write_COM(com1);
     LCD_Write_DATA(dat1>>8,dat1);
}
void UTFT::InitLCD()    // инициализация индикатора
{  DDRD|=_BV(PD7);     // pinMode(__p1,OUTPUT);       
    DDRG|=_BV(PG2);        
    DDRG|=_BV(PG1);         
    DDRG|=_BV(PG0);            
_set_direction_registers(); // настройка портоав А С
PORTG|=_BV(PG0);            // sbi(P_RST, B_RST);                  
delay(5); 
PORTG&=~_BV(PG0);           // сbi(P_RST, B_RST);          
delay(15);
PORTG|=_BV(PG0);            // sbi(P_RST, B_RST);             
delay(15);
PORTG&=~_BV(PG1);           // сbi(P_RST, B_RST);        
LCD_Write_COM_DATA(0x00,0x0001);
LCD_Write_COM_DATA(0x03,0xA8A4);
LCD_Write_COM_DATA(0x0C,0x0000);
LCD_Write_COM_DATA(0x0D,0x080C);
LCD_Write_COM_DATA(0x0E,0x2B00);
LCD_Write_COM_DATA(0x1E,0x00B7);
LCD_Write_COM_DATA(0x01,0x2B3F);
LCD_Write_COM_DATA(0x02,0x0600);
LCD_Write_COM_DATA(0x10,0x0000);
LCD_Write_COM_DATA(0x11,0x6070);
LCD_Write_COM_DATA(0x05,0x0000);
LCD_Write_COM_DATA(0x06,0x0000);
LCD_Write_COM_DATA(0x16,0xEF1C);
LCD_Write_COM_DATA(0x17,0x0003);
LCD_Write_COM_DATA(0x07,0x0233);
LCD_Write_COM_DATA(0x0B,0x0000);
LCD_Write_COM_DATA(0x0F,0x0000);
LCD_Write_COM_DATA(0x41,0x0000);
LCD_Write_COM_DATA(0x42,0x0000);
LCD_Write_COM_DATA(0x48,0x0000);
LCD_Write_COM_DATA(0x49,0x013F);
LCD_Write_COM_DATA(0x4A,0x0000);
LCD_Write_COM_DATA(0x4B,0x0000);
LCD_Write_COM_DATA(0x44,0xEF00);
LCD_Write_COM_DATA(0x45,0x0000);
LCD_Write_COM_DATA(0x46,0x013F);
LCD_Write_COM_DATA(0x30,0x0707);
LCD_Write_COM_DATA(0x31,0x0204);
LCD_Write_COM_DATA(0x32,0x0204);
LCD_Write_COM_DATA(0x33,0x0502);
LCD_Write_COM_DATA(0x34,0x0507);
LCD_Write_COM_DATA(0x35,0x0204);
LCD_Write_COM_DATA(0x36,0x0204);
LCD_Write_COM_DATA(0x37,0x0502);
LCD_Write_COM_DATA(0x3A,0x0302);
LCD_Write_COM_DATA(0x3B,0x0302);
LCD_Write_COM_DATA(0x23,0x0000);
LCD_Write_COM_DATA(0x24,0x0000);
LCD_Write_COM_DATA(0x25,0x8000);
LCD_Write_COM_DATA(0x4f,0x0000);
LCD_Write_COM_DATA(0x4e,0x0000);
LCD_Write_COM(0x22);   
PORTG|=_BV(PG1);            
setColor(255, 255, 255);
setBackColor(0, 0, 0);
cfont.font=0;
_transparent = false;        // 0
}
void UTFT::setXY(word x1, word y1, word x2, word y2)
{   swap(word, x1, y1);              // ориентация 1  {type t = i; i = j; j = t;}
swap(word, x2, y2);              // ориентация 1  {type t = i; i = j; j = t;}
y1=disp_y_size-y1;               // ориентация 1
y2=disp_y_size-y2;               // ориентация 1
swap(word, y1, y2);              // ориентация 1
LCD_Write_COM_DATA(0x44,(x2<<8)+x1);
LCD_Write_COM_DATA(0x45,y1);
LCD_Write_COM_DATA(0x46,y2);
LCD_Write_COM_DATA(0x4e,x1);
LCD_Write_COM_DATA(0x4f,y1);
LCD_Write_COM(0x22);
}
void UTFT::clrXY()
{   setXY(0,0,disp_y_size,disp_x_size);    // ориентация 1
}
void UTFT::drawRect(int x1, int y1, int x2, int y2)
{   if(x1>x2) swap(int, x1, x2);
if(y1>y2) swap(int, y1, y2);
drawHLine(x1, y1, x2-x1);
drawHLine(x1, y2, x2-x1);
drawVLine(x1, y1, y2-y1);
drawVLine(x2, y1, y2-y1);
}
void UTFT::drawRoundRect(int x1, int y1, int x2, int y2)
{   if(x1>x2) swap(int, x1, x2);
if(y1>y2) swap(int, y1, y2);
if((x2-x1)>4 && (y2-y1)>4)
{   drawPixel(x1+1,y1+1);
drawPixel(x2-1,y1+1);
drawPixel(x1+1,y2-1);
drawPixel(x2-1,y2-1);
drawHLine(x1+2, y1, x2-x1-4);
drawHLine(x1+2, y2, x2-x1-4);
drawVLine(x1, y1+2, y2-y1-4);
drawVLine(x2, y1+2, y2-y1-4);
}
}
void UTFT::fillRect(int x1, int y1, int x2, int y2)
{   if(x1>x2) swap(int, x1, x2);
if(y1>y2) swap(int, y1, y2);
PORTG&=~_BV(PG1);                         
setXY(x1, y1, x2, y2);
PORTD|=_BV(PD7);                 
_fast_fill_16(fch,fcl,((long(x2-x1)+1)*(long(y2-y1)+1)));  // у нас 16
PORTG|=_BV(PG1);                       
for(int i=0; i<((x2-x1)/2)+1; i++)  // ориентация 1
{   drawVLine(x1+i, y1, y2-y1);
drawVLine(x2-i, y1, y2-y1);
}
}
void UTFT::fillRoundRect(int x1, int y1, int x2, int y2) // закрашеный круг
{   if(x1>x2) swap(int, x1, x2);
if(y1>y2) swap(int, y1, y2);
if((x2-x1)>4 && (y2-y1)>4)
{   for(int i=0; i<((y2-y1)/2)+1; i++)
{   switch(i)
{   case 0:
   drawHLine(x1+2, y1+i, x2-x1-4);
   drawHLine(x1+2, y2-i, x2-x1-4);
   break;
   case 1:
   drawHLine(x1+1, y1+i, x2-x1-2);
   drawHLine(x1+1, y2-i, x2-x1-2);
   break;
   default:
   drawHLine(x1, y1+i, x2-x1);
   drawHLine(x1, y2-i, x2-x1);
}
}
}
}
void UTFT::drawCircle(int x, int y, int radius)  // нарисовать круг с радиусом
{   int f = 1 - radius;
int ddF_x = 1;
int ddF_y = -2 * radius;
int x1 = 0;
int y1 = radius;
PORTG&=~_BV(PG1);                     
setXY(x, y + radius, x, y + radius);
LCD_Write_DATA(fch,fcl);
setXY(x, y - radius, x, y - radius);
LCD_Write_DATA(fch,fcl);
setXY(x + radius, y, x + radius, y);
LCD_Write_DATA(fch,fcl);
setXY(x - radius, y, x - radius, y);
LCD_Write_DATA(fch,fcl);
while(x1 < y1)
{   if(f >= 0) 
{   y1--;
ddF_y += 2;
f += ddF_y;
}
x1++;
ddF_x += 2;
f += ddF_x;    
setXY(x + x1, y + y1, x + x1, y + y1);
LCD_Write_DATA(fch,fcl);
setXY(x - x1, y + y1, x - x1, y + y1);
LCD_Write_DATA(fch,fcl);
setXY(x + x1, y - y1, x + x1, y - y1);
LCD_Write_DATA(fch,fcl);
setXY(x - x1, y - y1, x - x1, y - y1);
LCD_Write_DATA(fch,fcl);
setXY(x + y1, y + x1, x + y1, y + x1);
LCD_Write_DATA(fch,fcl);
setXY(x - y1, y + x1, x - y1, y + x1);
LCD_Write_DATA(fch,fcl);
setXY(x + y1, y - x1, x + y1, y - x1);
LCD_Write_DATA(fch,fcl);
setXY(x - y1, y - x1, x - y1, y - x1);
LCD_Write_DATA(fch,fcl);
}
PORTG|=_BV(PG1);        
clrXY();
}
void UTFT::fillCircle(int x, int y, int radius)
{   for(int y1=-radius; y1<=0; y1++) 
for(int x1=-radius; x1<=0; x1++)
if(x1*x1+y1*y1 <= radius*radius) 
{   drawHLine(x+x1, y+y1, 2*(-x1));
drawHLine(x+x1, y-y1, 2*(-x1));
break;
}
}
void UTFT::clrScr()
{   long i;
PORTG&=~_BV(PG1);               
clrXY();
if(display_transfer_mode!=1) PORTD|=_BV(PD7);               
_fast_fill_16(0,0,((disp_x_size+1)*(disp_y_size+1)));
for(i=0; i<((disp_x_size+1)*(disp_y_size+1)); i++)
{   LCD_Writ_Bus(0,0);  // 16 бит
}
PORTG|=_BV(PG1);                 
}
void UTFT::fillScr(byte r, byte g, byte b) // очищаем десплей и заливаем цветом
{   word color = ((r&248)<<8 | (g&252)<<3 | (b&248)>>3);
fillScr(color);
}
void UTFT::fillScr(word color)
{   long i;
char ch, cl;
ch=byte(color>>8);
cl=byte(color & 0xFF);
PORTG&=~_BV(PG1);                  
clrXY();
    PORTD|=_BV(PD7);                                        
_fast_fill_16(ch,cl,((disp_x_size+1)*(disp_y_size+1)));  // 16 бит
for(i=0; i<((disp_x_size+1)*(disp_y_size+1)); i++)
{   LCD_Writ_Bus(ch,cl);                                  // 16 бит
}
PORTG|=_BV(PG1);                  
}
void UTFT::setColor(byte r, byte g, byte b)  // цвет R G B печать или чернил
{   fch=((r&248)|g>>5);
fcl=((g&28)<<3|b>>3);
}
void UTFT::setColor(word color)
{   fch=byte(color>>8);
fcl=byte(color & 0xFF);
}
word UTFT::getColor()
{   return(fch<<8) | fcl;
}
void UTFT::setBackColor(byte r, byte g, byte b) // цвет R G B фона
{   bch=((r&248)|g>>5);
bcl=((g&28)<<3|b>>3);
_transparent=false;
}
void UTFT::setBackColor(uint32_t color)
{   if (color==VGA_TRANSPARENT) _transparent=true;
else
{   bch=byte(color>>8);
bcl=byte(color & 0xFF);
_transparent=false;
}
}
word UTFT::getBackColor()
{   return (bch<<8) | bcl;
}

void UTFT::setPixel(word color)
{   LCD_Write_DATA((color>>8),(color&0xFF)); // rrrrrggggggbbbbb
}
void UTFT::drawPixel(int x, int y)
{   PORTG&=~_BV(PG1);                
setXY(x, y, x, y);
setPixel((fch<<8)|fcl);
PORTG|=_BV(PG1);                 
clrXY();
}
void UTFT::drawLine(int x1, int y1, int x2, int y2)  // нарисовать линию коорд. начала и конца
{   if(y1==y2) drawHLine(x1, y1, x2-x1);
else 
    if(x1==x2)drawVLine(x1, y1, y2-y1);
else
{   unsigned int dx = (x2 > x1 ? x2 - x1 : x1 - x2);
short xstep =  x2 > x1 ? 1 : -1;
unsigned int dy = (y2 > y1 ? y2 - y1 : y1 - y2);
short ystep =  y2 > y1 ? 1 : -1;
int col = x1, row = y1;
PORTG&=~_BV(PG1);                       
if(dx < dy)
{   int t = - (dy >> 1);
while (true)
{   setXY (col, row, col, row);
LCD_Write_DATA (fch, fcl);
if(row == y2) return;
row += ystep;
t += dx;
if(t >= 0)
{   col += xstep;
t   -= dy;
}
} 
}
else
{   int t = - (dx >> 1);
while (true)
{   setXY (col, row, col, row);
LCD_Write_DATA (fch, fcl);
if(col == x2) return;

col += xstep;
t += dy;
if(t >= 0)
{   row += ystep;
t   -= dx;
}
} 
}
PORTG|=_BV(PG1);     
}
clrXY();
}
void UTFT::drawHLine(int x, int y, int l) // нарисовать толстую линия
{   if(l<0)
{   l = -l;
x -= l;
}
PORTG&=~_BV(PG1);                     
setXY(x, y, x+l, y);
    PORTD|=_BV(PD7);                      
_fast_fill_16(fch,fcl,l);
for(int i=0; i<l+1; i++)
{   LCD_Write_DATA(fch, fcl);
}
PORTG|=_BV(PG1);                      
clrXY();
}
void UTFT::drawVLine(int x, int y, int l)  // нарисовать линию
{   if (l<0)
{   l = -l;
y -= l;
}
PORTG&=~_BV(PG1);            
setXY(x, y, x, y+l);
PORTD|=_BV(PD7);              
_fast_fill_16(fch,fcl,l);
for(int i=0; i<l+1; i++)
{   LCD_Write_DATA(fch, fcl);
}
PORTG|=_BV(PG1);              
clrXY();
}
void UTFT::printChar(byte c, int x, int y)
{   byte i,ch;
word j;
word temp; 
PORTG&=~_BV(PG1);              
if(!_transparent)
{   temp=((c-cfont.offset)*((cfont.x_size/8)*cfont.y_size))+4;
        for(j=0;j<((cfont.x_size/8)*cfont.y_size);j+=(cfont.x_size/8))
   {   setXY(x,y+(j/(cfont.x_size/8)),x+cfont.x_size-1,y+(j/(cfont.x_size/8)));
for(int zz=(cfont.x_size/8)-1; zz>=0; zz--)
{   ch=pgm_read_byte(&cfont.font[temp+zz]);
for(i=0;i<8;i++)
{   if((ch&(1<<i))!=0) setPixel((fch<<8)|fcl);    
else                setPixel((bch<<8)|bcl);  
}
}
temp+=(cfont.x_size/8);
}
}
else
{   temp=((c-cfont.offset)*((cfont.x_size/8)*cfont.y_size))+4;
for(j=0;j<cfont.y_size;j++) 
{   for(int zz=0; zz<(cfont.x_size/8); zz++)
{   ch=pgm_read_byte(&cfont.font[temp+zz]); 
for(i=0;i<8;i++)
{   setXY(x+i+(zz*8),y+j,x+i+(zz*8)+1,y+j+1);
if((ch&(1<<(7-i)))!=0) setPixel((fch<<8)|fcl);   
}
}
temp+=(cfont.x_size/8);
}
}
PORTG|=_BV(PG1);              
clrXY();
}
void UTFT::rotateChar(byte c, int x, int y, int pos, int deg)
{   byte i,j,ch;
word temp; 
int newx,newy;
double radian;
radian=deg*0.0175;  
PORTG&=~_BV(PG1);            
temp=((c-cfont.offset)*((cfont.x_size/8)*cfont.y_size))+4;
for(j=0;j<cfont.y_size;j++) 
{   for(int zz=0; zz<(cfont.x_size/8); zz++)
{   ch=pgm_read_byte(&cfont.font[temp+zz]); 
for(i=0;i<8;i++)
{   newx=x+(((i+(zz*8)+(pos*cfont.x_size))*cos(radian))-((j)*sin(radian)));
newy=y+(((j)*cos(radian))+((i+(zz*8)+(pos*cfont.x_size))*sin(radian)));
setXY(newx,newy,newx+1,newy+1);
if((ch&(1<<(7-i)))!=0)  setPixel((fch<<8)|fcl); 
else  
{   if(!_transparent) setPixel((bch<<8)|bcl);
}   
}
}
temp+=(cfont.x_size/8);
}
PORTG|=_BV(PG1);        
clrXY();
}
void UTFT::print(char *st, int x, int y, int deg)
{   int stl, i;
stl = strlen(st);
if(x==RIGHT)   x=(disp_y_size+1)-(stl*cfont.x_size);
if(x==CENTER) x=((disp_y_size+1)-(stl*cfont.x_size))/2;     
for(i=0; i<stl; i++)
{ if(deg==0)  printChar(*st++, x + (i*(cfont.x_size)), y);
else rotateChar(*st++, x, y, i, deg);
    }
}
void UTFT::print(String st, int x, int y, int deg)
{   char buf[st.length()+1];
st.toCharArray(buf, st.length()+1);
print(buf, x, y, deg);
}
void UTFT::printNumI(long num, int x, int y, int length, char filler)
{   char buf[25];
char st[27];
boolean neg=false;
int c=0, f=0;
if(num==0)
{   if(length!=0)
{   for (c=0; c<(length-1); c++) st[c]=filler;
st[c]=48;
st[c+1]=0;
}
else
{   st[0]=48;
st[1]=0;
}
}
else
{   if(num<0)
{   neg=true;
num=-num;
}
while (num>0)
{   buf[c]=48+(num % 10);
c++;
num=(num-(num % 10))/10;
}
buf[c]=0;
if(neg)  st[0]=45;
if(length>(c+neg))
{   for(int i=0; i<(length-c-neg); i++)
{   st[i+neg]=filler;
f++;
}
}
for(int i=0; i<c; i++) st[i+neg+f]=buf[c-i-1];
st[c+neg+f]=0;
}
print(st,x,y);
}
void UTFT::printNumF(double num, byte dec, int x, int y, char divider, int length, char filler)
{   char st[27];
boolean neg=false;
if(dec<1) dec=1;
else  
    {   if(dec>5) dec=5;  }
if(num<0) neg = true;
_convert_float(st, num, length, dec);
if (divider != '.')
{   for(int i=0; i<sizeof(st); i++)
if(st[i]=='.') st[i]=divider;
}
if(filler != ' ')
{   if(neg)
{   st[0]='-';
for(int i=1; i<sizeof(st); i++)
{ if((st[i]==' ') || (st[i]=='-'))  st[i]=filler;  }
}
else
{   for(int i=0; i<sizeof(st); i++)
{ if(st[i]==' ') st[i]=filler; }
}
}
print(st,x,y);
}
void UTFT::setFont(uint8_t* font)  // 
{   cfont.font=font;
cfont.x_size=fontbyte(0);
cfont.y_size=fontbyte(1);
cfont.offset=fontbyte(2);
cfont.numchars=fontbyte(3);
}
uint8_t* UTFT::getFont()
{   return cfont.font;
}
uint8_t UTFT::getFontXsize()
{   return cfont.x_size;
}
uint8_t UTFT::getFontYsize()
{   return cfont.y_size;
}
void UTFT::drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int scale)
{   unsigned int col;
int tx, ty, tc, tsx, tsy;
if(scale==1)
{   PORTG&=~_BV(PG1);                
for(ty=0; ty<sy; ty++)
{   setXY(x, y+ty, x+sx-1, y+ty);
for(tx=sx-1; tx>=0; tx--)
{   col=pgm_read_word(&data[(ty*sx)+tx]);
LCD_Write_DATA(col>>8,col & 0xff);
}
}
PORTG|=_BV(PG1);    
}
else
{   PORTG&=~_BV(PG1);           
for(ty=0; ty<sy; ty++)
{   for(tsy=0; tsy<scale; tsy++)
{   setXY(x, y+(ty*scale)+tsy, x+((sx*scale)-1), y+(ty*scale)+tsy);
for(tx=sx-1; tx>=0; tx--)
{   col=pgm_read_word(&data[(ty*sx)+tx]);
for(tsx=0; tsx<scale; tsx++)
{ LCD_Write_DATA(col>>8,col & 0xff); }
}
}
}
PORTG|=_BV(PG1);          
}
clrXY();
}
void UTFT::drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int deg, int rox, int roy)
{   unsigned int col;
int tx, ty, newx, newy;
double radian;
radian=deg*0.0175;  
if(deg==0) drawBitmap(x, y, sx, sy, data);
else
{   PORTG&=~_BV(PG1);            
for(ty=0; ty<sy; ty++)
for(tx=0; tx<sx; tx++)
{   col=pgm_read_word(&data[(ty*sx)+tx]);
newx=x+rox+(((tx-rox)*cos(radian))-((ty-roy)*sin(radian)));
newy=y+roy+(((ty-roy)*cos(radian))+((tx-rox)*sin(radian)));
setXY(newx, newy, newx, newy);
LCD_Write_DATA(col>>8,col & 0xff);
}
PORTG|=_BV(PG1);             
}
clrXY();
}
void UTFT::lcdOff()         
{   PORTG&=~_BV(PG1);                
    LCD_Write_COM_DATA(0x01,0x0000);
LCD_Write_COM(0x0F);
PORTG|=_BV(PG1);                 
}
void UTFT::lcdOn()             
{   PORTG&=~_BV(PG1);                  
LCD_Write_COM_DATA(0x01,0x0010);
LCD_Write_COM(0x0F);   
PORTG|=_BV(PG1);                 
}
void UTFT::setContrast(char c)    
{   PORTG&=~_BV(PG1);               
if(c>64) c=64;
LCD_Write_COM(0x25);
LCD_Write_DATA(c);
PORTG|=_BV(PG1);               
}
int UTFT::getDisplayXSize()      
{   return disp_y_size+1;
}

int UTFT::getDisplayYSize()        
{   return disp_x_size+1;
}
void UTFT::setBrightness(byte br) 
{   PORTG&=~_BV(PG1);                  
if(br>16) br=16;
LCD_Write_COM_DATA(0x01,br);
LCD_Write_COM(0x0F);   
PORTG|=_BV(PG1);                    
}
void UTFT::setDisplayPage(byte page)  
{   PORTG&=~_BV(PG1);                   
if(page>7) page=7;
LCD_Write_COM_DATA(0x04,page);
LCD_Write_COM(0x0F);   
PORTG|=_BV(PG1);                    
}
void UTFT::setWritePage(byte page)   
{   PORTG&=~_BV(PG1);                  
    if(page>7) page=7;
LCD_Write_COM_DATA(0x05,page);
LCD_Write_COM(0x0F);   
PORTG|=_BV(PG1);                   
}
pshonia
Offline
Зарегистрирован: 29.03.2015
// Файл UTFT.h
#include "Arduino.h"
#include <avr/pgmspace.h>

#define LEFT 0
#define RIGHT 9999
#define CENTER 9998

// VGA color palette
#define VGA_BLACK 0x0000
#define VGA_WHITE 0xFFFF
#define VGA_RED 0xF800
#define VGA_GREEN 0x0400
#define VGA_BLUE 0x001F
#define VGA_SILVER 0xC618
#define VGA_GRAY 0x8410
#define VGA_MAROON 0x8000
#define VGA_YELLOW 0xFFE0
#define VGA_OLIVE 0x8400
#define VGA_LIME 0x07E0
#define VGA_AQUA 0x07FF
#define VGA_TEAL 0x0410
#define VGA_NAVY 0x0010
#define VGA_FUCHSIA 0xF81F
#define VGA_PURPLE 0x8010
#define VGA_TRANSPARENT 0xFFFFFFFF

extern const uint16_t PROGMEM port_to_mode_PGM[]; 
extern const uint16_t PROGMEM port_to_input_PGM[];
extern const uint16_t PROGMEM port_to_output_PGM[];
extern const uint8_t PROGMEM digital_pin_to_port_PGM[];     // PE PG
extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[]; //_BV( 0 )
extern const uint8_t PROGMEM digital_pin_to_timer_PGM[];

#define cbi(reg, bitmask) *reg &= ~bitmask // вход  или 0 
#define sbi(reg, bitmask) *reg |= bitmask  // выход или 1

#define pulse_high(reg, bitmask) sbi(reg, bitmask); cbi(reg, bitmask);  // 1 потом 0
#define pulse_low(reg, bitmask) cbi(reg, bitmask); sbi(reg, bitmask);   // 0 потом 1  

#define cport(port, data) port &= data
#define sport(port, data) port |= data

#define swap(type, i, j) {type t = i; i = j; j = t;}

#define fontbyte(x) pgm_read_byte(&cfont.font[x])  

#define regtype volatile uint8_t
#define regsize uint8_t

#define bitmapdatatype unsigned int* // для функции drawBitmap

typedef unsigned int word;
typedef uint8_t byte;

#define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )

#define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) )

#define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )

#define analogInPinToBit(P) (P)

#define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) )

#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )

#define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) )

struct _current_font
{
uint8_t* font;
uint8_t x_size;
uint8_t y_size;
uint8_t offset;
uint8_t numchars;
};

class UTFT
{
public:
UTFT();
UTFT(int RS, int WR, int CS, int RST);
void InitLCD();
void clrScr();
void drawPixel(int x, int y);
void drawLine(int x1, int y1, int x2, int y2);
void fillScr(byte r, byte g, byte b);
void fillScr(word color);
void drawRect(int x1, int y1, int x2, int y2);
void drawRoundRect(int x1, int y1, int x2, int y2);
void fillRect(int x1, int y1, int x2, int y2);
void fillRoundRect(int x1, int y1, int x2, int y2);
void drawCircle(int x, int y, int radius);
void fillCircle(int x, int y, int radius);
void setColor(byte r, byte g, byte b);
void setColor(word color);
word getColor();                     // возвращает текущий цвет unsigned int
void setBackColor(byte r, byte g, byte b);
void setBackColor(uint32_t color);
word getBackColor();                 // возвращает текущий цвет unsigned int
void print(char *st, int x, int y, int deg=0);
void print(String st, int x, int y, int deg=0);
void printNumI(long num, int x, int y, int length=0, char filler=' ');
void printNumF(double num, byte dec, int x, int y, char divider='.', int length=0, char filler=' ');
void setFont(uint8_t* font);
uint8_t* getFont();              // char -128+127
uint8_t getFontXsize();          // char -128+127
uint8_t getFontYsize();          // char -128+127
void drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int scale=1);
void drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int deg, int rox, int roy);
void lcdOff();
void lcdOn();
void setContrast(char c);
int getDisplayXSize();
int getDisplayYSize();
void setBrightness(byte br);
void setDisplayPage(byte page);
void setWritePage(byte page);
byte fch, fcl, bch, bcl;        // unsigned char
byte orient;                    // unsigned char
long disp_x_size, disp_y_size;    
byte display_model, display_transfer_mode, display_serial_mode; // unsigned char      
regtype *P_RS, *P_WR, *P_CS, *P_RST, *P_SDA, *P_SCL, *P_ALE;  // volatile uint8_t       
regsize B_RS, B_WR, B_CS, B_RST, B_SDA, B_SCL, B_ALE;          // uint8_t                
_current_font cfont;                           // структура     
bool _transparent;                    // 1 или 0
void LCD_Writ_Bus(char VH,char VL);
void LCD_Write_COM(char VL);
void LCD_Write_DATA(char VH,char VL);
void LCD_Write_DATA(char VL);
void LCD_Write_COM_DATA(char com1,int dat1);
void _hw_special_init();
void setPixel(word color);
void drawHLine(int x, int y, int l);
void drawVLine(int x, int y, int l);
void printChar(byte c, int x, int y);
void setXY(word x1, word y1, word x2, word y2);
void clrXY();
void rotateChar(byte c, int x, int y, int pos, int deg);
void _set_direction_registers();                          //!!! byte mode
void _fast_fill_16(int ch, int cl, long pix);
void _fast_fill_8(int ch, long pix);
void _convert_float(char *buf, double num, int width, byte prec);
};

 

pshonia
Offline
Зарегистрирован: 29.03.2015
//для тача файл UTouch.сpp

#include "UTouch.h"
#include "Arduino.h"

#define CAL_X 0x003C4E7CUL
#define CAL_Y 0x03D740A4UL
#define CAL_S 0x000EF13FUL

#define swap(type, i, j) {type t = i; i = j; j = t;}

#define regtype volatile uint8_t
#define regsize uint8_t
// как пример            PORTD&=~_BV(PD7);    // cbi(P_RS, B_RS);
// что на что заменять   PORTD|=_BV(PD7);     // sbi(P_RS, B_RS);

//UTouch  myTouch(6, 5, 4, 3, 2);
UTouch::UTouch(byte tclk, byte tcs, byte din, byte dout, byte irq)
{   T_CLK = 6; // PH3
T_CS = 5; // PE3
T_DIN = 4; // PG5
T_DOUT = 3; // PE5
T_IRQ = 2; // PE4
}
void UTouch::InitTouch(void)
{   touch_x_left    = (CAL_X>>14) & 0x3FFF;   // после привязки дефайновская
touch_x_right   = CAL_X & 0x3FFF;
touch_y_top = (CAL_Y>>14) & 0x3FFF;
touch_y_bottom = CAL_Y & 0x3FFF;
disp_x_size = (CAL_S>>12) & 0x0FFF;
disp_y_size = CAL_S & 0x0FFF;
prec = 10;
    
P_CLK  = portOutputRegister(digitalPinToPort(6));
B_CLK  = digitalPinToBitMask(6);
P_CS   = portOutputRegister(digitalPinToPort(5));
B_CS   = digitalPinToBitMask(5);
P_DIN  = portOutputRegister(digitalPinToPort(4));
B_DIN  = digitalPinToBitMask(4);
P_DOUT = portInputRegister(digitalPinToPort(3));
B_DOUT = digitalPinToBitMask(3);
P_IRQ  = portInputRegister(digitalPinToPort(2));
B_IRQ  = digitalPinToBitMask(2);
    
DDRH|=_BV(PH3);          // pinMode(6,OUTPUT);   PH3
    DDRE|=_BV(PE3);          // pinMode(5, OUTPUT);  PE3
    DDRG|=_BV(PG5);          // pinMode(4, OUTPUT);  PG5
    DDRE&=~_BV(PE5);         // pinMode(3,  INPUT);  PE5
    DDRE|=_BV(PE4);          // pinMode(2, OUTPUT);  PE4
    
PORTE|=_BV(PE3);          // sbi(P_CS,  B_CS);  T_CS = 5; // PE3
PORTH|=_BV(PH3);          // sbi(P_CLK, B_CLK); T_CLK = 6; // PH3
PORTG|=_BV(PG5);          // sbi(P_DIN, B_DIN); T_DIN = 4; // PG5
PORTE|=_BV(PE4);          // sbi(P_IRQ, B_IRQ); T_IRQ = 2; // PE4
}
void UTouch::read()
{   unsigned long tx=0, temp_x=0;
unsigned long ty=0, temp_y=0;
unsigned long minx=99999, maxx=0;
unsigned long miny=99999, maxy=0;
int datacount=0;
PORTE&=~_BV(PE3);                      // cbi(P_CS, B_CS);     // PE3                  
DDRE&=~_BV(PE4);                       // pinMode(2,  INPUT);  // PE4
for(int i=0; i<prec; i++)
{   if(!rbi(P_IRQ, B_IRQ))
{   touch_WriteData(0x90);        
PORTH|=_BV(PH3);
            PORTH&=~_BV(PH3);          // импульс 1 0  PH3 pulse_high(P_CLK, B_CLK);
temp_x=touch_ReadData();
if(!rbi(P_IRQ, B_IRQ))
{   touch_WriteData(0xD0);
                PORTH|=_BV(PH3);
                PORTH&=~_BV(PH3);        // импульс 1 0  PH3 pulse_high(P_CLK, B_CLK);
temp_y=touch_ReadData();
if((temp_x>0) and (temp_x<4096) and (temp_y>0) and (temp_y<4096))
{   tx+=temp_x;
ty+=temp_y;
if(prec>5)
{   if(temp_x<minx) minx=temp_x;
if(temp_x>maxx) maxx=temp_x;
if(temp_y<miny) miny=temp_y;
if(temp_y>maxy) maxy=temp_y;
}
datacount++;
}
}
}
}
DDRE|=_BV(PE4);             // pinMode(2, OUTPUT);  PE4 
if(prec>5)
{   tx = tx-(minx+maxx);
ty = ty-(miny+maxy);
datacount -= 2;
}
    PORTE|=_BV(PE3);             // sbi(P_CS,  B_CS);  T_CS = 5; // PE3                    
TP_X=tx/datacount;
TP_Y=ty/datacount;
}
bool UTouch::dataAvailable()
{   bool avail;
DDRE&=~_BV(PE4);                // pinMode(2,  INPUT); PE4
avail = !(rbi(P_IRQ, B_IRQ));
DDRE|=_BV(PE4);                 // pinMode(2, OUTPUT); PE4
return avail;
}
int16_t UTouch::getX()
{   long c;
if((TP_X==-1) or (TP_Y==-1))return -1;
    c = long(long(TP_X - touch_y_top) * (-disp_y_size)) / long(touch_y_bottom - touch_y_top) + long(disp_y_size);  
return c;
}
int16_t UTouch::getY()
{  int c;
if((TP_X==-1) or (TP_Y==-1)) return -1;
    c = long(long(TP_Y - touch_x_left) * (disp_x_size)) / long(touch_x_right - touch_x_left);
return c;
}
void UTouch::setPrecision(byte precision) // PREC_MEDIUM 2
{   switch (precision)
{   case 1:
prec=1; // DO NOT CHANGE!
break;
case 2:
prec=12; // Iterations + 2
break;
case 3:
prec=27; // Iterations + 2
break;
case 4:
prec=102; // Iterations + 2
break;
default:
prec=12; // Iterations + 2
break;
}
}
void UTouch::calibrateRead()
{   unsigned long tx=0;
unsigned long ty=0;
PORTE&=~_BV(PE3);          // cbi(P_CS, B_CS); PE3                   
touch_WriteData(0x90);
    PORTH|=_BV(PH3);
    PORTH&=~_BV(PH3);          // импульс 1 0  PH3 pulse_high(P_CLK, B_CLK);    
tx=touch_ReadData();
touch_WriteData(0xD0);
    PORTH|=_BV(PH3);
    PORTH&=~_BV(PH3);         // импульс 1 0  PH3 pulse_high(P_CLK, B_CLK);
ty=touch_ReadData();
    PORTE|=_BV(PE3);          // sbi(P_CS,  B_CS);  T_CS = 5; // PE3                    
TP_X=ty;
TP_Y=tx;
}
void UTouch::touch_WriteData(byte data)
{   byte temp;
temp=data;
PORTH&=~_BV(PH3);                        // cbi(P_CLK, B_CLK);  PH3 
for(byte count=0; count<8; count++)
{   if(temp & 0x80) PORTG|=_BV(PG5); // sbi(P_DIN, B_DIN); PG5
else  PORTG&=~_BV(PG5);              // cbi(P_DIN, B_DIN); PG5          
temp = temp << 1; 
        PORTH&=~_BV(PH3);          // cbi(P_CLK, B_CLK);  PH3
        PORTH|=_BV(PH3);           // sbi(P_CLK, B_CLK);  PH3
}
}
word UTouch::touch_ReadData()
{   word data = 0;
for(byte count=0; count<12; count++)
{   data <<= 1;
        PORTH|=_BV(PH3);           // sbi(P_CLK, B_CLK);  PH3
        PORTH&=~_BV(PH3);          // cbi(P_CLK, B_CLK);  PH3                
if(rbi(P_DOUT, B_DOUT)) data++;
}
return(data);
}

 

pshonia
Offline
Зарегистрирован: 29.03.2015
// для тача файл  UTouch.h

#include "Arduino.h"


#define PORTRAIT 0
#define LANDSCAPE 1

#define PREC_LOW 1
#define PREC_MEDIUM 2
#define PREC_HI 3
#define PREC_EXTREME 4

#define cbi(reg, bitmask) *reg &= ~bitmask
#define sbi(reg, bitmask) *reg |= bitmask
#define rbi(reg, bitmask) ((*reg) & bitmask)

#define pulse_high(reg, bitmask) sbi(reg, bitmask); cbi(reg, bitmask);
#define pulse_low(reg, bitmask) cbi(reg, bitmask); sbi(reg, bitmask);

#define swap(type, i, j) {type t = i; i = j; j = t;}

#define regtype volatile uint8_t
#define regsize uint8_t

class UTouch
{   public:
int16_t TP_X ,TP_Y;
   UTouch(byte tclk, byte tcs, byte tdin, byte dout, byte irq);
void InitTouch();
void read();
bool dataAvailable();
int16_t getX();
int16_t getY();
void setPrecision(byte precision);
void calibrateRead(); 
    private:
regtype *P_CLK, *P_CS, *P_DIN, *P_DOUT, *P_IRQ;
regsize B_CLK, B_CS, B_DIN, B_DOUT, B_IRQ;
byte T_CLK, T_CS, T_DIN, T_DOUT, T_IRQ;
long _default_orientation;
byte orient;
byte prec;
byte display_model;
long disp_x_size, disp_y_size, default_orientation;
long touch_x_left, touch_x_right, touch_y_top, touch_y_bottom;
void touch_WriteData(byte data);
word touch_ReadData();
};

 

vis22
Offline
Зарегистрирован: 24.10.2015

Еще пять копеек.

На днях пришел бюджетный модуль 3.0", 480X320 Pixels, 16Bit, с контроллером HX8357С, модуль оснащен разъемом под SD карту, но к сожалению не имеет тачскрина. 

Продавец:http://ru.aliexpress.com/item/3-0inch-TFT-color-LCD-module-320X480-ultra-HD-support-Arduino-Mega-2560/32319913448.html?adminSeq=206155369&shopNumber=342817

Посылка дошла за рекордные 20 дней, модуль был упакован в картонную коробку. Модуль совместим по разъемам и уровням с Arduino Mega.

Для запуска потебовался единственный бубен:библиотека UTFT ver. 2.79, более новые библиотеки не поддерживают контроллер HX8357С.

Строка инициализации:UTFT myGLCD(HX8357C,38,39,40,41);

Ссылка для скачивания библиотеки и скетчей:https://www.dropbox.com/s/ztu54uxo3or57bh/SKU193219.zip?dl=0

pshonia
Offline
Зарегистрирован: 29.03.2015

суть в том что ардуиновские функции работают очень медлено 

быстрее ------------------------- медленнее 

PORTG|=_BV(PG0);            // sbi(P_RST, B_RST);                  
 
PORTG&=~_BV(PG0);          // сbi(P_RST, B_RST);
 
PORTG&=~_BV(PG2);         // импульс 0 1  pulse_low        
PORTG|=_BV(PG2); 
 
PORTG|=_BV(PG2);          // импульс 1 0  pulse_high        
PORTG&=~_BV(PG2);
 
DDRD|=_BV(PD7);           // pinMode(__p1,OUTPUT);
если логику уловили можете переделать свой листинг 
под свой TFT.  Инициализацию я тоже вытянул (из библиотеки ардуино) и вставил в листинг
 
Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

А вы уверены, что sbi и cbi не прописаны как макросы? Если не ошибаюсь, в avr-libc они декларированы в файле compat/deprecated.h, соответственно,

#define sbi(reg, pin) reg |= (1<<pin)
#define cbi(reg, pin) reg &= ~(1<<pin)

 

TheMustafa
Offline
Зарегистрирован: 25.10.2015

Уже спрашивал, но никто не обратил внимания, попробую еще раз, вдруг повезет ))

Если я правильно понял, эти шидлы(как для Уно, так и для Меги) не занимают интерфейсы(SPI,I2C)?

Значит, я могу дополнительно повесить на контроллеры(как на Уно, так и на Мегу) эзернет-шилд на ENC26J80(SPI) и расширитель вх/вых, который по I2C вешается?

Буду рад любой информации, если кто-то уже сталкивался.

В каком файле библиотеки можно посмотреть какие пины контроллера(Мега или Уно) используются, и какие свободны?

 

vis22
Offline
Зарегистрирован: 24.10.2015

TheMustafa пишет... 

Эти шилды  на UNO как раз и занимают пины шин SPI и I2C.

SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK).

I2C: A4 (SDA) и A5 (SCL).

Смотри фото и pinOut и считай пины.

 

 

 

diger67
Offline
Зарегистрирован: 25.07.2015

vis22 пишет:

TheMustafa пишет... 

Эти шилды  на UNO как раз и занимают пины шин SPI и I2C.

SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK).

I2C: A4 (SDA) и A5 (SCL).

Смотри фото и pinOut и считай пины.

 

 

 

Это ни чего не значит, SPI используется для подключения SD карты. К SPI можно подключить скольугодно много устройств, выбирая активное чипселектом. Остается только найти свободные ноги у проца. C UNO есть проблема, а вот с мегой свободных пинов хоть отбавляй.

vis22
Offline
Зарегистрирован: 24.10.2015

 

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

Вот только для назначения дополнительных SS кроме 0-го и 1-го пинов на UNO ни чего не осталось, а их придется «освобождать» при обменах данными через коммуникационный порт UNO, в том числе и при прошивке UNO.

На Mega другая проблема,  библиотека UTFT, в стандартном виде, вроде не должна искать выводы шины данных TFT  экрана на пинах с расположением как у данного шилда. Согласно UTFT_Requirements.pdf для Mega предполагается их совсем другое  расположение.   

  

 

 

 

slider
Offline
Зарегистрирован: 17.06.2014

Скажу интересное проверенное, к томуже, для UNO , для экономии пинов на 8битные TFT дисплеи, можно работать и без RST , CS , RD . Закоментить их в библиотеке UTFT.  Хватает даже 2 пина  WR и RS !    Для этого  RD на + , CS на gnd , RST на RESET arduino (на пине ардуинки стоит кондер , который и помогает в долгом сбросе).  

// всёже если позволительно то лучше не избавляться от RST, Иначе может при инициализации очиститься не весь экран и потребоваться дополнительный второй сброс (нажать на кнопку сброса на платке ардуино)

 

vis22
Offline
Зарегистрирован: 24.10.2015

Поправка к #815.

Начиная с версии библиотеки UTFT ver.2.1 для Arduino Mega с большой долей вероятности поддерживается применение TFT шилдов от Arduino UNO.

Ниже привожу ссылку на статью автора библиотеки UTFT в которой описывается механизм поддержки шилдов UNO на Arduino Mega и способ автоматического перенаправления вывода данных на другие пины:

http://www.rinkydinkelectronics.com/h_utft_arduino_shield_on_mega.php

 

diger67
Offline
Зарегистрирован: 25.07.2015

Vis22, не внимательно читали мой пост. Там указано что проблеммы с подключением большого колличества устройств по SPI возникнут на UNO, и лучше использовать Mega2560 CPU board.

Получил платку на stm32f429ZIT6 c 4Мб SDRAM и RGB TFT 320x240. Приступаю к изучению.

TheMustafa
Offline
Зарегистрирован: 25.10.2015

Всем спасибо за отклик!

Понял, что под свои запросы надо использовать Мегу.

 

diger67 пишет:

Получил платку на stm32f429ZIT6 c 4Мб SDRAM и RGB TFT 320x240. Приступаю к изучению.

Тоже интересно будет узнать о результатах.

vlad1451
Offline
Зарегистрирован: 09.11.2015

Доброго всем времени суток. У меня есть такой вопрос. Пытаюсь победить дисплей от китайской копии i9500. Есть предположение, что он сделан на контроллере HX8357-D. В сети без проблем нашол даташит на данный контроллер, но вот незадача, в нем отсутствует информация по размеру чипа и его распиновка, тоесть страница (№16) пустая. Данные с этой страницы нужны для определения распиновки шлейфа дисплея. Помогите, если кто сможет!!!

Khludenkov
Offline
Зарегистрирован: 11.11.2015

У меня дисплей ILI9325 купленный на arduinobazar-е

https://arduinobazar.ru/displei-lcd-tft/54-ili9325-24-tft-lcd-sensornyj-displej-kupit-arduino-moskva-peterburg-dyoshevo.html

 

Есть хороший пример где этот дисплей подключается к меге16. Но там распиновка дисплея слегка друная. У моего, в частности есть пин V5. Это +5 Вольт? Подавал, не работает. Жалко, если спалил.

diger67
Offline
Зарегистрирован: 25.07.2015

Для тех кто купил дисплейчик R61581 и наблюдает пол экрана. Вычитал на вражеском сайте. Советуют подкорректировать в инициализации значение регистра 36. Ну или дополнить инициализацию следующим.

LCD_Write_COM(0x36);
LCD_Write_DATA(0x4A);//was 0x0A

Сам попробовать не могу, нет в наличии такого шилда.

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Пришёл китайкий экран 3.95' для Уны, с библиотекой diger67 всё работает) Спасибо)

kometa111
Offline
Зарегистрирован: 02.05.2014

Yarik.Yar пишет:

Пришёл китайкий экран 3.95' для Уны, с библиотекой diger67 всё работает) Спасибо)

экран ili9488 ? ili9327?  R61581? может фото ...

библиотека  http://178.130.34.198/Adafruit/Adafruit.rar из 545 поста ?

ничего не правил? initlcd.h ? 36 регистр?

IDE 1.6.6? 1.7.7?
 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

IDE 1.0.5, библиотека та, правил только разрешение в заголовочном файле, ILI9488)

(по клику - большее разрешение)

Next
Offline
Зарегистрирован: 01.09.2015

Yarik.Yar пишет:

Пришёл китайкий экран 3.95' для Уны, с библиотекой diger67 всё работает) Спасибо)

Ну да, наш дисплейчик с Araris. Гребенки под уно, а не под мегу. Для CD библиотеку нужно будет подправить по пинам. Насколько я помню в библиотеке они под мегу. Хотя может спутал с тачем.

kometa111
Offline
Зарегистрирован: 02.05.2014

Спасибо за быстрый ответ.

Ко мне такой экран только выехал.

Yarik.Yar пишет:

IDE 1.0.5, библиотека та, правил только разрешение в заголовочном файле, ILI9488)

в заголовочном файле - это тут : Adafruit_TFTLCD.cpp ?

SD , Touch проверял?

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

Заголовочный - это .h от  header)( хотя, если честно, не помню, где настраивается разрешение...может и в .срр)Тач проверял, работает, SD не проверял, завтра проверю, отпишу.

 

AlexeiBrizgalov
Offline
Зарегистрирован: 21.11.2015

Можно спросить, только сильно не угарайте пожалуйста.
Приобрёл я значит дисплей на eBay 330Х480 пикселей (первый раз в жизни),
дисплей оказался на контроллере ILI9488, во всяком случае так написано
в кратком описании к дисплею на eBay, но и на обратной стороне самого
дисплея тоже проштамповано 9488. Вот ссылка:
http://www.ebay.com/itm/141647130960?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
Я занимаюсь программированием контроллеров ATmel, в данном случае написал программку для контроллера
ATmega328, инициализация: 
**********Сброс после подачи питания********
RST_ON; Delay (0x0FFF);
RST_OFF; Delay (0x0FFF);
RST_ON; Delay (0x0FFF);
CS_ON; WR_ON; RS_OFF;
Delay (0xFFFF); CS_OFF;

Delay (0x00FF);
************Инит*************
LCD_Write_COM(0xE0);//PGAMCTRL (Positive Gamma Control) (263 номер стр. в PDF)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x07);
LCD_Write_DATA(0x10);
LCD_Write_DATA(0x09);
LCD_Write_DATA(0x17);
LCD_Write_DATA(0x0B);
LCD_Write_DATA(0x40);
LCD_Write_DATA(0x8A);
LCD_Write_DATA(0x4B);
LCD_Write_DATA(0x0A);
LCD_Write_DATA(0x0D);
LCD_Write_DATA(0x0F);
LCD_Write_DATA(0x15);
LCD_Write_DATA(0x16);
LCD_Write_DATA(0x0F);

LCD_Write_COM(0xE1);//NGAMCTRL (Negative Gamma Control)(264)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x1A);
LCD_Write_DATA(0x1B);
LCD_Write_DATA(0x02);
LCD_Write_DATA(0x0D);
LCD_Write_DATA(0x05);
LCD_Write_DATA(0x30);
LCD_Write_DATA(0x35);
LCD_Write_DATA(0x43);
LCD_Write_DATA(0x02);
LCD_Write_DATA(0x0A);
LCD_Write_DATA(0x09);
LCD_Write_DATA(0x32);
LCD_Write_DATA(0x36);
LCD_Write_DATA(0x0F);

LCD_Write_COM(0x13);//Normal Display Mode ON (167)

LCD_Write_COM(0xB1);//Frame Rate Control (In Normal Mode/Full Colors) (220)
LCD_Write_DATA(0x70);
LCD_Write_DATA(0x11);

LCD_Write_COM(0xB4);//Display Inversion Control (224)
LCD_Write_DATA(0x00);//00=Column inversion

LCD_Write_COM(0xC0);//Power Control 1 (236)
LCD_Write_DATA(0x17);
LCD_Write_DATA(0x15);

LCD_Write_COM(0xC1);//Power Control 2 (238)
LCD_Write_DATA(0x41);

LCD_Write_COM(0xC5);//VCOM Control (242)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x0A); //
LCD_Write_DATA(0x80); //
//Lcd_Write_Data(0x40);//No

LCD_Write_COM(0xB6);//Display Function Control (227)
LCD_Write_DATA(0x02);

LCD_Write_COM(0x36);//Memory Access Control (191)
LCD_Write_DATA(0x00);//48

LCD_Write_COM(0x3A);//Interface Pixel Format (199) 
LCD_Write_DATA(0x55);//16 бит!

LCD_Write_COM(0xE9); //Set Image Function (269)
LCD_Write_DATA(0x00);

LCD_Write_COM(0xF7); //Adjust Control 3 (274)
LCD_Write_DATA(0xA9);
LCD_Write_DATA(0x51);
LCD_Write_DATA(0x2C);
LCD_Write_DATA(0x82);

LCD_Write_COM(0x11); // Sleep OUT
Delay (0x0FFF);
LCD_Write_COM(0x29);//Display ON (173)

LCD_Write_COM(0x2A);//Column Address Set (174)
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x00);//
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x0F);// горизонталь 16 пикс

LCD_Write_COM(0x2B);//Page Address Set (176)
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x00);//
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x0F);//вертикаль 16 пикс

LCD_Write_COM(0x2C); //Write_memory_start (178)
 

**********На всякий случай тактирование (протокол)*******
//Импульс стоба для команды.
void Impuls_comand (void)

Delay (1);//
WR_OFF; Delay (1);//
WR_ON;
}
//Импульс стоба для данных.
void Impuls_data (void)
{ Delay (1);//
RS_ON;
Impuls_comand ();
RS_OFF;
}

Библиотеки не использую и создавать не умею, пока не вижу необходимости.
Программа инициализации отрабатывает один раз после включения контроллера.
После отработки инициализации, я В РУЧНУЮ (от кнопки) даю данные пикселя. То есть, сделаны
маленькие подпрограммки, которые, во первых предотвращают дребезг кнопки, во вторых выдают
один байт информации, либо два (два здесь не описываю), согласно протокола 8080. Данные в дисплей передаются в восьми битном режиме.
Всё это сделано для освоения работы TFT.

Что происходит: при подаче первого байта на дисплее ни чего не появляется, далее даю следующий байт.
Появляется пиксель! (старший=FCh, младший=00h по идее это код красного света пикселя) Но, пиксель появляется
ЧЁРНОГО цвета, вопрос почему? Спрашивается, почему именно чёрного, потому что видно отключение пикселя. Дело в
том, что после инициализации экран становится слегка серым.
Далее даю еще три точно такие же последовательности = FCh, такт(WR), 00h, такт(WR), происходит ещё три отключения пикселя.
Далее ещё такт, и появляется красный пиксель, даю ещё четыре раза FCh, такт(WR), 00h, такт(WR), и после четвёртого такта снова пиксель отключается, и так далее. Вот это первый вопрос, почему же так происходит, ведь по идее должно быть после каждого FCh, такт(WR), 00h, такт(WR), появиться красный пиксель. Ведь при инициализации Comand 0x3A = 0x55 (формат пикселя 16 бит!).
Естественно, все пиксели закрашиваются по порядку, то есть в строчку, и получается квадрат 16Х16 писелей, потому что задано при инициализации Comand 0x2A = 0x0F, и Comand 0x2B = 0x0F.

Второй вопрос: Почему то нулевой пиксель появляется не в самом левом и верхнем углу, а чуть ниже, примерно с отступом от верха на 40, и от левого края на 60 пикселей, хотя при инициализации Comand 0x2A = 0x00, и Comand 0x2B = 0x00.

Пробовал: Значит, у меня ATmega328 работает с кварцем на 20Мгц, делал зацикленность FCh, такт(WR), 00h, такт(WR), в основной программе обсалютно без всяких задержек, получалось = квадрат 16Х16 закрашивается красным но с чёрными полосками. Так же пробовал с другими частотами, эффект абсолютно не меняется. Вариант инициализации есть так же на eBay, на той же странице где и предлагается данный дисплей, правда там предложено для ILI9327; всё работает но с пикселем та же беда, и первый пиксель тоже почему-то не в самом верху, и не в самом краю слева.

Не пробовал: читать ID код. А есть ли смысл, ведь инициализация проходит нормально? Например на изменение данных в регистре Comand 0x2A,Comand 0x2B, нормально откликается, то есть размер квадрата, ну или прямоугольника реально соответствует заданным количествам пикселей. Не манипулировал с IM0-IM3 потому как не знаю рапиновки шлейфа на шилде.

Не верю: Что данные в дисплей нужно впихивать синхронно в такт с кадром, тогда спрашивается, а почему же тогда адресация
пикселя не нарушается? Ведь они появляются последовательно, как и логично должно быть.

Мысль: Тупо дисплей куплен дешёвый, и/или кристал в нём не доделанный (Брак).

P.S. Помоги разобраться пожалуйста. Да, и ещё чуть не забыл, ну нет у меня ни какого Arduino, есть просто самопальная плата с контролллером, и программатором, и программирую я CodeVisionAVR, но я не противник Arduino или IAR, просто мне пока тут комфортно. 

 

diger67
Offline
Зарегистрирован: 25.07.2015

AlexeiBrizgalov пишет:

Что происходит: при подаче первого байта на дисплее ни чего не появляется, далее даю следующий байт.
Появляется пиксель! (старший=FCh, младший=00h по идее это код красного света пикселя) Но, пиксель появляется
ЧЁРНОГО цвета, вопрос почему?

Проверьте настройки по регистрам. Конечно если это действительно ili9488...... Что касается ардуино, ставим IDE Arduino. Пишем программу используя нужные библиотеки. Компилируем, берем HEX файл и пишем как обычно в контроллер. Учитывая что по умолчанию все arduino работают на 16 МГц. Подправив файл условий компиляции можно ставить свой кварц. Ардуино расчитано на работу с кварцами 8, 16, 20.

 

LCD_Write_COM(0x01); //reset
      delay_ms(15);

      LCD_Write_COM(0x11);//sleep out
      delay_ms(20);

      LCD_Write_COM(0x28); //display off
      delay_ms(5);
      LCD_Write_COM(0xCF); //power control b
      LCD_Write_DATA(0x00);
      LCD_Write_DATA(0x83); //83 81 AA C1
      LCD_Write_DATA(0x30);
      LCD_Write_COM(0xED); //power on seq control
      LCD_Write_DATA(0x64); //64 67
      LCD_Write_DATA(0x03);
      LCD_Write_DATA(0x12);
      LCD_Write_DATA(0x81);
      LCD_Write_COM(0xE8); //timing control a
      LCD_Write_DATA(0x85);
      LCD_Write_DATA(0x00); // 01
      LCD_Write_DATA(0x78); //79 78
      LCD_Write_COM(0xCB); //power control a
      LCD_Write_DATA(0x39);
      LCD_Write_DATA(0X2C);
      LCD_Write_DATA(0x00);
      LCD_Write_DATA(0x34);
      LCD_Write_DATA(0x02);
      LCD_Write_COM(0xF7); //pump ratio control
      LCD_Write_DATA(0x20);
      LCD_Write_COM(0xEA); //timing control b
      LCD_Write_DATA(0x00);
      LCD_Write_DATA(0x00);
      LCD_Write_COM(0xC0); //power control 2
      LCD_Write_DATA(0x26); //26 25 23
      LCD_Write_COM(0xC1); //power control 2
      LCD_Write_DATA(0x11);// 11 10
      LCD_Write_COM(0xC5); //vcom control 1
      LCD_Write_DATA(0x35);// 35 3E
      LCD_Write_DATA(0x3E);// 3E 28
      LCD_Write_COM(0xC7); //vcom control 2
      LCD_Write_DATA(0xBE); //BE 94 86
      LCD_Write_COM(0xB1); //frame control
      LCD_Write_DATA(0x00);
      LCD_Write_DATA(0x1B); //1B 70 18
      LCD_Write_COM(0xB6); //display control
      LCD_Write_DATA(0x0A);// 0A 08
      LCD_Write_DATA(0x82);
      LCD_Write_DATA(0x27);
      LCD_Write_DATA(0x00);
      LCD_Write_COM(0xB7); //emtry mode
      LCD_Write_DATA(0x07);
      LCD_Write_COM(0x3A); //pixel format
      LCD_Write_DATA(0x55); //16bit
      LCD_Write_COM(0xE0);
      LCD_Write_DATA(0x0F);
      LCD_Write_DATA(0x31);
      LCD_Write_DATA(0x2B);
      LCD_Write_DATA(0x0C);
      LCD_Write_DATA(0x0E);
      LCD_Write_DATA(0x08);
      LCD_Write_DATA(0x4E);
      LCD_Write_DATA(0xF1);
      LCD_Write_DATA(0x37);
      LCD_Write_DATA(0x07);
      LCD_Write_DATA(0x10);
      LCD_Write_DATA(0x03);
      LCD_Write_DATA(0x0E);
      LCD_Write_DATA(0x09);
      LCD_Write_DATA(0x00);
      LCD_Write_COM(0x20);
      LCD_Write_COM(0x36); //mem access
      LCD_Write_DATA((1<<3)|(1<<6));
      //LCD_Write_DATA((1<<3)|(1<<7)); //rotate 180
      LCD_Write_COM(0x29); //display on
      LCD_Write_COM(0x2C);
      delay_ms(5);
AlexeiBrizgalov
Offline
Зарегистрирован: 21.11.2015


diger67, Спасибо за предложенный код инициализации, но не пошло и с ним. причём совсем не пошло, то есть после инициализации экран остаётся белым как будто на него просто подали питание. Но, снизу экрана, это примерно миллиметров шесть есть серое поле. То есть получается инициализация есть, но видимо какая-то ошибка. На дальнейшие подачи кода данных не реагирует, то есть пиксели не появляются/не отключаются. Пробовал: исключать из программы инициализации команды E8h, EAh, EDh, C7h, потому как их описания нет в PDF к ILI9488, в общем эффекта ни какого не дало.Вот, предлагаю фото дисплея (только сегодня разобрался как закидывать сюда фотки), может быть это что Вам даст.

{Почему-то на данный сайт удаётся загрузить только две фотки, может быть Вы мне скажите почему так.} Придётся вернуться на код который ранее работал (код ниже), и ешё по экспериментировать исходя из предложенного Вами кода. Может быть что-то и получится, хотя я в этом уже и не уверен.

<strong>LCD_Write_COM(0xE0);//PGAMCTRL (Positive Gamma Control) (263)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x07);
LCD_Write_DATA(0x10);
LCD_Write_DATA(0x09);
LCD_Write_DATA(0x17);
LCD_Write_DATA(0x0B);
LCD_Write_DATA(0x40);
LCD_Write_DATA(0x8A);
LCD_Write_DATA(0x4B);
LCD_Write_DATA(0x0A);
LCD_Write_DATA(0x0D);
LCD_Write_DATA(0x0F);
LCD_Write_DATA(0x15);
LCD_Write_DATA(0x16);
LCD_Write_DATA(0x0F);

	LCD_Write_COM(0xE1);//NGAMCTRL (Negative Gamma Control)(264)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x1A);
LCD_Write_DATA(0x1B);
LCD_Write_DATA(0x02);
LCD_Write_DATA(0x0D);
LCD_Write_DATA(0x05);
LCD_Write_DATA(0x30);
LCD_Write_DATA(0x35);
LCD_Write_DATA(0x43);
LCD_Write_DATA(0x02);
LCD_Write_DATA(0x0A);
LCD_Write_DATA(0x09);
LCD_Write_DATA(0x32);
LCD_Write_DATA(0x36);
LCD_Write_DATA(0x0F);
    LCD_Write_COM(0x13);//Normal Display Mode ON (167)
	LCD_Write_COM(0xB1);//Frame Rate Control (In Normal Mode/Full Colors) (220)
LCD_Write_DATA(0x80);
LCD_Write_DATA(0x11);

	LCD_Write_COM(0xB4);//Display Inversion Control (224)
LCD_Write_DATA(0x00);//00=Column inversion

	LCD_Write_COM(0xC0);//Power Control 1 (236)
LCD_Write_DATA(0x17);
LCD_Write_DATA(0x15);

	LCD_Write_COM(0xC1);//Power Control 2 (238)
LCD_Write_DATA(0x41);

	LCD_Write_COM(0xC5);//VCOM Control (242)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x0A); //0A
LCD_Write_DATA(0x80); //80
//Lcd_Write_Data(0x40);//No

	LCD_Write_COM(0xB6);//Display Function Control (227)
LCD_Write_DATA(0x02);

	LCD_Write_COM(0x36);//Memory Access Control (191)
LCD_Write_DATA(0x00);//48
  
	LCD_Write_COM(0x3A);//Interface Pixel Format (199)  
LCD_Write_DATA(0x55);

	LCD_Write_COM(0xE9); //Set Image Function (269)
LCD_Write_DATA(0x00);
 
	LCD_Write_COM(0xF7); //Adjust Control 3 (274)
LCD_Write_DATA(0xA9);
LCD_Write_DATA(0x51);
LCD_Write_DATA(0x2C);
LCD_Write_DATA(0x82);
      LCD_Write_COM(0x11);		// Sleep OUT
       Delay (0xFFFF);
      LCD_Write_COM(0x29);//Display ON (173)
    
     LCD_Write_COM(0x2A);//Column Address Set (174)
      LCD_Write_DATA (0x00);
      LCD_Write_DATA (0x00);//58
      LCD_Write_DATA (0x00);
      LCD_Write_DATA (0x09);//98   
    
            LCD_Write_COM(0x2B);//Page Address Set (176)
      LCD_Write_DATA (0x00);
      LCD_Write_DATA (0x00);//
      LCD_Write_DATA (0x00);
      LCD_Write_DATA (0x09);//C0
      
      LCD_Write_COM(0x2C); //Write_memory_start (178)</strong>

Есть вопрос.

1. Имеет ли значение последовательность команд при инициализации?

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

Araris
Offline
Зарегистрирован: 09.11.2012

Интересные фото, Алексей, а расскажите пожалуйста о проводке от +5V к U1, я в этом месте (безрезультатно) экспериментировал, когда пытался научиться управлять подсветкой экрана, а у Вас он для чего ?

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Товарищи, сворачивайте большие куски кода! А то полгода тему листать приходится.

И жирным шрифтом не злоупотребляйте...

AlexeiBrizgalov,

к сожалению, иногда контроллеры попадаются и вообще левые...ID читали?

AlexeiBrizgalov
Offline
Зарегистрирован: 21.11.2015
Уважаемый Araris,
конечно я вам скажу для чего этот проводок от 3.3 вольт.
Это же питание шинных формирователей (две микросхемы 74НС245)
ихние двадцатые ноги именно туда и выведены на контакт 3,3V.
То есть, если мы подали на питание этих микросхем 3,3V, то и
уровни сигналов для контроллера в свмом дисплее будут тоже будут
3.3V.
Внимание! Дисплей подключаю не к Arduino.
P.S. найди меня в Вконтакте в сообществе "РадиоЭлектроника.вк",
пообщаемся. Ищи по фамилии и имени, только на русском.

 

AlexeiBrizgalov
Offline
Зарегистрирован: 21.11.2015
Уважаемый Yarik.Yar,
Конечно больше не буду жирным шрифтом писать, и код тоже в следущий
раз будет мелким шрифтом. Дело в том что на форуме такого плана в первые
и еще не совсем вник как тут жить, и пользоваться благами.
1. Как сворачивать большие куски кода?
2. Как втыкать сюда фотки?
3. ID контроллера не читал, а есть смысл? Ведь инициализация проходит.
По сути, контроллер отзывается на команды при инициализации.
 
4. ПОЧЕМУ УДАЛИЛИ ФОТКИ ИЗ МОЕГО ПРЕДЫДУЩЕГО ПИСЬМА?
    объясните тогда политику пользования данным форумом.
 
Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Сворачивать код - во вкладке "Дополнительно" при вставке кода.

Фото вставлять с помощью опции "фото" при создании статьи.

Прошу прощения за оффтоп.

 

Удаление фотографий - побочный эффект при редактировании поста.

Если Вы дадите мне ссылки на фото, я вставлю их в пост.

 

AlexeiBrizgalov
Offline
Зарегистрирован: 21.11.2015

Вот пожалуйста ссылочка, спасибо за внимание!

http://arduino.ru/imce?app=ckeditor%7Csendto%40ckeditor_fileUrl%7C&CKEdi...

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Хм, вы можете залить фото на rghost.ru ?

Барахлит файлменеджер.

AlexeiBrizgalov
Offline
Зарегистрирован: 21.11.2015
Для diger67.
По экспериментировав с предложенным вами кодом, я выяснил;
дисплей, просле инициализации включается белым и внизу чёрная полоса,
из-за регистра B6h, всё таки данные желательно ставить 02h.
Значит, теперь дисплей нормально инициализируется с вашим кодом,
но почему-то пиксели стали синим цветом, хотя данные пикселя я по прежнему
даю F8h и 00h, поочерёдно (по идее красный). Но чередованием с чёрным цветом.
То есть, по сути всё так же осталось, только единственное изменился цвет пикселя.
И нулевой пиксель по прежнему не с улевой позиции, то есть отступ от верха 10мм,
и слева тоже 10мм.
 
P.S. почему изменился цвет - это скорее всего в 36h регистре, бит BGR, нужно изменить
всего лишь.

 

AlexeiBrizgalov
Offline
Зарегистрирован: 21.11.2015

Уважаемый Yarik.Yar,

Подскажите что нибудь по дисплею. Какое Ваше мнение? Может его Выкинуть?

Я теперь заказал вот такой, как вы думаете нормальный?

http://www.ebay.com/itm/171406660092?_trksid=p2060353.m2749.l2649&ssPage...

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Моё мнение - надо читать ID. Это разрешит все вопросы.
Проблема в том, что у контроллеров ILIxxxx инициализации похожи, различаются лишь чуть-чуть, посему он может инициализироваться, но не так слегка.
Короче, ID в студию!)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

А по поводу того дисплея, что вы заказали - это лотерея) мне два аза повезло, а один нет..)

Araris
Offline
Зарегистрирован: 09.11.2012

AlexeiBrizgalov пишет:

Уважаемый Araris,
конечно я вам скажу для чего этот проводок от 3.3 вольт.
Это же питание шинных формирователей (две микросхемы 74НС245)
ихние двадцатые ноги именно туда и выведены на контакт 3,3V.
То есть, если мы подали на питание этих микросхем 3,3V, то и
уровни сигналов для контроллера в свмом дисплее будут тоже будут
3.3V.
Внимание! Дисплей подключаю не к Arduino.
P.S. найди меня в Вконтакте в сообществе "РадиоЭлектроника.вк",
пообщаемся. Ищи по фамилии и имени, только на русском.

Благодарю за подробный ответ. U1, стало быть, "не оно".

P.S. С соцсетями у меня, увы, не сложилось как-то...

AlexeiBrizgalov
Offline
Зарегистрирован: 21.11.2015

 

Благодарю за подробный ответ. U1, стало быть, "не оно".

Araris, к сожалению регулировка яркости подсветки здесь не получится.
Светодиоды не выведены на разъём. А U1 это всего лишь стабилизатор на
3,3 вольта для питания контроллера дисплея.
У меня к вам несколько вопросов.
1, У Вас дисплей сразу пошёл?
2, Изображение на весь экран?
3, Используете Arduin на ATMega?
Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Можно отвечу я?)

Экраны у нас одинаковые)

Поехало сразу, на полный экран, работаю с Arduino MEGA.

 

Araris
Offline
Зарегистрирован: 09.11.2012

Yarik.Yar пишет:

Можно отвечу я?)

Экраны у нас одинаковые)

Поехало сразу, на полный экран, работаю с Arduino MEGA.

Я то же самое отвечу )).

В скетче присутствуют

#include <Adafruit_GFX.h> #include <Adafruit_TFTLCD.h> #include <TouchScreen.h> 

В Adafruit_TFTLCD выставил #define TFTWIDTH   320 #define TFTHEIGHT  480 
diger67
Offline
Зарегистрирован: 25.07.2015

Интересно, весь шилд питатся 5 в. Вообщето контроллер индикатора питается 3.3 в. В случае использования питания процессора 3.3 вольта его стабильная работа гарантированна с кварцем 11 -12 МГц. Как вы питаете схему? Я так на кортекс перенес эту библиотеку, вот stm32f429zgt готовлю в бой.

 

 

 

 

 

 

 

 

 

Такую платку сделал для TFT без шилда.

 

diger67
Offline
Зарегистрирован: 25.07.2015

AlexeiBrizgalov пишет:

Уважаемый Yarik.Yar,

Подскажите что нибудь по дисплею. Какое Ваше мнение? Может его Выкинуть?

Я теперь заказал вот такой, как вы думаете нормальный?

http://www.ebay.com/itm/171406660092?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

Выкидывать наверное рановато.

По поводу дисплея, хорошая вещь. Одно но, нужно будет ваять буферы на НС245 для согласования с мегой или питать всю схему от 3.3 вольта. У меня такой работает с ARM. Там насколько помню шина 16 бит и стоит контроллер тача.

Вот что удалось сделать на базе данного дисплея, библиотеки Adaruit и все это зашито в stm32f103vet.

 http://178.130.34.198/adafruit/picture/video_1.mp4

slider
Offline
Зарегистрирован: 17.06.2014

по TFT LCD shield 3.5" arduino mega ili9488 480x320красный меговский шилд, дисплей FPC-A35242N01QI-A .

Решение описал в соседней ветке http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd-krasnyi-megovskii-mega-2560-r3-resheno-kak-reshit-drugie , чтоб не затерялось здесь, а то уже одно и тоже спрашивают, хотя ответы были даны.

+ написанная читалка ID и методика решения других шилдов.

было

стало

дело было в неправильной разводке платы на фабрике. или просто неподходящий под неё дисплей со шлейфом 9/18 бит . вместо нужных 8/16 бит.

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

 

kometa111
Offline
Зарегистрирован: 02.05.2014

slider пишет:

по TFT LCD shield 3.5" arduino mega ili9488 480x320красный меговский шилд, дисплей FPC-A35242N01QI-A .

мега+красный шилд 3,5", читалка ID выдает в сериал монитор :

start...
UTFT normal pin29-22(PORTA)-byteH(DB15-0) , pin37-30(PORTC)-byteL(DB7-0)

register 00h for ILI9320(9320), ILI9325(9325), ILI9326(9326), SSD1289(1289,8989)
HX8347D(047), HX8347G(075), HX8352A(052), HX8352B(065), HX8352C(072)
R61509V(B509), R61505W(C505), SPFD5420A(5408)
if (0 93 0 27) -> 8bit . if (93 27 93 27) -> 16bit
register 0 0
1 Parameter 0 0
2 Parameter 0 0
3 Parameter 0 0
4 Parameter 0 0
5 Parameter 0 0
6 Parameter 0 0

register EFh for ILI9327(0 02 04 93 27 FF),
register 0 EF
1 Parameter 0 EF
2 Parameter 0 EF
3 Parameter 0 EF
4 Parameter 0 EF
5 Parameter 0 EF
6 Parameter 0 EF

register BFh for ILI9481(0 0 94 81 xx xx)
register 0 BF
1 Parameter 0 BF
2 Parameter 0 BF
3 Parameter 0 BF
4 Parameter 0 BF
5 Parameter 0 BF
6 Parameter 0 BF

register D3h for ILI9488(0 0 94 88 xx xx)
register 0 D3
1 Parameter 0 D3
2 Parameter 0 D3
3 Parameter 0 D3
4 Parameter 0 D3
5 Parameter 0 D3
6 Parameter 0 D3

register 04h for HX8357(?DA-DC), HX8353(?80-85),
register 0 4
1 Parameter 0 4
2 Parameter 0 4
3 Parameter 0 4
4 Parameter 0 4
5 Parameter 0 4
6 Parameter 0 4

Что делать: отрывать дисплей - отпаивать 1 и вторую и замыкать между собой?

(днём постараюсь сказать спасибо)