А кто - нибудь браль в Украине рабочий тач с дисплеем в Украине для меги 2560, если можно ссылочку.
Вопрос везения, я к примеру брал как 3.6 дюйми ili9327. получил 3.95 ili9488. Пришлось поковырять готовую библиотеку, почитать даташиты и все заработало. Но не всегда так везет.
Первое, этот дисплэй работает по RGB интерфейсу, впринципе можно сэмулировать. Второе 1024х600=614400 pix. это примерно в сто раз болше чем 320х240, следовательно запись фрэйма будет около 1 минуты, если принять во внимание обработку примитивов или символов, вообще шляпа. К томуже памяти самого arduino не хватет для записи фрэйма, т.к. в этом TFT нет памяти GGC.
На днях пришел бюджетный модуль 3.0", 480X320 Pixels, 16Bit, с контроллером HX8357С, модуль оснащен разъемом под SD карту, но к сожалению не имеет тачскрина.
Уже спрашивал, но никто не обратил внимания, попробую еще раз, вдруг повезет ))
Если я правильно понял, эти шидлы(как для Уно, так и для Меги) не занимают интерфейсы(SPI,I2C)?
Значит, я могу дополнительно повесить на контроллеры(как на Уно, так и на Мегу) эзернет-шилд на ENC26J80(SPI) и расширитель вх/вых, который по I2C вешается?
Буду рад любой информации, если кто-то уже сталкивался.
В каком файле библиотеки можно посмотреть какие пины контроллера(Мега или Уно) используются, и какие свободны?
Эти шилды на UNO как раз и занимают пины шин SPI иI2C.
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK).
I2C: A4 (SDA) и A5 (SCL).
Смотри фото и pinOut и считай пины.
Это ни чего не значит, SPI используется для подключения SD карты. К SPI можно подключить скольугодно много устройств, выбирая активное чипселектом. Остается только найти свободные ноги у проца. C UNO есть проблема, а вот с мегой свободных пинов хоть отбавляй.
diger67 пишет .... К SPI можно подключить сколь угодно много устройств, выбирая активное чип-селектом...
Вот только для назначения дополнительных SS кроме 0-го и 1-го пинов на UNO ни чего не осталось, а их придется «освобождать» при обменах данными через коммуникационный порт UNO, в том числе и при прошивке UNO.
На Mega другая проблема, библиотека UTFT, в стандартном виде, вроде не должна искать выводы шины данных TFT экрана на пинах с расположением как у данного шилда. Согласно UTFT_Requirements.pdf для Mega предполагается их совсем другое расположение.
Скажу интересное проверенное, к томуже, для UNO , для экономии пинов на 8битные TFT дисплеи, можно работать и без RST , CS , RD . Закоментить их в библиотеке UTFT. Хватает даже 2 пина WR и RS ! Для этого RD на + , CS на gnd , RST на RESET arduino (на пине ардуинки стоит кондер , который и помогает в долгом сбросе).
// всёже если позволительно то лучше не избавляться от RST, Иначе может при инициализации очиститься не весь экран и потребоваться дополнительный второй сброс (нажать на кнопку сброса на платке ардуино)
Начиная с версии библиотеки UTFT ver.2.1 для Arduino Mega с большой долей вероятности поддерживается применение TFT шилдов от Arduino UNO.
Ниже привожу ссылку на статью автора библиотеки UTFT в которой описывается механизм поддержки шилдов UNO на Arduino Mega и способ автоматического перенаправления вывода данных на другие пины:
Vis22, не внимательно читали мой пост. Там указано что проблеммы с подключением большого колличества устройств по SPI возникнут на UNO, и лучше использовать Mega2560 CPU board.
Получил платку на stm32f429ZIT6 c 4Мб SDRAM и RGB TFT 320x240. Приступаю к изучению.
Доброго всем времени суток. У меня есть такой вопрос. Пытаюсь победить дисплей от китайской копии i9500. Есть предположение, что он сделан на контроллере HX8357-D. В сети без проблем нашол даташит на данный контроллер, но вот незадача, в нем отсутствует информация по размеру чипа и его распиновка, тоесть страница (№16) пустая. Данные с этой страницы нужны для определения распиновки шлейфа дисплея. Помогите, если кто сможет!!!
Есть хороший пример где этот дисплей подключается к меге16. Но там распиновка дисплея слегка друная. У моего, в частности есть пин V5. Это +5 Вольт? Подавал, не работает. Жалко, если спалил.
Для тех кто купил дисплейчик R61581 и наблюдает пол экрана. Вычитал на вражеском сайте. Советуют подкорректировать в инициализации значение регистра 36. Ну или дополнить инициализацию следующим.
Пришёл китайкий экран 3.95' для Уны, с библиотекой diger67 всё работает) Спасибо)
Ну да, наш дисплейчик с Araris. Гребенки под уно, а не под мегу. Для CD библиотеку нужно будет подправить по пинам. Насколько я помню в библиотеке они под мегу. Хотя может спутал с тачем.
Заголовочный - это .h от header)( хотя, если честно, не помню, где настраивается разрешение...может и в .срр)Тач проверял, работает, SD не проверял, завтра проверю, отпишу.
Можно спросить, только сильно не угарайте пожалуйста.
Приобрёл я значит дисплей на eBay 330Х480 пикселей (первый раз в жизни),
дисплей оказался на контроллере ILI9488, во всяком случае так написано
в кратком описании к дисплею на eBay, но и на обратной стороне самого
дисплея тоже проштамповано 9488. Вот ссылка: http://www.ebay.com/itm/141647130960?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
Я занимаюсь программированием контроллеров ATmel, в данном случае написал программку для контроллера
ATmega328, инициализация: **********Сброс после подачи питания******** RST_ON; Delay (0x0FFF); RST_OFF; Delay (0x0FFF); RST_ON; Delay (0x0FFF); CS_ON; WR_ON; RS_OFF; Delay (0xFFFF); CS_OFF;
**********На всякий случай тактирование (протокол)******* //Импульс стоба для команды. void Impuls_comand (void) { Delay (1);// WR_OFF; Delay (1);// WR_ON; } //Импульс стоба для данных. void Impuls_data (void) { Delay (1);// RS_ON; Impuls_comand (); RS_OFF; }
Библиотеки не использую и создавать не умею, пока не вижу необходимости.
Программа инициализации отрабатывает один раз после включения контроллера.
После отработки инициализации, я В РУЧНУЮ (от кнопки) даю данные пикселя. То есть, сделаны
маленькие подпрограммки, которые, во первых предотвращают дребезг кнопки, во вторых выдают
один байт информации, либо два (два здесь не описываю), согласно протокола 8080. Данные в дисплей передаются в восьми битном режиме.
Всё это сделано для освоения работы TFT.
Что происходит: при подаче первого байта на дисплее ни чего не появляется, далее даю следующий байт.
Появляется пиксель! (старший=FCh, младший=00h по идее это код красного света пикселя) Но, пиксель появляется
ЧЁРНОГО цвета, вопрос почему? Спрашивается, почему именно чёрного, потому что видно отключение пикселя. Дело в
том, что после инициализации экран становится слегка серым.
Далее даю еще три точно такие же последовательности = FCh, такт(WR), 00h, такт(WR), происходит ещё три отключения пикселя.
Далее ещё такт, и появляется красный пиксель, даю ещё четыре раза FCh, такт(WR), 00h, такт(WR), и после четвёртого такта снова пиксель отключается, и так далее. Вот это первый вопрос, почему же так происходит, ведь по идее должно быть после каждого FCh, такт(WR), 00h, такт(WR), появиться красный пиксель. Ведь при инициализации Comand 0x3A = 0x55 (формат пикселя 16 бит!).
Естественно, все пиксели закрашиваются по порядку, то есть в строчку, и получается квадрат 16Х16 писелей, потому что задано при инициализации Comand 0x2A = 0x0F, и Comand 0x2B = 0x0F.
Второй вопрос: Почему то нулевой пиксель появляется не в самом левом и верхнем углу, а чуть ниже, примерно с отступом от верха на 40, и от левого края на 60 пикселей, хотя при инициализации Comand 0x2A = 0x00, и Comand 0x2B = 0x00.
Пробовал: Значит, у меня ATmega328 работает с кварцем на 20Мгц, делал зацикленность FCh, такт(WR), 00h, такт(WR), в основной программе обсалютно без всяких задержек, получалось = квадрат 16Х16 закрашивается красным но с чёрными полосками. Так же пробовал с другими частотами, эффект абсолютно не меняется. Вариант инициализации есть так же на eBay, на той же странице где и предлагается данный дисплей, правда там предложено для ILI9327; всё работает но с пикселем та же беда, и первый пиксель тоже почему-то не в самом верху, и не в самом краю слева.
Не пробовал: читать ID код. А есть ли смысл, ведь инициализация проходит нормально? Например на изменение данных в регистре Comand 0x2A,Comand 0x2B, нормально откликается, то есть размер квадрата, ну или прямоугольника реально соответствует заданным количествам пикселей. Не манипулировал с IM0-IM3 потому как не знаю рапиновки шлейфа на шилде.
Не верю: Что данные в дисплей нужно впихивать синхронно в такт с кадром, тогда спрашивается, а почему же тогда адресация
пикселя не нарушается? Ведь они появляются последовательно, как и логично должно быть.
Мысль: Тупо дисплей куплен дешёвый, и/или кристал в нём не доделанный (Брак).
P.S. Помоги разобраться пожалуйста. Да, и ещё чуть не забыл, ну нет у меня ни какого Arduino, есть просто самопальная плата с контролллером, и программатором, и программирую я CodeVisionAVR, но я не противник Arduino или IAR, просто мне пока тут комфортно.
Что происходит: при подаче первого байта на дисплее ни чего не появляется, далее даю следующий байт.
Появляется пиксель! (старший=FCh, младший=00h по идее это код красного света пикселя) Но, пиксель появляется
ЧЁРНОГО цвета, вопрос почему?
Проверьте настройки по регистрам. Конечно если это действительно ili9488...... Что касается ардуино, ставим IDE Arduino. Пишем программу используя нужные библиотеки. Компилируем, берем HEX файл и пишем как обычно в контроллер. Учитывая что по умолчанию все arduino работают на 16 МГц. Подправив файл условий компиляции можно ставить свой кварц. Ардуино расчитано на работу с кварцами 8, 16, 20.
LCD_Write_COM(0x01); //reset
delay_ms(15);
LCD_Write_COM(0x11);//sleep out
delay_ms(20);
LCD_Write_COM(0x28); //display off
delay_ms(5);
LCD_Write_COM(0xCF); //power control b
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x83); //83 81 AA C1
LCD_Write_DATA(0x30);
LCD_Write_COM(0xED); //power on seq control
LCD_Write_DATA(0x64); //64 67
LCD_Write_DATA(0x03);
LCD_Write_DATA(0x12);
LCD_Write_DATA(0x81);
LCD_Write_COM(0xE8); //timing control a
LCD_Write_DATA(0x85);
LCD_Write_DATA(0x00); // 01
LCD_Write_DATA(0x78); //79 78
LCD_Write_COM(0xCB); //power control a
LCD_Write_DATA(0x39);
LCD_Write_DATA(0X2C);
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x34);
LCD_Write_DATA(0x02);
LCD_Write_COM(0xF7); //pump ratio control
LCD_Write_DATA(0x20);
LCD_Write_COM(0xEA); //timing control b
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x00);
LCD_Write_COM(0xC0); //power control 2
LCD_Write_DATA(0x26); //26 25 23
LCD_Write_COM(0xC1); //power control 2
LCD_Write_DATA(0x11);// 11 10
LCD_Write_COM(0xC5); //vcom control 1
LCD_Write_DATA(0x35);// 35 3E
LCD_Write_DATA(0x3E);// 3E 28
LCD_Write_COM(0xC7); //vcom control 2
LCD_Write_DATA(0xBE); //BE 94 86
LCD_Write_COM(0xB1); //frame control
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x1B); //1B 70 18
LCD_Write_COM(0xB6); //display control
LCD_Write_DATA(0x0A);// 0A 08
LCD_Write_DATA(0x82);
LCD_Write_DATA(0x27);
LCD_Write_DATA(0x00);
LCD_Write_COM(0xB7); //emtry mode
LCD_Write_DATA(0x07);
LCD_Write_COM(0x3A); //pixel format
LCD_Write_DATA(0x55); //16bit
LCD_Write_COM(0xE0);
LCD_Write_DATA(0x0F);
LCD_Write_DATA(0x31);
LCD_Write_DATA(0x2B);
LCD_Write_DATA(0x0C);
LCD_Write_DATA(0x0E);
LCD_Write_DATA(0x08);
LCD_Write_DATA(0x4E);
LCD_Write_DATA(0xF1);
LCD_Write_DATA(0x37);
LCD_Write_DATA(0x07);
LCD_Write_DATA(0x10);
LCD_Write_DATA(0x03);
LCD_Write_DATA(0x0E);
LCD_Write_DATA(0x09);
LCD_Write_DATA(0x00);
LCD_Write_COM(0x20);
LCD_Write_COM(0x36); //mem access
LCD_Write_DATA((1<<3)|(1<<6));
//LCD_Write_DATA((1<<3)|(1<<7)); //rotate 180
LCD_Write_COM(0x29); //display on
LCD_Write_COM(0x2C);
delay_ms(5);
diger67, Спасибо за предложенный код инициализации, но не пошло и с ним. причём совсем не пошло, то есть после инициализации экран остаётся белым как будто на него просто подали питание. Но, снизу экрана, это примерно миллиметров шесть есть серое поле. То есть получается инициализация есть, но видимо какая-то ошибка. На дальнейшие подачи кода данных не реагирует, то есть пиксели не появляются/не отключаются. Пробовал: исключать из программы инициализации команды E8h, EAh, EDh, C7h, потому как их описания нет в PDF к ILI9488, в общем эффекта ни какого не дало.Вот, предлагаю фото дисплея (только сегодня разобрался как закидывать сюда фотки), может быть это что Вам даст.
{Почему-то на данный сайт удаётся загрузить только две фотки, может быть Вы мне скажите почему так.} Придётся вернуться на код который ранее работал (код ниже), и ешё по экспериментировать исходя из предложенного Вами кода. Может быть что-то и получится, хотя я в этом уже и не уверен.
<strong>LCD_Write_COM(0xE0);//PGAMCTRL (Positive Gamma Control) (263)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x07);
LCD_Write_DATA(0x10);
LCD_Write_DATA(0x09);
LCD_Write_DATA(0x17);
LCD_Write_DATA(0x0B);
LCD_Write_DATA(0x40);
LCD_Write_DATA(0x8A);
LCD_Write_DATA(0x4B);
LCD_Write_DATA(0x0A);
LCD_Write_DATA(0x0D);
LCD_Write_DATA(0x0F);
LCD_Write_DATA(0x15);
LCD_Write_DATA(0x16);
LCD_Write_DATA(0x0F);
LCD_Write_COM(0xE1);//NGAMCTRL (Negative Gamma Control)(264)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x1A);
LCD_Write_DATA(0x1B);
LCD_Write_DATA(0x02);
LCD_Write_DATA(0x0D);
LCD_Write_DATA(0x05);
LCD_Write_DATA(0x30);
LCD_Write_DATA(0x35);
LCD_Write_DATA(0x43);
LCD_Write_DATA(0x02);
LCD_Write_DATA(0x0A);
LCD_Write_DATA(0x09);
LCD_Write_DATA(0x32);
LCD_Write_DATA(0x36);
LCD_Write_DATA(0x0F);
LCD_Write_COM(0x13);//Normal Display Mode ON (167)
LCD_Write_COM(0xB1);//Frame Rate Control (In Normal Mode/Full Colors) (220)
LCD_Write_DATA(0x80);
LCD_Write_DATA(0x11);
LCD_Write_COM(0xB4);//Display Inversion Control (224)
LCD_Write_DATA(0x00);//00=Column inversion
LCD_Write_COM(0xC0);//Power Control 1 (236)
LCD_Write_DATA(0x17);
LCD_Write_DATA(0x15);
LCD_Write_COM(0xC1);//Power Control 2 (238)
LCD_Write_DATA(0x41);
LCD_Write_COM(0xC5);//VCOM Control (242)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x0A); //0A
LCD_Write_DATA(0x80); //80
//Lcd_Write_Data(0x40);//No
LCD_Write_COM(0xB6);//Display Function Control (227)
LCD_Write_DATA(0x02);
LCD_Write_COM(0x36);//Memory Access Control (191)
LCD_Write_DATA(0x00);//48
LCD_Write_COM(0x3A);//Interface Pixel Format (199)
LCD_Write_DATA(0x55);
LCD_Write_COM(0xE9); //Set Image Function (269)
LCD_Write_DATA(0x00);
LCD_Write_COM(0xF7); //Adjust Control 3 (274)
LCD_Write_DATA(0xA9);
LCD_Write_DATA(0x51);
LCD_Write_DATA(0x2C);
LCD_Write_DATA(0x82);
LCD_Write_COM(0x11); // Sleep OUT
Delay (0xFFFF);
LCD_Write_COM(0x29);//Display ON (173)
LCD_Write_COM(0x2A);//Column Address Set (174)
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x00);//58
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x09);//98
LCD_Write_COM(0x2B);//Page Address Set (176)
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x00);//
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x09);//C0
LCD_Write_COM(0x2C); //Write_memory_start (178)</strong>
Есть вопрос.
1. Имеет ли значение последовательность команд при инициализации?
2. Может быть там другой контроллер, может что-то ещё предложите, я имею в виду другой код инициализации?
Интересные фото, Алексей, а расскажите пожалуйста о проводке от +5V к U1, я в этом месте (безрезультатно) экспериментировал, когда пытался научиться управлять подсветкой экрана, а у Вас он для чего ?
Моё мнение - надо читать ID. Это разрешит все вопросы.
Проблема в том, что у контроллеров ILIxxxx инициализации похожи, различаются лишь чуть-чуть, посему он может инициализироваться, но не так слегка.
Короче, ID в студию!)
Интересно, весь шилд питатся 5 в. Вообщето контроллер индикатора питается 3.3 в. В случае использования питания процессора 3.3 вольта его стабильная работа гарантированна с кварцем 11 -12 МГц. Как вы питаете схему? Я так на кортекс перенес эту библиотеку, вот stm32f429zgt готовлю в бой.
По поводу дисплея, хорошая вещь. Одно но, нужно будет ваять буферы на НС245 для согласования с мегой или питать всю схему от 3.3 вольта. У меня такой работает с ARM. Там насколько помню шина 16 бит и стоит контроллер тача.
Вот что удалось сделать на базе данного дисплея, библиотеки Adaruit и все это зашито в stm32f103vet.
register EFh for ILI9327(0 02 04 93 27 FF),
register 0 EF
1 Parameter 0 EF
2 Parameter 0 EF
3 Parameter 0 EF
4 Parameter 0 EF
5 Parameter 0 EF
6 Parameter 0 EF
А кто - нибудь браль в Украине рабочий тач с дисплеем в Украине для меги 2560, если можно ссылочку.
Вопрос везения, я к примеру брал как 3.6 дюйми ili9327. получил 3.95 ili9488. Пришлось поковырять готовую библиотеку, почитать даташиты и все заработало. Но не всегда так везет.
Вопрос на рассуждение - есть 7" 1024Х600 дисплей от планшета, шлейф 40 контактный вот такой http://ru.aliexpress.com/store/product/LCD-Display-7-inch-TABLET-RD070HD28-V1-RO070HD28-1024-600-TFT-LCD-Screen-Panel-Replacement-Matrix/1241118_1839988140.html
Можно ли его прикрутить к ардуино мега?)
Первое, этот дисплэй работает по RGB интерфейсу, впринципе можно сэмулировать. Второе 1024х600=614400 pix. это примерно в сто раз болше чем 320х240, следовательно запись фрэйма будет около 1 минуты, если принять во внимание обработку примитивов или символов, вообще шляпа. К томуже памяти самого arduino не хватет для записи фрэйма, т.к. в этом TFT нет памяти GGC.
slider пишет:
....Померьте ещё, если будет возможность, при работе ардуиновкое напряжение +3,3в без дисплея и с диплеем, не поднимается ли оно?
Напряжение без дисплея 3,27В, напряжение с дисплеем 3,27В, ток потребления 2мА.
У меня от +3,3В запитан только контакт BL (backlite) дисплея.
По +5В без дисплея 4,93В, с дисплеем 4,82В.
Еще пять копеек.
На днях пришел бюджетный модуль 3.0", 480X320 Pixels, 16Bit, с контроллером HX8357С, модуль оснащен разъемом под SD карту, но к сожалению не имеет тачскрина.
Продавец:http://ru.aliexpress.com/item/3-0inch-TFT-color-LCD-module-320X480-ultra-HD-support-Arduino-Mega-2560/32319913448.html?adminSeq=206155369&shopNumber=342817
Посылка дошла за рекордные 20 дней, модуль был упакован в картонную коробку. Модуль совместим по разъемам и уровням с Arduino Mega.
Для запуска потебовался единственный бубен:библиотека UTFT ver. 2.79, более новые библиотеки не поддерживают контроллер HX8357С.
Строка инициализации:UTFT myGLCD(HX8357C,38,39,40,41);
Ссылка для скачивания библиотеки и скетчей:https://www.dropbox.com/s/ztu54uxo3or57bh/SKU193219.zip?dl=0
суть в том что ардуиновские функции работают очень медлено
быстрее ------------------------- медленнее
А вы уверены, что sbi и cbi не прописаны как макросы? Если не ошибаюсь, в avr-libc они декларированы в файле compat/deprecated.h, соответственно,
Уже спрашивал, но никто не обратил внимания, попробую еще раз, вдруг повезет ))
Если я правильно понял, эти шидлы(как для Уно, так и для Меги) не занимают интерфейсы(SPI,I2C)?
Значит, я могу дополнительно повесить на контроллеры(как на Уно, так и на Мегу) эзернет-шилд на ENC26J80(SPI) и расширитель вх/вых, который по I2C вешается?
Буду рад любой информации, если кто-то уже сталкивался.
В каком файле библиотеки можно посмотреть какие пины контроллера(Мега или Уно) используются, и какие свободны?
TheMustafa пишет...
Эти шилды на UNO как раз и занимают пины шин SPI и I2C.
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK).
I2C: A4 (SDA) и A5 (SCL).
Смотри фото и pinOut и считай пины.
TheMustafa пишет...
Эти шилды на UNO как раз и занимают пины шин SPI и I2C.
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK).
I2C: A4 (SDA) и A5 (SCL).
Смотри фото и pinOut и считай пины.
Это ни чего не значит, SPI используется для подключения SD карты. К SPI можно подключить скольугодно много устройств, выбирая активное чипселектом. Остается только найти свободные ноги у проца. C UNO есть проблема, а вот с мегой свободных пинов хоть отбавляй.
diger67 пишет .... К SPI можно подключить сколь угодно много устройств, выбирая активное чип-селектом...
Вот только для назначения дополнительных SS кроме 0-го и 1-го пинов на UNO ни чего не осталось, а их придется «освобождать» при обменах данными через коммуникационный порт UNO, в том числе и при прошивке UNO.
На Mega другая проблема, библиотека UTFT, в стандартном виде, вроде не должна искать выводы шины данных TFT экрана на пинах с расположением как у данного шилда. Согласно UTFT_Requirements.pdf для Mega предполагается их совсем другое расположение.
Скажу интересное проверенное, к томуже, для UNO , для экономии пинов на 8битные TFT дисплеи, можно работать и без RST , CS , RD . Закоментить их в библиотеке UTFT. Хватает даже 2 пина WR и RS ! Для этого RD на + , CS на gnd , RST на RESET arduino (на пине ардуинки стоит кондер , который и помогает в долгом сбросе).
// всёже если позволительно то лучше не избавляться от RST, Иначе может при инициализации очиститься не весь экран и потребоваться дополнительный второй сброс (нажать на кнопку сброса на платке ардуино)
Поправка к #815.
Начиная с версии библиотеки UTFT ver.2.1 для Arduino Mega с большой долей вероятности поддерживается применение TFT шилдов от Arduino UNO.
Ниже привожу ссылку на статью автора библиотеки UTFT в которой описывается механизм поддержки шилдов UNO на Arduino Mega и способ автоматического перенаправления вывода данных на другие пины:
http://www.rinkydinkelectronics.com/h_utft_arduino_shield_on_mega.php
Vis22, не внимательно читали мой пост. Там указано что проблеммы с подключением большого колличества устройств по SPI возникнут на UNO, и лучше использовать Mega2560 CPU board.
Получил платку на stm32f429ZIT6 c 4Мб SDRAM и RGB TFT 320x240. Приступаю к изучению.
Всем спасибо за отклик!
Понял, что под свои запросы надо использовать Мегу.
Получил платку на stm32f429ZIT6 c 4Мб SDRAM и RGB TFT 320x240. Приступаю к изучению.
Тоже интересно будет узнать о результатах.
Доброго всем времени суток. У меня есть такой вопрос. Пытаюсь победить дисплей от китайской копии i9500. Есть предположение, что он сделан на контроллере HX8357-D. В сети без проблем нашол даташит на данный контроллер, но вот незадача, в нем отсутствует информация по размеру чипа и его распиновка, тоесть страница (№16) пустая. Данные с этой страницы нужны для определения распиновки шлейфа дисплея. Помогите, если кто сможет!!!
У меня дисплей ILI9325 купленный на arduinobazar-е
https://arduinobazar.ru/displei-lcd-tft/54-ili9325-24-tft-lcd-sensornyj-displej-kupit-arduino-moskva-peterburg-dyoshevo.html
Есть хороший пример где этот дисплей подключается к меге16. Но там распиновка дисплея слегка друная. У моего, в частности есть пин V5. Это +5 Вольт? Подавал, не работает. Жалко, если спалил.
Для тех кто купил дисплейчик R61581 и наблюдает пол экрана. Вычитал на вражеском сайте. Советуют подкорректировать в инициализации значение регистра 36. Ну или дополнить инициализацию следующим.
LCD_Write_COM(0x36);
LCD_Write_DATA(0x4A);//was 0x0A
Сам попробовать не могу, нет в наличии такого шилда.
Пришёл китайкий экран 3.95' для Уны, с библиотекой diger67 всё работает) Спасибо)
Пришёл китайкий экран 3.95' для Уны, с библиотекой diger67 всё работает) Спасибо)
экран ili9488 ? ili9327? R61581? может фото ...
библиотека http://178.130.34.198/Adafruit/Adafruit.rar из 545 поста ?
ничего не правил? initlcd.h ? 36 регистр?
IDE 1.6.6? 1.7.7?
IDE 1.0.5, библиотека та, правил только разрешение в заголовочном файле, ILI9488)
(по клику - большее разрешение)
Пришёл китайкий экран 3.95' для Уны, с библиотекой diger67 всё работает) Спасибо)
Ну да, наш дисплейчик с Araris. Гребенки под уно, а не под мегу. Для CD библиотеку нужно будет подправить по пинам. Насколько я помню в библиотеке они под мегу. Хотя может спутал с тачем.
Спасибо за быстрый ответ.
Ко мне такой экран только выехал.
IDE 1.0.5, библиотека та, правил только разрешение в заголовочном файле, ILI9488)
в заголовочном файле - это тут : Adafruit_TFTLCD.cpp ?
SD , Touch проверял?
Заголовочный - это .h от header)( хотя, если честно, не помню, где настраивается разрешение...может и в .срр)Тач проверял, работает, SD не проверял, завтра проверю, отпишу.
Можно спросить, только сильно не угарайте пожалуйста.
Приобрёл я значит дисплей на eBay 330Х480 пикселей (первый раз в жизни),
дисплей оказался на контроллере ILI9488, во всяком случае так написано
в кратком описании к дисплею на eBay, но и на обратной стороне самого
дисплея тоже проштамповано 9488. Вот ссылка:
http://www.ebay.com/itm/141647130960?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
Я занимаюсь программированием контроллеров ATmel, в данном случае написал программку для контроллера
ATmega328, инициализация:
**********Сброс после подачи питания********
RST_ON; Delay (0x0FFF);
RST_OFF; Delay (0x0FFF);
RST_ON; Delay (0x0FFF);
CS_ON; WR_ON; RS_OFF;
Delay (0xFFFF); CS_OFF;
Delay (0x00FF);
************Инит*************
LCD_Write_COM(0xE0);//PGAMCTRL (Positive Gamma Control) (263 номер стр. в PDF)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x07);
LCD_Write_DATA(0x10);
LCD_Write_DATA(0x09);
LCD_Write_DATA(0x17);
LCD_Write_DATA(0x0B);
LCD_Write_DATA(0x40);
LCD_Write_DATA(0x8A);
LCD_Write_DATA(0x4B);
LCD_Write_DATA(0x0A);
LCD_Write_DATA(0x0D);
LCD_Write_DATA(0x0F);
LCD_Write_DATA(0x15);
LCD_Write_DATA(0x16);
LCD_Write_DATA(0x0F);
LCD_Write_COM(0xE1);//NGAMCTRL (Negative Gamma Control)(264)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x1A);
LCD_Write_DATA(0x1B);
LCD_Write_DATA(0x02);
LCD_Write_DATA(0x0D);
LCD_Write_DATA(0x05);
LCD_Write_DATA(0x30);
LCD_Write_DATA(0x35);
LCD_Write_DATA(0x43);
LCD_Write_DATA(0x02);
LCD_Write_DATA(0x0A);
LCD_Write_DATA(0x09);
LCD_Write_DATA(0x32);
LCD_Write_DATA(0x36);
LCD_Write_DATA(0x0F);
LCD_Write_COM(0x13);//Normal Display Mode ON (167)
LCD_Write_COM(0xB1);//Frame Rate Control (In Normal Mode/Full Colors) (220)
LCD_Write_DATA(0x70);
LCD_Write_DATA(0x11);
LCD_Write_COM(0xB4);//Display Inversion Control (224)
LCD_Write_DATA(0x00);//00=Column inversion
LCD_Write_COM(0xC0);//Power Control 1 (236)
LCD_Write_DATA(0x17);
LCD_Write_DATA(0x15);
LCD_Write_COM(0xC1);//Power Control 2 (238)
LCD_Write_DATA(0x41);
LCD_Write_COM(0xC5);//VCOM Control (242)
LCD_Write_DATA(0x00);
LCD_Write_DATA(0x0A); //
LCD_Write_DATA(0x80); //
//Lcd_Write_Data(0x40);//No
LCD_Write_COM(0xB6);//Display Function Control (227)
LCD_Write_DATA(0x02);
LCD_Write_COM(0x36);//Memory Access Control (191)
LCD_Write_DATA(0x00);//48
LCD_Write_COM(0x3A);//Interface Pixel Format (199)
LCD_Write_DATA(0x55);//16 бит!
LCD_Write_COM(0xE9); //Set Image Function (269)
LCD_Write_DATA(0x00);
LCD_Write_COM(0xF7); //Adjust Control 3 (274)
LCD_Write_DATA(0xA9);
LCD_Write_DATA(0x51);
LCD_Write_DATA(0x2C);
LCD_Write_DATA(0x82);
LCD_Write_COM(0x11); // Sleep OUT
Delay (0x0FFF);
LCD_Write_COM(0x29);//Display ON (173)
LCD_Write_COM(0x2A);//Column Address Set (174)
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x00);//
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x0F);// горизонталь 16 пикс
LCD_Write_COM(0x2B);//Page Address Set (176)
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x00);//
LCD_Write_DATA (0x00);
LCD_Write_DATA (0x0F);//вертикаль 16 пикс
LCD_Write_COM(0x2C); //Write_memory_start (178)
**********На всякий случай тактирование (протокол)*******
//Импульс стоба для команды.
void Impuls_comand (void)
{
Delay (1);//
WR_OFF; Delay (1);//
WR_ON;
}
//Импульс стоба для данных.
void Impuls_data (void)
{ Delay (1);//
RS_ON;
Impuls_comand ();
RS_OFF;
}
Библиотеки не использую и создавать не умею, пока не вижу необходимости.
Программа инициализации отрабатывает один раз после включения контроллера.
После отработки инициализации, я В РУЧНУЮ (от кнопки) даю данные пикселя. То есть, сделаны
маленькие подпрограммки, которые, во первых предотвращают дребезг кнопки, во вторых выдают
один байт информации, либо два (два здесь не описываю), согласно протокола 8080. Данные в дисплей передаются в восьми битном режиме.
Всё это сделано для освоения работы TFT.
Что происходит: при подаче первого байта на дисплее ни чего не появляется, далее даю следующий байт.
Появляется пиксель! (старший=FCh, младший=00h по идее это код красного света пикселя) Но, пиксель появляется
ЧЁРНОГО цвета, вопрос почему? Спрашивается, почему именно чёрного, потому что видно отключение пикселя. Дело в
том, что после инициализации экран становится слегка серым.
Далее даю еще три точно такие же последовательности = FCh, такт(WR), 00h, такт(WR), происходит ещё три отключения пикселя.
Далее ещё такт, и появляется красный пиксель, даю ещё четыре раза FCh, такт(WR), 00h, такт(WR), и после четвёртого такта снова пиксель отключается, и так далее. Вот это первый вопрос, почему же так происходит, ведь по идее должно быть после каждого FCh, такт(WR), 00h, такт(WR), появиться красный пиксель. Ведь при инициализации Comand 0x3A = 0x55 (формат пикселя 16 бит!).
Естественно, все пиксели закрашиваются по порядку, то есть в строчку, и получается квадрат 16Х16 писелей, потому что задано при инициализации Comand 0x2A = 0x0F, и Comand 0x2B = 0x0F.
Второй вопрос: Почему то нулевой пиксель появляется не в самом левом и верхнем углу, а чуть ниже, примерно с отступом от верха на 40, и от левого края на 60 пикселей, хотя при инициализации Comand 0x2A = 0x00, и Comand 0x2B = 0x00.
Пробовал: Значит, у меня ATmega328 работает с кварцем на 20Мгц, делал зацикленность FCh, такт(WR), 00h, такт(WR), в основной программе обсалютно без всяких задержек, получалось = квадрат 16Х16 закрашивается красным но с чёрными полосками. Так же пробовал с другими частотами, эффект абсолютно не меняется. Вариант инициализации есть так же на eBay, на той же странице где и предлагается данный дисплей, правда там предложено для ILI9327; всё работает но с пикселем та же беда, и первый пиксель тоже почему-то не в самом верху, и не в самом краю слева.
Не пробовал: читать ID код. А есть ли смысл, ведь инициализация проходит нормально? Например на изменение данных в регистре Comand 0x2A,Comand 0x2B, нормально откликается, то есть размер квадрата, ну или прямоугольника реально соответствует заданным количествам пикселей. Не манипулировал с IM0-IM3 потому как не знаю рапиновки шлейфа на шилде.
Не верю: Что данные в дисплей нужно впихивать синхронно в такт с кадром, тогда спрашивается, а почему же тогда адресация
пикселя не нарушается? Ведь они появляются последовательно, как и логично должно быть.
Мысль: Тупо дисплей куплен дешёвый, и/или кристал в нём не доделанный (Брак).
P.S. Помоги разобраться пожалуйста. Да, и ещё чуть не забыл, ну нет у меня ни какого Arduino, есть просто самопальная плата с контролллером, и программатором, и программирую я CodeVisionAVR, но я не противник Arduino или IAR, просто мне пока тут комфортно.
Что происходит: при подаче первого байта на дисплее ни чего не появляется, далее даю следующий байт.
Появляется пиксель! (старший=FCh, младший=00h по идее это код красного света пикселя) Но, пиксель появляется
ЧЁРНОГО цвета, вопрос почему?
Проверьте настройки по регистрам. Конечно если это действительно ili9488...... Что касается ардуино, ставим IDE Arduino. Пишем программу используя нужные библиотеки. Компилируем, берем HEX файл и пишем как обычно в контроллер. Учитывая что по умолчанию все arduino работают на 16 МГц. Подправив файл условий компиляции можно ставить свой кварц. Ардуино расчитано на работу с кварцами 8, 16, 20.
diger67, Спасибо за предложенный код инициализации, но не пошло и с ним. причём совсем не пошло, то есть после инициализации экран остаётся белым как будто на него просто подали питание. Но, снизу экрана, это примерно миллиметров шесть есть серое поле. То есть получается инициализация есть, но видимо какая-то ошибка. На дальнейшие подачи кода данных не реагирует, то есть пиксели не появляются/не отключаются. Пробовал: исключать из программы инициализации команды E8h, EAh, EDh, C7h, потому как их описания нет в PDF к ILI9488, в общем эффекта ни какого не дало.Вот, предлагаю фото дисплея (только сегодня разобрался как закидывать сюда фотки), может быть это что Вам даст.
{Почему-то на данный сайт удаётся загрузить только две фотки, может быть Вы мне скажите почему так.} Придётся вернуться на код который ранее работал (код ниже), и ешё по экспериментировать исходя из предложенного Вами кода. Может быть что-то и получится, хотя я в этом уже и не уверен.
Есть вопрос.
1. Имеет ли значение последовательность команд при инициализации?
2. Может быть там другой контроллер, может что-то ещё предложите, я имею в виду другой код инициализации?
Интересные фото, Алексей, а расскажите пожалуйста о проводке от +5V к U1, я в этом месте (безрезультатно) экспериментировал, когда пытался научиться управлять подсветкой экрана, а у Вас он для чего ?
Товарищи, сворачивайте большие куски кода! А то полгода тему листать приходится.
И жирным шрифтом не злоупотребляйте...
AlexeiBrizgalov,
к сожалению, иногда контроллеры попадаются и вообще левые...ID читали?
Сворачивать код - во вкладке "Дополнительно" при вставке кода.
Фото вставлять с помощью опции "фото" при создании статьи.
Прошу прощения за оффтоп.
Удаление фотографий - побочный эффект при редактировании поста.
Если Вы дадите мне ссылки на фото, я вставлю их в пост.
Вот пожалуйста ссылочка, спасибо за внимание!
http://arduino.ru/imce?app=ckeditor%7Csendto%40ckeditor_fileUrl%7C&CKEdi...
Хм, вы можете залить фото на rghost.ru ?
Барахлит файлменеджер.
Уважаемый Yarik.Yar,
Подскажите что нибудь по дисплею. Какое Ваше мнение? Может его Выкинуть?
Я теперь заказал вот такой, как вы думаете нормальный?
http://www.ebay.com/itm/171406660092?_trksid=p2060353.m2749.l2649&ssPage...
Моё мнение - надо читать ID. Это разрешит все вопросы.
Проблема в том, что у контроллеров ILIxxxx инициализации похожи, различаются лишь чуть-чуть, посему он может инициализироваться, но не так слегка.
Короче, ID в студию!)
А по поводу того дисплея, что вы заказали - это лотерея) мне два аза повезло, а один нет..)
Благодарю за подробный ответ. U1, стало быть, "не оно".
P.S. С соцсетями у меня, увы, не сложилось как-то...
Благодарю за подробный ответ. U1, стало быть, "не оно".
Можно отвечу я?)
Экраны у нас одинаковые)
Поехало сразу, на полный экран, работаю с Arduino MEGA.
Можно отвечу я?)
Экраны у нас одинаковые)
Поехало сразу, на полный экран, работаю с Arduino MEGA.
Я то же самое отвечу )).
В скетче присутствуют
#include <Adafruit_GFX.h> #include <Adafruit_TFTLCD.h> #include <TouchScreen.h>
Интересно, весь шилд питатся 5 в. Вообщето контроллер индикатора питается 3.3 в. В случае использования питания процессора 3.3 вольта его стабильная работа гарантированна с кварцем 11 -12 МГц. Как вы питаете схему? Я так на кортекс перенес эту библиотеку, вот stm32f429zgt готовлю в бой.
Такую платку сделал для TFT без шилда.
Уважаемый Yarik.Yar,
Подскажите что нибудь по дисплею. Какое Ваше мнение? Может его Выкинуть?
Я теперь заказал вот такой, как вы думаете нормальный?
http://www.ebay.com/itm/171406660092?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
Выкидывать наверное рановато.
По поводу дисплея, хорошая вещь. Одно но, нужно будет ваять буферы на НС245 для согласования с мегой или питать всю схему от 3.3 вольта. У меня такой работает с ARM. Там насколько помню шина 16 бит и стоит контроллер тача.
Вот что удалось сделать на базе данного дисплея, библиотеки Adaruit и все это зашито в stm32f103vet.
http://178.130.34.198/adafruit/picture/video_1.mp4
по TFT LCD shield 3.5" arduino mega ili9488 480x320. красный меговский шилд, дисплей FPC-A35242N01QI-A .
Решение описал в соседней ветке http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd-krasnyi-megovskii-mega-2560-r3-resheno-kak-reshit-drugie , чтоб не затерялось здесь, а то уже одно и тоже спрашивают, хотя ответы были даны.
+ написанная читалка ID и методика решения других шилдов.
было
стало
дело было в неправильной разводке платы на фабрике. или просто неподходящий под неё дисплей со шлейфом 9/18 бит . вместо нужных 8/16 бит.
Если не можете решить, можете отправить мне, координаты были на предыдущей станице.
по TFT LCD shield 3.5" arduino mega ili9488 480x320. красный меговский шилд, дисплей FPC-A35242N01QI-A .
мега+красный шилд 3,5", читалка ID выдает в сериал монитор :
start...
UTFT normal pin29-22(PORTA)-byteH(DB15-0) , pin37-30(PORTC)-byteL(DB7-0)
register 00h for ILI9320(9320), ILI9325(9325), ILI9326(9326), SSD1289(1289,8989)
HX8347D(047), HX8347G(075), HX8352A(052), HX8352B(065), HX8352C(072)
R61509V(B509), R61505W(C505), SPFD5420A(5408)
if (0 93 0 27) -> 8bit . if (93 27 93 27) -> 16bit
register 0 0
1 Parameter 0 0
2 Parameter 0 0
3 Parameter 0 0
4 Parameter 0 0
5 Parameter 0 0
6 Parameter 0 0
register EFh for ILI9327(0 02 04 93 27 FF),
register 0 EF
1 Parameter 0 EF
2 Parameter 0 EF
3 Parameter 0 EF
4 Parameter 0 EF
5 Parameter 0 EF
6 Parameter 0 EF
register BFh for ILI9481(0 0 94 81 xx xx)
register 0 BF
1 Parameter 0 BF
2 Parameter 0 BF
3 Parameter 0 BF
4 Parameter 0 BF
5 Parameter 0 BF
6 Parameter 0 BF
register D3h for ILI9488(0 0 94 88 xx xx)
register 0 D3
1 Parameter 0 D3
2 Parameter 0 D3
3 Parameter 0 D3
4 Parameter 0 D3
5 Parameter 0 D3
6 Parameter 0 D3
register 04h for HX8357(?DA-DC), HX8353(?80-85),
register 0 4
1 Parameter 0 4
2 Parameter 0 4
3 Parameter 0 4
4 Parameter 0 4
5 Parameter 0 4
6 Parameter 0 4
Что делать: отрывать дисплей - отпаивать 1 и вторую и замыкать между собой?
(днём постараюсь сказать спасибо)