Суть вопроса : имеется LCD Display Module TFT 3.95 inch на контроллере ili9488, вот такой
Читать тач, писать/рисовать на нем я уже умею, нет проблем. А вот научиться программно управлять подсветкой - ну никак ((.
Ух! У меня такой же дисплей. И тоже напрягает подсветка. Ночью вместо ночника наботает. Если запихнуть в корпус проблем не будет, но жрет она ого. Пришлось отдельный стабилизатор на питание ставить, мега не справляется все "кормить". Напряжение до 4 вольт упало.
Так что если найдете решение, будет просто супер!
Я мало "понимающий", но давайте попробуем разобраться вместе.
В скетче строки управления подсветкой вот эти:
/**
* \brief Function to turn on the display back light
*
* Use this function to simply set the pin controlling the back light high to
* turn on the back light.
*
* \note It is up to the user application if other means of controlling this pin
* should be used, e.g. a PWM signal to be able to dim the display.
*/
static inline void ili9488_backlight_on(void)
{
ioport_set_pin_level(CONF_ILI9488_BACKLIGHT_PIN, true);
}
/**
* \brief Function to turn off the display back light
*
* Use this function to simply set the pin controlling the back light low to
* turn off the back light.
*/
static inline void ili9488_backlight_off(void)
{
ioport_set_pin_level(CONF_ILI9488_BACKLIGHT_PIN, false);
}
Теперь нам нужно понять, а какой пин отвечает за подсветку. Но установка этого пина в скетче закоменчена:
Как можно управлять программно подсветкой дисплея? Если этот подсветка сделана на диодах. Светодиод, к нему драйвер, у драйвера вход adj . На него подаётся уровень или шим, может есть другие варианты. Вот и рулите программно этим пином, если есть желание или необходимость, поставьте резистор настройте на желаемый результат и не управляйте программно. Как-то так.
Очень сильно сомневаюсь , что диоды подключены к контроллеру и шимом управляет он. Не вижу никакой связи между даташитом на контроллер и конкретным исполнением шилда, мало ли , что может контроллер.У вас конкретный шилд, на нем нет никаких заморочек, тупо выведены диоды. Вот и рулите ими. Время покажет, где я был не прав.
Всем привет. Расскажите в чем может быть дело? заказывал на али, указано что контроллер R61581, сколько не пробывал, изображение нормальное получить не удалось. Изображение зеркальное и занимает не весь экран..
Качаем http://misc.ws/wp-content/uploads/2015/01/LCD_ID_Reader.zip. Загружаем и в мониторе последовательного порта видим кодовый номер контроллера дисплея. Результат огласить в форуме. Но предполагаю, что придётся открывать диспут и возвращать назад бабки.
Превратили тему в помойку, дисплеев тьма, китайцы, как тут писали большие выдумщики. Никто и ничего читать не желает. Люди лезут с вопросами , у которых и так каша в голове. А тут терки про пяток вариантов, абсолютно разных дисплеев. Так создавайте отдельные темы, хоть по размеру, хоть по контроллеру. Кому не повезёт со своим вариантом, тот может шерстить форум. Свалили все в одну кучу и решения есть в теме, но найти их народу лень, выходит , что человек написал решение зря, оно просто утонуло. Из пятнадцати страниц , инфы от силы на две-три. Остальное сплошные повторы одних и тех же вопросов или подбрасывание в тему все новых и новых вариантов дисплеев и шилдов.
Так самим то сложно искать, тут решили вопросы с дисплеем на конкретном контроллере, если не пашет , значит или брак или надул китаец и надо искать другие варианты и идентифицировать контроллер, жестоко трясти китайца, не ставить подтверждение и пять звездей, только за факт получения, а проверить все и тогда ставить звезды, описать для других покупателей результат,что и как, народ спасибки скажет за нормальный отзыв о товаре. и в отдельной теме, купил такой дисплей у этого китайца с таким контроллером( по его описанию) , но контроллер , сука, совсем другой, а именно этот. И будет решение лежать на первой странице темы , а ни хз на какой странице в общей свалке. А найдётся и разместится в этой теме, то люди его просто и не найдут . Многим свойственно задавать вопросы, но становиться резко лень писать решение, даже если оно найдено. А так пишите, я тут не хозяин, даже в своей теме.
Вот 2 капли инфы что бы зеркальность убрать the display is mirror inverted, if there is made no correction in initlcd.h (COM(0x36): DATA(0x8A) instead of DATA(0x0A).
Раз не поставили, жестоко трясите китайца, грозите спором, двойкой в отзыве,требуйте доказательств работы дисплея с скетчами , которые он вам может прислать, пусть снимает видео и все , что угодно. Они могут предложить компенсацию, но тут вам решать, если нужен рабочий дисплей, то они могут связаться с поставщиком и прислать нормальные доки по дисплею. Они хорошие деньги могут потерять на али и очень боятся плохой оценки.
На днях за шилд 7 долларов стряс с китайца, брал комплект мега2560+LCD за 15.9$. Проблема в инициализации аналогичная, экран кстати один в один ваш ECW 03507.
Куда лучше было бы написать ,что проблема решилась так или просто написать,что часть денег вернул,а вот рабочего дисплея,как не было,так и нет,работать его не смог заставить и китаец в этом вопросе не помог. Кому нужны эти цены,они и так везде написаны. В отличии от нормального описания.
Вот интересно, как люди пытаются считывать сигнатуру с данного шилда не имея доступа к выводу RD, или я что то пропустил. При отсутствии данного управляющего синала выводить скетч будет все что угодно кроме реального значения. Так что сначала разберитесь где там пин RD на шлейфе индикатора, подпояйте проводок, а потом кричите что вам прислали неисправный шилд. А лучше для начала изучите вопрос работы с TFT, а потом беритесь за написание скетчей и создание проектов. Дело в том что есть чипы TFT в которых при инициализации можно определять разрешение путем записи в сам чип, при неправильных значениях возможно такое проявление как на картинке. Могут быть неправильно разведены пины data, например старшие адреса раположены в обратном порядке, при этом будет нарушена цветопередача. в TFT с чипами ILI, HX, Rxxx команды имеют 8 битный формат, а RGB как правило 16 бит.
Люди покупают шилды ардуино,да и саму ардуину,не для того чтобы припаиваться к проводникам и ломать голову ,правильно или не правильно там посчитано и нарисовано и прочего. Раз позиционирует продавец,что дисплей к ардуино и с таким контроллером,то надо это и слать. И купивший имеет полное право орать,что он не работает. Кто изучил работу с дисплеем на форумах не задают вопросов,а отвечают на них,только некоторые это делают без лишних слов,а некоторые с обязательным отступлением от темы. Есть желание подсказать- подсказывайте ,а поучать не надо. Вот и весь сказ.
Вот интересно, как люди пытаются считывать сигнатуру с данного шилда не имея доступа к выводу RD, или я что то пропустил.
А можно по-подробнее алгоритм ковыряния.
Ну припаял я предполагаемый RD выход через резистор к 42 пину меги. Результат тот же. LCD ID - чип 0x0404 и белый экран. UTFT картинка без изменений. Как я уже писал шлейф экрана 39 пин. И с только августа 2015 появились счастливые обладатели такого шилда.
Вот интересно, как люди пытаются считывать сигнатуру с данного шилда не имея доступа к выводу RD, или я что то пропустил.
А можно по-подробнее алгоритм ковыряния.
Ну припаял я предполагаемый RD выход через резистор к 42 пину меги. Результат тот же. LCD ID - чип 0x0404 и белый экран. UTFT картинка без изменений. Как я уже писал шлейф экрана 39 пин. И с только августа 2015 появились счастливые обладатели такого шилда.
я ж вам писал, по каким адресам у других контроллеров лежит ID , можете сами считать без всяких библиотек, и вывести в сериал порт ответ от дисплея по всем этим адресам. технология подачи rs wr rst cs rd типична и почти одинакова для всех контроллеров. открываете любой pdf предпологаемого контроллера и по нему посылаете адрес регистра в котором лежит ID, и считываете ответ, его и в сериал монитор.
diger67 же писал что у него работает на либе от adafruit. как сделать для utft я отвечал. Еслиб у меня был такой дисплей, я б сделал. Но пока у меня есть много экранов от сотовых, с десяток уже изученных по такому пути, и под ближайшие проекты они не скоро закончаться, чтоб на али купить такой шилд как у вас. Если у кого в Омске есть такой шилд, то могу помочь с его запуском.
// vis22, спасибо за исследования, чтоз буду иметь ввиду. (у меня тож такое возможно, когда дисплей не запитан, а запитывался он от высоких логических уровней по входам) Померте ещё, если будет возможность, при работе ардуиновкое напряжение +3,3в без дисплея и с диплеем, не поднимается ли оно?
смотря на фотку выше, на этом шилде для меги разведены 16бит дисплея.
Во первых: по cчитанным одинаковому старшему и младшему байту , можно предположить что вы используете всёже adafruit читалку (а она 8 битная) . Надо самому просто считать порт A и C это и будет 16бит . И именно так через A и C вы правильно пошлёте на него 16ти битный адрес нужного регистра. иначе вместо старшего байта дисплей получет непонятно что и ответит соответственно. ( У некоторых контроллеров при 8ти битной адресации используются старший байт DB8-DB15 - а это тем более получите через adafruit не то что надо)
Во вторых:
к примеру возьмём pdf ili9488 , для него надо , для считывания ID , закинуть команду D3 (старший байт в нем не имеет значения , т.е к примеру 16бит - 00D3 )
видно что нужно дёрнуть несколько раз RD , и только на 3 и 4 раз в младшем байте получим 94 и 88 .
в первом посте скетч отправки и считывания. Подправьте там "считывание" по управляющим сигналам (подачи 0 и 1 ) как по картинке. и "отправку" тож
п.с. что резисторы на шилде это хорошо, инфу можно гнать туда и сюда. А вот если стоят преобразатели уровней, то не факт. На их управление должен быть заведен RD (на шилдах с выведенным RD на колодку так и сделано) , чтобы он "переворачивал" преобразователи уровней в обратную сторону, для приема инфы от дисплея к ардуинке . На последовательных резисторах куда проще и "железно" работает туда и сюда . При считывании с дисплея, незабудте кинуть в порт ардуинки 00 , чтоб не включались подтягивающие резисторы мешающие приему ослабленных сигналов последовательными резисторами с дисплея..
Обсодютно верно, огромную роль играет как скоммутированны "IM00 - IM03" в конкретном шилде. Но верно одно, чип TFT имет или единственный вариант формирования шины данных (d0 - d7 или d9 - d17), или позволяет использовать как один так и другой вариант. Что касается 16 бит, то всегда младший байт это d0 - d7, старший байт d9 - d17. Речь идет о пинах самого кристалла, не путать с пинами подписанными на шилде. Так что зная где младшый разряд легко можно считать сигнатуру. Повторю еще раз. Различия в работе TFT заключаются в дампе инициализации, протокол записи и чтения обсолютно одинаков. И определяется выводами IMO. К стати У меня переделанная библиотека Adafruit на 16 бит прекрасно работает, и определяет сигнатуры.
Тогда уж. DDRA = 0xD3; DDRC = 0x00;. Команды в TFT ili9488 однобайтные, да и возвращает чип только 8 младших бит, старшие всегда нули. Надо примерно так читать. Кусок написан для stm32, закоментированные строки нужны для работы с AVR. На словах, сначала пишем в чип команду (0х00D3), потом читаем четыре младших байта, прочитали сдвинули, прочитали прибавили сдвинули и так еще два раза. затем взяли два младшие байта и сравнили с предпологаемой сигнатурой или lcd.print(id, HEX). Алгоритм работает как с 8 так и с 16 бит.
/*******************************************************************/
uint16_t readID(void)
{
uint8_t hi, lo;
uint16_t id = readReg(0xD3);
if (id == 0x9341)
{
return id;
}
}
/*******************************************************************/
uint32_t readReg(uint8_t r)
{
uint16_t id;
uint8_t x;
// try reading register #4
//CS_ACTIVE;
//CD_COMMAND;
//write8(r);
LCD_Write_COM(r);
//setReadDir(); // Set up LCD data port(s) for READ operations
//CD_DATA;
delay(50);
//read8(x);
x = LCD_Read_DATA();
id = x; // Do not merge or otherwise simplify
id <<= 8; // these lines. It's an unfortunate
//read8(x);
x = LCD_Read_DATA();
id |= x; // shenanigans that are going on.
id <<= 8; // these lines. It's an unfortunate
//read8(x);
x = LCD_Read_DATA();
id |= x; // shenanigans that are going on.
id <<= 8; // these lines. It's an unfortunate
//read8(x);
x = LCD_Read_DATA();
id |= x; // shenanigans that are going on.
//CS_IDLE;
//setWriteDir(); // Restore LCD data port(s) to WRITE configuration
//Serial.print("Read $"); Serial.print(r, HEX);
//Serial.print(":\t0x"); Serial.println(id, HEX);
return id;
}
Читать можно как угодно, главное обращаться по определенному адресу чипа TFT. 9431 взято для примера так как писалось для конкретного шилда. ReadReg() это просто функция, вы вольны называть ее как угодно, главное чтобы она записывала в чип TFT в младший разряд значения команды, обработав которую он вернул N байта в которых содержится информация о типе чипа и его ревизии.
Попробуй 0x00BF, вполне вероятно что это чип R61581, ответ должен быть 0х1581. Если чип ili9327 0х00EF, при этом читаем шесть байт и сдвигаем назад id >>=8. Получаем два младших байта 0х9327. Короче берем роем даташиты, находим все возможные команды для чтения сигнатуры, пишем алгоритм, получаем тип чипа.
Тогда уж. DDRA = 0xD3; DDRC = 0x00;. Команды в TFT ili9488 однобайтные, да и возвращает чип только 8 младших бит, старшие всегда нули. Надо примерно так читать. Кусок написан для stm32, закоментированные строки нужны для работы с AVR. На словах, сначала пишем в чип команду (0х00D3), потом читаем четыре младших байта, прочитали сдвинули, прочитали прибавили сдвинули и так еще два раза. затем взяли два младшие байта и сравнили с предпологаемой сигнатурой или lcd.print(id, HEX). Алгоритм работает как с 8 так и с 16 бит.
/*******************************************************************/
uint16_t readID(void)
{
uint8_t hi, lo;
uint16_t id = readReg(0xD3);
if (id == 0x9341)
{
return id;
}
}
/*******************************************************************/
uint32_t readReg(uint8_t r)
{
uint16_t id;
uint8_t x;
// try reading register #4
//CS_ACTIVE;
//CD_COMMAND;
//write8(r);
LCD_Write_COM(r);
//setReadDir(); // Set up LCD data port(s) for READ operations
//CD_DATA;
delay(50);
//read8(x);
x = LCD_Read_DATA();
id = x; // Do not merge or otherwise simplify
id <<= 8; // these lines. It's an unfortunate
//read8(x);
x = LCD_Read_DATA();
id |= x; // shenanigans that are going on.
id <<= 8; // these lines. It's an unfortunate
//read8(x);
x = LCD_Read_DATA();
id |= x; // shenanigans that are going on.
id <<= 8; // these lines. It's an unfortunate
//read8(x);
x = LCD_Read_DATA();
id |= x; // shenanigans that are going on.
//CS_IDLE;
//setWriteDir(); // Restore LCD data port(s) to WRITE configuration
//Serial.print("Read $"); Serial.print(r, HEX);
//Serial.print(":\t0x"); Serial.println(id, HEX);
return id;
}
(с тлф крайне трудно либу глянуть удостовериться, посему имогу ошибиться) по идее при каждом лсд_реад_дата() она должна дергать WR , и того сколько ее не вызывай, она всегда будет считывать первый параметр регистра а нужен к примеру 3й и 4й.
ситуация для других контроллеров нормальна, там чтобы получить следующий байт (переключенного дисплея на 8 бит) из 16битного слова надо действительно второй раз дернуть WR .
но если у вас работает этот код на или9488 (без изменения либы) то это конечно здорово.
Изменены только функции записи и чтения, в родной либе шина 8 бит, в том что я делал под свои задачи 16 бит. Вы забываете что команды и ответы идут в данных чипах в формате 8 бит, по этому разници нет. Это важно только при работе с памятью экранной области, там точно в режиме 8 бит надо передовать два байта, а в 16 бит данные записываются за одну передачу. Причем работает все в режиме харда, софтовая часть только функции обработки примитивов, символов и записи в буферный регистр, ногами RD, RW, CS дергает сам проц.
Пока что ничего не вышло с идентификацией исплея. ПОследнее что получил 257, причем в константном виде.. что говорит о том, что не так я считываю) вобщем печаль
Парни, а в Питере есть укого такой шилд. Мне уж очень интересно, что это за зверь такой и почему он не хочет работать. Предоставте в аренду на недельку, может и решу проблемму.
Для Next : кусок серой тонированной пленки (ею автомобильные стекла тонируют) на экран - и не стало у меня проблемы с излишней яркостью экрана. Тач хуже работать не стал.
Задам-ка я свой вопрос в этой теме..
Суть вопроса : имеется LCD Display Module TFT 3.95 inch на контроллере ili9488, вот такой
Читать тач, писать/рисовать на нем я уже умею, нет проблем. А вот научиться программно управлять подсветкой - ну никак ((.
Ух! У меня такой же дисплей. И тоже напрягает подсветка. Ночью вместо ночника наботает. Если запихнуть в корпус проблем не будет, но жрет она ого. Пришлось отдельный стабилизатор на питание ставить, мега не справляется все "кормить". Напряжение до 4 вольт упало.
Так что если найдете решение, будет просто супер!
Я мало "понимающий", но давайте попробуем разобраться вместе.
В скетче строки управления подсветкой вот эти:
Теперь нам нужно понять, а какой пин отвечает за подсветку. Но установка этого пина в скетче закоменчена:
Возможн если раскоментить заработает?
И еще бы посмтреть процедуру CREATE_PIN в библиотеке ioport.h. Что значит PORTA и второй цифоровой параметр.
Ага, значит не один я такой.
Да, забыл написать, что шилд сидит на Меге, (питается от внешнего источника). И ещё ссылка на обсуждение на avrfreaks : http://www.avrfreaks.net/comment/1516396#comment-1516396
IOPORT_CREATE_PIN - там вроде ничего интересного, гуглится легко, например, вот http://asf.atmel.com/docs/3.5.1/xmega.drivers.dma.unit_tests.xmega_a3bu_xplained/html/group__ioport__group.html и тому подобное. Но, если я правильно понимаю, речь там о портах/пинах самого ili9488 ? А я-то каким местом со своим скетчем ардуинским к этому?
Может и не в тему. Вам мешает яркое свечение? Делаете шим на диоды подсветки или ставите резистор и меняете как хотите.
Может и не в тему. Вам мешает яркое свечение? Делаете шим на диоды подсветки или ставите резистор и меняете как хотите.
Осталось понять на какой ноге сидяд эти диоды.
Вот что нашел
12 ADJ Adjust for LED Brightness
http://beck-oled-lcd-tft-display.de/fileadmin/ampire/3.5/AM-320480B4TZQW-TB0H.pdf
Я так понимаю это нога контрллера. А нет, это ноги другого дисплея. На нешем ноги ADJ нет.
1. ADJ adjust brightness to control Pin , Pulse duty the bigger the brighter.
2. ADJ signal = 0 ~ 5.0V , operation frequency : 300Hz~1KHz
Вопрос мой был "научиться программно управлять подсветкой". Контроллер имеет такую возможность, хотелось бы просто её использовать.
51h это что? Регистры памяти контрллера, куда можно писать 8 бит?
Почему читать установленное значени нужно из другого регистра?
Увы, с этого места уже выше моего уровня понимания (((
К сожелению, моего тоже. Будем ждать знатоков.
Как можно управлять программно подсветкой дисплея? Если этот подсветка сделана на диодах. Светодиод, к нему драйвер, у драйвера вход adj . На него подаётся уровень или шим, может есть другие варианты. Вот и рулите программно этим пином, если есть желание или необходимость, поставьте резистор настройте на желаемый результат и не управляйте программно. Как-то так.
Как можно управлять программно подсветкой дисплея? Если этот подсветка сделана на диодах. Светодиод, к нему драйвер, у драйвера вход adj .
На сколько я понял, у этого дисплея нет входа adj. Диоды подключенны к контроллеру и ШИМ-ом на них управляет он.
Возможно, спорить не стану, но очень сомневаюсь. Тогда надо смотреть конкретный пдф, а не абы какой, на который тут дана ссылка.
Ну вот:
http://www.datasheetcafe.com/ili9488-datasheet-pdf/
206, 207 страницы
Да, вот это самый полный даташит.
"Диоды подключенны к контроллеру и ШИМ-ом на них управляет он." - пока придерживаюсь того же мнения.
Очень сильно сомневаюсь , что диоды подключены к контроллеру и шимом управляет он. Не вижу никакой связи между даташитом на контроллер и конкретным исполнением шилда, мало ли , что может контроллер.У вас конкретный шилд, на нем нет никаких заморочек, тупо выведены диоды. Вот и рулите ими. Время покажет, где я был не прав.
Всем привет. Расскажите в чем может быть дело? заказывал на али, указано что контроллер R61581, сколько не пробывал, изображение нормальное получить не удалось. Изображение зеркальное и занимает не весь экран..
mazahaker
Качаем http://misc.ws/wp-content/uploads/2015/01/LCD_ID_Reader.zip. Загружаем и в мониторе последовательного порта видим кодовый номер контроллера дисплея. Результат огласить в форуме. Но предполагаю, что придётся открывать диспут и возвращать назад бабки.
naturalist
У вас нибудь получилось вытянуть с этого дисплея? у меня точно такая же проблема
Превратили тему в помойку, дисплеев тьма, китайцы, как тут писали большие выдумщики. Никто и ничего читать не желает. Люди лезут с вопросами , у которых и так каша в голове. А тут терки про пяток вариантов, абсолютно разных дисплеев. Так создавайте отдельные темы, хоть по размеру, хоть по контроллеру. Кому не повезёт со своим вариантом, тот может шерстить форум. Свалили все в одну кучу и решения есть в теме, но найти их народу лень, выходит , что человек написал решение зря, оно просто утонуло. Из пятнадцати страниц , инфы от силы на две-три. Остальное сплошные повторы одних и тех же вопросов или подбрасывание в тему все новых и новых вариантов дисплеев и шилдов.
URkA
Тему прочел, такой же дисплей только у naturalist'a и решения кроме возврата денег не увидел, вот и интересуюсь!
Пока всё безрезультатно. Найти подходящую инфу не получилось. Перепробовал 5 разных вариаций UTFT.
Регулярно просматриваю отзывы на этот дисплей на алиэкспрессе. Тихо. Если что будет обязятельно напишу.
Так самим то сложно искать, тут решили вопросы с дисплеем на конкретном контроллере, если не пашет , значит или брак или надул китаец и надо искать другие варианты и идентифицировать контроллер, жестоко трясти китайца, не ставить подтверждение и пять звездей, только за факт получения, а проверить все и тогда ставить звезды, описать для других покупателей результат,что и как, народ спасибки скажет за нормальный отзыв о товаре. и в отдельной теме, купил такой дисплей у этого китайца с таким контроллером( по его описанию) , но контроллер , сука, совсем другой, а именно этот. И будет решение лежать на первой странице темы , а ни хз на какой странице в общей свалке. А найдётся и разместится в этой теме, то люди его просто и не найдут . Многим свойственно задавать вопросы, но становиться резко лень писать решение, даже если оно найдено. А так пишите, я тут не хозяин, даже в своей теме.
Спасибо и на этом. Буду требовать возврат денег
Вот 2 капли инфы что бы зеркальность убрать the display is mirror inverted, if there is made no correction in initlcd.h (COM(0x36): DATA(0x8A) instead of DATA(0x0A).
если поставили звезды китайцу, то будете посланы. И это правильно. Надо нас учить , с умом и пользой для других раздавать эти звёзды.
К счастью не поставил. Пытаюсь раскурить инициализацию дисплея..
Раз не поставили, жестоко трясите китайца, грозите спором, двойкой в отзыве,требуйте доказательств работы дисплея с скетчами , которые он вам может прислать, пусть снимает видео и все , что угодно. Они могут предложить компенсацию, но тут вам решать, если нужен рабочий дисплей, то они могут связаться с поставщиком и прислать нормальные доки по дисплею. Они хорошие деньги могут потерять на али и очень боятся плохой оценки.
На днях за шилд 7 долларов стряс с китайца, брал комплект мега2560+LCD за 15.9$. Проблема в инициализации аналогичная, экран кстати один в один ваш ECW 03507.
Куда лучше было бы написать ,что проблема решилась так или просто написать,что часть денег вернул,а вот рабочего дисплея,как не было,так и нет,работать его не смог заставить и китаец в этом вопросе не помог. Кому нужны эти цены,они и так везде написаны. В отличии от нормального описания.
Вот интересно, как люди пытаются считывать сигнатуру с данного шилда не имея доступа к выводу RD, или я что то пропустил. При отсутствии данного управляющего синала выводить скетч будет все что угодно кроме реального значения. Так что сначала разберитесь где там пин RD на шлейфе индикатора, подпояйте проводок, а потом кричите что вам прислали неисправный шилд. А лучше для начала изучите вопрос работы с TFT, а потом беритесь за написание скетчей и создание проектов. Дело в том что есть чипы TFT в которых при инициализации можно определять разрешение путем записи в сам чип, при неправильных значениях возможно такое проявление как на картинке. Могут быть неправильно разведены пины data, например старшие адреса раположены в обратном порядке, при этом будет нарушена цветопередача. в TFT с чипами ILI, HX, Rxxx команды имеют 8 битный формат, а RGB как правило 16 бит.
Люди покупают шилды ардуино,да и саму ардуину,не для того чтобы припаиваться к проводникам и ломать голову ,правильно или не правильно там посчитано и нарисовано и прочего. Раз позиционирует продавец,что дисплей к ардуино и с таким контроллером,то надо это и слать. И купивший имеет полное право орать,что он не работает. Кто изучил работу с дисплеем на форумах не задают вопросов,а отвечают на них,только некоторые это делают без лишних слов,а некоторые с обязательным отступлением от темы. Есть желание подсказать- подсказывайте ,а поучать не надо. Вот и весь сказ.
diger67
Вот интересно, как люди пытаются считывать сигнатуру с данного шилда не имея доступа к выводу RD, или я что то пропустил.
А можно по-подробнее алгоритм ковыряния.
Ну припаял я предполагаемый RD выход через резистор к 42 пину меги. Результат тот же. LCD ID - чип 0x0404 и белый экран. UTFT картинка без изменений. Как я уже писал шлейф экрана 39 пин. И с только августа 2015 появились счастливые обладатели такого шилда.
diger67
Вот интересно, как люди пытаются считывать сигнатуру с данного шилда не имея доступа к выводу RD, или я что то пропустил.
А можно по-подробнее алгоритм ковыряния.
Ну припаял я предполагаемый RD выход через резистор к 42 пину меги. Результат тот же. LCD ID - чип 0x0404 и белый экран. UTFT картинка без изменений. Как я уже писал шлейф экрана 39 пин. И с только августа 2015 появились счастливые обладатели такого шилда.
naturalist, предыдущие то страницы читаете? #670
http://arduino.ru/forum/apparatnye-voprosy/tft-35-i-arduino?page=13#comment-142967
я ж вам писал, по каким адресам у других контроллеров лежит ID , можете сами считать без всяких библиотек, и вывести в сериал порт ответ от дисплея по всем этим адресам. технология подачи rs wr rst cs rd типична и почти одинакова для всех контроллеров. открываете любой pdf предпологаемого контроллера и по нему посылаете адрес регистра в котором лежит ID, и считываете ответ, его и в сериал монитор.
diger67 же писал что у него работает на либе от adafruit. как сделать для utft я отвечал. Еслиб у меня был такой дисплей, я б сделал. Но пока у меня есть много экранов от сотовых, с десяток уже изученных по такому пути, и под ближайшие проекты они не скоро закончаться, чтоб на али купить такой шилд как у вас. Если у кого в Омске есть такой шилд, то могу помочь с его запуском.
// vis22, спасибо за исследования, чтоз буду иметь ввиду. (у меня тож такое возможно, когда дисплей не запитан, а запитывался он от высоких логических уровней по входам) Померте ещё, если будет возможность, при работе ардуиновкое напряжение +3,3в без дисплея и с диплеем, не поднимается ли оно?
Попробовал получить ид по другим адресам:
D3h - 0x5757
Попробовал инициализацию по другим адресам:
D3h - 0x5757
смотря на фотку выше, на этом шилде для меги разведены 16бит дисплея.
Во первых: по cчитанным одинаковому старшему и младшему байту , можно предположить что вы используете всёже adafruit читалку (а она 8 битная) . Надо самому просто считать порт A и C это и будет 16бит . И именно так через A и C вы правильно пошлёте на него 16ти битный адрес нужного регистра. иначе вместо старшего байта дисплей получет непонятно что и ответит соответственно. ( У некоторых контроллеров при 8ти битной адресации используются старший байт DB8-DB15 - а это тем более получите через adafruit не то что надо)
Во вторых:
к примеру возьмём pdf ili9488 , для него надо , для считывания ID , закинуть команду D3 (старший байт в нем не имеет значения , т.е к примеру 16бит - 00D3 )
видно что нужно дёрнуть несколько раз RD , и только на 3 и 4 раз в младшем байте получим 94 и 88 .
Замечу , чтобы считать данные, не нужно никаких инициализаций. При подаче питания, сбрасываете его ресетом, отсылаете адрес нужного регистра (команду), принимаете ответ. Ранее здесь уже указывал соседнюю тему - http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov
в первом посте скетч отправки и считывания. Подправьте там "считывание" по управляющим сигналам (подачи 0 и 1 ) как по картинке. и "отправку" тож
п.с. что резисторы на шилде это хорошо, инфу можно гнать туда и сюда. А вот если стоят преобразатели уровней, то не факт. На их управление должен быть заведен RD (на шилдах с выведенным RD на колодку так и сделано) , чтобы он "переворачивал" преобразователи уровней в обратную сторону, для приема инфы от дисплея к ардуинке . На последовательных резисторах куда проще и "железно" работает туда и сюда . При считывании с дисплея, незабудте кинуть в порт ардуинки 00 , чтоб не включались подтягивающие резисторы мешающие приему ослабленных сигналов последовательными резисторами с дисплея..
Этой строчкой вы настраиваете порт А и порт С на выход? Оно связано со чтением?
Это адрес скоторого читать ИД
кстати адресс тут не поменял.. сюда как я понял нужно указать куда стучаться за идентификатором
написал DDRA=0xD3; DDRC=0xD3;
и сделал вывод в порт, выводит
ID display:
Обсодютно верно, огромную роль играет как скоммутированны "IM00 - IM03" в конкретном шилде. Но верно одно, чип TFT имет или единственный вариант формирования шины данных (d0 - d7 или d9 - d17), или позволяет использовать как один так и другой вариант. Что касается 16 бит, то всегда младший байт это d0 - d7, старший байт d9 - d17. Речь идет о пинах самого кристалла, не путать с пинами подписанными на шилде. Так что зная где младшый разряд легко можно считать сигнатуру. Повторю еще раз. Различия в работе TFT заключаются в дампе инициализации, протокол записи и чтения обсолютно одинаков. И определяется выводами IMO. К стати У меня переделанная библиотека Adafruit на 16 бит прекрасно работает, и определяет сигнатуры.
Тогда уж. DDRA = 0xD3; DDRC = 0x00;. Команды в TFT ili9488 однобайтные, да и возвращает чип только 8 младших бит, старшие всегда нули. Надо примерно так читать. Кусок написан для stm32, закоментированные строки нужны для работы с AVR. На словах, сначала пишем в чип команду (0х00D3), потом читаем четыре младших байта, прочитали сдвинули, прочитали прибавили сдвинули и так еще два раза. затем взяли два младшие байта и сравнили с предпологаемой сигнатурой или lcd.print(id, HEX). Алгоритм работает как с 8 так и с 16 бит.
Если использовать фи-ю
и что нужно передать в качетсве параметра ф-ии uint32_t readReg(uint8_t r)?
и для авр вместо readReg правильно ли я использую digitalRead?
Читать можно как угодно, главное обращаться по определенному адресу чипа TFT. 9431 взято для примера так как писалось для конкретного шилда. ReadReg() это просто функция, вы вольны называть ее как угодно, главное чтобы она записывала в чип TFT в младший разряд значения команды, обработав которую он вернул N байта в которых содержится информация о типе чипа и его ревизии.
Попробуй 0x00BF, вполне вероятно что это чип R61581, ответ должен быть 0х1581. Если чип ili9327 0х00EF, при этом читаем шесть байт и сдвигаем назад id >>=8. Получаем два младших байта 0х9327. Короче берем роем даташиты, находим все возможные команды для чтения сигнатуры, пишем алгоритм, получаем тип чипа.
Тогда уж. DDRA = 0xD3; DDRC = 0x00;. Команды в TFT ili9488 однобайтные, да и возвращает чип только 8 младших бит, старшие всегда нули. Надо примерно так читать. Кусок написан для stm32, закоментированные строки нужны для работы с AVR. На словах, сначала пишем в чип команду (0х00D3), потом читаем четыре младших байта, прочитали сдвинули, прочитали прибавили сдвинули и так еще два раза. затем взяли два младшие байта и сравнили с предпологаемой сигнатурой или lcd.print(id, HEX). Алгоритм работает как с 8 так и с 16 бит.
(с тлф крайне трудно либу глянуть удостовериться, посему имогу ошибиться) по идее при каждом лсд_реад_дата() она должна дергать WR , и того сколько ее не вызывай, она всегда будет считывать первый параметр регистра а нужен к примеру 3й и 4й.
ситуация для других контроллеров нормальна, там чтобы получить следующий байт (переключенного дисплея на 8 бит) из 16битного слова надо действительно второй раз дернуть WR .
но если у вас работает этот код на или9488 (без изменения либы) то это конечно здорово.
Изменены только функции записи и чтения, в родной либе шина 8 бит, в том что я делал под свои задачи 16 бит. Вы забываете что команды и ответы идут в данных чипах в формате 8 бит, по этому разници нет. Это важно только при работе с памятью экранной области, там точно в режиме 8 бит надо передовать два байта, а в 16 бит данные записываются за одну передачу. Причем работает все в режиме харда, софтовая часть только функции обработки примитивов, символов и записи в буферный регистр, ногами RD, RW, CS дергает сам проц.
Пока что ничего не вышло с идентификацией исплея. ПОследнее что получил 257, причем в константном виде.. что говорит о том, что не так я считываю) вобщем печаль
Парни, а в Питере есть укого такой шилд. Мне уж очень интересно, что это за зверь такой и почему он не хочет работать. Предоставте в аренду на недельку, может и решу проблемму.
Какой шилд?
3.95' с разъёмом для меги?
У меня есть...
Кстати, почему вы читаете через регистр направления? DDR - Data Direction Register, регистр направления данных...
Для Next : кусок серой тонированной пленки (ею автомобильные стекла тонируют) на экран - и не стало у меня проблемы с излишней яркостью экрана. Тач хуже работать не стал.