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

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

А что по твоему X-bus

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Понятно. :)

В доках Атмела X-bus - название шины(интерфейс) для "External Memory Interface" , позволяет расширять внутреннюю SRAM извне до 64 килобайт напрямую (как родную, прозрачно для компиляторов) и больше "с извращениями". Есть примеры наращивания SRAM до 512кбайт. :)

Далеко не каждый камень имеет этот интерфейс у Атмела, поэтому он "малоизвестен"..

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

В контроллере дисплея шина 18 битная. Но выведена на разъемы 8 битная. А вот есть ли на шлейфе выводы для

переключения шины ???. 

Насчет  X-bus.  Это шина, по стандарту i2c. Они аналогичны. И по этой шине работает внешняя память, поддерживающая

ее.  Просьба назвать пару кирпичей с шиной  X-bus. Почитаю.

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

регистры контроллера дисплея.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

О, пасибки. Это и хотел узнать. Камни Атмела с шиной расширения внутренней SRAM: ATmega2560 и все её клоны 640, 1280 .. 2561 и т.д. + ATmega128a аналогично. За остальные не скажу, есть ещё какие-то, но уже не помню. На сайте Атмела, при выборе камня по параметрам этот интерфейс тоже назван X-bus .. какой стандарт имеете Вы ввиду (с чем путается) - я не в курсях. То что I2C ещё называют по-разному - читал, таже абревиатура TWI от Атмела .. Есть некий X-bee, а вот за такой алиас для I2C - не сталкивался ни разу, тем более в среде ардуинщиков.

Вобщем-то я хотел понять можно ли активируя шину расширения SRAM назначить в ней некий адрес порту контроллера дисплея и тупо присваивать ему значения в программе, типа так:

const byte * ptrDisplayData = 0xF000;
const byte * ptrDisplayCommand = 0xF001;

// ... отправка в дисплей с текущего адреса maxSend байт из массива src 
for(int i=0; i<maxSend; i++){
  *ptrDisplaydata = src[i];
}

 

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

Не особо силен в английском. Но судя по даташиту, засылаешь в дисплей в 20 регистр адрес по Х,

затем в 21 регистр адрес по Y,  потом в 22 регистр данные. Автоинкремент адреса есть.

Только у контроллера дисплея нет шины i2c. Есть из последовательных только SPI.

Поэтому к этому дисплею X-bus не прикрутишь.

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Я уже пытался разъяснить разницу между АРМ-овским понятием xBUS (I2C) и Атмеловским X-bus (Extra RAM bus) .. планирую прикрутить X-bus, а не xBUS. :)

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

По какой шине работает Атмеловская X-bus, последовательной или параллельной?

Может ты имеешь ввиду XRAM?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Угу, её родимую... давно уже нравится.

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

XRAM это для параллельной памяти. Это не X-bus. К дисплею ее напрямую не привязать. Да и не зачем.

В контроллере дисплея есть память, но адресация к ней идет через его регистры, плюс данные и команды

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

память. Как то так.

Объясни толком, что ты хочешь в итоге получить?

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну, так вот и хочу посадить дисплей с этим параллельным интерфейсом на шину расширения памяти: использовать свою уже готовую плату расширения памяти - на ней есть защелка младшей части адреса и обвес сигналов выборки/записи. Тупо на полную шину адреса (после защелки) повесить "монтажное И" на некоторую выделенную пару адресов, например 0xF00(0/1) - без сигнала А0, сигнал А0 с платы расширения памяти завести на сигнал D/C дисплея и тупо разрешать шину дисплея при обращениях по этой паре адресов. Микросхема памяти при подаче адреса ВНЕ её зоны адресов - запрещается сама и переходит в Z. Дисплей тоже имеет сигнал разрешения, который и подавать со схемы монтажного "И" .. сигналы чтения/записи вообще можно напрямую кинуть. И потом обращаться к дисплею из программы как показал выше - по указателю на эту выделенную пару адресов... что мешает?

В итоге можно получить частоту работы с дисплеем (запись/чтение) вплоть до менее 10 тактов МК .. или около 2 мегабайта в секунду. Меня такое очень даже устроит..

В итоге планирую иметь И расширенную память И дисплей на одной шине. :)

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

Как я понял, тебе некуда деть лишние порты микроконтроллера. Тогда бери дисп. с возможностью вывода

по 18 битной шине и гони в него с максимальной скоростью. Без всяких посредников, в виде защелок и т. п.

Это максимальная скорость для твоего контроллера. Если нужно еще быстрее возьми более шустрый МК.

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Нет, так будет медленнее: чтобы вывести точку потребуется выводить в три порта по байту и ещё дрыгать ногой "запись" отдельно .. 4 отдельные команды. Если оставить интерфейс 8 бит, то все равно 2. А так - одна. :)

Куда деть выводы - у меня есть. Просто они используются по большей части аппаратно, а не программной эмуляцией ногодрыгами "воткни куда понравилось, будем жить медленно и пичально".

 

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

Команда одна, а ты листинг выполнения этой команды смотрел. Команда для компилятора, а для

микроконтроллера то, что выдаст компилятор.

Напиши прогу записи в XRAM и посмотри ассемблеровский листинг. Тогда все иллюзии испарятся.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Писал уже, даже цельный тест.. запись в расширенную SRAM ровно ничем не отличается от записи во внутреннюю: *ptr = data -- ровно 1 команда ассемблера. :)

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

Тогда перечитай матчасть.  Даже во внутреннюю память за одну команду  не записать.

 Буду на пальцах. Для xram.  Сначала нужно выставить в порт адрес. Затем выставить во второй 

порт данные. Затем дать команду на запись. А так как у дисплея данные и адрес это один и тот же 

порт, то xram прикрутить не получается.

Для дисплея. Выставить в порт адрес (команду), дать команду на запись. Выставить в порт данные и дать 

команду на запись. Естественно переключая D/C.

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

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

Это то о чем ты говоришь?

http://www.rlocman.ru/shem/schematics.html?id=71093

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да, примерно за это. У меня своя разводка такой платы на 512кб, у которой НЕ используется ни одна лишняя нога камня. У меня нет "лишних". :)

Разводка второго варианта (не паял, щас завершаю улучшенный) приведена тут: http://arduino.ru/forum/proekty/lego-kirpich-iz-mega2560?page=3 , пост №172. А принципиальная схема первого тут: http://arduino.ru/forum/obshchii/atmega-128a-au-vneshnyaya-sram-62256-74... , пост №100.

Вы путаете команды и такты процессора, так что Ваш совет, позволю себе переадресовать Вам :)

Да, во внутреннюю память команда записи ST пишет за ДВА ТАКТА и от 3 до 6 тактов во внешнюю. Настраивается в регистрах работы XRAM. Но, все-таки это ОДНА команда, а не 2. Аналогично, все остальные команды работы в памятью читают и пишут оперативу за 2 такта. Вызов/возврат процедур тоже и даже по 2 раза, ибо работают со словом - складывают/получают 2 байта в или со стека.

"Буду на пальцах. Для xram.  Сначала нужно выставить в порт адрес. Затем выставить во второй  порт данные. Затем дать команду на запись."

Не надо, смешно выходит.. этим всем занимается ЦПУ, когда работает с памятью. Программно пишется крайне просто (уже писал): "Var = data;" В ряде случаев это компилируется ровно в 1 команду: "ST var, immediate", например. Компилятор полноценно и без прикрас легко адресует 64 килобайта оперативы. Её внутренней столько нет у Мег, поэтому ему выставляют принудительно предельный размер имеющегося ОЗУ в настройках плат. Можно исправить, делов-то: завести ещё одну плату.

"А так как у дисплея данные и адрес это один и тот же порт, то xram прикрутить не получается."

?!? Почему у вас все так грустно? Вполне получается, я же написал "как": вешаем ногу дисплея D/C на адрес памяти и .. получаем 2 ячейки: одну для данных и вторую для команд. Не? Что мешает? :)

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

А процессор сам определяет куда писать?

А время считается по командам или по тактам? Как двумя тактами выставить и адрес и данные на общую 

шину дисплея?

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Конечно, силами кумпилятора :)

Я веду речь за достижение скорости записи в дисплей в районе пары мегабайт в сек. - это потоковая запись больших блоков. Команда выставляется 1 раз на весь блок, нефатально. Попиксельно "куда-попало", конечно же потребуется что-то иное.

Поточно, типа такого:

// пока едут дисплеи, это примерно то, что уже начал рисовать и
// эти адреса уже выделил под свои дисплеи в своей SRAM:

#define DISPLAY_COMMAND 0x7FFE
#define DISPLAY_DATA    0x7FFF

// глобальные неизменяемые указатели:
const uint8_t * dispCmd = DISPLAY_COMMAND;
const uint8_t * dispData = DISPLAY_DATA;

/**
 * Запись блока в RAM дисплея с заданного адреса в т.ч. во FLASH
 */
void displayDraw( const uint8_t * from, uint8_t * to, uint8_t len){
  displaySetAddress(to); // подаем команду по адресу команд
  while( len-- != 0 ){
    *dispData = *from++;
    // пишем данные в дисплей силами 2-х указателей (regX, regY), asm типа такого (не помню точно как они пишутся):
    // repeat:
    //    st r0,(X)+
    //    ld (Y),r0
    //    add %len,-1
    //    brne .repeat
  }
}

Ну вот .. типа так. На цикл выделяется три команды: считать байт с автоинкрементом указателя, записать байт в ОЗУ дисплея по его адресу, декрементировать счетчик и повторить если ещё есть что отправить. Итого, ориентировочно 2+3+1+2 = 8 тактов или 2 мегабайта в секунду.

:)

P.S. подправил: для байтового счетчика пакета отправки. По 3 байт на точку = 256/3 = 85 точек. Для больших пакетов будет 1.78Мб/сек, что мне тоже кажется очень нефигово.

P.P.S. Мне кажется несколько глупым отказываться от самой быстрой шины камня, если она есть.. :)

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

Отправить байт  в озу занимает 2 такта.

Отправить байт в порт тоже 2.

Какая разница?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

2 такта в ОЗУ - только для внутреннего ОЗУ, на внешнее миниум 3 такта. :)

Для байтового интерфейса надо отправить 2 команды в порт: записать байт данных И дернуть ногой WR на каждый байт. А тут одна операция, но "по 3 такта". :) А кроме этого, Порт и ещё одна нога (WR) занимается целиком и полностью и "насовсем".

А тут совмещение полезного с приятным, которое особенно интересно, если внешнего ЗУ много: можно катать по 32 килобайта за операцию в моей версии или почти по 56кб в той, что по вашей ссылке (-8200байт внутреннего ЗУ Мега2560 на каждый сегмент по 64кб). Переключение страничек внешнего ЗУ - на общем фоне затрат - "мелочь" :)

В отличии от исходного варианта у меня НЕ занимаются никакие добавочные ноги камня, от слова "совсем", что тоже полезно.

Волнует только один вопрос: дисплей потянет такое насилие над собой или нет? Запись по прямому интерфейсу типа i8080 проходит на таких скоростях?

 

 

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

Нарисуй схему подключения контроллера к дисплею по шине xram

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Чутка попозжа. Как только подниму свою Xram полноценно.

GFX
Offline
Зарегистрирован: 24.04.2015

Есть кто шарит в экранах и их настройке? Что-то я не могу запустить экран на контроллере RM68120 который день. Вот этот, https://ru.aliexpress.com/item/4-3inch- ... 75630.html

Вот на него документация. https://yadi.sk/d/sm_p0N0Z3JfhiC

Все команды в нем описаны 2х байтными, например, SWRESET(0100h), но он поддерживает 8ми битный режим, да и половина команд на всех экранах одинаковая и до этого они были 1 байтными. Далее по тексту мы видим, что они и есть однобайтные, страница 49 даташита, понятно нарисована, что команды и их параметры 8 бит. Однако на команды 8 бит экран вообще не отзывается, но если ему послать SLPOUT (1100h): Sleep Out, то он просыпается и начинает реагировать за запись в память и чтение из нее(тоже на команды в старшем байте), причем это все, что он делает, показывать он не показывает, чтение состояния всегда говорит, что он выключен, включаться не желает, я просто задолбался с ним. Китаезы ничего не шарят, говорят, что они не инженеры, шлют всякую фигню вообще с других контроллеров. Хотя в отзывах есть чуваки, которые его смогли включить и поставили 5 звезд.



Ножки звонятся на + и на -(не напрямую, а через диод защитный), т.е. контакт с контроллером есть, обрывов нет, соединение верное, при чтении можно считать 0xFFFF, т.е. все выводы контачат, что ему нужно и что за замут с командами в старшем байте? Настроен он на 16 битный интерфейс при помощи перемычек на плате. Экран кошерный с емкосным тачем, тач работает, правда кроме того, что он дает прерывание от касания, ничего не проверял, без экрана это проблематично. Но мне совершенно не понятно, почему он не подает признаков жизни и еще на запрос ID он отвечает 0x0011, а по даташиту должен: 1й "фигня", второй 0x0000, третий 0x0080, четвертый 0x0000.

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

Судя по даташиту в 16 битном режиме команды в него пишутся побайтно (D0-D7). А вывод изображения в 16 битном режиме (D0-D16).

Только какой байт команды пишется первым, не нашол. Начни со старшего.

Чтение id тоже D0-D7.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Нашел и поднл свою тему http://arduino.ru/forum/apparatnye-voprosy/samodelnaya-mega2560-128a-s-p..., всё постепенно выложу в ней, в т.ч. и что получится с дисплеями и прямым доступом по этому интерфейсу.

GFX
Offline
Зарегистрирован: 24.04.2015

croc19 пишет:

Судя по даташиту в 16 битном режиме команды в него пишутся побайтно (D0-D7). А вывод изображения в 16 битном режиме (D0-D16).

Только какой байт команды пишется первым, не нашол. Начни со старшего.

Чтение id тоже D0-D7.

Да это так, только он не работает. Вернее он не включается, память пишется и читается. Вот его настройка китайцами. Я пришел к выводу, что он сломан, а там ХЗ. Обычные экраны включаются после 2х команд, выход из сна и включение, показывают абы как, но хоть что-то. А этому вроде все дали, но на команду включения 0 эмоций.

//ENABLE PAGE 1
WriteComm(0xF000);WriteData(0x55);
WriteComm(0xF001);WriteData(0xAA);
WriteComm(0xF002);WriteData(0x52);
WriteComm(0xF003);WriteData(0x08);
WriteComm(0xF004);WriteData(0x01);

//GAMMA SETING  RED
WriteComm(0xD100);WriteData(0x00);
WriteComm(0xD101);WriteData(0x00);
WriteComm(0xD102);WriteData(0x1b);
WriteComm(0xD103);WriteData(0x44);
WriteComm(0xD104);WriteData(0x62);
WriteComm(0xD105);WriteData(0x00);
WriteComm(0xD106);WriteData(0x7b);
WriteComm(0xD107);WriteData(0xa1);
WriteComm(0xD108);WriteData(0xc0);
WriteComm(0xD109);WriteData(0xee);
WriteComm(0xD10A);WriteData(0x55);
WriteComm(0xD10B);WriteData(0x10);
WriteComm(0xD10C);WriteData(0x2c);
WriteComm(0xD10D);WriteData(0x43);
WriteComm(0xD10E);WriteData(0x57);
WriteComm(0xD10F);WriteData(0x55);
WriteComm(0xD110);WriteData(0x68);
WriteComm(0xD111);WriteData(0x78);
WriteComm(0xD112);WriteData(0x87);
WriteComm(0xD113);WriteData(0x94);
WriteComm(0xD114);WriteData(0x55);
WriteComm(0xD115);WriteData(0xa0);
WriteComm(0xD116);WriteData(0xac);
WriteComm(0xD117);WriteData(0xb6);
WriteComm(0xD118);WriteData(0xc1);
WriteComm(0xD119);WriteData(0x55);
WriteComm(0xD11A);WriteData(0xcb);
WriteComm(0xD11B);WriteData(0xcd);
WriteComm(0xD11C);WriteData(0xd6);
WriteComm(0xD11D);WriteData(0xdf);
WriteComm(0xD11E);WriteData(0x95);
WriteComm(0xD11F);WriteData(0xe8);
WriteComm(0xD120);WriteData(0xf1);
WriteComm(0xD121);WriteData(0xfa);
WriteComm(0xD122);WriteData(0x02);
WriteComm(0xD123);WriteData(0xaa);
WriteComm(0xD124);WriteData(0x0b);
WriteComm(0xD125);WriteData(0x13);
WriteComm(0xD126);WriteData(0x1d);
WriteComm(0xD127);WriteData(0x26);
WriteComm(0xD128);WriteData(0xaa);
WriteComm(0xD129);WriteData(0x30);
WriteComm(0xD12A);WriteData(0x3c);
WriteComm(0xD12B);WriteData(0x4A);
WriteComm(0xD12C);WriteData(0x63);
WriteComm(0xD12D);WriteData(0xea);
WriteComm(0xD12E);WriteData(0x79);
WriteComm(0xD12F);WriteData(0xa6);
WriteComm(0xD130);WriteData(0xd0);
WriteComm(0xD131);WriteData(0x20);
WriteComm(0xD132);WriteData(0x0f);
WriteComm(0xD133);WriteData(0x8e);
WriteComm(0xD134);WriteData(0xff);
//GAMMA SETING GREEN
WriteComm(0xD200);WriteData(0x00);
WriteComm(0xD201);WriteData(0x00);
WriteComm(0xD202);WriteData(0x1b);
WriteComm(0xD203);WriteData(0x44);
WriteComm(0xD204);WriteData(0x62);
WriteComm(0xD205);WriteData(0x00);
WriteComm(0xD206);WriteData(0x7b);
WriteComm(0xD207);WriteData(0xa1);
WriteComm(0xD208);WriteData(0xc0);
WriteComm(0xD209);WriteData(0xee);
WriteComm(0xD20A);WriteData(0x55);
WriteComm(0xD20B);WriteData(0x10);
WriteComm(0xD20C);WriteData(0x2c);
WriteComm(0xD20D);WriteData(0x43);
WriteComm(0xD20E);WriteData(0x57);
WriteComm(0xD20F);WriteData(0x55);
WriteComm(0xD210);WriteData(0x68);
WriteComm(0xD211);WriteData(0x78);
WriteComm(0xD212);WriteData(0x87);
WriteComm(0xD213);WriteData(0x94);
WriteComm(0xD214);WriteData(0x55);
WriteComm(0xD215);WriteData(0xa0);
WriteComm(0xD216);WriteData(0xac);
WriteComm(0xD217);WriteData(0xb6);
WriteComm(0xD218);WriteData(0xc1);
WriteComm(0xD219);WriteData(0x55);
WriteComm(0xD21A);WriteData(0xcb);
WriteComm(0xD21B);WriteData(0xcd);
WriteComm(0xD21C);WriteData(0xd6);
WriteComm(0xD21D);WriteData(0xdf);
WriteComm(0xD21E);WriteData(0x95);
WriteComm(0xD21F);WriteData(0xe8);
WriteComm(0xD220);WriteData(0xf1);
WriteComm(0xD221);WriteData(0xfa);
WriteComm(0xD222);WriteData(0x02);
WriteComm(0xD223);WriteData(0xaa);
WriteComm(0xD224);WriteData(0x0b);
WriteComm(0xD225);WriteData(0x13);
WriteComm(0xD226);WriteData(0x1d);
WriteComm(0xD227);WriteData(0x26);
WriteComm(0xD228);WriteData(0xaa);
WriteComm(0xD229);WriteData(0x30);
WriteComm(0xD22A);WriteData(0x3c);
WriteComm(0xD22B);WriteData(0x4a);
WriteComm(0xD22C);WriteData(0x63);
WriteComm(0xD22D);WriteData(0xea);
WriteComm(0xD22E);WriteData(0x79);
WriteComm(0xD22F);WriteData(0xa6);
WriteComm(0xD230);WriteData(0xd0);
WriteComm(0xD231);WriteData(0x20);
WriteComm(0xD232);WriteData(0x0f);
WriteComm(0xD233);WriteData(0x8e);
WriteComm(0xD234);WriteData(0xff);

//GAMMA SETING BLUE
WriteComm(0xD300);WriteData(0x00);
WriteComm(0xD301);WriteData(0x00);
WriteComm(0xD302);WriteData(0x1b);
WriteComm(0xD303);WriteData(0x44);
WriteComm(0xD304);WriteData(0x62);
WriteComm(0xD305);WriteData(0x00);
WriteComm(0xD306);WriteData(0x7b);
WriteComm(0xD307);WriteData(0xa1);
WriteComm(0xD308);WriteData(0xc0);
WriteComm(0xD309);WriteData(0xee);
WriteComm(0xD30A);WriteData(0x55);
WriteComm(0xD30B);WriteData(0x10);
WriteComm(0xD30C);WriteData(0x2c);
WriteComm(0xD30D);WriteData(0x43);
WriteComm(0xD30E);WriteData(0x57);
WriteComm(0xD30F);WriteData(0x55);
WriteComm(0xD310);WriteData(0x68);
WriteComm(0xD311);WriteData(0x78);
WriteComm(0xD312);WriteData(0x87);
WriteComm(0xD313);WriteData(0x94);
WriteComm(0xD314);WriteData(0x55);
WriteComm(0xD315);WriteData(0xa0);
WriteComm(0xD316);WriteData(0xac);
WriteComm(0xD317);WriteData(0xb6);
WriteComm(0xD318);WriteData(0xc1);
WriteComm(0xD319);WriteData(0x55);
WriteComm(0xD31A);WriteData(0xcb);
WriteComm(0xD31B);WriteData(0xcd);
WriteComm(0xD31C);WriteData(0xd6);
WriteComm(0xD31D);WriteData(0xdf);
WriteComm(0xD31E);WriteData(0x95);
WriteComm(0xD31F);WriteData(0xe8);
WriteComm(0xD320);WriteData(0xf1);
WriteComm(0xD321);WriteData(0xfa);
WriteComm(0xD322);WriteData(0x02);
WriteComm(0xD323);WriteData(0xaa);
WriteComm(0xD324);WriteData(0x0b);
WriteComm(0xD325);WriteData(0x13);
WriteComm(0xD326);WriteData(0x1d);
WriteComm(0xD327);WriteData(0x26);
WriteComm(0xD328);WriteData(0xaa);
WriteComm(0xD329);WriteData(0x30);
WriteComm(0xD32A);WriteData(0x3c);
WriteComm(0xD32B);WriteData(0x4A);
WriteComm(0xD32C);WriteData(0x63);
WriteComm(0xD32D);WriteData(0xea);
WriteComm(0xD32E);WriteData(0x79);
WriteComm(0xD32F);WriteData(0xa6);
WriteComm(0xD330);WriteData(0xd0);
WriteComm(0xD331);WriteData(0x20);
WriteComm(0xD332);WriteData(0x0f);
WriteComm(0xD333);WriteData(0x8e);
WriteComm(0xD334);WriteData(0xff);

//GAMMA SETING  RED
WriteComm(0xD400);WriteData(0x00);
WriteComm(0xD401);WriteData(0x00);
WriteComm(0xD402);WriteData(0x1b);
WriteComm(0xD403);WriteData(0x44);
WriteComm(0xD404);WriteData(0x62);
WriteComm(0xD405);WriteData(0x00);
WriteComm(0xD406);WriteData(0x7b);
WriteComm(0xD407);WriteData(0xa1);
WriteComm(0xD408);WriteData(0xc0);
WriteComm(0xD409);WriteData(0xee);
WriteComm(0xD40A);WriteData(0x55);
WriteComm(0xD40B);WriteData(0x10);
WriteComm(0xD40C);WriteData(0x2c);
WriteComm(0xD40D);WriteData(0x43);
WriteComm(0xD40E);WriteData(0x57);
WriteComm(0xD40F);WriteData(0x55);
WriteComm(0xD410);WriteData(0x68);
WriteComm(0xD411);WriteData(0x78);
WriteComm(0xD412);WriteData(0x87);
WriteComm(0xD413);WriteData(0x94);
WriteComm(0xD414);WriteData(0x55);
WriteComm(0xD415);WriteData(0xa0);
WriteComm(0xD416);WriteData(0xac);
WriteComm(0xD417);WriteData(0xb6);
WriteComm(0xD418);WriteData(0xc1);
WriteComm(0xD419);WriteData(0x55);
WriteComm(0xD41A);WriteData(0xcb);
WriteComm(0xD41B);WriteData(0xcd);
WriteComm(0xD41C);WriteData(0xd6);
WriteComm(0xD41D);WriteData(0xdf);
WriteComm(0xD41E);WriteData(0x95);
WriteComm(0xD41F);WriteData(0xe8);
WriteComm(0xD420);WriteData(0xf1);
WriteComm(0xD421);WriteData(0xfa);
WriteComm(0xD422);WriteData(0x02);
WriteComm(0xD423);WriteData(0xaa);
WriteComm(0xD424);WriteData(0x0b);
WriteComm(0xD425);WriteData(0x13);
WriteComm(0xD426);WriteData(0x1d);
WriteComm(0xD427);WriteData(0x26);
WriteComm(0xD428);WriteData(0xaa);
WriteComm(0xD429);WriteData(0x30);
WriteComm(0xD42A);WriteData(0x3c);
WriteComm(0xD42B);WriteData(0x4A);
WriteComm(0xD42C);WriteData(0x63);
WriteComm(0xD42D);WriteData(0xea);
WriteComm(0xD42E);WriteData(0x79);
WriteComm(0xD42F);WriteData(0xa6);
WriteComm(0xD430);WriteData(0xd0);
WriteComm(0xD431);WriteData(0x20);
WriteComm(0xD432);WriteData(0x0f);
WriteComm(0xD433);WriteData(0x8e);
WriteComm(0xD434);WriteData(0xff);

//GAMMA SETING GREEN
WriteComm(0xD500);WriteData(0x00);
WriteComm(0xD501);WriteData(0x00);
WriteComm(0xD502);WriteData(0x1b);
WriteComm(0xD503);WriteData(0x44);
WriteComm(0xD504);WriteData(0x62);
WriteComm(0xD505);WriteData(0x00);
WriteComm(0xD506);WriteData(0x7b);
WriteComm(0xD507);WriteData(0xa1);
WriteComm(0xD508);WriteData(0xc0);
WriteComm(0xD509);WriteData(0xee);
WriteComm(0xD50A);WriteData(0x55);
WriteComm(0xD50B);WriteData(0x10);
WriteComm(0xD50C);WriteData(0x2c);
WriteComm(0xD50D);WriteData(0x43);
WriteComm(0xD50E);WriteData(0x57);
WriteComm(0xD50F);WriteData(0x55);
WriteComm(0xD510);WriteData(0x68);
WriteComm(0xD511);WriteData(0x78);
WriteComm(0xD512);WriteData(0x87);
WriteComm(0xD513);WriteData(0x94);
WriteComm(0xD514);WriteData(0x55);
WriteComm(0xD515);WriteData(0xa0);
WriteComm(0xD516);WriteData(0xac);
WriteComm(0xD517);WriteData(0xb6);
WriteComm(0xD518);WriteData(0xc1);
WriteComm(0xD519);WriteData(0x55);
WriteComm(0xD51A);WriteData(0xcb);
WriteComm(0xD51B);WriteData(0xcd);
WriteComm(0xD51C);WriteData(0xd6);
WriteComm(0xD51D);WriteData(0xdf);
WriteComm(0xD51E);WriteData(0x95);
WriteComm(0xD51F);WriteData(0xe8);
WriteComm(0xD520);WriteData(0xf1);
WriteComm(0xD521);WriteData(0xfa);
WriteComm(0xD522);WriteData(0x02);
WriteComm(0xD523);WriteData(0xaa);
WriteComm(0xD524);WriteData(0x0b);
WriteComm(0xD525);WriteData(0x13);
WriteComm(0xD526);WriteData(0x1d);
WriteComm(0xD527);WriteData(0x26);
WriteComm(0xD528);WriteData(0xaa);
WriteComm(0xD529);WriteData(0x30);
WriteComm(0xD52A);WriteData(0x3c);
WriteComm(0xD52B);WriteData(0x4a);
WriteComm(0xD52C);WriteData(0x63);
WriteComm(0xD52D);WriteData(0xea);
WriteComm(0xD52E);WriteData(0x79);
WriteComm(0xD52F);WriteData(0xa6);
WriteComm(0xD530);WriteData(0xd0);
WriteComm(0xD531);WriteData(0x20);
WriteComm(0xD532);WriteData(0x0f);
WriteComm(0xD533);WriteData(0x8e);
WriteComm(0xD534);WriteData(0xff);

//GAMMA SETING BLUE
WriteComm(0xD600);WriteData(0x00);
WriteComm(0xD601);WriteData(0x00);
WriteComm(0xD602);WriteData(0x1b);
WriteComm(0xD603);WriteData(0x44);
WriteComm(0xD604);WriteData(0x62);
WriteComm(0xD605);WriteData(0x00);
WriteComm(0xD606);WriteData(0x7b);
WriteComm(0xD607);WriteData(0xa1);
WriteComm(0xD608);WriteData(0xc0);
WriteComm(0xD609);WriteData(0xee);
WriteComm(0xD60A);WriteData(0x55);
WriteComm(0xD60B);WriteData(0x10);
WriteComm(0xD60C);WriteData(0x2c);
WriteComm(0xD60D);WriteData(0x43);
WriteComm(0xD60E);WriteData(0x57);
WriteComm(0xD60F);WriteData(0x55);
WriteComm(0xD610);WriteData(0x68);
WriteComm(0xD611);WriteData(0x78);
WriteComm(0xD612);WriteData(0x87);
WriteComm(0xD613);WriteData(0x94);
WriteComm(0xD614);WriteData(0x55);
WriteComm(0xD615);WriteData(0xa0);
WriteComm(0xD616);WriteData(0xac);
WriteComm(0xD617);WriteData(0xb6);
WriteComm(0xD618);WriteData(0xc1);
WriteComm(0xD619);WriteData(0x55);
WriteComm(0xD61A);WriteData(0xcb);
WriteComm(0xD61B);WriteData(0xcd);
WriteComm(0xD61C);WriteData(0xd6);
WriteComm(0xD61D);WriteData(0xdf);
WriteComm(0xD61E);WriteData(0x95);
WriteComm(0xD61F);WriteData(0xe8);
WriteComm(0xD620);WriteData(0xf1);
WriteComm(0xD621);WriteData(0xfa);
WriteComm(0xD622);WriteData(0x02);
WriteComm(0xD623);WriteData(0xaa);
WriteComm(0xD624);WriteData(0x0b);
WriteComm(0xD625);WriteData(0x13);
WriteComm(0xD626);WriteData(0x1d);
WriteComm(0xD627);WriteData(0x26);
WriteComm(0xD628);WriteData(0xaa);
WriteComm(0xD629);WriteData(0x30);
WriteComm(0xD62A);WriteData(0x3c);
WriteComm(0xD62B);WriteData(0x4A);
WriteComm(0xD62C);WriteData(0x63);
WriteComm(0xD62D);WriteData(0xea);
WriteComm(0xD62E);WriteData(0x79);
WriteComm(0xD62F);WriteData(0xa6);
WriteComm(0xD630);WriteData(0xd0);
WriteComm(0xD631);WriteData(0x20);
WriteComm(0xD632);WriteData(0x0f);
WriteComm(0xD633);WriteData(0x8e);
WriteComm(0xD634);WriteData(0xff);

////AVDD VOLTAGE SETTING
//WriteComm(0xB000);WriteData(0x05);
//WriteComm(0xB001);WriteData(0x05);
//WriteComm(0xB002);WriteData(0x05);
////AVEE VOLTAGE SETTING
//WriteComm(0xB100);WriteData(0x05);
//WriteComm(0xB101);WriteData(0x05);
//WriteComm(0xB102);WriteData(0x05);

////AVDD Boosting
//WriteComm(0xB600);WriteData(0x34);
//WriteComm(0xB601);WriteData(0x34);
//WriteComm(0xB603);WriteData(0x34);
////AVEE Boosting
//WriteComm(0xB700);WriteData(0x24);
//WriteComm(0xB701);WriteData(0x24);
//WriteComm(0xB702);WriteData(0x24);
////VCL Boosting
//WriteComm(0xB800);WriteData(0x24);
//WriteComm(0xB801);WriteData(0x24);
//WriteComm(0xB802);WriteData(0x24);
////VGLX VOLTAGE SETTING
//WriteComm(0xBA00);WriteData(0x14);
//WriteComm(0xBA01);WriteData(0x14);
//WriteComm(0xBA02);WriteData(0x14);
////VCL Boosting
//WriteComm(0xB900);WriteData(0x24);
//WriteComm(0xB901);WriteData(0x24);
//WriteComm(0xB902);WriteData(0x24);
////Gamma Voltage
//WriteComm(0xBc00);WriteData(0x00);
//WriteComm(0xBc01);WriteData(0xa0);//vgmp=5.0
//WriteComm(0xBc02);WriteData(0x00);
//WriteComm(0xBd00);WriteData(0x00);
//WriteComm(0xBd01);WriteData(0xa0);//vgmn=5.0
//WriteComm(0xBd02);WriteData(0x00);
////VCOM Setting
//WriteComm(0xBe01);WriteData(0x3d);//3
////ENABLE PAGE 0
//WriteComm(0xF000);WriteData(0x55);
//WriteComm(0xF001);WriteData(0xAA);
//WriteComm(0xF002);WriteData(0x52);
//WriteComm(0xF003);WriteData(0x08);
//WriteComm(0xF004);WriteData(0x00);
////Vivid Color Function Control
//WriteComm(0xB400);WriteData(0x10);
////Z-INVERSION
//WriteComm(0xBC00);WriteData(0x05);
//WriteComm(0xBC01);WriteData(0x05);
//WriteComm(0xBC02);WriteData(0x05);

////*************** add on 20111021**********************//
//WriteComm(0xB700);WriteData(0x22);//GATE EQ CONTROL
//WriteComm(0xB701);WriteData(0x22);//GATE EQ CONTROL

//WriteComm(0xC80B);WriteData(0x2A);//DISPLAY TIMING CONTROL
//WriteComm(0xC80C);WriteData(0x2A);//DISPLAY TIMING CONTROL
//WriteComm(0xC80F);WriteData(0x2A);//DISPLAY TIMING CONTROL
//WriteComm(0xC810);WriteData(0x2A);//DISPLAY TIMING CONTROL
////*************** add on 20111021**********************//
////PWM_ENH_OE =1
//WriteComm(0xd000);WriteData(0x01);
////DM_SEL =1
//WriteComm(0xb300);WriteData(0x10);
////VBPDA=07h
//WriteComm(0xBd02);WriteData(0x07);
////VBPDb=07h
//WriteComm(0xBe02);WriteData(0x07);
////VBPDc=07h
//WriteComm(0xBf02);WriteData(0x07);
////ENABLE PAGE 2
//WriteComm(0xF000);WriteData(0x55);
//WriteComm(0xF001);WriteData(0xAA);
//WriteComm(0xF002);WriteData(0x52);
//WriteComm(0xF003);WriteData(0x08);
//WriteComm(0xF004);WriteData(0x02);
////SDREG0 =0
//WriteComm(0xc301);WriteData(0xa9);
////DS=14
//WriteComm(0xfe01);WriteData(0x94);
////OSC =60h
//WriteComm(0xf600);WriteData(0x60);
////TE ON
//WriteComm(0x3500);WriteData(0x00);
////SLEEP OUT 
//WriteComm(0x1100);
//LCD_delay(120);
////DISPLY ON
//WriteComm(0x2900);
//LCD_delay(100);
WriteComm(0XB000); WriteData(0X00);  
WriteComm(0XB001); WriteData(0X00);  
WriteComm(0XB002); WriteData(0X00);  
WriteComm(0XB100); WriteData(0X05);  
WriteComm(0XB101); WriteData(0X05);  
WriteComm(0XB102); WriteData(0X05);  
WriteComm(0XB600); WriteData(0X44);  
WriteComm(0XB601); WriteData(0X44);  
WriteComm(0XB602); WriteData(0X44);  
WriteComm(0XB700); WriteData(0X34);  
WriteComm(0XB701); WriteData(0X34);  
WriteComm(0XB702); WriteData(0X34);  
WriteComm(0XB800); WriteData(0X24);
WriteComm(0XB801); WriteData(0X24);
WriteComm(0XB802); WriteData(0X24);
WriteComm(0XB900); WriteData(0X34);
WriteComm(0XB901); WriteData(0X34);
WriteComm(0XB902); WriteData(0X34);
WriteComm(0XBA00); WriteData(0X14);  
WriteComm(0XBA01); WriteData(0X14);
WriteComm(0XBA02); WriteData(0X14);
WriteComm(0XBF00); WriteData(0X01); 
WriteComm(0XB300); WriteData(0X07);  
WriteComm(0XB301); WriteData(0X07);
WriteComm(0XB302); WriteData(0X07);
WriteComm(0XB900); WriteData(0X25);
WriteComm(0XB901); WriteData(0X25);
WriteComm(0XB902); WriteData(0X25);
WriteComm(0XBC00); WriteData(0X00);
WriteComm(0XBC01); WriteData(0X90);//A0  90  A8
WriteComm(0XBC02); WriteData(0X61);//3A  61  00
WriteComm(0XBD00); WriteData(0X00);
WriteComm(0XBD01); WriteData(0X90);//A0
WriteComm(0XBD02); WriteData(0X61);//3A
WriteComm(0XBE00); WriteData(0X00);
WriteComm(0XBE01); WriteData(0X8F);//8e
WriteComm(0XF000); WriteData(0X55);
WriteComm(0XF001); WriteData(0XAA);
WriteComm(0XF002); WriteData(0X52);
WriteComm(0XF003); WriteData(0X08);
WriteComm(0XF004); WriteData(0X00);
WriteComm(0XB400); WriteData(0X10);
WriteComm(0XB600); WriteData(0X02);
WriteComm(0XB100); WriteData(0XCC);
WriteComm(0XB700); WriteData(0X22);
WriteComm(0XB701); WriteData(0X22);
WriteComm(0XC80B); WriteData(0X2A);
WriteComm(0XC80C); WriteData(0X2A);
WriteComm(0XC80F); WriteData(0X2A);
WriteComm(0XC810); WriteData(0X2A);
WriteComm(0XB800); WriteData(0X01);
WriteComm(0XB801); WriteData(0X03);
WriteComm(0XB802); WriteData(0X03);
WriteComm(0XB803); WriteData(0X03);
WriteComm(0XBC00); WriteData(0X05);//05
WriteComm(0XBC01); WriteData(0X05);
WriteComm(0XBC02); WriteData(0X05);
WriteComm(0XD000); WriteData(0X01);
WriteComm(0XBA00); WriteData(0X01);
WriteComm(0XBD02); WriteData(0X07);
WriteComm(0XBD03); WriteData(0X31);
WriteComm(0XBE02); WriteData(0X07);
WriteComm(0XBE03); WriteData(0X31);
WriteComm(0XBF02); WriteData(0X07);
WriteComm(0XBF03); WriteData(0X31);
WriteComm(0XB300); WriteData(0X00);
WriteComm(0XBD00); WriteData(0X07);
WriteComm(0XBE00); WriteData(0X07);
WriteComm(0XBF00); WriteData(0X07);
WriteComm(0XF000); WriteData(0X55);
WriteComm(0XF001); WriteData(0XAA);
WriteComm(0XF002); WriteData(0X52);
WriteComm(0XF003); WriteData(0X08);
WriteComm(0XF004); WriteData(0X02);
WriteComm(0XC301); WriteData(0XA9);
WriteComm(0XFE01); WriteData(0X94);
WriteComm(0XF600); WriteData(0X60);
WriteComm(0X3500); WriteData(0X00);
WriteComm(0XF000); WriteData(0X55);
WriteComm(0XF001); WriteData(0XAA);
WriteComm(0XF002); WriteData(0X52);
WriteComm(0XF003); WriteData(0X08);
WriteComm(0XF004); WriteData(0X01);//01
WriteComm(0X3600); WriteData(0X00);
WriteComm(0X3a00); WriteData(0X77); //

WriteComm(0X1100); //
LCD_delay(120);  
WriteComm(0X2900); //
LCD_delay(10);  
WriteComm(0X2C00); //
LCD_delay(20); 

 

 

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

т.е. после инициализации светится белым, пишите картинку, а он не реагирует, а данные из памяти читаются?

В даташите есть команда 22h и 23h  попробуй.

Попробуй вначале инициализации влючить дисплей, затем писать регистры.

GFX
Offline
Зарегистрирован: 24.04.2015

croc19 пишет:

т.е. после инициализации светится белым, пишите картинку, а он не реагирует, а данные из памяти читаются?

В даташите есть команда 22h и 23h  попробуй.

Попробуй вначале инициализации влючить дисплей, затем писать регистры.

Да, память пишется, но дисплей не отображает ничего, только он не белый, а черный, что свидейтельствует о том, что он дейтвительно IPS. Включать я его пробовал и до и после и раз 100 в цикле, ему хоть бы хны, но из сна он просыпается по команде, то что без команды  выхода из сна память не пишется, а как проснется начинает. 22h и 23h  сейчас проверю.

GFX
Offline
Зарегистрирован: 24.04.2015
   #define RM68120_ALLPOFF 0x2200 // All Pixel Off
   #define RM68120_ALLPON 0x2300 //All Pixel On
 
Эти я пробовал, он на них не реагирует.
GFX
Offline
Зарегистрирован: 24.04.2015

да, не работает по прежнему. Я вот не пойму откуда это, вроде нет такого в даташите

//ENABLE PAGE 1
WriteComm(0xF000);WriteData(0x55);
WriteComm(0xF001);WriteData(0xAA);
WriteComm(0xF002);WriteData(0x52);
WriteComm(0xF003);WriteData(0x08);
WriteComm(0xF004);WriteData(0x01);
Да и остальных адресов для гаммы и питания нет в даташите...
croc19
Offline
Зарегистрирован: 17.02.2017

https://github.com/luckasfb/lcm_drivers/blob/master/baoxue_mytqt_yywi/lc...

https://github.com/luckasfb/lcm_drivers/blob/master/acer_e350_simcom75/l...

Посмотри, сравни.

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

А инициализацию народ слизывает с прошивок готовых изделий. Китайцы не исключение.

 

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

GFX пишет:

Но мне совершенно не понятно, почему он не подает признаков жизни и еще на запрос ID он отвечает 0x0011, а по даташиту должен: 1й "фигня", второй 0x0000, третий 0x0080, четвертый 0x0000.

так что он выдает по всем регистрам? это примерно соответствует таблице содержанию данных в регистрах при его сбросе?  не все регистры разрешены для чтения ,  записи/чтения , записи - это тож указано в этой таблице.

GFX, вы хотите на нем осциллограф сделать?  http://radiokot.ru/forum/viewtopic.php?f=59&p=3118468 . мож тогда взять наиболее распространенные типы контроллеров. подобные IPS с емкостным тачем есть тож от 4" . много уже времени убили на него, мож он не рабочий? 

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

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

0. самое главное - переключите его на 8бит и подключите через резисторы 10к к ардуине и прогоните читалкой v5.2 из comment-264976 , полученный лог выложите здесь (в окошке размещения кода , во вкладке доп. , поставьте галку свернуть код.

1. если применить ногодрыганье шины управления, (к примеру читалку) и  шину данных не подключать / подключать ,  просто полазить по ней светодиодом (будут видны четкие  лог.0 / лог.1 ) , то можно узнать не ошиблись ли при разводке с IM0... . т.е. убедиться в правильной размерности шины. 

2. попробовать подключить питания диспа VCC и VCIO через резистор 50-100 ом , после команды просыпания (если она действительно его) , он должен больше потреблять , т.е. на резисторе должно осесть 50-500мв . Или отключить подсветку и  мерить ток потребления шилда , должна быть заметна разница по потреблению сна/не сна 

3. возможно дело в нужной правильной адресации при 8/16 бит. Т.е. попробовать его запустить на 8 бит.  // для arduino UTFT как то попался на этом , пришлось либу на скорую руку допилить на 16 бит адресацию регистров  comment-90767 и для некоторых 8ми бит не спроста существует тож переделка стандартной UTFT  (turbo_8bit) , ибо просто тупо выставив в либе адресацию 8 бит - такой метод с некоторыми контроллерами не работает)

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

5. по поводу ID , странно что он не вычитывается , возможно там другой контроллер, попробуйте подключить к ардуине через резисторы и прогнать читалку v5.2 на 8 и 16битном режиме диспа. неиспользуемые пины шины данных диспа - через резистокы 10к на GND . (учесть что у некоторых контроллеров при режиме 8 бит , они могут переходить и в старшие разряды DB8-DB15 железно или по желанию - по пину IM.. ) Т.е. попробовать считать регистры при режиме 8 бит диспа -  подключиться к DB0-7 , потом DB8-15  . И в режиме 16бит к DB0-8 .  Т.о. хорошо бы глянуть 3 лога . 

6. по даташиту неиспользуемые пины на минус. но на время опытов  лучше  через 10ком.

 8-bit interface: D[7:0] are used, D[23:8] should be connected to VSSI  

 16-bit interface: D[15:0] are used, D[23:16] should be connected to VSSI

 

7. чтот с маркировкой адресов у производителя странно , на стр. 142 в даташите RM68120 указано что ID должен быть по адресам 0400h~0402h

RDDID(0400h~0402h) : Read Display ID

0400H RDDID
DCX RDX WRX D15-D8 D7 D6 D5 D4 D3 D2 D1 D0 HEX
Command 0 1 ↑ 00h 0 0 0 0 0 1 0 0 04
1st
t
1 ↑ 1 x x x x x x x x x x
2nd t  1 ↑ 1 00h ID17 ID16 ID15 ID14 ID13 ID12 ID11 ID10 00
3rd 1 ↑ 1 00h ID27 ID26 ID25 ID24 ID23 ID22 ID21 ID20 80
4th 1 ↑ 1 00h ID37 ID36 ID35 ID34 ID33 ID32 ID31 ID30 00
Parameter -
Description
The 1st parameter (ID1): the module’s manufacture ID
The 2nd parameter (ID2): the module/driver version ID
The 3rd parameter (ID3): the module/driver ID
Note: Commands RDID1/2/3 (DAh/DBh/DCh) read data correspond to the parameter 1, 2, 3 of
 
а  на стр 137 указана нормальная адресация 
 
8. Command
8.1. Command List
Operational
Code (Hex) Command Command(C)
/Read(R) /Write(W)
Number Of
Parameter
00h nop C 0
01h soft_reset C 0
04h get_display_ID R 3
....
DAh read_ID1 R 1
DBh read_ID2 R 1
DCh read_ID3 R 1
 
значит всё-же  у него не 16бит обращение к регистрам , а 8бит . т.е. старшие биты д.б.= 0  . значит когда производитель пишет 0400h~0402h , они имеют ввиду 0004h~0004h но 3 параметра последовательно в нем ! а но и правильней и быстрее , ведь быстрее пульнуть № регистра а потом последовательно его парамерты , чем каждый раз пулять 16ти битный адрес регистра и каждый подпараметр чтобы закинуть все параметры относящиеся к его области .
 
по стр.47 не много не догнал в особенностях передачи, но можете сравнить с даташитами распространенных ili9488  ssd1963 ,... 
но на стр.50 для 16бит ясно изображено, что старший байт=0 , и команда и данные для нее нередаются только нижним байтом. Исключение , только если вы передаете цвет - там используется все 16бит .
 
значит вывод из п.7 , переписывайте инит как он у обычных контроллеров (00xxh затем последовательно параметры) и пробуйте совместно режимы 16 и 8 бит дисплея и библиотеки. 
 
GFX
Offline
Зарегистрирован: 24.04.2015

slider пишет:
по стр.47 не много не догнал в особенностях передачи, но можете сравнить с даташитами распространенных ili9488  ssd1963 ,... 

но на стр.50 для 16бит ясно изображено, что старший байт=0 , и команда и данные для нее нередаются только нижним байтом. Исключение , только если вы передаете цвет - там используется все 16бит .
 
значит вывод из п.7 , переписывайте инит как он у обычных контроллеров (00xxh затем последовательно параметры) и пробуйте совместно режимы 16 и 8 бит дисплея и библиотеки. 
 
Спасибо за инфу, буду пробовать. Но с адресацией не все яно, посмотрите ссылки на гит хаб https://github.com/luckasfb/lcm_drivers/blob/master/baoxue_mytqt_yywi/lcm/dh402_rm68120/dh402_rm68120.c тут явно 16 бит адресация, и то, что дали китайцы к нему имеет такой же вид, хотя регистров таких в даташите нет вовсе, ну решим, что они скрытые.
В режиме 8 бит еще поковыряю его, но он даже из сна не выходил в таком режиме от команды 0x11, в 16битном выходит именно от 16 биной команды. Почему в даташите так напутано все непонятно. 
//SLEEP OUT 
WriteComm(0x1100);
LCD_delay(120);
Как я понимаю, что он просыпается: пишу память и считываю ее, если не давать команду выход из сна, то она не пишется и не считывается, если он просыпается, то пишется и считывается, правда путано все как-то, но оно и понятно, пишет он по умолчанию в режиме 18 бит на цвет, а считывает 24 бита и все пересмешивается. Попробую считать все регистры и записать на флешку, там у него особо нет разнообразия в ответах, то нули, 0х8000 то 0х0011, то память читается - там да разнообразие. причем он считывает когда младший байт то старший не трогает, то наоборот старший, т.е. считали что-то было 0х8000, потом считали 0х0011, в итоге считывается 0х8011.
Свободные выводы и заземлял и так оставлял, на них так и так нули.
 
Что касается осциллографа, на нем его делалать не оптимально, он дорогой слишком, я сделал на дешевом экране. Но этот купил просто поиграться с емкосным сенсором, ну и для себя осциллограф переделать под более качественный экран, но что-то не задалось с ним...
GFX
Offline
Зарегистрирован: 24.04.2015

Считал во всех вариантах переключателей интерфейсов, работает только 16 и 18 бит, ну как работает, считывается там не особо густо что или 0 или 0x0800. https://yadi.sk/d/K3JtYzku3Jx4Ag

Вот на всякий случай, как считывал

// *********  Отправка КОМАНДЫ  ************//
void ILI9341_SendCommand(uint16_t com) {

    *(__IO uint16_t *)(0x60000000) = com;

}

// *********  Отправка 1 байта ДАННЫХ ************//
void ILI9341_SendData(uint16_t data) { 

 *(__IO uint16_t *)(0x60080000) = data;

}

// *********  Прием 1 байта ДАННЫХ ************//
uint16_t ILI9341_ResaveData(uint16_t data) { 
  int tmp1;
  tmp1 =  *(__IO uint16_t *)(0x60080000);   
  return tmp1;
}

 

 
for (uint16_t i=0; i<65535; i++){

    TFT_CS_RESET;
    ILI9341_SendCommand(i); 
   rg = ILI9341_ResaveData(0);
   br = ILI9341_ResaveData(0);
   gb = ILI9341_ResaveData(0);
   TFT_CS_SET;
   sprintf(buf,"COM 0x%04X read 0x%04X 0x%04X 0x%04X \r\n", i, rg, br, gb); 
   f_write(&file, (const void *)buf, sizeof(buf), &rb);
  }
 f_sync(&file);
 f_close(&file);

Ну и ФСМЦ, максимум медлительности настроено, но от скорости ничего не меняется.

  p.FSMC_AddressSetupTime = 0x0F;
  p.FSMC_AddressHoldTime = 0x0F;
  p.FSMC_DataSetupTime = 0x0F;
  p.FSMC_BusTurnAroundDuration = 0x0F;
  p.FSMC_CLKDivision = 0x0F;
  p.FSMC_DataLatency = 0x0F;
  p.FSMC_AccessMode = FSMC_AccessMode_B;

    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
    FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
    FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; 

 

 

kipriyan
Offline
Зарегистрирован: 13.06.2017

Имею дисплей от сотика Айфона китайского на шлейфе надпись hs3536hvns37-00 3.5 дюйма 320х480 37 пин. По распиновке не совсем догнал на сколько он бит 8 или 16 вот фото и как переключить на 8bit?

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

kipriyan пишет:

Имею дисплей от сотика Айфона китайского на шлейфе надпись hs3536hvns37-00 3.5 дюйма 320х480 37 пин. По распиновке не совсем догнал на сколько он бит 8 или 16 вот фото....

16 точно, и с большой вероятностью с возможностью переключения на 8 бит  - прослеживайте дорожки и распиновку.

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

   

kipriyan
Offline
Зарегистрирован: 13.06.2017

в распиновке переключения не нашел.

3.5 inch 320x480 DRIVE IC ILI9481
1 GND
2 VCC
3 IO/VCC
4 CS
5 RS
6 WR
7 RD
8 RESET
9 DB0
10 DB1
11 DB2
12 DB3
13 DB4
14 DB5
15 DB6
16 DB7
17 DB8
18 DB9
19 DB10
20 DB11
21 DB12
22 DB13
23 DB14
24 DB15
25 GND
26 YD
27 XL
28 YU
29 XR
30 LED_K1
31 LED_K2
32 LED_K3
33 LED_K4
34 LED_K5
35 LED_K6
36 LED_A
37 GND

 

kipriyan
Offline
Зарегистрирован: 13.06.2017

в распиновке переключения не нашел.

3.5 inch 320x480 DRIVE IC ILI9481
1 GND
2 VCC
3 IO/VCC
4 CS
5 RS
6 WR
7 RD
8 RESET
9 DB0
10 DB1
11 DB2
12 DB3
13 DB4
14 DB5
15 DB6
16 DB7
17 DB8
18 DB9
19 DB10
20 DB11
21 DB12
22 DB13
23 DB14
24 DB15
25 GND
26 YD
27 XL
28 YU
29 XR
30 LED_K1
31 LED_K2
32 LED_K3
33 LED_K4
34 LED_K5
35 LED_K6
36 LED_A
37 GND

Хочу его подключить к ардуино нано Атмега328

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

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

а зачем именно 8 ? 

можно и 16 использовать , для mega128 , mega2560 это не проблема.  для mega328 - остануться несколько свободных пинов их хватит для мелко проектов. Можно и параллельно к  шине данных подрубаться (смотря что, фотки тестера акб выкладывал ) .  а крупные проекты на 480x320 в память atmega328 не влезут, так что 16битность не проблема.

kipriyan
Offline
Зарегистрирован: 13.06.2017

Спасибо. А подключение 16 бит как в библе UTFT?

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

kipriyan пишет:

Спасибо. А подключение 16 бит как в библе UTFT?

естественно, в даташите в ее файлах все описано.  ( но можно как угодно , покопав её. )

tongbajiel
Offline
Зарегистрирован: 14.06.2017

Hello .... i come from indonesia. Sorry for my bad english, because i cant write to rusian language.

Just share my experiment I use TFT8K4238FPC, 44 pin, 16bit, 320x480. Use ILI9481 Chip

PIN CONFIG IS

1 = LED(K)
2 = NC
3-7 = LED(A1-A5)
8 = GND
9 = NC
10 = (+3.3v)IOVCC
11 = (+3.3v)VCC shared with IM1
12 = CS
13 = WR
14 = RS/DC
15 = RD
16 = RST
17-24 = DB15-DB8
25 = NC
26-33 = DB7-DB0
34-35 = NC
36 = IM0
37-38 = NC
39=GND
40-43 = touch(not used)
44=GND

This lcd works with UTFT with 16bit mode, IMO/pin 36 to GND,

Or works with modified adafruitTFTLcd 8bit mode, IMO/pin 36 to +3.3v

Sorry i cant upload image or code because im use android for write this, and dont know how to upload.

Pinout from net. http://images.vfl.ru/ii/1462888683/68765689/12608082.jpg Similar lcd type http://vrtp.ru/uploads/post-57-1462860954.png

I hope this can use for reference

negavoid
Offline
Зарегистрирован: 09.07.2016

No probs, you're welcome. Glad that everything alright :) Probably, this info will be useful for someone playing with this kind of display.

tongbajiel
Offline
Зарегистрирован: 14.06.2017

 

Does anyone know this chip and pin map for this lcd.

HSNB03-S320A.

Resolution likes 320x480, use 44 pin, taken from china clone nokia x8

 

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

tongbajiel пишет:

 

Does anyone know this chip and pin map for this lcd.

HSNB03-S320A.

Resolution likes 320x480, use 44 pin, taken from china clone nokia x8 ....

Hello. bahasa Anda Indonesia?

melihat google untuk "TFT lcd 44pin" tab - gambar.  di comment-258248  

mirip dengan yang satu ini? pinouts - http://g04.s.alicdn.com/kf/HT1cS09FLBaXXagOFbXH/206109602/HT1cS09FLBaXXagOFbXH.jpg    https://world.taobao.com/item/532543054487.htm

mungkin itu ili9488 relatif. menggunakannya untuk menginisialisasi. Jadi dapat itu dan menggunakannya.

 
Untuk mencari tahu persis apa jenis kontroler Anda di layar, hubungkan ke mode 8 bit (atau mode apapun). Tapi menghubungkan DB0-7 8bit pertama yang Arduino Uno, dan membaca ID-nya. eReader 5.2 di sini comment-264976.
 
Jika Anda menggunakan browser Chrome dari Google. Anda dapat mengklik tombol kanan mouse dan pilih Terjemahkan ke Indonesia.
 Bagi kita, Anda dapat mencoba menggunakan terjemahan Rusia  https://translate.google.com  https://translate.google.co.id/?hl=id&tab=wT  Indonesia -> Rusia .
 
 
 
 
tongbajiel
Offline
Зарегистрирован: 14.06.2017

 

slider пишет:

Hello. bahasa Anda Indonesia?

melihat google untuk "TFT lcd 44pin" tab - gambar.  di comment-258248  

mirip dengan yang satu ini? pinouts - http://g04.s.alicdn.com/kf/HT1cS09FLBaXXagOFbXH/206109602/HT1cS09FLBaXXa...    https://world.taobao.com/item/532543054487.htm

mungkin itu ili9488 relatif. menggunakannya untuk menginisialisasi. Jadi dapat itu dan menggunakannya.

Untuk mencari tahu persis apa jenis kontroler Anda di layar, hubungkan ke mode 8 bit (atau mode apapun). Tapi menghubungkan DB0-7 8bit pertama yang Arduino Uno, dan membaca ID-nya. eReader 5.2 di sini comment-264976.

Jika Anda menggunakan browser Chrome dari Google. Anda dapat mengklik tombol kanan mouse dan pilih Terjemahkan ke Indonesia.

 Bagi kita, Anda dapat mencoba menggunakan terjemahan Rusia  https://translate.google.com  https://translate.google.co.id/?hl=id&tab=wT  Indonesia -> Rusia .

 

Tanks slider for reply with translated rusian language to indonesian... you are the first person was do this for me on the net hehehehe.

Ii use eReader 5.2 for read id, but because pin RS,CS,WR,RD,RST is unknown right position.. its always fail. 

I try one by one combination of rs,cs,wr,rd,rst and databit position from any source for 44 lcd pinmap but until now it not works.

But i will try your suggest combination, because im not ever try that hahahaha.

This my lcd collection was need to reverse engineer :), most of them from nokia phone, but many more not in the photo, lcd from china phones that usualy more easy to use them.

kipriyan
Offline
Зарегистрирован: 13.06.2017

Вот фото шлейфа 37pin со стеклом , не совсем понятно где im0-im2, и судя по распиновке контроллер ili9486/9488/9481

https://cloud.mail.ru/public/353E/r359Qs4m9

И обратная сторона https://cloud.mail.ru/public/2PFc/fjvbJsEoB

Подскажите пож-та как перевести на 8 bit

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

На фотке сдвинь сигналы IM вправо, а на месте IM2 скорее всего reset.

Он сейчас у тебя на 16 бит подключен. Считай какой контроллер. Если подтвердится что

контроллеры 88, 86 или 81, то резать IM0 (он сейчас на земле) и подавать на него 1.

Будет 8 бит.

Думаю про это ты уже в даташите прочитал.

Удачи.