Arduino MEGA 2560 + TFT 3.5" Глюки тачскрина, помогите победить.

VPanin
Offline
Зарегистрирован: 05.05.2014

Доброго времени суток.

Приобрел Arduino Mega 2560 R3   и к нему TFT Shield 3.5" aitendo R61581.

 

1) Залил библиотеку  UTFT,  загрузил демо скетч, выбрал свой тип контроллера, залил. 

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

2) Залил библиотеку  UTouch,   открываю первым делом скетч калибровки поправляя в нем пару строчек

#define TOUCH_ORIENTATION  LANDSCAPE   // Было PORTRAIT  

// Standard Arduino Mega/Due shield            : <display model>,38,39,40,41
UTFT    myGLCD(R61581,38,39,40,41);    // указал код моего дисплея, он в саппорте в pdf есть

// Standard Arduino Mega/Due shield            :  6, 5, 4, 3, 2
UTouch  myTouch( 6, 5, 4, 3, 2);

Все остальное без изменений

Заливаю скетч, калибрую экран, он выдает попроавки для UTouchCD.h

CAL_X    0x00000000UL

CAL_Y    0x00000000UL

CAL_S    0x801DF13FUL

Я так подозреваю что это не совсем верные поправки, тем более что тыкая не в колибровочные метки (а в любое место экрана)  значения выдаются теже самые

Сооттветственно я их не трогаю и не меняю, т.к. это скорее всего лажа и заливаю простой скетч выложенный на Хабре 

#include <UTFT.h>
UTFT myGLCD(R61581,38,39,40,41);

#include <UTouch.h>
UTouch myTouch(6,5,4,3,2);

extern uint8_t BigFont[];

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);
}
}

Результат его работы показать координату X Y при нажатии на экран.   У меня же результат куда бы не нажал  X -1  и  Y -1

 

Помогите понять куда копать, уже убил на этот тач не один час

VPanin
Offline
Зарегистрирован: 05.05.2014

Ссылка на TFT Shield  если нужно идентифицировать

VPanin
Offline
Зарегистрирован: 05.05.2014

Никто ничего не знает по этой теме ? 

Все только светодиодики зажигают что ли? 

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

все жки запускают которых нет у тебя

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

Доброго времени суток!

Аналогичный экран тачскрин вообще не реагирует на нажатия!

Как его проверить?

VPanin
Offline
Зарегистрирован: 05.05.2014

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

vdk
Offline
Зарегистрирован: 14.04.2013

Есть подозрение, что UTouch не поддерживает этот тач. В таком случае надо брать код от производителя

VPanin
Offline
Зарегистрирован: 05.05.2014

в том то и дело, что в UTFT  есть он в пооддержках.  Он выбирается как CTE35IPS  или R61581  и демка прекрасно рабоатет.  и Продаваны и Гуглопоиск сслыается на то что инит как CTE35 

А вот при запуске калибровки , колибровку то он проходит по точкам , но поправки показывает  

CAL_X 0x00000000UL

CAL_Y 0x00000000UL
CAL_S 0x801DF13FUL
 
Их вбиваешь в UtouchCD.h  а эффекта это не дает.  Простой скетч по выводу координат нажатия на экран выдает всегда одно и тоже Х -1 и  Y -1
 
Толи тут шаманство какое то должно быть то ли фиг его мао знает.  
 
Вроде специально брал Мегу и Шилд под Мегу с ТФТ что бы измежать гемора подключения, а тут вон такая пакость , хоть выкидывай
vdk
Offline
Зарегистрирован: 14.04.2013

Так utft и utouch - это две совершенно разные вещи, одна работает с tft, а с другая - с тачем. Поэтому одно может работать, а другое - нет.

 

vdk
Offline
Зарегистрирован: 14.04.2013

Смотрите, какой там контроллер тача (не путать с контроллером экрана) и ищите к нему "родную" библиотеку

VPanin
Offline
Зарегистрирован: 05.05.2014

так модель TFT  выбирается только в UTFT  а в Utouch  прописываются только пины 6,5,4,3,2    

Шилд с экраном втыкается в мегу и  подключается к пинам меги - ( 0-7)  (22 -53) и питалово с землей и резетом. 

Если у тебя есть на чем попробовать код верхнего скетча,  на свежих библиях UTFT и UTouch  Версия Друины 1.0.5 (вроде как последняя)  проверь, будет ли скетч у тебя выдавать разные координаты нажатия на ТФТ 

 

VPanin
Offline
Зарегистрирован: 05.05.2014

vdk пишет:

Смотрите, какой там контроллер тача (не путать с контроллером экрана) и ищите к нему "родную" библиотеку

 

И как усмотреть  контроллер именно тача ? 

Единственная читабельная надпись на плате со стороны разъемов  - 3.5" aitendo R61581

Со стороны экрана на плате только кнопка RESET надписей нет 

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

В этом экране контроллер тачскрина XTP2046 (аналог ads7846) только такое нашел. В теории Utouch должна поддерживать!

Но у меня в отличии от автора темы тачскрин вообще не реагирует на нажатия, демки с картинками работают- нет вопросов. А примеры с тачскрином = нет реакции вообще!

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

У меня экран подключен к Arduino Due напрямую.

Может пины тачскрина не те? Пробовал пины, как указано здесь - тоже не работает http://forum.arduino.cc/index.php?topic=157068.0

В описании к шилду для Due нашел:

Using the Touch function:
 
Remember to change the touch initialization to the following if it does not work.
The TP DataIN is routed to pin 32 of arduino DUE instead of 4.
(Because pin4 of arduino is a hardware SPI CS pin, which is reserved for SPI device)
 
Но я пробовал 32 пин вместо 4 - не работает! Может надо где-то подправить библиотеку?
VPanin
Offline
Зарегистрирован: 05.05.2014

По  поводу подключения Шилда к DUO  встречал такой камент 

Usage with CTE DUE shield:
1.uncomment "#define CTE_DUE_SHIELD 1" in the HW_ARM_defines.h in the \hardware\arm folder of the UTFT library
2.Change the pinout to : UTFT myGLCD(CTE50,25,26,27,28);
 
 
Вот ридми  из папки с даташитом на мой модуль 
Coldtears electronics 3.5" IPS LCD Module w/Font IC  R61581
LCD Resolution 480x320, R61581
Library Demo name: CTE32HR
 
***************
1. Replace initlcd.h , setxy.h in the tft_drivers\ili9481 folder before running the demo
2. If you are using the fonts on the Flash IC, please use UTFT_CTE library for 3.5 version, it is here:
***************
 
UTFT library is written by Henning Karlsen, can be downloaded here:
 
Usage with CTE Mega 2560 shield:
No adjustment in UTFT library needed, just change the LCD module to 
UTFT myGLCD(CTE32HR,38,39,40,41);

 

Смущает  1 пункт. Почему эти файлы надо заменить в папке  драйвера ili9481 ? 

и ни слова о подключении Тача.  Просто TFT у меня и так работает. 

 

Посмотрел внимательнее UTFT.h в нем при выборе типа  CTE32HR  используется драйвер из папки ili9481  

(8-О)

VPanin
Offline
Зарегистрирован: 05.05.2014

SergMyz пишет:

В этом экране контроллер тачскрина XTP2046 (аналог ads7846) только такое нашел. В теории Utouch должна поддерживать!

Но у меня в отличии от автора темы тачскрин вообще не реагирует на нажатия, демки с картинками работают- нет вопросов. А примеры с тачскрином = нет реакции вообще!

Кстати, нашел увеличилку и прочел  у сетя правильнее XPT2046  а не  XTP

 
vdk
Offline
Зарегистрирован: 14.04.2013

SergMyz пишет:

В этом экране контроллер тачскрина XTP2046 (аналог ads7846) только такое нашел. В теории Utouch должна поддерживать!

Это в теории. А на самом деле Utouch поддерживает некий "стандартный" тип тача. Как только шаг в сторону - то либо допиливать Utouch, либо использовать другую библиотеку

VPanin
Offline
Зарегистрирован: 05.05.2014

очередной день поисков по инету привелвот к чему

1) Найден ДатаШит на модуль R61581 и там же была ссылка на текстовик с "Инициализацией"  с вот таким содержанием ( я не знаю как тут приатачить) 

oid R61581_Initial(void)
{
  
RESET1_1;
delay_nms(5);
RESET1_0;
delay_nms(10);
RESET1_1;
delay_nms(50);
 
 
write_SPI_commond(0xFF);
write_SPI_commond(0xFF);
delay_nms(5);
write_SPI_commond(0xFF);
write_SPI_commond(0xFF);
write_SPI_commond(0xFF);
write_SPI_commond(0xFF);
delay_nms(10);
 
write_SPI_commond(0xB0);
write_SPI_data(0x00);
 
write_SPI_commond(0xB3);
write_SPI_data(0x02);
write_SPI_data(0x00);
write_SPI_data(0x00);
write_SPI_data(0x10);
 
write_SPI_commond(0xB4);
write_SPI_data(0x11);//0X10
 
write_SPI_commond(0xC0);
write_SPI_data(0x13);
write_SPI_data(0x3B);//
write_SPI_data(0x00);
write_SPI_data(0x00);
write_SPI_data(0x00);
write_SPI_data(0x01);
write_SPI_data(0x00);//NW
write_SPI_data(0x43);
 
write_SPI_commond(0xC1);
write_SPI_data(0x08);
write_SPI_data(0x15);//CLOCK
write_SPI_data(0x08);
write_SPI_data(0x08);
 
write_SPI_commond(0xC4);
write_SPI_data(0x15);
write_SPI_data(0x03);
write_SPI_data(0x03);
write_SPI_data(0x01);
 
write_SPI_commond(0xC6);
write_SPI_data(0x02);
 
write_SPI_commond(0xC8);
write_SPI_data(0x0c);
write_SPI_data(0x05);
write_SPI_data(0x0A);//0X12
write_SPI_data(0x6B);//0x7D
write_SPI_data(0x04);
write_SPI_data(0x06);//0x08
write_SPI_data(0x15);//0x0A
write_SPI_data(0x10);
write_SPI_data(0x00);
write_SPI_data(0x31);//0x23
 
write_SPI_data(0x10);
write_SPI_data(0x15);//0x0A
write_SPI_data(0x06);//0x08
write_SPI_data(0x64);//0x74
write_SPI_data(0x0D);//0x0B
write_SPI_data(0x0A);//0x12
write_SPI_data(0x05);//0x08
write_SPI_data(0x0C);//0x06
write_SPI_data(0x31);//0x23
write_SPI_data(0x00);
 
write_SPI_commond(0x35);
write_SPI_data(0x00);
 
//write_SPI_commond(0x36);
//write_SPI_data(0x00);
 
write_SPI_commond(0x0C);
write_SPI_data(0x66);
 
write_SPI_commond(0x3A);
write_SPI_data(0x66);
 
write_SPI_commond(0x44);
write_SPI_data(0x00);
write_SPI_data(0x01);
 
write_SPI_commond(0xD0);
write_SPI_data(0x07);
write_SPI_data(0x07);//VCI1
write_SPI_data(0x14);//VRH 0x1D
write_SPI_data(0xA2);//BT 0x06
 
write_SPI_commond(0xD1);
write_SPI_data(0x03);
write_SPI_data(0x5A);//VCM  0x5A
write_SPI_data(0x10);//VDV
 
write_SPI_commond(0xD2);
write_SPI_data(0x03);
write_SPI_data(0x04);//0x24
write_SPI_data(0x04);
 
write_SPI_commond(0x11);
delay_nms(150);
 
write_SPI_commond(0x2A);
write_SPI_data(0x00);
write_SPI_data(0x00);
write_SPI_data(0x01);
write_SPI_data(0x3F);//320
 
write_SPI_commond(0x2B);
write_SPI_data(0x00);
write_SPI_data(0x00);
write_SPI_data(0x01);
write_SPI_data(0xDF);//480
 
//write_SPI_commond(0xB4);
//write_SPI_data(0x00);
delay_nms(100);
 
write_SPI_commond(0x29);
delay_nms(30);
 
write_SPI_commond(0x2C);
 
 
 
 
Примерно такое же найдено у Китайцев-продавцов аналогичного дисплея, только без верхних строк RESETов 
 
У меня уже мозг взрываетcя от непонимания читаемого.  
 
Подскажите куда засунуть этот код инициализации ?  кудато в либу  или  в скетче размещать ?  одноразовая это функция типа калибровки  тача или кажды раз использовать ? 
VPanin
Offline
Зарегистрирован: 05.05.2014

vdk пишет:

Это в теории. А на самом деле Utouch поддерживает некий "стандартный" тип тача. Как только шаг в сторону - то либо допиливать Utouch, либо использовать другую библиотеку

А есть еще варианты библиотек ?  кроме Utoucha 

 

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

vdk
Offline
Зарегистрирован: 14.04.2013

VPanin пишет:

Подскажите куда засунуть этот код инициализации ?  кудато в либу  или  в скетче размещать ?  одноразовая это функция типа калибровки  тача или кажды раз использовать ? 

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

Но одной только инициализацией сыт не будешь - дальше с девайсом-то надо как-то работать...

vdk
Offline
Зарегистрирован: 14.04.2013

VPanin пишет:

А есть еще варианты библиотек ?  кроме Utoucha 

Искать и пробовать - с чем-то да заведется

VPanin пишет:

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

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

vdk
Offline
Зарегистрирован: 14.04.2013

Как проверить, что тач работает (методические указания)

Из примеров UTouch берем Utouch_Calibrarion и дорабатываем:

вместо фрагмента кода

    while ((myTouch.dataAvailable() == true) && (cnt<iter))
    {
      myTouch.read();
      tx += myTouch.TP_X;
      ty += myTouch.TP_Y;
      cnt++;
    }

засовываем

    while ((myTouch.dataAvailable() == true) && (cnt<iter))
    {
      myTouch.read();
      tx += myTouch.TP_X;
      ty += myTouch.TP_Y;
      Serial.print ("X="); Serial.println(myTouch.TP_X);
      Serial.print ("Y="); Serial.println(myTouch.TP_Y);
      cnt++;
    }

(не забываем засунуть в setup строчку Serial.begin(speed) )

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

VPanin
Offline
Зарегистрирован: 05.05.2014

Залил такой скетчик

#include <UTFT.h>
#include <UTouch.h>

UTFT    myGLCD(R61581,38,39,40,41);
UTouch  myTouch( 6, 5, 4, 3, 2);
 int iter = 5000;
  int cnt = 0;
  int x=0;
  int y=0;
  
void setup()
{
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myTouch.InitTouch(PORTRAIT);
  Serial.begin(9600);
 
}

void loop() 
{
 
if ((myTouch.dataAvailable() == true) && (cnt<iter))
{
  myTouch.read();
  x =  myTouch.getX();
  y =  myTouch.getY();
  Serial.print ("X="); Serial.println(x);
  Serial.print ("Y="); Serial.println(y);
  Serial.print ("CNT= "); Serial.println(cnt);
  cnt++;
}
}

результат  такой

X=-1
Y=-1
CNT= 0
X=-1
Y=-1
CNT= 1
X=-1
Y=-1
CNT= 2
X=-1
Y=-1
CNT= 3
X=-1
Y=-1
CNT= 4
 
 
т.е. куда бы не надал , координаты всегда -1;-1
 
куда дальше копать ? 
 

 

icms
Offline
Зарегистрирован: 22.03.2011

координаты всегда -1;-1

это не координаты , а ответ utouch об ошибке или скажем непонятке







	sbi(P_CS, B_CS);                    
	if ((datacount==(prec-2)) or (datacount==PREC_LOW))
	{
		if (orient == _default_orientation)
		{
			TP_X=ty/datacount;
			TP_Y=tx/datacount;
		}
		else
		{
			TP_X=tx/datacount;
			TP_Y=ty/datacount;
		}
	}
	else
	{
		TP_X=-1;
		TP_Y=-1;
	}

нужно как по мне глянуть что там с datacount происходит

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

VPanin пишет:

Кстати, нашел увеличилку и прочел  у сетя правильнее XPT2046  а не  XTP

Да ошибся немного, на микросхеме у меня написано PT2046.
При заливке вышеуказанных скетчей в мониторе компорта реакции нет. Вывод пока один: тачскрин не работает, либо нерабочий, либо библиотека не подходит, либо контакты не те, либо паять перемычки. Нужна схема экрана, только где ее взять? 
VPanin
Offline
Зарегистрирован: 05.05.2014

SergMyz пишет:

VPanin пишет:

Кстати, нашел увеличилку и прочел  у сетя правильнее XPT2046  а не  XTP

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

Я свой экран подключаю напрямую в Мегу 2560 R3   нижние ноги шилда экрана - питалово в Меге,  верхние ноги шилда -  D0-D7  на Меге  , 36 ножный боковой разъем  в свой боковой разъем Меги  D22-D53 GND

Если у тебя не Мега а DUE  то я где то встречал что нужно в библиотеке раскоментировать строку что используется шилд на DUE , только уже не помню где и в какой именно либе. если надо найду

при активации в Utouch указать ноги (6,5,4,3,2)  в такой версии у меня работает но что то с чтением данных из тача не так.

А сам экран работает ? демки картинок запустил ?

VPanin
Offline
Зарегистрирован: 05.05.2014

Запустил свой код с монитором что в функции 

	sbi(P_CS, B_CS); 
Serial.print ("datacount="); Serial.println(datacount); 
Serial.print ("orient="); Serial.println(orient);       
Serial.print ("tx="); Serial.println(tx); 
Serial.print ("ty="); Serial.println(ty);  
Serial.print ("prec="); Serial.println(prec);     
           
	if ((datacount==(prec-2)) or (datacount==PREC_LOW))
	{
		if (orient == _default_orientation)
		{
			TP_X=ty/datacount;
			TP_Y=tx/datacount;
		}
		else
		{
			TP_X=tx/datacount;
			TP_Y=ty/datacount;
		}
	}
	else
	{
		TP_X=-1;
		TP_Y=-1;
	}

 

 

ответ одинаков, куда бы не нажал

datacount=-2
orient=0
tx=4294867297
ty=4294867297
prec=10
X=-1
Y=-1
CNT= 0
datacount=-2
orient=0
tx=4294867297
ty=4294867297
prec=10
X=-1
Y=-1
CNT= 1
 
Есть подозрения на то что Utoch не понимает что у меня разрешение экрана 480*320  

 

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

Демки картинок работают - нет вопросов - все красиво и быстро!

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

Экран у меня подключен напрямую к Due без шилда. Нашел даташит на XPT2046 с типовой схемой включения (один в один с ADS7846), проверяю распиновку. Тут на плате 5 рабочих сигналов XPT2046 пущены через "сборки" вроде "преобразователя уровней" сопротивление около 10 кОм (по 4 шт). Проверю осциллографом, как там сигналы SPI - бегают или нет!

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

Прозвонил контакты - все соответствует  (6,5,4,3,2)! Буду смотреть сигналы.

icms
Offline
Зарегистрирован: 22.03.2011

datacount=-2



if (prec>5)
	{
		tx = tx-(minx+maxx);
		ty = ty-(miny+maxy);
		datacount -= 2;
	}

откуда datacount=0 (в блоке выше) подсчёта небыло

пробуй смотреть выше



temp_y=touch_ReadData();

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

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

Простой скетч:

#include <UTFT.h>
UTFT myGLCD(R61581,38,39,40,41);
#include <UTouch.h>
UTouch myTouch(6,5,4,3,2);
void setup() {
  myGLCD.InitLCD();
  myTouch.InitTouch(PORTRAIT);
  myGLCD.clrScr();
  myGLCD.fillScr(0,0,0);
}
void loop() {
if (myTouch.dataAvailable()) {
myGLCD.fillScr(255,0,0);
}else {myGLCD.fillScr(255,255,255);}
}

 

Экран черный, при загрузке белый, сразу же закрашивается черным, то есть dataAvailable() всегда false = данные с тачскрина не поступают!

VPanin
Offline
Зарегистрирован: 05.05.2014

icms пишет:

datacount=-2



if (prec>5)
	{
		tx = tx-(minx+maxx);
		ty = ty-(miny+maxy);
		datacount -= 2;
	}

откуда datacount=0 (в блоке выше) подсчёта небыло

пробуй смотреть выше



temp_y=touch_ReadData();

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

datacount=0 прописано в начале функции Read

отслеживаю тут 

touch_WriteData(0x90);        
			pulse_high(P_CLK, B_CLK);
			temp_x=touch_ReadData();
Serial.print ("temp_x="); Serial.println(temp_x); 
			if (!rbi(P_IRQ, B_IRQ))
			{
				touch_WriteData(0xD0);      
				pulse_high(P_CLK, B_CLK);
				temp_y=touch_ReadData();
Serial.print ("temp_y="); Serial.println(temp_y); 
				if ((temp_x>0) and (temp_x<4096) and (temp_y>0) and (temp_y<4096))

и тут 
	pinMode(T_IRQ,  OUTPUT);
Serial.print ("prec="); Serial.println(prec); 
Serial.print ("datacount="); Serial.println(datacount); 
	if (prec>5)
	{
		tx = tx-(minx+maxx);
		ty = ty-(miny+maxy);
		datacount -= 2;
	}

	sbi(P_CS, B_CS); 
Serial.print ("datacount="); Serial.println(datacount); 
      
Serial.print ("tx="); Serial.println(tx); 
Serial.print ("ty="); Serial.println(ty);  

Результат

temp_x=0
temp_y=0
temp_x=0
temp_y=0
temp_x=0
temp_y=0
temp_x=0
temp_y=0
temp_x=0
temp_y=0
temp_x=0
temp_y=0
temp_x=0
temp_y=0
temp_x=0
temp_y=0
temp_x=0
temp_y=0
temp_x=0
temp_y=0
prec=10
datacount=0
datacount=-2
tx=4294867297
ty=4294867297
X=-1
Y=-1
CNT= 0
 
Получается надо копать  функцию touch_ReadData(); 
а там уже набор буковок мне непонятных 
word UTouch::touch_ReadData()
{
	word data = 0;

	for(byte count=0; count<12; count++)
	{
		data <<= 1;
		sbi(P_CLK, B_CLK);
		cbi(P_CLK, B_CLK);    
		delayMicroseconds(2); //// added to get more stable readings???              
		if (rbi(P_DOUT, B_DOUT))
			data++;
	}
	return(data);
}

 

А может проблема в том что монитор работает только в 16 битном режиме ? , а функция чтения touch_ReadData() запускается  12 или 13 раз , верно? 

 

VPanin
Offline
Зарегистрирован: 05.05.2014

SergMyz пишет:

Простой скетч:

#include <UTFT.h>
UTFT myGLCD(R61581,38,39,40,41);
#include <UTouch.h>
UTouch myTouch(6,5,4,3,2);
void setup() {
  myGLCD.InitLCD();
  myTouch.InitTouch(PORTRAIT);
  myGLCD.clrScr();
  myGLCD.fillScr(0,0,0);
}
void loop() {
if (myTouch.dataAvailable()) {
myGLCD.fillScr(255,0,0);
}else {myGLCD.fillScr(255,255,255);}
}

 

Экран черный, при загрузке белый, сразу же закрашивается черным, то есть dataAvailable() всегда false = данные с тачскрина не поступают!

 

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

У тебя при нажатии и держании пальца не меняется заливка ? 

icms
Offline
Зарегистрирован: 22.03.2011

Исходя из всего выше изложенного либо тач нерабочий либо utouch не  умеет с ним работать

Тут есть https://github.com/watterott/Arduino-Libs либа под это контроллер правда неизвестно подружится ли она с  UTFT

также почитай эту ветку там старая версия с примером есть

http://forum.arduino.cc/index.php?PHPSESSID=n5k6h7sv5aapakbpra353kltq1&topic=61579.0

 

vdk
Offline
Зарегистрирован: 14.04.2013

VPanin пишет:

Результат

temp_x=0
temp_y=0

Судя по нулевым данным, прочитать координаты из контроллера не получается :(

VPanin пишет:

А может проблема в том что монитор работает только в 16 битном режиме ? , а функция чтения touch_ReadData() запускается  12 или 13 раз , верно?

функция принимает 12 бит, последовательно тактируя CLK и проверяя high/low на DOUT

 

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

VPanin пишет:

У тебя при нажатии и держании пальца не меняется заливка ? 

Нет! Ни какой реакции.

VPanin
Offline
Зарегистрирован: 05.05.2014

vdk пишет:

VPanin пишет:

Результат

temp_x=0
temp_y=0

Судя по нулевым данным, прочитать координаты из контроллера не получается :(

Мне кажется я нашел проблему своего экрана.  Вооружился тестером прозвонил контакты шилда на которые завязан Тачскрин  D6,D5,D4,D3,D2  и оказалось что  D6 и D5  закорочены.  :((((  

На плате от контроллера тачскрина XPT2046  дорожки идут к мелким деталькам обозначенным на плате как RP10 И RP11  на которых одна надпись толи EOL  толи 103  смотря как посмотреть.  Подозреваю что это какие то согласующие сопротивления (может быть что то еще ) во всяком случае тестер показал 10 кОм.  Так вот выводы  сопротивлений уходящие к ногам  шилда которые втыкаются в Мегу в D6 и D5  закорочены. А если померять сопротивление на ногах от контроллера между этими двумя ногами, то она удвоенное 20 кОм.  Насколько позволила рассмотреть увеличилка похоже при пайке повисла "сопля" между этими ногами :(((  что теперь делать не знаю, нет у меня таких ювелирных паяльных способностей. 

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

icms
Offline
Зарегистрирован: 22.03.2011

отнеси шилд в ремонт мобил там за минуту и 1-2 бакса сделают. а развориш )) вообще нахоляву, ремонтники любят необычные железки в руках покрутить.

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

Доброго времени суток! То же вот думаю: Due уровень логики 3,3 В а эти резисторные сборки маркировка 103 = по 10 кОм уменьшают уровень сигнала еще ниже и контроллер тачскрина не работает! Хотя возникают вопросы:

- А почему тогда контроллеру экрана "хватает" уровня напряжения там такие же сборки на все контакты стоят?

XPT2046 по SPI работает в режиме "slave" или "master"?

Все таки надо смотреть сигналы! В даташитах смотрю-смотрю ..... видать не могу высмотреть!

В даташите уровни сигналов для XPT2046 2,7 В - 5 В

А для R61581  1,65 B - 3,3 B

Может это причина, сборки по 10 кОм на все входы поставлены.

VPanin
Offline
Зарегистрирован: 05.05.2014

icms пишет:

отнеси шилд в ремонт мобил там за минуту и 1-2 бакса сделают. а развориш )) вообще нахоляву, ремонтники любят необычные железки в руках покрутить.

Сносил шилд в ремонт. В  "сурьезной" мастерской забрали посмотреть под микроскоп и через 10 мин сказали что там непропай ноги как будто , и вообще что "это мелкопай" и никто не хочет браться.  Зашел в мастерскую "забегаловка"  и говорю "Нетрадиционным ремонтом занимаетесь? " Смотрю у него глазки загорелись и говрит "показывай что это , кто это и куда это..." Дал посмотреть, парень посмотрел за ширмой 2 мин и говорит - "Готово. Забирай. Нет больше коротыша. Я его иголкой сковырнул, это остатки флюса были."  Вдобавок еще спиртом почистил это место и бесплатно отдал :)

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

Теперь есть еще такая трабла.  смотрел ветку http://arduino.ru/forum/apparatnye-voprosy/tachskrin-perevernuta-koordinata-kh 

располагаю дисплей в LANDSCAPE  (как в посте 10) разъем слева

пишу в скетче 

myGLCD.InitLCD(LANDSCAPE);
myTouch.InitTouch(PORTRAIT);

Координаты Y нормальные а X перевернутые. Меняю в файле UTouch.cpp  

touch_x_left			= (CAL_X>>14) & 0x3FFF;
touch_x_right			= CAL_X & 0x3FFF;

местами и все становится ок, как на картинке, верхний левый угол 0;0  нижний правый 480;320  При этом там же жестко прописал 

disp_x_size = 480;
disp_y_size = 320;

 

теперь располагаю дисплей в PORTRAIT  (как в посте 10) разъем снизу

пишу в скетче 

myGLCD.InitLCD(PORTRAIT);
 myTouch.InitTouch(LANDSCAPE);

Координаты пока  файле UTouch.cpp  не трогаю ( при этом Х поменяны) то верхний левый угол 320;480 нижний правый 0;0   т.е. если смотреть что разъем снизу то  вот такая перевернутость координат, а если перевернуть дисплей то координаты становятся нормальными , а вот надпись на дисплее вверх ногами.

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

VPanin
Offline
Зарегистрирован: 05.05.2014

SergMyz пишет:

Доброго времени суток! То же вот думаю: Due уровень логики 3,3 В а эти резисторные сборки маркировка 103 = по 10 кОм уменьшают уровень сигнала еще ниже и контроллер тачскрина не работает! Хотя возникают вопросы:

А ты уверен что этот шилд R61581 совместим с DUE ?  У продавана моего экранчика  была надпись что он для Меги 2560  И где то я встречал при вариантах отдельно экран отдельно шилд для экрана и там была классификация что для Меги такой шилд, для Дуе другой шилд

vdk
Offline
Зарегистрирован: 14.04.2013

VPanin пишет:

Координаты пока  файле UTouch.cpp  не трогаю ( при этом Х поменяны) то верхний левый угол 320;480 нижний правый 0;0   т.е. если смотреть что разъем снизу то  вот такая перевернутость координат, а если перевернуть дисплей то координаты становятся нормальными , а вот надпись на дисплее вверх ногами.

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

Тут штука в том, что контроллер тача считает координаты несколько иначе, чем UTouch

Так что либо в своей программе это корректировать, либо несколько переписать сам UTouch

VPanin
Offline
Зарегистрирован: 05.05.2014

Меня как бы устраивает вариант Ландскейпа.  Верхний левый угол 0,0   нижний правый макс

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

VPanin пишет:

А ты уверен что этот шилд R61581 совместим с DUE ?  У продавана моего экранчика  была надпись что он для Меги 2560  И где то я встречал при вариантах отдельно экран отдельно шилд для экрана и там была классификация что для Меги такой шилд, для Дуе другой шилд

Не уверен! Разница в уровнях логики Due - 3,3 B Mega2560 - 5 В. Пока времени нет спокойно сесть, промерить, выпаять сборки на контроллере тачскрина и т. д. Одни теоретические размышления! Но экран, изображение работают отлично! Честно говоря купил комплект Due и данный экран по случаю, цена устроила и ждать не надо было. На эбэй есть родной шилд для Due под 40 пин и 36 пин мониторчики, может куплю.

VPanin
Offline
Зарегистрирован: 05.05.2014

Изучи вот эту тему , твой вариант  DUE + Экран.  Правда там другой экран и через дуевский шилд. Возможно в этом ответ на вопрос почему не работает тач 

http://habrahabr.ru/post/196600/

http://habrahabr.ru/post/196864/

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

Спасибо. Изучал я информацию по этим ссылкам. Ответа там нет, кроме одного, купить такие же шилд и экран!

VPanin
Offline
Зарегистрирован: 05.05.2014

Вот что написано в описании шилда к Меге от Сoldtears

The IO of arduino MEGA is officially 5V, TFT LCD use 3.3V IO. This CTE TFT LCD/SD shield for arduino MEGA provides the connection to a TFT LCD Module directly without flying wires.



The shield use TRUE 5v to 3.3V level translation IC, therefore, it is compatible with many TFT LCD modules. Compatibility is highest when compared to ordinary TFT Shield, which use resistors or buffer to "shift" 5V to 3.3V. Compatibility issues may arise when using this method to translate IO level to 3.3V, especially at high write speed.

 

Это как раз твой случай, экран на шильде заточен под Мегу с напряжением 5V на логике, а ты его втыкаешь в DUE с напругой 3,3V. 

Если не работает только Тач  попробуй закоротить сопротивления около ножек для тача, т.е. пустить сигнал напрямую с контроллера тача на свою DUE

mishgan
Offline
Зарегистрирован: 25.04.2014

Приобрел у китайцев вот это . Продавец прислал файлик и сказал что все должно работать. 

Закинул библиотеки из файлика в каталог ардуино и запустил демки. Демка UTFT запустилась и работает отлично.

Запускаю Utouch_Calibrarion. Скетч запустился, но на нажатия не реагирует. Пробовал выводить данные на компорт - результата ноль. 

В коде записаны такие строчки

UTFT        myGLCD(ITDB32WC,38,39,40,41); 
UTouch      myTouch(6,5,4,3,2);

Подскажите как проверить работоспособностьтачскрина?

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

Еще одна китайская "версия" экрана!

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

Выпаял сборки, припаял перемычки, прозвонил, загрузил скетч с калибровкой = не работает! Тачскрин ушел на свалку, как не рабочий, буду пробовать другой экран. Обычные издержки китайпрома! 

Cat
Offline
Зарегистрирован: 07.06.2014

Доброго времени суток.

Немного предыстории для начала.
Имею плату iBoard Pro http://imall.iteadstudio.com/iboard-pro.html
и TFT с тачскрином ITDB02-4.3 http://imall.iteadstudio.com/display/tft-lcm/im120419007.html

Контролер тача - XPT2046.

Графика запустилась с пол-пинка.
Тач через UTouch работать отказался полностью:
1. нажатие не видит вообще. переписал dataAvailable(), сделал на digitalReadFast - заработало.
2. координаты или -1 или какой-то случайный бред.

Притащил с работы 4-канальный цифровой осциллограф, подключил на SPI XPT2046.
Точно - данные выдаются как угодно, без какой либо привязки к клоку. Отсюда и случайные координаты в итоге.
Начал копать даташит на XPT2046 - вроде всё совпадает.
На каком-то буржуйском форуме вычитал, что XPT2046 очень критична к частоте клока SPI.
Причем, в даташите ОШИБКА !!!  Внутрений АЦП XPT2046 работает максимум на 125кГц. Но эта частота формируется внутри XPT2046 не делением (как в даташите написано), а УМНОЖЕНИЕМ частоты клока SPI.
Переписал функции чтения/записи по SPI с понижением частоты клока - о, чудо.
Тач работает идеально - при нажатии стилусом иногда +/- единица координаты прыгают.

А вот дальше пришел "ВЕЛИКИЙ ОБЛОМ" - при отключении осциллографа всё перестало работать.
Похоже, всё таки ITEAD Studio что-то с разводкой напартачили :(
Но, поскольку у меня останется только TFT, а плата с МК будет своя - я пока сильно не переживаю.
Оставлю на плате на SPI посадочные места под резисторы/конденсаторы и буду подбирать.

Вывод (предварительный) из вышесказанного - UTouch не работает с XPT2046, надо писать свою либу.
Если есть АРГУМЕНТИРОВАННЫЕ возражения (с примерами у кого работает) - буду рад услышать.