Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.76/70: Рейтинг темы: голосов - 70, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
1

Проблема с дисплеем ILI9321

22.01.2016, 03:18. Показов 13332. Ответов 42
Метки нет (Все метки)

Уже шестой час бьюсь, не могу никак заставить эту штуку хотя бы пиксель закрасить. Инициализацию спер на просторах интернета. Если уж у всех одинаково, наверное, должно работать. Но вот проблема: не инициализируется дисплей.
Для проверки я считываю значения всех регистров. И получается какая-то белиберда. На всякий случай решил считывать по 4 байта с регистра. И странная картина: если у большинства регистров (опустим пока, что значения совсем ненормальные) первые и вторые 2 байта совпадают, то у некоторых это не так. Начиная с нулевого, у которого получается 0x93219121 (WTF?), дальше вот что:
Код
0x0001 = 0x05010501
0x0002 = 0x05010501
0x0003 = 0x01310131
0x0004 = 0x01010101
0x0005 = 0x01010101
0x0006 = 0x01010101
0x0007 = 0x01010101
0x0008 = 0x09090909
0x0009 = 0x01010101
...
У большинства почему-то 0х0101. Но, скажем, данные пикселей:
Код
0x0022 = 0x53a951a9
Похоже на мусор. И непонятно, что ж это за фигня-то такая!

По идее, если бы у меня алгоритм чтения регистров не работал, я бы и идентификатора чипа не увидел. С другой стороны, почему-то дисплей не активизируется. Чертовщина.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2016, 03:18
Ответы с готовыми решениями:

Проблема с дисплеем WH1602B-REI-CTV#
Хочу задействовать очень красивый дисплейчик (он светит красными цифрами а-ля олдскульный...

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

проблема с дисплеем
ноутбук модель acer nitro 5 an515-42. ребята такая проблема, когда например посидел в браузере...

Проблема с дисплеем MT-10T7
В общем надыбал я при помощи хорошего человека, 5 дисплеев типа MT-10T7, и потребовалось сделать...

42
0 / 0 / 0
Регистрация: 17.01.2016
Сообщений: 47
22.01.2016, 09:38 2
Я так понял у Вас 32 битная шина данных ? Просто я работал с подобным дисплеем, у меня была 16 битная шина и я мог за раз максимум два байта только получить. Белиберда может получатся если биты перепутаны, тогда инициализация естественно проходить не будет.
0
0 / 0 / 0
Регистрация: 19.07.2013
Сообщений: 423
22.01.2016, 12:00 3
Разрешение какое дисплея? может все-же ILI9221?
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
22.01.2016, 12:08 4
Шина данных восьмибитная, не написал сразу. 32-битной шины у этого драйвера не существует.
Разрешение дисплея 240x320. Поигравшись с таймингами, получил другое значение идентификатора: ILI9320.
Странно это: я по даташиту в стробирующих Rd/Wr импульсах делал задержку 150нс, а оказывается, там ее вовсе не нужно делать, тогда стабильно считывает.
Но тоже непонятно что считывает: скажем, регистры Xmax и Ymax считались с инвертированным предпоследним битом.

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

Да и насчет протокола я уже говорил: пишут о минимальных задержках строба, а фактически все работает за счет GPIO latency ?
0
Oxford
22.01.2016, 12:11 5
А где какой дисплей? Линк где посмотреть
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
22.01.2016, 13:28 6
Очень сильно похож на этот. Внешний вид абсолютно такой же, да и распиновка J1-J4 совпадает.
Распиновку J5 продавец тоже не выложил ?
Вообще не понимаю, куда там тачскрин присобачен, хоть вскрывай!
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
22.01.2016, 13:46 7
Цитата Сообщение от Iddy_Im
не понимаю, куда там тачскрин присобачен, хоть вскрывай!
Сейчас у китайцев много появилось таких дисплеев с бесконтроллерным тачем и подключением по восьмибитной паралельной шине. Например, вот этот - распиновка совпадает с Вашим, хотя дисплейный чип другой.

В них четыре контакта "сырого" тача (X-, X+, Y-, Y+) на плате не подписаны (какой-то сговор прямо :-) ), но можно попробовать их омметром вызвонить. На первый взгляд, кандидаты на тач - две пары неподписанных пинов в том ряду, где выведена шина данных дисплея.

З.Ы. А контакты J5 соединены с остальными (подписанными) разъёмами? Или это отдельный набор сигналов?
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
22.01.2016, 15:43 8
Вскрыл. Те резисторы на 0Ом, что сзади, как раз подсоединены к тачу, т.е., похоже, их надо выпаять и подключить туда АЦП.
А вот с экранчиком так ничего и не вышло ?
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
22.01.2016, 15:48 9
Зато по надписи на шлейфе нагуглил экранчик: вот он. Правда, у меня написано "A206T-015G" (или C, непонятно). LCD dryve ILI9320.
0
0 / 0 / 0
Регистрация: 25.04.2010
Сообщений: 57
22.01.2016, 15:55 10
Цитата Сообщение от Iddy_Im
Вскрыл. Те резисторы на 0Ом, что сзади, как раз подсоединены к тачу, т.е., похоже, их надо выпаять и подключить туда АЦП.
А вот с экранчиком так ничего и не вышло ?
http://forum.iosyitistromyss.r... 14&t=23279
У меня тоже не заводился как следует... а проблема была в временных интервалах между ногодрыгательством при инициализации... если надо? то сырого кода могу выложить для STM32F0
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
22.01.2016, 16:34 11
Надо, конечно, если не сложно!
Сделал сейчас risit так:
Код
   CS_set; RS_set; WR_set; RD_set;
LCD_write();
LCD_wrbyte(0xff);
RST_clear;
Delay(500);
RST_set;
Delay(500);
Все равно фигня какая-то, а идентификатор пишет вообще 0x9121
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
22.01.2016, 16:36 12
Весь низкоуровневый код:
Код
static uint16_t LCD_id = 0;

uint8_t readbyte(){
RD_clear;
uint8_t byte = LCD_rdbyte();
//pouse();
RD_set;
return byte;
}
void writebyte(uint8_t b){
LCD_wrbyte(b);
WR_clear;
WR_set;
}
void writereg(uint16_t r){
LCD_wrbyte(r >> 8);
RS_clear;
WR_clear;
WR_set;
LCD_wrbyte(r & 0xff);
WR_clear;
WR_set;
RS_set;
}

uint16_t read_reg(uint16_t reg){
uint32_t dat = 0;
CS_clear; // active
writereg(reg);
LCD_read();
dat = readbyte() << 8;
dat |= readbyte();
CS_set;
LCD_write(); // restore dir to out
return dat;
}

void write_reg(uint16_t reg, uint16_t dat){
CS_clear; // active
writereg(reg);
RS_set;  // data
writebyte(dat >> 8);
writebyte(dat && 0xff);
CS_set;
}
void LCD_risit(){
CS_set; RS_set; WR_set; RD_set;
LCD_write();
LCD_wrbyte(0xff);
RST_clear;
Delay(500);
RST_set;
Delay(500);
}
uint16_t LCD_read_id(){
return (LCD_id = read_reg(0));
}
#defyme TFTLCD_DELAY 0xfff
static const uint16_t ILI932x_regValues[] = {
ILI932X_START_OSC        , 0x0001, // 0x00
TFTLCD_DELAY             , 100,
ILI932X_DRIV_OUT_CTRL    , 0x0100, // 0x01
ILI932X_DRIV_WAV_CTRL    , 0x0700, // 0x02
ILI932X_ENTRY_MOD        , 0x1030, // 0x03
ILI932X_RESIZE_CTRL      , 0x0000, // 0x04
ILI932X_DISP_CTRL2       , 0x0202, // 0x08
ILI932X_DISP_CTRL3       , 0x0000, // 0x09
ILI932X_DISP_CTRL4       , 0x0000, // 0x0A
ILI932X_RGB_DISP_IF_CTRL1, 0x0003, // 0x0C
ILI932X_FRM_MARKER_POS   , 0x0000, // 0x0D
ILI932X_RGB_DISP_IF_CTRL2, 0x0000, // 0x0F
ILI932X_DISP_CTRL1       , 0x0021, // 0x07
TFTLCD_DELAY             , 10,
ILI932X_POW_CTRL1        , 0x1690, // 0x10
ILI932X_POW_CTRL2        , 0x0007, // 0x11
ILI932X_POW_CTRL3        , 0x0118, // 0x12
ILI932X_POW_CTRL4        , 0x0b00, // 0x13
ILI932X_POW_CTRL7        , 0x0012, // 0x29
TFTLCD_DELAY             , 50,
ILI932X_HOR_START_AD     , 0x0000, // 0x50
ILI932X_HOR_END_AD       , TFTWIDTH-1, // 0x51
ILI932X_VER_START_AD     , 0x0000, // 0x52
ILI932X_VER_END_AD       , TFTHEIGHT-1, // 0x53
ILI932X_GATE_SCAN_CTRL1  , 0x2700, // 0x60
ILI932X_GATE_SCAN_CTRL2  , 0x0001, // 0x61
ILI932X_GATE_SCAN_CTRL3  , 0x0000, // 0x6A
ILI932X_PANEL_IF_CTRL1   , 0x0010, // 0x90
ILI932X_PANEL_IF_CTRL2   , 0x0000, // 0x92
ILI932X_PANEL_IF_CTRL3   , 0x0001, // 0x93
ILI932X_PANEL_IF_CTRL4   , 0x0110, // 0x95
ILI932X_PANEL_IF_CTRL5   , 0x0000, // 0x97
ILI932X_PANEL_IF_CTRL6   , 0x0000, // 0x98
ILI932X_DISP_CTRL1       , 0x0133, // 0x07
};
uint16_t LCD_init(){
if(LCD_id == 0) LCD_read_id();
if(LCD_id > 0x931f && LCD_id < 0x932a){ // 932x
LCD_id = 0x9320; // make it symple!
int i, s = sizeof(ILI932x_regValues)/sizeof(uint16_t);
for(i = 0; i < s;){
uint16_t a = ILI932x_regValues[i++];
uint16_t b = ILI932x_regValues[i++];
if(a == TFTLCD_DELAY) Delay(b);
else write_reg(a, b);
}
uint16_t addr;
for(addr = 0x80; addr < 0x86; ++addr)
write_reg(addr, 0);
return LCD_id;
}
//LCD_risit();
return LCD_id;
}
void setpix(uint16_t x, uint16_t y, uint16_t colr){
write_reg(ILI932X_GROM_HOR_AD, x);
write_reg(ILI932X_GROM_VER_AD, y);
write_reg(ILI932X_RW_GROM, colr);
}
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
22.01.2016, 17:13 13
Вот же зараза! Теперь упорно читает из регистра 0 значение 0x9121!
0
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
22.01.2016, 17:50 14
Чего то напоминает проблему с контактом, по одной из линий данных. Там точно все надежно подключено?
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
22.01.2016, 18:15 15
Нет, конечно: обычными проводочками. Попробую другие.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
22.01.2016, 18:53 16
Цитата Сообщение от Iddy_Im
Вскрыл. Те резисторы на 0Ом, что сзади, как раз подсоединены к тачу, т.е., похоже, их надо выпаять и подключить туда АЦП.
Iddy_Im, а можно фото внутренностей дисплея? Меня тоже интересует тач: куда его присоединили.
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
22.01.2016, 21:45 17
Я попозже выложу распиновку, как прозвоню. Правда, у меня отпуск и жена строжайше запретила на работу ходить.
0
0 / 0 / 0
Регистрация: 17.01.2016
Сообщений: 47
22.01.2016, 22:11 18
Цитата Сообщение от Iddy_Im
Я попозже выложу распиновку, как прозвоню. Правда, у меня отпуск и жена строжайше запретила на работу ходить.
Хорошая жена :) Главное чтобы в красно - белое запрета небыло :)))
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 1,406
25.01.2016, 10:11 19
Долбаные юмористы: они на шину данных D0 и D1 подключили в параллели с данными тачскрин! Придурки чертовы!!!
В общем, тачскрин надо выпаивать с шлейфа и подключать отдельно.
Распиновка разъема J5 (условно левый верхний угол - 1; верхний ряд нечетные, слева-направо; +xx - соответствующий запараллеленный контакт тачскрина):
1 - земля
3 - SD_DI
5 - SD_SCK
7 - LCD_RS + XL
9 - LCD_DR
11 - D0 + XR
13 - D2
15 - D4
17 - D6
2 - +3.3V
4 - SD_DO
6 - SD_SS
8 - LCD_CS + YD
10 - LCD_WR
12 - D1 + YU
14 - D3
16 - D5
18 - D7
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
25.01.2016, 16:05 20
А на J1-J4 тач не заведён, только на J5?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2016, 16:05

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Проблема с дисплеем и LTDC
Здравствуйте, прошу помощи. Пытаюсь осилить программирование под микроконтроллеры. Суть: есть...

Проблема с OLED дисплеем
Есть универсальная модельная зарядка G.T.Power A6-10. Решил я на ней поменять дисплей ЖК на Otyd...

Проблема, связанная с дисплеем
Проблема: Неважно в какие игры захожу, онлайн, не онлайн, тяжелые, не тяжелые.. после 10-15 минут...

ACER EB490. Проблема с дисплеем
Доброго времени суток. Проблема такого характера. Приобрёл данный монитор не так давно, изначально...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.