TFT LCD 3.2" 320x480 HX8357B как считать с экрана цвет точки по координатам?

MacSim
Offline
Зарегистрирован: 28.11.2012

Заливаю первой картинкой экран полностью. Вторая размером 16 на 16 пикселей должна двигаться поверх первой не затирая ее.

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

вот и возник вопрос: а можно ли считать нужную область, или точку с экрана, чтоб потом вывести ее обратно?

MacSim
Offline
Зарегистрирован: 28.11.2012

подпишусь :-)

MagicianT
Offline
Зарегистрирован: 03.10.2015

Какой софтиной рисуешь, там и смотри, есть рид-пиксель или нету. 

nik182
Offline
Зарегистрирован: 04.05.2015
MacSim
Offline
Зарегистрирован: 28.11.2012

да про библиотеку не написал: utft

СПАСИБО мануал посмотрю, надо еще глянуть реализовано ли чтение в самой библиотеке или дописывать надо.

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

 

MacSim
Offline
Зарегистрирован: 28.11.2012

посмотрел три библиотеки: UTFT, TFT_HX8357-master, Adafruit_HX8357_Library-master

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

TFT_HX8357-master основана на адафруте. как добавить в нее функцию чтения пикселя? подскажите плиз

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Найти в дэйташите нужную команду (или убадиться, что это невозможно).

Кстати, по-моему на этот вопрос Вам уже ответили в посте №3.

nik182
Offline
Зарегистрирован: 04.05.2015

Взять в библеотеке подпрограмму записи пикселя, скопировать, обозвать её читать пиксель, заменить команды записи, командами чтения и поставить return с прочитанными данными. Да тип п.п. void поменять на word. Обычно работало.

Обратите внимание на https://github.com/adafruit/Adafruit_ILI9340 - в этой библиотеке есть команды чтения SPI.

А этой https://github.com/adafruit/Adafruit_HX8357_Library - тоже есть всё. Вам нужна uint8_t Adafruit_HX8357::readdata(void) ... 

MacSim
Offline
Зарегистрирован: 28.11.2012

у меня дисплей такой

http://ru.aliexpress.com/item/Free-shipping-3-2-inch-TFT-LCD-screen-modu...

и адафрут с ним не заработал по спи. видимо выводы не верно указаны. но это уже аппаратные вопросы...

спасибо всем откликнувшимся. пойду пробовать дописать библиотеку.

nik182
Offline
Зарегистрирован: 04.05.2015

Вообще то это совсем не SPI экран. С ним ещё проще. Обычная параллельная шина.

MacSim
Offline
Зарегистрирован: 28.11.2012

nik182 пишет:
Вообще то это совсем не SPI экран. С ним ещё проще. Обычная параллельная шина.

жую мануал. это уже понял. два порта юзаются в tft_нч8357 библиотеке а и с, остальное пока не вкурил. на сколько я понимаю в нем есть видеопамять (GRAM) но как она организована еще не понял. как работать с ней пока тоже. попиксельно или блоками...

2Е команду подать можно. но не понятно что за аргументы у нее и что и откуда ловить в ответ.

как понял на 2Е отвечает про точку начиная с Start Column/Start Page positions и потом переходит на следующую точку. пока только голова кругом.

nik182
Offline
Зарегистрирован: 04.05.2015

Аргументы теже самые, что и при записи. Сначала даешь команду выделение прямоугольной области, и потом читаешь ровно столько точек, сколько в этой области (Это может быть как одна точка, так и целый экран). Выдает значения видеопамяти=цвет пикселя. Подал один раз команду и только читаешь. Инкремент адреса в памяти автоматический. Затем можно этот прямоугольник записать в другое место экрана по тойже схеме. Подал комаду выделение такой же прямоугольной области в другом месте экрана, команду записи, и пишешь всю область. Главное за границы не выходить.  

MacSim
Offline
Зарегистрирован: 28.11.2012

nik182 пишет:

Аргументы теже самые, что и при записи. Сначала даешь команду выделение прямоугольной области, и потом читаешь ровно столько точек, сколько в этой области (Это может быть как одна точка, так и целый экран). Выдает значения видеопамяти=цвет пикселя. Подал один раз команду и только читаешь. Инкремент адреса в памяти автоматический. Затем можно этот прямоугольник записать в другое место экрана по тойже схеме. Подал комаду выделение такой же прямоугольной области в другом месте экрана, команду записи, и пишешь всю область. Главное за границы не выходить.  

понял. спасибо.

MacSim
Offline
Зарегистрирован: 28.11.2012

Вернулся с отпуска. Продолжаю ковырять библиотеку UTFT.

как читать понял...пробую писать, надо не одну функцию LCD_Write_DATA переписать, LCD_Writ_Bus тоже  и DDRA & DDRC подергать придется... пробую, о результатах доложу

MacSim
Offline
Зарегистрирован: 28.11.2012

сообщение удалено..

MacSim
Offline
Зарегистрирован: 28.11.2012

библиотека TFT_HX8357-master

uint16_t readtft(uint16_t mouse_X,uint16_t mouse_Y) {
   uint8_t data_A, data_C;
   tft.setWindow(mouse_X, mouse_Y, mouse_X+12, mouse_Y+17);
   tft.writecommand(0x2E);
   DDRA=0x00;//порт на вход
   DDRC=0x00;//порт на вход
   CS_L;
   for (int i = 0; i<204;i++){
     
      data_A = PORTA;
      data_C = PORTC;
      Serial.print("i=");
      Serial.print(i);
      Serial.print("   PORTA=");
      Serial.print(data_A);
      Serial.print("   PORTC=");
      Serial.println(data_C);
       WR_STB;
      }
      CS_H;
      
   DDRA=0xFF;//порт на выход
   DDRC=0xFF;// порт на выход
   return (1);

}

пробую так, но не работает. видимо cs, wr не так дергаю...

help...

MacSim
Offline
Зарегистрирован: 28.11.2012

Все время выдает с порта 0x2E   (46)

прошу помощи. видимо как-то не так я линиями управления дергаю.

MacSim
Offline
Зарегистрирован: 28.11.2012

O'e конечно не правильно. даташит 18 страница мене в руки...

чтотакое Dummy read ?

MacSim
Offline
Зарегистрирован: 28.11.2012

вызывает вопрос соответствия сигналов описаных в даташите - объявленным в библиотеке

в даташите: CSX, DCX, WRX_SCL, RDX

в библиотеке :  _cs   = 40 нога,  _rs   = 38 нога, _rst  = 41нога,  _wr   = 39,  _fcs  = 44

думаю CSX =_cs, WRX_SCL =_wr, RDX наверно _rs, _rst наверно ресет и мне не нужен остается что DCX = _fcs

правильно или нет? ...---... , 000 111 000, S_O_S
 

MacSim
Offline
Зарегистрирован: 28.11.2012

читать надо как на стр.18 даташита?

DBI-B system interface protocol?

MacSim
Offline
Зарегистрирован: 28.11.2012

nik182 пишет:

Мануал https://cdn-shop.adafruit.com/datasheets/HX8357-D_DS_April2012.pdf - команда 2Е. 

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

ссылка приведена на мануал с буквой после номера D. У меня же дисплей, по заверениям продавца, с буквой B.

нашел вот такой мануал на него. может кому-то поможет. Есть разница!

https://www.crystalfontz.com/controllers/Himax_HX8357-B_January_2010.pdf

MacSim
Offline
Зарегистрирован: 28.11.2012

nik182 пишет:

Аргументы теже самые, что и при записи. Сначала даешь команду выделение прямоугольной области, и потом читаешь ровно столько точек, сколько в этой области (Это может быть как одна точка, так и целый экран). Выдает значения видеопамяти=цвет пикселя. Подал один раз команду и только читаешь. Инкремент адреса в памяти автоматический. Затем можно этот прямоугольник записать в другое место экрана по тойже схеме. Подал комаду выделение такой же прямоугольной области в другом месте экрана, команду записи, и пишешь всю область. Главное за границы не выходить.  

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

как передернуть экран, чтоб следующий пиксел на порты вывел не понятно? вроде надо RDX дергать, но где он физически ХЗ.

uint16_t readtft(uint16_t mouse_X,uint16_t mouse_Y) {
   uint8_t data_A, data_C;
   tft.setWindow(mouse_X, mouse_Y, mouse_X+12, mouse_Y+17);
   CS_L;
   WR_H;
   RS_L;
   //tft.writecommand(0x2E);
   PORTA=0;
   PORTC=0x2E;
  //SETUP_CS_L;
   WR_STB;
   RS_H;
   DDRA=0x00;//порт на вход
   DDRC=0x00;//порт на вход
   delayMicroseconds(10);
   // до сюда наверно верно
   
   for (int i = 0; i<205;i++){
      //а вот тут надо бы передергнуть но как?
      data_A = PORTA;
      data_C = PORTC;
      Serial.print("i=");
      Serial.print(i);
      Serial.print("   PORTA=");
      Serial.print(data_A);
      Serial.print("   PORTC=");
      Serial.println(data_C);
      
      }
      
      SETUP_CS_H;

      
   DDRA=0xFF;//порт на выход
   DDRC=0xFF;// порт на выход
   return (1);

}

На какую ногу arduino  приходит RDX экрана ?

И не уверен что интерфейс правильно понимаю? чему равняются IM2, IM1, IM0

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

Первое, убедитесь что у вас на шилде выведен сигнал RD.

Второе, читать надо не из PORTx, а с PINx. Проверено  для режима 8/16 бит.

Алгоритм следующий, выстанавливаем порт на вход DDRC = 0x00, DDRA = 0x00, выбираем TFT(СS =  low), устанавливаем RD (WR = high, RD = low), считываем старший и младший байты hd = PINNC, ld = PINA, снимаем сигнал чтения, снимаем сигнал выбора TFT, преводим порт на вывод данных.

В библиотеке UTFT не нашел не GET_pixel(), не Read_pxel() функций.

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

еще б добавил, что перед этим надо диспу послать команду(регистр) чего мы хотим от него, чтоб он нам это вывел на порт.

MacSim пишет:

у меня дисплей такой

http://ru.aliexpress.com/item/Free-shipping-3-2-inch-TFT-LCD-screen-module-Ultra-HD-320X480-for-Arduino-MEGA-2560/32255199317.html?spm=2114.13010608.0.106.VZZfhE

и адафрут с ним не заработал по спи. видимо выводы не верно указаны. но это уже аппаратные вопросы...

спасибо всем откликнувшимся. пойду пробовать дописать библиотеку.

нет у него RD . 

Только вскрытие этого шилда поможет вывести RD. Или взять шилд где он уже выведен, чаще всего это адафруитские 8ми битные шилды. в UTFT нет считывания. В адафруите уже есть считывание , перед инитом в поисках ID он считывает с нескольких адресов, так вот , если хотите считать цвет точки , то ещё изучите даташит , по каким регистрам (закидывая координаты нужного пикселя) считать  пиксель (цвет). 

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

MacSim
Offline
Зарегистрирован: 28.11.2012

diger67 пишет:

Второе, читать надо не из PORTx, а с PINx. Проверено  для режима 8/16 бит.

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

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

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

Вариантом не мало, можно взять шилд без адаптации для 5 В, на них как правило выведен RD, и сваять резистивные токоограничивающие цепи. И очень тонко подмечено, что перед тем как чтото писать в программе надо изучить даташит на устройство. Что касается вывода, если SPI, то да вывод происходит последовательно. Но в зависимости от типа индикатора и его инициализации IM0-3, он может работать в разных режимах.

MacSim
Offline
Зарегистрирован: 28.11.2012

отклеил экран от шильда.

на шлейфе надпись

TFT8K4132FPC-A1-E

TRULY-M

на обороте экрана M201100326

TFT1P2875-V2

т.к экран требует 3.3v  для i\o портов на шильде установлены 3 микросхемы для согласования

HC245

распиновку кабеля шлейфа не нашел.

MacSim
Offline
Зарегистрирован: 28.11.2012

slider пишет:

еще б добавил, что перед этим надо диспу послать команду(регистр) чего мы хотим от него, чтоб он нам это вывел на порт.

MacSim пишет:

у меня дисплей такой

http://ru.aliexpress.com/item/Free-shipping-3-2-inch-TFT-LCD-screen-module-Ultra-HD-320X480-for-Arduino-MEGA-2560/32255199317.html?spm=2114.13010608.0.106.VZZfhE

и адафрут с ним не заработал по спи. видимо выводы не верно указаны. но это уже аппаратные вопросы...

спасибо всем откликнувшимся. пойду пробовать дописать библиотеку.

нет у него RD . 

Только вскрытие этого шилда поможет вывести RD. Или взять шилд где он уже выведен, чаще всего это адафруитские 8ми битные шилды. в UTFT нет считывания. В адафруите уже есть считывание , перед инитом в поисках ID он считывает с нескольких адресов, так вот , если хотите считать цвет точки , то ещё изучите даташит , по каким регистрам (закидывая координаты нужного пикселя) считать  пиксель (цвет). 

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

RD нет в библиотеке. есть ли у него  RD еще вопрос схемы я не видел.

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

в какие регистры закидывать понятно. определяем област - начало и конец, нулим dc, rd повышаем, в порт с кидаем 2Е, дергаем wr. далее надо ловить данные дергая rd, повысив dc

в библиотеке нет и DC тем не менее команда записи 2С как-то работает...помоему названия не сходятся... судя по функции writecommand в ноль уходят cs и rs - ноги 40 и 38 дуины2560 соответсвенно.

MacSim
Offline
Зарегистрирован: 28.11.2012

diger67 пишет:

Вариантом не мало, можно взять шилд без адаптации для 5 В, на них как правило выведен RD, и сваять резистивные токоограничивающие цепи. И очень тонко подмечено, что перед тем как чтото писать в программе надо изучить даташит на устройство. Что касается вывода, если SPI, то да вывод происходит последовательно. Но в зависимости от типа индикатора и его инициализации IM0-3, он может работать в разных режимах.

шильд уже взят. и даташит утверждает, что читать возможно.

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

MacSim пишет:

diger67 пишет:

Вариантом не мало, можно взять шилд без адаптации для 5 В, на них как правило выведен RD, и сваять резистивные токоограничивающие цепи. И очень тонко подмечено, что перед тем как чтото писать в программе надо изучить даташит на устройство. Что касается вывода, если SPI, то да вывод происходит последовательно. Но в зависимости от типа индикатора и его инициализации IM0-3, он может работать в разных режимах.

шильд уже взят. и даташит утверждает, что читать возможно.

Фото шлейфа покрупнее и почетче выложите. Читать можно если вывод RD выведен как минимум на шлейф, тогда его можно вывести на любой свободный пин  и подключит к ардуино. По другому DC определяют в хедере как RS, ноль команда, единица данные. 

MacSim
Offline
Зарегистрирован: 28.11.2012

спасибо. кое-что проясняется:

на шилде стоят микрухи hc245 для выравнивания напряжения

даташит на них глянул http://www.ti.com/lit/ds/symlink/sn54hc245.pdf

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

но это не все. в соответствии с даташитом на лсд RD выведен, если не используется сажается на + (+3.3) решил что возможно так и есть. нарисовал известные ноги управления. если не ошибся похоже что нога 44 и не идет некуда сигнал с 45 идет на HC245 на вход А5.

шлейв экрана 44 пиновый, распиновку частично нарисовал. сигналы cs,wr,rs(dc) сидят рядом на выводах 12,13,14 соответственно.

16-ресет

с 17 по 34 идет 18 линейная шина данных с 34 по 16 к ним через HC245 идут данные с портов АиС МК.

40,41,42,43 - похоже для подключения тачскрина.

со 2 по 7 через резистор 2 ома посажено на землю

8, 36, 39, 44 на землю

и  интересное:

1, 11, 15 - идут на +3.3 1-видимо питание. а вот две другие 11 и 15 могут быть RD во-первых тк. на них сидит +, во-вторых 12,13,!4 -ноги рядом.

нашел на шлейфе рядом с самим экраном (а не там где для пайки!) ногу куда идет ресет (по даташиту вроде 38, но обозначены всего1 и 176 на экране, по мануалу их больше 1000 смотрю, не разобрался). через 4 от него 18 битная шина данных.а вот в другую сторону должны идти IM2,IM1,IM0  и вроде должно получиться 010. но пока непойму. 3 свободных пина на шлейфе 9, 10, 11(тут +) не выходит настройки на 16 бит передачу...

нога 15 осталась зажатой со всех сторон. думаю это и ест RD.

вот такие домыслы...

надо оттяпать дир на 2-х из 3 HC245, те которые к портам завязаны АиС и завести на какую нить ногу. посмотреть надо +5 с дуни можно или тоже согласовывать. посмотрел можно.

надо проверить про ноги 44 и 45 что куда идет. возможно rd завести на  45 через ногу B5 микросхемы HC245 либо паять делитель, на резисторах или транзисторах, кому как нравиться (питание оторвать надо предварительно).

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

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

 

 

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

MacSim, да вы точно решили разобраться в этом :) 

этот дисплей не SPI , это SPI пины карты памяти и флэша 8пин устанавливаемого самостоятельно. Адафруит либы есть и SPI и параллельной шины.  Этот дисп имеет 16ти бит параллельную шину По адафруиту на 16ть бит пока неподскажу , не проверял.

  Гляньте примерно как искать RD (подставлять картинку из даташита, если не нашли распиновку)  это и последущее сообщение: http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=3#comment-216650 , можете всю тему глянуть.  И вот ещё темка http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd как выводилось RD . 

 

 

// Далее возможно не ваш случай, у вас двунаправленные HC245 , проследите пины меняющие их направление, мож RD к ним выведен: 

В некоторых случаях нужен другой шилд . Там прийдётся сдувать нафиг микрухи и ставить вместо них 10ком резисторы. Т.к. на других шилдах, где выведен RD , применяют либо резисторы, либо другие микрухи - двунаправленные, и RD также подведен к ним , чтобы менять их направление.  Посоветовал, лучше бы на резисторах сделать , проще, надёжно и безопасно (долго объяснять). Подсветка скорее всего запараллелена на стаб как смд транзюк,   с маркировкой "662K" , поэтому напряжение на диспе выше 3,3в не поднимется, это хорошо.

MacSim
Offline
Зарегистрирован: 28.11.2012

slider пишет:

MacSim, да вы точно решили разобраться в этом :) 

этот дисплей не SPI , это SPI пины карты памяти и флэша 8пин устанавливаемого самостоятельно. Адафруит либы есть и SPI и параллельной шины.  Этот дисп имеет 16ти бит параллельную шину По адафруиту на 16ть бит пока неподскажу , не проверял.

  Гляньте примерно как искать RD (подставлять картинку из даташита, если не нашли распиновку)  это и последущее сообщение: http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=3#comment-216650 , можете всю тему глянуть.  И вот ещё темка http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd как выводилось RD . 

 

 

// Далее возможно не ваш случай, у вас двунаправленные HC245 , проследите пины меняющие их направление, мож RD к ним выведен: 

В некоторых случаях нужен другой шилд . Там прийдётся сдувать нафиг микрухи и ставить вместо них 10ком резисторы. Т.к. на других шилдах, где выведен RD , применяют либо резисторы, либо другие микрухи - двунаправленные, и RD также подведен к ним , чтобы менять их направление.  Посоветовал, лучше бы на резисторах сделать , проще, надёжно и безопасно (долго объяснять). Подсветка скорее всего запараллелена на стаб как смд транзюк,   с маркировкой "662K" , поэтому напряжение на диспе выше 3,3в не поднимется, это хорошо.

да решил разобраться. знаю дисплей параллельный 18! бит. и все они на шлейфе. подключен и настроен только на 16. пины меняющие направление подтянуты как и писал к плюсу. RD думается мне тоже к плюсу подтянут.

по первой ссылке инфу читал, от части это и помогло. по второй не видел интнресно, почитаю.

сигналы спи конечно к флешке идут. на шилде есть место под установку микрухи U5, видимо флеш памяти но какой вопрос. распиновку зарисовал ноги 1и2и6 к +3.3v: 3 к В7->А7->sck:4->B6->A6->mosi:5->gnd:7->напрямую к miso и к карте флеш: 6-> B5->A5->  к пину 45 дуни (SS должно быть). я юзал память 24С... но она и2с. какая тут микруха должна подойти чтоб точно по пинам стала может кто подскажет? ...пусто место...не должно быть, может припаять подходящую и не юзать карточку флеш.

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

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

и... IM2 похоже на минусе сидит в самом шлейфе.

зы... а все так хорошо начиналось. хотел всего лишь мышкой по экрану возить... а микруха флеш вроде CAT150xx по пинам схожа

   

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

MacSim пишет:

сигналы спи конечно к флешке идут. на шилде есть место под установку микрухи U5, видимо флеш памяти но какой вопрос. распиновку зарисовал ноги 1и2и6 к +3.3v: 3 к В7->А7->sck:4->B6->A6->mosi:5->gnd:7->напрямую к miso и к карте флеш: 6-> B5->A5->  к пину 45 дуни (SS должно быть). я юзал память 24С... но она и2с. какая тут микруха должна подойти чтоб точно по пинам стала может кто подскажет? ...пусто место...не должно быть, может припаять подходящую и не юзать карточку флеш.

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

Можно поставить w25Qxxx. Это SPI память со страничной организацией по 256 байт и объем приличный, не только шрифты можно расположить но и подготовленные задники(статический фон), что повысит производительность при выводе полного экрана и снизит нагрузку на мк. По сути готовую страничку можно будет выводить с помощью несколько подправленной функции Screen. Я такую поставил на шилд, там вроде и отдельный вывод CS под нее есть.

BEST-83154
Offline
Зарегистрирован: 16.03.2016

как его (

HX8357B)

вобще запустить?

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

BEST-83154 пишет:

как его (

HX8357B)

вобще запустить?

почему поиском не пользуетесь?  так же быстрее и больше инфы.

в яндекс иль гугл   arduino hx8357b     все пережёвано на много раз .

http://arduino.ru/forum/apparatnye-voprosy/kak-podklyuchit-displei-32-lcd-module?page=2#comment-297652

BEST-83154
Offline
Зарегистрирован: 16.03.2016

slider - гуглил инфы почти нет

дисплей то удалось запустить,а вот с CH340 никак чет не получается

 

BEST-83154
Offline
Зарегистрирован: 16.03.2016

у кого то есть библиотека для протеуса для дисплея сконтроллером HX8357B ?