И никак не могу понять, как заполнить экран этими квадратиками, получить что-то вроде шахматного поля. Это ни для чего конкретного, просто в познавательных целях. Или ткните носом, где почитать.
X=0; Y=0; COLOR=0x0000; tft.fillRect(X,Y,X+20,Y+20, COLOR); это то что у тебя сейчас есть.
теперь в цикле делай со сдвигом по горизонтали X= X +20 выполнить N раз ("N" в зависимости от ширины экрана) рисование квадрата, затем тот-же цикл но уже со сдвигом по вертикали Y= Y +20 выполнить К раз ("К" в зависимости от высоты экрана)
X=0; Y=0; COLOR=0x0000; tft.fillRect(X,Y,X+20,Y+20, COLOR); это то что у тебя сейчас есть.
теперь в цикле делай со сдвигом по горизонтали X= X +20 выполнить N раз ("N" в зависимости от ширины экрана) рисование квадрата, затем тот-же цикл но уже со сдвигом по вертикали Y= Y +20 выполнить К раз ("К" в зависимости от высоты экрана)
oldman, дисплей 2.8 , 37 пин от старенького LG смартфона, если память не подводит. Нашел 2 варианта распиновки, отличающиеся только расположением IM0 (11/21) и "перевернутыми" пинами DB0-7 <> 8-15..
До этого по неграмотности пытался по 5 проводам через макетку что-то увидеть, естественно безуспешно. Сейчас собираю а-ля шилд с делителями для всех необходимых подключений, под UNO. Скоро буду дальше грызть гранит)
китайские UNO на AVGA328 уже как правило на 3.3 вольтах.
В вашем дисплее подключения 11 и 21 контакта помоему отсутствует т.е. NC. Дисплей довольно стандартный но с большой долей вероятности читалкой вы его не определите он 16 битный.
запитать можно смело от 3.3 вольта, в катоды светодиодов я ставил 20 Ом резисторы. #2949 :
полез сегодня по свежим поступлениям и достал первым попавшийся в руку дисплей от "cromax x700" с маркировкой на шлейфе "cm-240a217-02". Дисплей довольно простой разобрать и подобрать распиновку заняло полчаса:
1 led- (K)
2led+ (A)
3GND
4+3.3
5+3.3
6NC
7CS
8RESET
9DС
10WR
11RD
12D7
13D6
14D5
15D4
16D3
17D2
18D1
19D0
20GND
Во время проверки пришлось перевернуть шину данных наоборот ну собственно он и завелся со второй попытки. Контроллер читалка не определила но на дефолтной инициализации 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.
ровно так же как к ардуине, например - шину данных дисплея (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 мкс, потом можеш уменьшить или даже убрать вообще )
ровно так же как к ардуине, например - шину данных дисплея (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 мкс, потом можеш уменьшить или даже убрать вообще )
подсветка итак понятна. шина скорее 16.адрреса по 5 последнее фото
Вопрос немного не по теме. Заливаю экран белым, рисую черный квадратик:
1
tft.fillRect(0,0,20,20, 0x0000);
И никак не могу понять, как заполнить экран этими квадратиками, получить что-то вроде шахматного поля. Это ни для чего конкретного, просто в познавательных целях. Или ткните носом, где почитать.
смещением координат
X=0; Y=0; COLOR=0x0000; tft.fillRect(X,Y,X+20,Y+20, COLOR); это то что у тебя сейчас есть.
теперь в цикле делай со сдвигом по горизонтали X= X +20 выполнить N раз ("N" в зависимости от ширины экрана) рисование квадрата, затем тот-же цикл но уже со сдвигом по вертикали Y= Y +20 выполнить К раз ("К" в зависимости от высоты экрана)
смещением координат
X=0; Y=0; COLOR=0x0000; tft.fillRect(X,Y,X+20,Y+20, COLOR); это то что у тебя сейчас есть.
теперь в цикле делай со сдвигом по горизонтали X= X +20 выполнить N раз ("N" в зависимости от ширины экрана) рисование квадрата, затем тот-же цикл но уже со сдвигом по вертикали Y= Y +20 выполнить К раз ("К" в зависимости от высоты экрана)
Спасибо, почитал о циклах, видимо не понял.
1
int
n;
2
for
(uint16_t n=0; n<10; n++)
3
{n++; tft.fillRect(0+20,0,20,20, 0x0000);}
Получил один квадратик со сдвигом х+20. Может нужно применить вложенный цикл?
Думаю как-то так получатся шахматы:
1
for
(uint16_t n=0; n<5; n++)
2
{
3
for
(uint16_t m=0; m<10; m++)
4
{
5
tft.fillRect(n*40+((
ceil
(m/2)-m/2)*40),m*20,20,20, 0x0000);
6
}
7
}
Думаю как-то так получатся шахматы:
1
for
(uint16_t n=0; n<5; n++)
2
{
3
for
(uint16_t m=0; m<10; m++)
4
{
5
tft.fillRect(n*40+((
ceil
(m/2)-m/2)*40),m*20,20,20, 0x0000);
6
}
7
}
Спасибо, что откликнулись. Получилось 10 столбцов с h=200 и с интервалом 20. Уже голову сломал, но моих куцых познаний не хватает...
Видимо, дело в конвертации float to int...
Попробуйте тогда так:
1
for
(uint16_t n=0; n<5; n++)
2
{
3
for
(uint16_t m=0; m<10; m++)
4
{
5
tft.fillRect(n*40+(m%2)*20),m*20,20,20, 0x0000);
6
}
7
}
Видимо, дело в конвертации float to int...
Попробуйте тогда так:
1
for
(uint16_t n=0; n<5; n++)
2
{
3
for
(uint16_t m=0; m<10; m++)
4
{
5
tft.fillRect(n*40+(m%2)*20),m*20,20,20, 0x0000);
6
}
7
}
Вот спасибо! Внешне просто и, главное, изящно. Я немножко подправил,
1
tft.fillRect((n*40+(m%2)*20),m*20,20,20, 0x0000);
теперь буду разбираться как это получилось.
To graurmax
oldman, you are welcome!
Доброго времени суток!
При попытке прочитать ID контроллера получаю 54227 (0хD3D3).
Комментарий в MCUFRIEND_kbv.cpp гласит: //16-bit write-only bus
Подскажите, пожалуйста, как это интерпретировать.
1
ret = readReg32(0xD3);
//for ILI9488, 9486, 9340, 9341
2
msb = ret >> 8;
3
if
(msb == 0x93 || msb == 0x94 || msb == 0x98 || msb == 0x77 || msb == 0x16)
4
return
ret;
//0x9488, 9486, 9340, 9341, 7796
5
if
(ret == 0x00D3 || ret == 0xD3D3)
6
return
ret;
//16-bit write-only bus
В общем я понял что шина только для записи, и прочитать с нее ничего не получится.
Продолжу серию "глупых" вопросов.
Встречал примеры подключения дисплеев по 5 проводам (CS, RS, WR, RD, RST).
На сколько понял, это режим SPI, и чтобы его использовать нужно сконфигурировать правильно (железно) входы дисплея IM0, IM1, IMx...
Правильно ли предположить, что если у дисплея есть только один вход IM0, то он может работать в режимах либо 8 либо 16 бит, но не SPI ?
Пять названных тобой проводов (сигналов) это шина управления дисплея. К ней прилагается 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, you are welcome!
Доброго времени суток!
При попытке прочитать ID контроллера получаю 54227 (0хD3D3).
Комментарий в MCUFRIEND_kbv.cpp гласит: //16-bit write-only bus
Подскажите, пожалуйста, как это интерпретировать.
1
ret = readReg32(0xD3);
//for ILI9488, 9486, 9340, 9341
2
msb = ret >> 8;
3
if
(msb == 0x93 || msb == 0x94 || msb == 0x98 || msb == 0x77 || msb == 0x16)
4
return
ret;
//0x9488, 9486, 9340, 9341, 7796
5
if
(ret == 0x00D3 || ret == 0xD3D3)
6
return
ret;
//16-bit write-only bus
В общем я понял что шина только для записи, и прочитать с нее ничего не получится.
Продолжу серию "глупых" вопросов.
Встречал примеры подключения дисплеев по 5 проводам (CS, RS, WR, RD, RST).
На сколько понял, это режим SPI, и чтобы его использовать нужно сконфигурировать правильно (железно) входы дисплея IM0, IM1, IMx...
Правильно ли предположить, что если у дисплея есть только один вход IM0, то он может работать в режимах либо 8 либо 16 бит, но не SPI ?
А какой дисплей? Если есть распиновка, то лучше воспользоваться "читалкой" пост #441 в этой теме, а то какой-то странный драйвер дисплея.
Благодарю за ликбез, croc19.
oldman, дисплей 2.8 , 37 пин от старенького LG смартфона, если память не подводит. Нашел 2 варианта распиновки, отличающиеся только расположением IM0 (11/21) и "перевернутыми" пинами DB0-7 <> 8-15..
До этого по неграмотности пытался по 5 проводам через макетку что-то увидеть, естественно безуспешно. Сейчас собираю а-ля шилд с делителями для всех необходимых подключений, под UNO. Скоро буду дальше грызть гранит)
китайские UNO на AVGA328 уже как правило на 3.3 вольтах.
В вашем дисплее подключения 11 и 21 контакта помоему отсутствует т.е. NC. Дисплей довольно стандартный но с большой долей вероятности читалкой вы его не определите он 16 битный.
запитать можно смело от 3.3 вольта, в катоды светодиодов я ставил 20 Ом резисторы. #2949 :
Такой вариант. Восьмибитное подключение на старшие биты.
Для работы с читалкой пользуюсь про мини на 3,3В. Кстати, никто не портировал читалку под STM32?
полез сегодня по свежим поступлениям и достал первым попавшийся в руку дисплей от "cromax x700" с маркировкой на шлейфе "cm-240a217-02". Дисплей довольно простой разобрать и подобрать распиновку заняло полчаса:
forfrends
Запустил HIFAY 15-12396-0794-0. Контролер ILI9488. Фотки шлейфа твои. Разрешение 320х480. Размер 4 дюйма.
а можно его подключить к ESP32?
а можно ли его подключить к ESP32?
а можно ли его подключить к ESP32?
можно
Доброго всем .
Друзья помогите с распиновкой и опознать контроллер дисплея.стоял в motorola wx395.
Марка на шлейфе TSF8H0731 FPS-A3-E
Еще один с fly toshiba st2060
...
а можно ли его подключить к ESP32?
можно
а можно по подробнее ... как и что
дисплей 8 битный по параллельной шине, а ESP32 поддерживает только SPI,
как его перевести в spi или как подключить, библиотеки??
дисплей 8 битный по параллельной шине, а ESP32 поддерживает только SPI,
дисплей 8 битный по параллельной шине, а ESP32 поддерживает только SPI,
тогда как подключить?
По параллельной шине.
По параллельной шине.
я не нашел инфы по паралельному подключению
del
пкуны
ровно так же как к ардуине, например - шину данных дисплея (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 мкс, потом можеш уменьшить или даже убрать вообще )
:-)
По параллельной шине.
я не нашел инфы по паралельному подключению
да ну ? гугл с ютубом забанили ?
в поиск надо забивать - esp32 lcd tft 8bit . всё уже давно есть , и примеры, и библиотеки, и видео об этом.
пкуны
ровно так же как к ардуине, например - шину данных дисплея (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
CS имеет смысл подключать только если на пинах занятых дисплеем вешать дополнительные устройства, а RD если из дисплея надо что-то читать.
всем привет. У меня 7' дисплей 39 pin KD070d21-39na-a15. не могу найти распиновку для подключения к arduino. помогите пожалуйста.
всем привет. У меня 7' дисплей 39 pin KD070d21-39na-a15. не могу найти распиновку для подключения к arduino. помогите пожалуйста.
всем привет. У меня 7' дисплей 39 pin KD070d21-39na-a15. не могу найти распиновку для подключения к arduino. помогите пожалуйста.
фото в студию ну и таки надежд мало что он подключится к ардуино, с большой вероятностью он либо стандарта RGB либо MIPI
Mipi fpc 39pin.
сори. у меня сайт подвисает. не знал что может так получиться и закинет несколько раз фото.
да. ну не я же выдаю ошибки ( ошибка страницы)
Во. нашел. вероятней подойдет дисплей от самсунг GT-S7272 4" TFT.
возможно ли подключить его? раз уж дисплей от планшета уходит до следующих разработак.
Вам уже сказали, что MIPI с ардуиной не дружит.
Вам уже сказали, что MIPI с ардуиной не дружит.
Gt-s7272 не mipi
Во. У oldmana тоже двоит тексьы
Во. У oldmana тоже двоит тексьы
Во. У oldmana тоже двоит текст
Во. У oldmana тоже двоит текст
Во. У oldmana тоже двоит текст
Во. У oldmana тоже двоит текст