Arduino и дисплеи от сотиков мобильных телефонов

криворук
Offline
Зарегистрирован: 04.04.2020

подсветка итак понятна. шина скорее 16.адрреса по 5 последнее фото

 

oldman
Offline
Зарегистрирован: 27.03.2020

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

 tft.fillRect(0,0,20,20, 0x0000);

 И никак не могу понять, как заполнить экран этими квадратиками, получить что-то вроде шахматного поля. Это ни для чего конкретного, просто в познавательных целях. Или ткните носом, где почитать.

 

zbot
Offline
Зарегистрирован: 15.03.2020

смещением координат

X=0; Y=0; COLOR=0x0000; tft.fillRect(X,Y,X+20,Y+20, COLOR); это то что у тебя сейчас есть.

теперь в цикле делай со сдвигом по горизонтали X= X +20 выполнить N раз ("N" в зависимости от ширины экрана) рисование квадрата, затем тот-же цикл но уже со сдвигом по вертикали Y= Y +20 выполнить К раз ("К" в зависимости от высоты экрана)

 

 
oldman
Offline
Зарегистрирован: 27.03.2020

zbot пишет:

смещением координат

X=0; Y=0; COLOR=0x0000; tft.fillRect(X,Y,X+20,Y+20, COLOR); это то что у тебя сейчас есть.

теперь в цикле делай со сдвигом по горизонтали X= X +20 выполнить N раз ("N" в зависимости от ширины экрана) рисование квадрата, затем тот-же цикл но уже со сдвигом по вертикали Y= Y +20 выполнить К раз ("К" в зависимости от высоты экрана)

Спасибо, почитал о циклах, видимо не понял.

int n;
for (uint16_t n=0; n<10; n++)
{n++; tft.fillRect(0+20,0,20,20, 0x0000);}

Получил один квадратик со сдвигом х+20. Может нужно применить вложенный цикл?

 

 
graurmax
Offline
Зарегистрирован: 06.08.2020

Думаю как-то так получатся шахматы:

for (uint16_t n=0; n<5; n++)
{
	for (uint16_t m=0; m<10; m++)
	{ 
		tft.fillRect(n*40+((ceil(m/2)-m/2)*40),m*20,20,20, 0x0000);
	}
}

 

oldman
Offline
Зарегистрирован: 27.03.2020

graurmax пишет:

Думаю как-то так получатся шахматы:

for (uint16_t n=0; n<5; n++)
{
	for (uint16_t m=0; m<10; m++)
	{ 
		tft.fillRect(n*40+((ceil(m/2)-m/2)*40),m*20,20,20, 0x0000);
	}
}

 

  Спасибо, что откликнулись. Получилось 10 столбцов с h=200 и с интервалом 20. Уже голову сломал, но моих куцых познаний не хватает...

zbot
Offline
Зарегистрирован: 15.03.2020
самый примитивный и кстати наверное самый быстрый вариант:
 
// шахматка 4 х 4
// зачистка экрана в белый цвет
tft.fillRect(0,0,239,319, 0xFFFF);
// рисуем первый ряд 
tft.fillRect(0,0,19,19, 0x0000);
tft.fillRect(40,0,59,19, 0x0000);
tft.fillRect(80,0,99,19, 0x0000);
tft.fillRect(120,0,139,19, 0x0000);
// рисуем второй ряд 
tft.fillRect(20,20,39,39, 0x0000);
tft.fillRect(60,20,79,39, 0x0000);
tft.fillRect(100,20,119,39, 0x0000);
// рисуем третий ряд 
tft.fillRect(0,40,19,59, 0x0000);
tft.fillRect(40,40,59,59, 0x0000);
tft.fillRect(80,40,99,59, 0x0000);
tft.fillRect(120,40,139,59, 0x0000);
// рисуем четвертый ряд 
tft.fillRect(20,60,39,79, 0x0000);
tft.fillRect(60,60,79,79, 0x0000);
tft.fillRect(100,60,119,79, 0x0000);
 
ну и теперь подумай как сделать циклы так чтобы получались те числа которые стоят в параметрах функции закраски прямоугольника.
graurmax
Offline
Зарегистрирован: 06.08.2020

Видимо, дело в конвертации float to int... 

Попробуйте тогда так:

for (uint16_t n=0; n<5; n++)
{
	for (uint16_t m=0; m<10; m++)
	{ 
		tft.fillRect(n*40+(m%2)*20),m*20,20,20, 0x0000);
	}
}

 

oldman
Offline
Зарегистрирован: 27.03.2020

graurmax пишет:

Видимо, дело в конвертации float to int... 

Попробуйте тогда так:

for (uint16_t n=0; n<5; n++)
{
	for (uint16_t m=0; m<10; m++)
	{ 
		tft.fillRect(n*40+(m%2)*20),m*20,20,20, 0x0000);
	}
}

 

 Вот спасибо! Внешне просто и, главное, изящно. Я немножко подправил,

tft.fillRect((n*40+(m%2)*20),m*20,20,20, 0x0000);

теперь буду разбираться как это получилось.

oldman
Offline
Зарегистрирован: 27.03.2020

 To graurmax

graurmax
Offline
Зарегистрирован: 06.08.2020

oldman, you are welcome!

 

graurmax пишет:

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

При попытке прочитать ID контроллера получаю 54227 (0хD3D3). 

Комментарий в MCUFRIEND_kbv.cpp гласит: //16-bit write-only bus

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

    ret = readReg32(0xD3);      //for ILI9488, 9486, 9340, 9341
    msb = ret >> 8;
    if (msb == 0x93 || msb == 0x94 || msb == 0x98 || msb == 0x77 || msb == 0x16)
        return ret;             //0x9488, 9486, 9340, 9341, 7796
    if (ret == 0x00D3 || ret == 0xD3D3)
        return ret;             //16-bit write-only bus

В общем я понял что шина только для записи, и прочитать с нее ничего не получится.

Продолжу серию "глупых" вопросов.

Встречал примеры подключения дисплеев по 5 проводам (CS, RS, WR, RD, RST).

На сколько понял, это режим SPI, и чтобы его использовать нужно сконфигурировать правильно (железно) входы дисплея IM0, IM1, IMx...  

Правильно ли предположить, что если у дисплея есть только один вход IM0, то он может работать в режимах либо 8 либо 16 бит, но не SPI ?

 

croc19
Offline
Зарегистрирован: 17.02.2017

Пять названных тобой проводов (сигналов) это шина управления дисплея. К ней прилагается 8-9-16-18-24 битная 

шина данных. Соответственно и выводов тоже. Шина SPI  --  https://yandex.ru/search/?lr=11&oprnd=6398016443&text=SPI

Она есть в дисплеях. Чтоб ее использовать нужно сконфигурировать  ИМы. Правильно.

У контроллера дисплея, который на стекле, есть несколько выводов ИМ. Они как правило выведены на шлейф и

посажены на питание и землю. Они рядом и их видно. Один, иногда 2 ИМа выводятся на контакты. Ими можно переключать

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

Обычно 8 или 16 бит. Но есть экземпляры, где переключаются 9-16 бит.

Еще про SPI. В основном использовалась на маленьких дисплеях. Она последовательная и поэтому вывод производится медленнее.

А в силу медленности ардуины, выводить на большой дисплей долго.

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

Это вполне реально.

oldman
Offline
Зарегистрирован: 27.03.2020

graurmax пишет:

oldman, you are welcome!

 

graurmax пишет:

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

При попытке прочитать ID контроллера получаю 54227 (0хD3D3). 

Комментарий в MCUFRIEND_kbv.cpp гласит: //16-bit write-only bus

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

    ret = readReg32(0xD3);      //for ILI9488, 9486, 9340, 9341
    msb = ret >> 8;
    if (msb == 0x93 || msb == 0x94 || msb == 0x98 || msb == 0x77 || msb == 0x16)
        return ret;             //0x9488, 9486, 9340, 9341, 7796
    if (ret == 0x00D3 || ret == 0xD3D3)
        return ret;             //16-bit write-only bus

В общем я понял что шина только для записи, и прочитать с нее ничего не получится.

Продолжу серию "глупых" вопросов.

Встречал примеры подключения дисплеев по 5 проводам (CS, RS, WR, RD, RST).

На сколько понял, это режим SPI, и чтобы его использовать нужно сконфигурировать правильно (железно) входы дисплея IM0, IM1, IMx...  

Правильно ли предположить, что если у дисплея есть только один вход IM0, то он может работать в режимах либо 8 либо 16 бит, но не SPI ?

 


А какой дисплей? Если есть распиновка, то лучше воспользоваться "читалкой" пост #441 в этой теме, а то какой-то странный драйвер дисплея.

graurmax
Offline
Зарегистрирован: 06.08.2020

Благодарю за ликбез, croc19.

oldman, дисплей 2.8 , 37 пин от старенького LG смартфона, если память не подводит. Нашел 2 варианта распиновки, отличающиеся только расположением IM0 (11/21) и "перевернутыми" пинами DB0-7 <> 8-15.. 

До этого по неграмотности пытался по 5 проводам через макетку что-то увидеть, естественно безуспешно. Сейчас собираю а-ля шилд с делителями для всех необходимых подключений, под UNO. Скоро буду дальше грызть гранит)

zbot
Offline
Зарегистрирован: 15.03.2020

китайские UNO на AVGA328 уже как правило на 3.3 вольтах.

В вашем дисплее подключения 11 и 21 контакта помоему отсутствует т.е. NC. Дисплей довольно стандартный но с большой долей вероятности читалкой вы его не определите он 16 битный.

запитать можно смело от 3.3 вольта, в катоды светодиодов я ставил 20 Ом резисторы. #2949 :

oldman
Offline
Зарегистрирован: 27.03.2020

 Такой вариант. Восьмибитное подключение на старшие биты.

 Для работы с читалкой пользуюсь про мини на 3,3В. Кстати, никто не портировал читалку под STM32?

zbot
Offline
Зарегистрирован: 15.03.2020

полез сегодня по свежим поступлениям и достал первым попавшийся в руку дисплей от "cromax x700" с маркировкой на шлейфе "cm-240a217-02". Дисплей довольно простой разобрать и подобрать распиновку заняло полчаса:

1 led- (K)
2 led+ (A)
3 GND
4 +3.3
5 +3.3
6 NC
7 CS
8 RESET
9
10 WR
11 RD
12 D7
13 D6
14 D5
15 D4
16 D3
17 D2
18 D1
19 D0
20 GND
 
Во время проверки пришлось перевернуть шину данных наоборот ну собственно он и завелся со второй попытки. Контроллер читалка не определила но на дефолтной инициализации ILI9341 он завелся, разве что зеркальное отображение и вместо красного цвета синий.  
 
o------------------------------------o
|                                    | 
00 = 0                       *       | 
04 = 0                       *       | 
B0 = 0                               | 
BF = BF 00 00 00 06 0C 13 19 *****       | 
D3 = 0                       *       | 
DA = 0                       *       | 
DB = 0                       *       | 
DC = 0                       *       | 
EF = EF FF FF FF FF FF FF FF *****       | 
|                                    |
o------------------------------------o
 
Device Code Read (BFh)  
BF = BF 00 00 00 06 0C 13 19 ***** 
 
 
поскольку шилд делал для UNO R3 и Mega2560 с питанием 5 В на плате развел стабилизатор на 3.3В сигналы управления завел через резисторные делители (6к/3к), а шину данных через преобразователь уровней LVC4245А (https://datasheetspdf.com/pdf-file/548090/ETC/LVC4245A/1) с выбором направления передачи от сигнала RD.
  
пкуны
Offline
Зарегистрирован: 14.08.2020

croc19 пишет:

forfrends 

Запустил HIFAY 15-12396-0794-0. Контролер ILI9488. Фотки шлейфа твои. Разрешение 320х480. Размер 4 дюйма.

а можно его подключить к ESP32?

пкуны
Offline
Зарегистрирован: 14.08.2020

а можно ли его подключить к ESP32?

zbot
Offline
Зарегистрирован: 15.03.2020

пкуны пишет:

а можно ли его подключить к ESP32?

можно

alex4891
Offline
Зарегистрирован: 16.08.2020

Доброго всем .

Друзья помогите с распиновкой и опознать контроллер дисплея.стоял в motorola wx395.

Марка на шлейфе TSF8H0731 FPS-A3-E

alex4891
Offline
Зарегистрирован: 16.08.2020

Еще один с fly toshiba st2060

alex4891
Offline
Зарегистрирован: 16.08.2020

...

пкуны
Offline
Зарегистрирован: 14.08.2020

zbot пишет:

пкуны пишет:

а можно ли его подключить к ESP32?

можно

а можно по подробнее ... как и что

дисплей 8 битный по параллельной шине, а ESP32  поддерживает только SPI,

как его перевести в spi или как подключить, библиотеки??

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

пкуны пишет:

дисплей 8 битный по параллельной шине, а ESP32  поддерживает только SPI,

Кто Вам сказал эту глупость?

пкуны
Offline
Зарегистрирован: 14.08.2020

andriano пишет:

пкуны пишет:

дисплей 8 битный по параллельной шине, а ESP32  поддерживает только SPI,

Кто Вам сказал эту глупость?

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

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

По параллельной шине.

пкуны
Offline
Зарегистрирован: 14.08.2020

andriano пишет:

По параллельной шине.

я не нашел инфы по паралельному подключению

Alex-Bee
Offline
Зарегистрирован: 13.03.2020

del

zbot
Offline
Зарегистрирован: 15.03.2020

пкуны

ровно так же как к ардуине, например - шину данных дисплея (d0..d7) на пины c 3 по 10, управление дисплеем на пины 11,12,13 (WR, CD, RESET) RD и CS на массу.

Далее выставляеш на GPIO15, GPIO02, GPIO04, GPIO16, GPIO17, GPIO05, GPIO18, GPIO19 биты соответствующие нужному байту, опускаеш GPIO21 ждеш пару микросекунд поднимаеш GPIO21 - запись байта в контроллер LCD прошла, если передаеш команду то перед "опускаеш GPIO21" опускаеш GPIO03 а после поднятия GPIO21 поднимаеш GPIO03. Типа так, достаточно подробно описал.

Реализовать можеш на любом языке при условии что он дает доступ к управлению отдельными пинами или портами I/O микроконтролера.

P.S. ну забыл написать что для старта дисплея надо дернуть пин GPIO01 на котором ресет и подождать ну примерно 10 милисекунд чтобы он запустился.

после реализации функций - reset_lcd, put_cmd_lcd, put_data_lcd дальше у тебя останутся чисто технические проблеммы по нахождению кодов инициализации для твоего контроллера lcd и собсно можеш рисовать на нем. Хотя если пожелаеш еще и читать из своего lcd то подключай управление RD на тот пин который понравится и дергай его для чтения ну и добавиш функцию get_data_lcd

словарь терминов так сказать:

*пин - одна из линий порта ввода вывода, выведен на плате в виде "иголки" 

*выставляеш - устанавливаеш на пинах нужную комбинацию из нолей и единиц

*опускаеш - устанавливаеш в низкий уровень т.е. 0

*поднимаеш - устанавливаеш высокий уровень т.е. 1

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

:-)

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

пкуны пишет:

andriano пишет:

По параллельной шине.

я не нашел инфы по паралельному подключению

да ну ?  гугл с ютубом забанили ? 

в поиск надо забивать - esp32 lcd tft 8bit . всё уже давно есть , и примеры, и библиотеки, и видео об этом.

пкуны
Offline
Зарегистрирован: 14.08.2020

zbot пишет:

пкуны

ровно так же как к ардуине, например - шину данных дисплея (d0..d7) на пины c 3 по 10, управление дисплеем на пины 11,12,13 (WR, CD, RESET) RD и CS на массу.

Далее выставляеш на GPIO15, GPIO02, GPIO04, GPIO16, GPIO17, GPIO05, GPIO18, GPIO19 биты соответствующие нужному байту, опускаеш GPIO21 ждеш пару микросекунд поднимаеш GPIO21 - запись байта в контроллер LCD прошла, если передаеш команду то перед "опускаеш GPIO21" опускаеш GPIO03 а после поднятия GPIO21 поднимаеш GPIO03. Типа так, достаточно подробно описал.

Реализовать можеш на любом языке при условии что он дает доступ к управлению отдельными пинами или портами I/O микроконтролера.

P.S. ну забыл написать что для старта дисплея надо дернуть пин GPIO01 на котором ресет и подождать ну примерно 10 милисекунд чтобы он запустился.

после реализации функций - reset_lcd, put_cmd_lcd, put_data_lcd дальше у тебя останутся чисто технические проблеммы по нахождению кодов инициализации для твоего контроллера lcd и собсно можеш рисовать на нем. Хотя если пожелаеш еще и читать из своего lcd то подключай управление RD на тот пин который понравится и дергай его для чтения ну и добавиш функцию get_data_lcd

словарь терминов так сказать:

*пин - одна из линий порта ввода вывода, выведен на плате в виде "иголки" 

*выставляеш - устанавливаеш на пинах нужную комбинацию из нолей и единиц

*опускаеш - устанавливаеш в низкий уровень т.е. 0

*поднимаеш - устанавливаеш высокий уровень т.е. 1

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

:-)

подключил, все работает

пины на tft
2         -3V
3-11    - GND
12       - 3V
14       - D0
15       - D1
16       - D2
17       - D3
18       - D4
19       - D5
20       - D6
21       - D7
31       - res
32       - RD
33       - WR
34       - DC
35       - CS
38       - 3V

использую библиотеку TFT_eSPI

User_Setup.h
#define ILI9488_DRIVER

User_Setup_Select.h
#include <User_Setups/Setup16_ILI9488_Parallel.h>

мои пины на esp32
Setup16_ILI9488_Parallel.h

#define TFT_CS   33
#define TFT_DC   18
#define TFT_RST  32
#define TFT_WR    19
#define TFT_RD    23

#define TFT_D0   13  
#define TFT_D1   12 
#define TFT_D2   14
#define TFT_D3   27
#define TFT_D4   5
#define TFT_D5   15
#define TFT_D6   2
#define TFT_D7   4
 

zbot
Offline
Зарегистрирован: 15.03.2020

CS имеет смысл подключать только если на пинах занятых дисплеем вешать дополнительные устройства, а RD если из дисплея надо что-то читать. 

 
TIMSAN
Offline
Зарегистрирован: 25.08.2020

всем привет. У меня 7' дисплей 39 pin KD070d21-39na-a15. не могу найти распиновку для подключения к arduino. помогите пожалуйста.

TIMSAN
Offline
Зарегистрирован: 25.08.2020

всем привет. У меня 7' дисплей 39 pin KD070d21-39na-a15. не могу найти распиновку для подключения к arduino. помогите пожалуйста.

zbot
Offline
Зарегистрирован: 15.03.2020

TIMSAN пишет:

всем привет. У меня 7' дисплей 39 pin KD070d21-39na-a15. не могу найти распиновку для подключения к arduino. помогите пожалуйста.

фото в студию ну и таки надежд мало что он подключится к ардуино, с большой вероятностью он либо стандарта RGB либо MIPI

TIMSAN
Offline
Зарегистрирован: 25.08.2020

Mipi fpc 39pin.

TIMSAN
Offline
Зарегистрирован: 25.08.2020

TIMSAN
Offline
Зарегистрирован: 25.08.2020

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

TIMSAN
Offline
Зарегистрирован: 25.08.2020

да. ну не я же выдаю ошибки ( ошибка страницы)

TIMSAN
Offline
Зарегистрирован: 25.08.2020

Во. нашел. вероятней подойдет дисплей от самсунг GT-S7272 4" TFT.

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

oldman
Offline
Зарегистрирован: 27.03.2020

Вам уже сказали, что MIPI с ардуиной не дружит.

oldman
Offline
Зарегистрирован: 27.03.2020

Вам уже сказали, что MIPI с ардуиной не дружит.

TIMSAN
Offline
Зарегистрирован: 25.08.2020

Gt-s7272 не mipi

TIMSAN
Offline
Зарегистрирован: 25.08.2020

Во. У oldmana тоже двоит тексьы

TIMSAN
Offline
Зарегистрирован: 25.08.2020

Во. У oldmana тоже двоит тексьы

TIMSAN
Offline
Зарегистрирован: 25.08.2020

Во. У oldmana тоже двоит текст

TIMSAN
Offline
Зарегистрирован: 25.08.2020

Во. У oldmana тоже двоит текст

TIMSAN
Offline
Зарегистрирован: 25.08.2020

Во. У oldmana тоже двоит текст

TIMSAN
Offline
Зарегистрирован: 25.08.2020

Во. У oldmana тоже двоит текст