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

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

Ууууу... как все запущено :-) 

8строка , вместо nic_rus_font_16x24 DefaultFont напиши, регистр букАф не помню :-) 

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

В 15 тоже поменяй

И еще, нафиг тебе мой скетч дался?

А вообще, Артемка, учи мат часть и старайся не хамить людям.

INA
Offline
Зарегистрирован: 24.05.2014

Запустил сегодня дисплей на работе.
Дело было не только в "...бобине..."
В общем, был небольшой дефект разъёма.
Всё прозванивалось, вроде как нормально, но где-то видимо был "косяк".
Прогрел всё это дело феном, залил то, что прислал китаец (то, что выкладывал Бублик) и всё засветилось.
Немного омрачило радость то, что отображается картинка довольно медленно.
Ну да ладно, с этим как нибудь решим.
Tuchscreen ещё не испытывал - некогда пока что.

Всем большое спасибо за помощь и внимание к моей проблеме!
Успехов!

StrangerM
Offline
Зарегистрирован: 02.11.2013

Медленным он и будет. Довольно большой дисплей с 8 битам интерфейсом. А я говорил - елозить паяльником. :-)

INA
Offline
Зарегистрирован: 24.05.2014

art100 пишет:

и через год мне дают мыло Карлсена 

... и верёвку из Китая...

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

StrangerM пишет:

Медленным он и будет. Довольно большой дисплей с 8 битам интерфейсом. А я говорил - елозить паяльником. :-)

да даже с 16 битами один фиг очень медленный :)

Soucher
Offline
Зарегистрирован: 08.06.2014

Парни, а как этот дисплей подружить в Due? На меге работает, переключаю порт и плату на Due и не компилируется код

Arduino: 1.5.6-r2 (Windows 7), Board: "Arduino Due (Programming Port)"
Build options changed, rebuilding all
In file included from UTFT_Demo_400x240.pde:13:
C:\Program Files (x86)\Arduino\libraries\UTFT/UTFT.h:64: fatal error: WProgram.h: No such file or directory
compilation terminated.

 

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

Soucher пишет:

Парни, а как этот дисплей подружить в Due? На меге работает, переключаю порт и плату на Due и не компилируется код

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

PS...библиотека старая... она о дуе узнала только с какой то там версии, не так давно

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

Soucher пишет:

Парни, а как этот дисплей подружить в Due?

Этот дисплей заточен под 5 вольтовую МЕГУ у ДУЭ рабочее напряжение 3,3 вольта так что необходимо закоротить согласующие резисторные сборки (при трех вольтах они просто не нужны)

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

Всем привет!

Приобрел такой шилд: http://ru.aliexpress.com/item/3-5-inch-TFT-Touch-LCD-Screen-Display-Module-For-Arduino-UNO-R3-HIGH-QUALITY-Free/1786048346.html?isOrig=true#extend

Фото https://www.dropbox.com/s/ni8ggkvvy21gwb7/2014-06-17%2020.31.27.jpg

После общения с продавцом выяснилось, что основан на процессоре ILI9327 с 8-ми битным интерфейсом. Как упоминалось выше с актуальной UTFT подружить не удалось, из-за 8-ми битного интерфейса с библиотекой, что предоставил товарищ Бублик тоже, как я понимаю из-за иного расположения дата пинов. Переписывать библиотеку думалкой не дорос.

Продавец поделился рабочим кодом, у меня (MEGA 2560 IDE 1.05 и 1.5.6-r2) дисплей работет, тачскрин и SD не пробовал.

################

Из плюсов - работает. 

Из минусов - работает медленно, нет шрифтов.

################

//   ic:ili9327  
#define LCD_RD   A0
#define LCD_WR   A1     
#define LCD_RS   A2        
#define LCD_CS   A3       
#define LCD_REST A4

void Lcd_Writ_Bus(char VH)
{
  unsigned char i,temp,data; 
  data=VH;
  for(i=8;i<=9;i++)
  {
    temp=(data&0x01);
    if(temp)
      digitalWrite(i,HIGH);
    else
      digitalWrite(i,LOW);
    data=data>>1;
  }	
  for(i=2;i<=7;i++)
  {
    temp=(data&0x01);
    if(temp)
      digitalWrite(i,HIGH);
    else
      digitalWrite(i,LOW);
    data=data>>1;
  }	 

  digitalWrite(LCD_WR,LOW);
  digitalWrite(LCD_WR,HIGH);
}


void Lcd_Write_Com(char VH)  
{   
  digitalWrite(LCD_RS,LOW);
  Lcd_Writ_Bus(VH);
}

void Lcd_Write_Data(char VH)
{
  digitalWrite(LCD_RS,HIGH);
  Lcd_Writ_Bus(VH);
}

void Lcd_Write_Com_Data(int com,int dat)
{
  Lcd_Write_Com(com);
  Lcd_Write_Data(dat);
}

void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
  Lcd_Write_Com(0x2a); // Set_column_address 4 parameters
  Lcd_Write_Data(x1>>8);
  Lcd_Write_Data(x1);
  Lcd_Write_Data(x2>>8);
  Lcd_Write_Data(x2);

  Lcd_Write_Com(0x2b); // Set_page_address 4 parameters
  Lcd_Write_Data(y1>>8);
  Lcd_Write_Data(y1);
  Lcd_Write_Data(y2>>8);
  Lcd_Write_Data(y2);

  Lcd_Write_Com(0x2c); // Write_memory_start								 
}

void Lcd_Init(void)
{
  digitalWrite(LCD_REST,HIGH);
  delay(5); 
  digitalWrite(LCD_REST,LOW);
  delay(15);
  digitalWrite(LCD_REST,HIGH);
  delay(15);

  digitalWrite(LCD_CS,HIGH);
  digitalWrite(LCD_WR,HIGH);
  digitalWrite(LCD_CS,LOW);  //CS

  Lcd_Write_Com(0xE9);
  Lcd_Write_Data(0x20);

  Lcd_Write_Com(0x11); //Exit Sleep
  delay(100);

  Lcd_Write_Com(0xD1);
  Lcd_Write_Data(0x00);
  Lcd_Write_Data(0x71);
  Lcd_Write_Data(0x19);

  Lcd_Write_Com(0xD0);
  Lcd_Write_Data(0x07);
  Lcd_Write_Data(0x01);
  Lcd_Write_Data(0x08);

  Lcd_Write_Com(0x36);
  Lcd_Write_Data(0x48);

  Lcd_Write_Com(0x3A);
  Lcd_Write_Data(0x05);

  Lcd_Write_Com(0xC1);
  Lcd_Write_Data(0x10);
  Lcd_Write_Data(0x10);
  Lcd_Write_Data(0x02);
  Lcd_Write_Data(0x02);

  Lcd_Write_Com(0xC0); //Set Default Gamma
  Lcd_Write_Data(0x00);
  Lcd_Write_Data(0x35);
  Lcd_Write_Data(0x00);
  Lcd_Write_Data(0x00);
  Lcd_Write_Data(0x01);
  Lcd_Write_Data(0x02);

  Lcd_Write_Com(0xC5); //Set frame rate
  Lcd_Write_Data(0x04);

  Lcd_Write_Com(0xD2); //power setting
  Lcd_Write_Data(0x01);
  Lcd_Write_Data(0x44);

  Lcd_Write_Com(0xC8); //Set Gamma
  Lcd_Write_Data(0x04);
  Lcd_Write_Data(0x67);
  Lcd_Write_Data(0x35);
  Lcd_Write_Data(0x04);
  Lcd_Write_Data(0x08);
  Lcd_Write_Data(0x06);
  Lcd_Write_Data(0x24);
  Lcd_Write_Data(0x01);
  Lcd_Write_Data(0x37);
  Lcd_Write_Data(0x40);
  Lcd_Write_Data(0x03);
  Lcd_Write_Data(0x10);
  Lcd_Write_Data(0x08);
  Lcd_Write_Data(0x80);
  Lcd_Write_Data(0x00);

  Lcd_Write_Com(0x2A); 
  Lcd_Write_Data(0x00);
  Lcd_Write_Data(0x00);
  Lcd_Write_Data(0x00);
  Lcd_Write_Data(0xeF);

  Lcd_Write_Com(0x2B); 
  Lcd_Write_Data(0x00);
  Lcd_Write_Data(0x00);
  Lcd_Write_Data(0x01);
  //  Lcd_Write_Data(0x3F);
  Lcd_Write_Data(0x8F); // on internet

  Lcd_Write_Com(0x29); //display on      

  Lcd_Write_Com(0x2C); //display on 

  digitalWrite(LCD_CS,HIGH);
}

void H_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)                   
{	
  unsigned int i,j;
  Lcd_Write_Com(0x02c); //write_memory_start
  digitalWrite(LCD_RS,HIGH);
  digitalWrite(LCD_CS,LOW);
  l=l+x;
  Address_set(x,y,l,y);
  j=l*2;
  for(i=1;i<=j;i++)
  {
    Lcd_Write_Data(c);
  }
  digitalWrite(LCD_CS,HIGH);   
}

void V_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c)                   
{	
  unsigned int i,j;
  Lcd_Write_Com(0x02c); //write_memory_start
  digitalWrite(LCD_RS,HIGH);
  digitalWrite(LCD_CS,LOW);
  l=l+y;
  Address_set(x,y,x,l);
  j=l*2;
  for(i=1;i<=j;i++)
  {
    Lcd_Write_Data(c);
  }
  digitalWrite(LCD_CS,HIGH);   
}

void Rect(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)
{
  H_line(x  , y  , w, c);
  H_line(x  , y+h, w, c);
  V_line(x  , y  , h, c);
  V_line(x+w, y  , h, c);
}

void Rectf(unsigned int x,unsigned int y,unsigned int w,unsigned int h,unsigned int c)
{
  unsigned int i;
  for(i=0;i<h;i++)
  {
    H_line(x  , y  , w, c);
    H_line(x  , y+i, w, c);
  }
}

void LCD_Clear(unsigned int j)                   
{	
  unsigned int i,m;
  Lcd_Write_Com(0x02c); //write_memory_start
  digitalWrite(LCD_RS,HIGH);
  digitalWrite(LCD_CS,LOW);
  Address_set(0,0,479,399);

  for(i=0;i<480;i++)
    for(m=0;m<400;m++)
    {
      Lcd_Write_Data(j);
    }
  digitalWrite(LCD_CS,HIGH);   
}

void setup()
{
  for(int p=2;p<10;p++)
  {
    pinMode(p,OUTPUT);
  }
  pinMode(A0,OUTPUT);
  pinMode(A1,OUTPUT);
  pinMode(A2,OUTPUT);
  pinMode(A3,OUTPUT);
  pinMode(A4,OUTPUT);
  digitalWrite(A0, HIGH);
  digitalWrite(A1, HIGH);
  digitalWrite(A2, HIGH);
  digitalWrite(A3, HIGH);
  digitalWrite(A4, HIGH);
  Lcd_Init();
  LCD_Clear(0x00);
}

void loop()
{  

  for(int i=0;i<1000;i++)
  {
    Rect(random(300),random(300),random(300),random(300),random(65535)); // rectangle at x, y, with, hight, color
  }
  LCD_Clear(0x00);
}

В аттаче скетч что выше и для тачскрина, также распиновка модуля и даташит для ILI9327.  https://www.dropbox.com/s/0jnvon9r63qe38y/uno%203.5inch.rar

###################

Оффтоп:

Потратил часов 20 что бы подружить хоть с какой-то из графических библиотек, что нашел на просторах интернета, безрезультатно. Решил последовать совету много выше - текущий шилд в топку, а на сэкономленные за лекарства от нервов купить нормальный шилд.

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

Китайцы НЕПОБЕДИМЫ!!!
Или "счастливым" обладателям данного шилда, посвящается =)

240х400 ILI9327 8Bit

Грустную историю о том как мне прислали вместо правильного шилда

480х320 R61581 16bit

такой как на верхнем фото, я рассказывал в 88 сообщении данной ветки. Но мы не привыкли отступать) и поискав продавана с наибольшим рейтингом и колличеством продаж я решил подстраховаться и перед заказом уточнить, что именно мне нужно. Китаец оказался очень отзывчивым и с радостью ответил на все мои вопросы и подтвердил, что продаваемый им дисплей собран именно на процессоре R61581 имеет разрешение 480х320 точек и 16ти битную шину данных - именно то, что на фотографии. Я успокоился и заказал две штуки.

Прошло три недели, вскрываю посылку...  твою мать... и снова на меня смотрят те же унылые 8битные шилды на ILI9327, 8bit, 240x400..... Вот как теперь жить без веры в людей?

Делать нечего, будем строить на них. Огрызок UTFT присланной китайцем никак мне не нравился и было решено "модернизировать" последнюю на сегодня библиотеку Карлсена 2.77

Собственно вот она, пользуйтесь на здоровье=)

http://revera.tv/UserFiles/Nic/UTFT_2.77_mod_by_NIC.zip

Инициализация  для Arduino MEGA :

\libraries\UTFT\hardware\avr\HW_AVR_defines.h

раскомментировать добавленный дефайн CHINA_MEGA













// Enable or disable the use of a display shield designed for use on 
// an Arduino Uno (or compatible) on an Arduino Mega
//
// ** Currently only available for 8bit display shields **
//
// Uncomment the following line to enable this feature
//#define USE_UNO_SHIELD_ON_MEGA 1
#define CHINA_MEGA 1
//********************************************************************

// *** Hardwarespecific defines ***
#define cbi(reg, bitmask) *reg &= ~bitmask
#define sbi(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 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*

для Arduino DUE вот тут:

\libraries\UTFT\hardware\arm\HW_ARM_defines.h















//********************************************************************

// ElecHouse TFT LCD/SD Shield for Arduino Due
// -------------------------------------
// Uncomment the following line if you are using this shield
//#define EHOUSE_DUE_SHIELD 1
//
// For this shield: RS=22, WR=23, CS=31, RST=33
//********************************************************************

// Если Вы используете китайский дисплей для Arduino MEGA
// -------------------------------------
// Uncomment the following line if you are using this shield
#define CHINA_MEGA 1
//
// For this shield: RS=38, WR=39, CS=40, RST=41
//********************************************************************

// *** Hardwarespecific defines ***
#define cbi(reg, bitmask) *reg &= ~bitmask
#define sbi(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 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) cfont.font[x]  

#define pgm_read_word(data) *data
#define pgm_read_byte(data) *data
#define bitmapdatatype unsigned short*

#if defined(TEENSYDUINO) && TEENSYDUINO >= 117
  #define regtype volatile uint8_t
  #define regsize uint8_t
#else
  #define regtype volatile uint32_t
  #define regsize uint32_t
#endif

В скетче инициализируем:











UTFT myGLCD(ILI9327_8,38,39,40,41);
// или
UTFT myGLCD(NIC35WS,38,39,40,41);
// или
UTFT myGLCD(31,38,39,40,41);

Вот, собственно и все)
p.s. чтобы шилд запустился на DUE необходимо закоротить резисторные сборки, иначе будет много помех на экране из-за низких уровней управляющих сигналов. Проверено работает, всем удачи!

p.p.s. к стати, на всех трех дисплеях были подорваны шлейфы тачскрина! Так что не удивляйтесь, если тач плохо работает или не работает вовсе... А паять их, скажу я Вам, такая >|<опа =)

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Бублик, не подскажете что необходимо допилить в вашей измененной библиотеке, чтобы запустить такой же шилд как у Kybb'а на Arduino UNO? Пример его кода без изменений оживил мой дисплейчик. С библиотекой Touchscreen заработал и тач. Контроллеры в шилдах одинаковые ili9327, режим тоже 8бит. Без помощи сам допилить до конца библиотеку не смогу, опыта мало(

Схема подключения получается следующая:

RD-A0, WR-A1, RS-A2, CS-A3, RESET-A4, D1-8, D2-9, D3-2, D4-3, D5-4, D6-5, D7-6, D8-7.

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

PhOSTU пишет:

Бублик, не подскажете что необходимо допилить в вашей измененной библиотеке, чтобы запустить такой же шилд как у Kybb'а на Arduino UNO? Пример его кода без изменений оживил мой дисплейчик. С библиотекой Touchscreen заработал и тач. Контроллеры в шилдах одинаковые ili9327, режим тоже 8бит. Без помощи сам допилить до конца библиотеку не смогу, опыта мало(

Схема подключения получается следующая:

RD-A0, WR-A1, RS-A2, CS-A3, RESET-A4, D1-8, D2-9, D3-2, D4-3, D5-4, D6-5, D7-6, D8-7.

Сложно не имея шилда.

Я б начал с того, что в HW_AVR_defines.h раскомментировал строку 
//#define USE_UNO_SHIELD_ON_MEGA 1

затем, в случае если не пошло, в файле HW_ATmega1280.h

закомментировал бы вот эту часть кода:



#if defined(USE_UNO_SHIELD_ON_MEGA)
		/*PORTG &= ~0x20;
		PORTG |= (VH & 0x10)<<1;
		PORTH &= ~0x18;
		PORTH |= (VH & 0xC0)>>3;
		PORTE &= ~0x3B;
		PORTE |= (VH & 0x03) + ((VH & 0x0C)<<2) + ((VH & 0x20)>>2);
		pulse_low(P_WR, B_WR);*/
		PORTG &= ~0x20;
		PORTG |= (VL & 0x10)<<1;
		PORTH &= ~0x18;
		PORTH |= (VL & 0xC0)>>3;
		PORTE &= ~0x3B;
		PORTE |= (VL & 0x03) + ((VL & 0x0C)<<2) + ((VL & 0x20)>>2);
		pulse_low(P_WR, B_WR);

в HW_AVR_defines.h     #define CHINA_MEGA 1 - закомментировать!!!

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Спасибо. Попробовал, как Вы посоветовали. Результат отрицательный.

Дисплей объявляю так

UTFT myGLCD(ILI9327_8,A2,A1,A3,A4);

Бублик пишет:

в файле HW_ATmega1280.h

закомментировал бы вот эту часть кода:

Здесь Вы имели ввиду скорее всего файл HW_ATmega328Р.h В нем за передачу данных в 8битном режиме отвечает этот ведь кусок? 

case 8:
		PORTD = VH;
		pulse_low(P_WR, B_WR);
		PORTD = VL;
		pulse_low(P_WR, B_WR);
		break;

Если так, то выходит, что данные передаются через порт Д, а это пины 0..7. По факту шилд работает через пины 2..9. Подозреваю, что именно здесь и кроется проблема и необходимо перепилить LCD_Writ_Bus()?

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

PhOSTU пишет:

Здесь Вы имели ввиду скорее всего файл HW_ATmega328Р.h В нем за передачу данных в 8битном режиме отвечает этот ведь кусок? 



case 8:
		PORTD = VH;
		pulse_low(P_WR, B_WR);
		PORTD = VL;
		pulse_low(P_WR, B_WR);
		break;

Если так, то выходит, что данные передаются через порт Д, а это пины 0..7. По факту шилд работает через пины 2..9. Подозреваю, что именно здесь и кроется проблема и необходимо перепилить LCD_Writ_Bus()?

Конечно же в HW_ATmega328Р.h =) я упустил что шилд к UNO цепляется...

Для понимания происходящего почитай у Карлсона:

http://henningkarlsen.com/electronics/h_utft_arduino_shield_on_mega.php

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Почитал, спасибо. Очень помогло. Но все равно не запускается( На данный момент сделано:

а) Создана директория tft_drivers\ili9327_8_uno. В ней файлы как из папки ili9327_8, просто в тексте файлов исправил

case ILI9327_8_UNO:

б) В файле UTFT.h добавил: 

#define ILI9327_8_UNO	32

в) В файле UTFT.cpp добавил:

word dsx[] = {..., 239};
word dsy[] = {..., 399};
byte dtm[] = {..., 8};
...
#ifndef DISABLE_ILI9327_8_UNO
#include "tft_drivers/ili9327_8_uno/initlcd.h"
#endif
...
#ifndef DISABLE_ILI9327_8_UNO
#include "tft_drivers/ili9327_8_uno/setxy.h"
#endif

г) В файле HW_AVR_defines раскомментировал (где-нибудь еще встречается USE_UNO_SHIELD_ON_MEGA вообще?оО)

#define USE_UNO_SHIELD_ON_MEGA 1
//#define CHINA_MEGA 1

д) В файле HW_ATmega328P следующие изменения:

//Поочередная передача двух байт данных
void UTFT::LCD_Writ_Bus(char VH,char VL, byte mode)
{
...
case 8:
/*комментирую старый код
		PORTD = VH;
		pulse_low(P_WR, B_WR);
		PORTD = VL;
		pulse_low(P_WR, B_WR);
*/
		unsigned char i,temp,data; 
		
		data=VH;
		for(i=8;i<=9;i++)
		{
			temp=(data&0x01);
			if(temp)
			digitalWrite(i,HIGH);
			else
			digitalWrite(i,LOW);
			data=data>>1;
		}	
		for(i=2;i<=7;i++)
		{
			temp=(data&0x01);
			if(temp)
			digitalWrite(i,HIGH);
			else
			digitalWrite(i,LOW);
			data=data>>1;
		}
		pulse_low(P_WR, B_WR);
		
		data=VL;
		for(i=8;i<=9;i++)
		{
			temp=(data&0x01);
			if(temp)
			digitalWrite(i,HIGH);
			else
			digitalWrite(i,LOW);
			data=data>>1;
		}	
		for(i=2;i<=7;i++)
		{
			temp=(data&0x01);
			if(temp)
			digitalWrite(i,HIGH);
			else
			digitalWrite(i,LOW);
			data=data>>1;
		}
		pulse_low(P_WR, B_WR);
		break;
...
}

//Настройка пинов данных
void UTFT::_set_direction_registers(byte mode)
{
/* Старый код
	DDRD = 0xFF;
	if (mode==16)
	{
		DDRB |= 0x3F;
		DDRC |= 0x03;
	}
*/
	for(int p=2;p<10;p++)
  {
    pinMode(p,OUTPUT);
  }
}

Не до конца понял назначение функции void UTFT::_fast_fill_8(int ch, long pix), потому не исправлял ее.

е) В скетче дисплей объявляю так

UTFT myGLCD(ILI9327_8_UNO,A2,A1,A3,A4);

 

 

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Полистал дальше UTFT.cpp. Похоже зря я стал вводить ILI9327_8_UNO. Нужно было остановиться на вашем 31м дисплее (ILI9327_8) из-за этого

if (display_model != 31)

 

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

PhOSTU пишет:

г) В файле HW_AVR_defines раскомментировал (где-нибудь еще встречается USE_UNO_SHIELD_ON_MEGA вообще?оО)

#define USE_UNO_SHIELD_ON_MEGA 1
//#define CHINA_MEGA 1

Не до конца понял назначение функции void UTFT::_fast_fill_8(int ch, long pix), потому не исправлял ее.

наверное не стоило включать #define USE_UNO_SHIELD_ON_MEGA 1. При этом используется меговская распортовка, которая отличается от уно.

фастфилл, это скорее всего быстрая заливка полигонов, появилась в последних версиях UTFT.

а if(display_model !=31) было сделано чтоб не ломать библиотеку а только дополнить её, поменяй 31 на свой 32 и делов то =)

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Запутался я окончательно. Сдался и решил попробовать с более простого - старой версии UTFT от китайцев, доработанной Вами. Она проще. Вроде всё сделал, но результата нет. Мозг зато работать начинает, лишь пару дней назад из армии вернулся)

На данный момент картина следующая. НЕ каждый раз, но на дисплее появляется жизнь. Рисуются некие элементы. Картинка как на битой видюхе - с артефактами. НО реакция нестабильная. То белый экран, то что-то есть.

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

PhOSTU пишет:

Запутался я окончательно. Сдался и решил попробовать с более простого - старой версии UTFT от китайцев, доработанной Вами. Она проще. Вроде всё сделал, но результата нет. Мозг зато работать начинает, лишь пару дней назад из армии вернулся)

На данный момент картина следующая. НЕ каждый раз, но на дисплее появляется жизнь. Рисуются некие элементы. Картинка как на битой видюхе - с артефактами. НО реакция нестабильная. То белый экран, то что-то есть.

Электроника - наука о контактах =)
Раз то есть то нет - пропадает контакт, начни с простого - добейся стабильной работы), подогни контакты, прозвони их!

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

PhOSTU пишет:

На данный момент картина следующая. НЕ каждый раз, но на дисплее появляется жизнь. Рисуются некие элементы. Картинка как на битой видюхе - с артефактами. НО реакция нестабильная. То белый экран, то что-то есть.

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

как реакция может быть не стабильной? 

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Puhlyaviy пишет:

как реакция может быть не стабильной? 

Элементарно! Передернул питание. Пошла инициализация, заполнение разноцветными полосками экрана, затем синусоиды рисуются.

Снова передернул питание. Экран остается белым. Питание. экран заполняется цветными полосами, но не сплошными, а с "выбоинами". Половина экрана заполняется черным. Питание. Экран белый. Питание. Вместо цветных сплошных полос экран заполняется полосами из гороха точек разной серости. Видео заснять пока не получилось. Ниче не рисует больше(

И дело не в контактах, т.к. скетч без библиотеки работает стабильно.

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

PhOSTU пишет:

И дело не в контактах, т.к. скетч без библиотеки работает стабильно.

угу..  давай думать попорядку...

дисплей сам по себе в первом приближении кучка очень маленьких лампочек

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

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

что бы процесор работал правильно ему наверно нужно начинать с какой то точки поулчать инструкции и понимать что вот она пошла работа.. для этого у него есть RESET...

судя по тому что дергая питание на процесоре экрана тебе удалось там чего то там увидить.. то наверно у тебя пин ресет куда то не туда подоткнут... 

PhOSTU
Offline
Зарегистрирован: 20.06.2014

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

PhOSTU
Offline
Зарегистрирован: 20.06.2014

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

http://youtu.be/dfcc4le1Fyo

http://youtu.be/fHc5WdJLH74

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

Может все же проверить как оно там все пропаяно?

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Нашел в чем была проблема! Ура. Теперь все работает как часики. Причина была в выводе RD, подключенном к A0. При объявлении вывод игнорировался и при запуске жил своей жизнью в рандомном состоянии.

UTFT myGLCD(ILI9327, A2,A1,A3,A4);

Добавил при инициализации

pinMode(A0,OUTPUT);
digitalWrite(A0, HIGH);

и теперь стабильно, хоть и медленно, но рисует. 

Выкладываю библиотеку UTFT версии 1.3 для работы со следующим шилдом http://ru.aliexpress.com/item/3-5-inch-TFT-Touch-LCD-Screen-Display-Module-For-Arduino-UNO-R3-HIGH-QUALITY-Free/1786048346.html?isOrig=true#extend

ТТХ: 3,5', 400x240, контроллер ILI9327, работает в 8битном режиме. Подключен к выводам A0..A5, 2..9

Дисплей объявить следующим образом 

UTFT myGLCD(ILI9327, A2,A1,A3,A4);

http://myfolder.ru/files/41035240

art100
Offline
Зарегистрирован: 09.03.2014

PhOSTU пишет:
...Причина была в выводе RD, подключенном к A0...

ну вот в нашем полку умеющих писать код прибыло

поздравляю :)

в моем случае без резки дорожек и пайки соплей не судьбинушка TFT.h TouchScreen.h 2.4"

я забил в страшное электричество лезть

 

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Продолжение банкета. Допилил свежую UTFT v2.77. Причина была в том же А0. Дисплей объявлять так


UTFT myGLCD(ILI9327_8, A2,A1,A3,A4);
//или
UTFT myGLCD(31, A2,A1,A3,A4);

Работает только под этот шилд!

http://myfolder.ru/files/41035363

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

PhOSTU, здорово! Спасибо заработало. Я начал переписывать LCDTFT, под этот шилд, но готовая UTFT гораздо лучше.

Еще раз спасибо!

art100
Offline
Зарегистрирован: 09.03.2014

покажите хоть как экранчики показывают

это мое веселье http://yadi.sk/d/EPYljwnIKAWUT

а то все чего-то ковыряют а что ковыряют непонятно

 

PhOSTU
Offline
Зарегистрирован: 20.06.2014

art100 пишет:

покажите хоть как экранчики показывают

Вот как-то так http://youtu.be/vmxAK72xFSw

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Удалось кому-нибудь заставить одновременно работать и lcd, и touchscreen? У меня тач без микросхемы. Отдельно пример из библиотеки touchscreen.h работает. Но совместно с UTFT, конечно, нет. Выводы тача подключаются к пинам A1, A2, 6, 7. Но одновременно A1 = WR, A2 = RS. Выходит, что работая с пинами тача, я дергаю контроллер дисплея. Каким образом обойти эту ситуацию? 

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

Использовать другие пины для тача не вариант?

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Шилд уже спаян. Я рассматривал вариант переноса двух пинов А1 и А2, но тогда придется корежить плату и отказаться от использования SD карты.

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

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

PhOSTU
Offline
Зарегистрирован: 20.06.2014

Puhlyaviy пишет:
каким образом вы выяснили что тач работает?
Запустил пример, шедший в комплекте с библиотекой touchscreen.

Шилд вовсе не кривой. Просто нужно подобрать к нему подход)

avton
avton аватар
Offline
Зарегистрирован: 11.05.2014

Господа,помогите разобраться с тачем .Шилд как на верхнем фото в сообщение 111, подключаю к меге .

Пример калибровки из примера библиотеки работает,но не более того. То есть тачь реагирует на нажатие точек по углам экрана,но не до,ни после изменения в файле UTouch_CD.h ситуация не изменяется .

При запуске данного скетча всегда выводится :

x=-1

y=-1

#include <UTFT.h>
UTFT myGLCD(NIC35WS,38,39,40,41);
extern uint8_t BigFont[];
#include <UTouch.h>
UTouch myTouch(6,5,4,3,2);
void setup() {
  myGLCD.InitLCD();
  myGLCD.setFont(BigFont);
  myTouch.InitTouch();
  myGLCD.clrScr();
}
void loop() {
int X_RAW;
int Y_RAW;
int X;
int Y;
if (myTouch.dataAvailable() == true){
myTouch.read();
X_RAW=myTouch.TP_X;
Y_RAW=myTouch.TP_Y;
X=myTouch.getX();
Y=myTouch.getY();
myGLCD.clrScr();
myGLCD.print("X", 100,80);
myGLCD.print("Y", 200,80);
myGLCD.print("PIX", 20,100);
myGLCD.print("RAW", 20,120);
myGLCD.printNumI(X, 100, 100);
myGLCD.printNumI(Y, 200, 100);
myGLCD.printNumI(X_RAW, 100, 120);
myGLCD.printNumI(Y_RAW, 200, 120);
}
}

Лишь иногда проскакивают положительные цифры при нажатие в нижнем краю экрана у самой границы.

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

URkA
Offline
Зарегистрирован: 21.03.2014

Прочитайте последние два предложения в посте 111 , может Ваш случай?(.

avton
avton аватар
Offline
Зарегистрирован: 11.05.2014

Точно не мой,ибо я сам их оторвал и потом припаивал :) Но тач работал что до,что после одинаково....

URkA
Offline
Зарегистрирован: 21.03.2014

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

avton
avton аватар
Offline
Зарегистрирован: 11.05.2014

Да ,спасибо,я понял про что,есть мысль как проверит целостность проводников тача ,но это уже не сегодня. У меня к сожалению нет с чем сравнить,это мой первый опыт с дисплеем с тачем ,на худой конец придется использовать без тача .Задумаюсь над покупкой более откатаного дисплее на будущее,но теряюсь с выбором) Кстати у меня не хватило длины оторванного шлейфа тача,пришлось наращивать проводом МГТФ.

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

Даже самый тонкий МГТФ сильно грубый и обламывает шлейф, несколько раз пришлось перепаивать. В итоге я снял с МГТФа фторопластовую изоляцию скрутил жилки и припаял, чтоб не коротили - залил все клеем =)

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

avton
avton аватар
Offline
Зарегистрирован: 11.05.2014

Бублик пишет:

Даже самый тонкий МГТФ сильно грубый и обламывает шлейф, несколько раз пришлось перепаивать. В итоге я снял с МГТФа фторопластовую изоляцию скрутил жилки и припаял, чтоб не коротили - залил все клеем =)

Похоже я повторил Ваш путь с 11 вечера до 4 утра :))) я место соединения провода со шлейфом закрепил скотчем,завтра попробую просто сделать жилками,если будет к чему их припаивать :)

URkA
Offline
Зарегистрирован: 21.03.2014

Я не знаю про ваши траблы с шлейфом, но я отодрал дисплей от скотча и прозванивал проводники и вертел по всякому, очень долго и у меня всё осталось на месте, кроме товарного вида. Скотч оторвался не равномерно и сейчас соответственно не равномерная засветка дисплея. Но и это я исправлю , просто пока не досуг. 

avton
avton аватар
Offline
Зарегистрирован: 11.05.2014

Значит Вам повезло больше.

URkA
Offline
Зарегистрирован: 21.03.2014

Видимо это от того, что другой шилд и производитель.

avton
avton аватар
Offline
Зарегистрирован: 11.05.2014

Бублик спасибо! Тачь я всё таки победил,не было одного контакта из четырех. Получается он изначально пришел с оторванным тачем..

Терпение лопнуло и шлейф тача был откусан под корень,дабы в дальнейшем не соблазняться. Попутно вопрос,у кого нибудь SD карта в этом шилде читается нормально?

avton
avton аватар
Offline
Зарегистрирован: 11.05.2014

Проблему с SD картой тоже пришлось решать кординально :) . Китайцы банально не согласовали уровни сигналов ( 5v/3.3v).

В итоге получилось так :

art100
Offline
Зарегистрирован: 09.03.2014

Картинку покажи какую-нибудь веселую с чудо-совместимого-с-ардунино256-экранчика

и тебе щастье и мы повеселимся :)

Вечная тема

нас китайцы тра-да-да а мы крепчаем

Может эту тему в верху топика прижать на всегда?

avton пишет:
...Китайцы ....не...

обманываете вы нас

на чудо-плате написано

МикроСхемаДруг.сом 3.5" TFT для arduino2560

а вы понавешали резистивных делителей

и мы всем стадом должны поверить

там стадо екселенты магазинам ставит

вы один хотите себя противопоставить стаду

да вы аднако не стадный товарищ

я даже знаю что будет дальше

и будет этот щиток лежать 20 лет и радовать глаз каждый раз когда рука будет его касаться или глаз мельком скользить

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

Счастье Ж-)

у меня такого счастья килограм на 500 лежит на полках Ж-)

Из сегодняшнего

рука как и 20 лет не поднялась выкинуть

вот древность с молодостью скрестил

зачем только?

ну пущай еще пару пятилеток полежит

//art100 to write 201400701 USB tester terminal
/* 16x2 LCD  compatible with the  Hitachi HD44780 driver
1 +5v
2 pin1-20k-pin3
3 gnd
4 RS    - 7
5 gnd
6 E     - 6
11 LCD D4 pin to digital pin 5
12 LCD D5 pin to digital pin 4
13 LCD D6 pin to digital pin 3
14 LCD D7 pin to digital pin 2
15 Anod  +5V nc
16 Katod gnd nc
 */
int led13=13;//контролька
#include <LiquidCrystal.h>
//LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//uno
//LiquidCrystal lcd(7, 6, 5, 4, 3, 2);//mini RS E d4 d5 d6 d7
LiquidCrystal lcd(7,6,2,3,4,5);//фквгштщ mini pro RS E d4 d5 d6 d7
void setup(){
  pinMode(led13,OUTPUT);//контролька
  lcd.begin(16, 2);// set up the LCD's number of columns and rows: 
  Serial.begin(9600);// initialize the serial communications:
}
//=============================================
void loop(){
  if (Serial.available()) {// when characters arrive over the serial port...
    delay(100);// wait a bit for the entire message to arrive
    lcd.clear();// clear the screen
    while (Serial.available() > 0) { lcd.write(Serial.read()); }// read all the available characters// display each character to the LCD
    digitalWrite(led13,HIGH);//контролька
    delay(10);
  }
  digitalWrite(led13,LOW);
}
//=============================================