3.95 TFT ILI9488
- Войдите на сайт для отправки комментариев
Доброго всем дня)
Приобрел девайс http://ru.aliexpress.com/item/Mega-2560-R3-Development-Board-3-6-inch-TF...
У меня в AtmelStudio был написан драйвер для HX8357C, как писали на форумах инициализация подходит от 61581 так и произошло, по поводу "поворотов" экрана почитал даташит, короче забил все нули в регистр.
Дисплей работает но както не так. Даже незнаю как это описать вот фото https://yadi.sk/d/sGxha7EBn3ZmL
обратите внимание, первая строка - буква Ш, во второй строке в слове "детей" 2 одинаковые буквы "е" но втроя кривая) в 4той строке последнее слово "лет" но букву "т" даже не разобрать.
Инициализация:
void LCD_Init_ILI9488(void){ LCD_RST_H; _delay_ms(50); LCD_RST_L; _delay_ms(150); LCD_RST_H; _delay_ms(150); LCD_CS_L; LCD_Write_COM(0xB0); LCD_Write_DATA(0x1E); LCD_Write_COM(0xB0); LCD_Write_DATA(0x00); LCD_Write_COM(0xB3); LCD_Write_DATA(0x02); LCD_Write_DATA(0x00); LCD_Write_DATA(0x00); LCD_Write_DATA(0x10); LCD_Write_COM(0xB4); LCD_Write_DATA(0x00);//0X10 LCD_Write_COM(0xB9); //PWM Settings for Brightness Control LCD_Write_DATA(0x01);// Disabled by default. LCD_Write_DATA(0xFF); //0xFF = Max brightness LCD_Write_DATA(0xFF); LCD_Write_DATA(0x18); LCD_Write_COM(0xC0); LCD_Write_DATA(0x03); LCD_Write_DATA(0x3B);// LCD_Write_DATA(0x00); LCD_Write_DATA(0x00); LCD_Write_DATA(0x00); LCD_Write_DATA(0x01); LCD_Write_DATA(0x00);//NW LCD_Write_DATA(0x43); LCD_Write_COM(0xC1); LCD_Write_DATA(0x08); LCD_Write_DATA(0x15);//CLOCK LCD_Write_DATA(0x08); LCD_Write_DATA(0x08); LCD_Write_COM(0xC4); LCD_Write_DATA(0x15); LCD_Write_DATA(0x03); LCD_Write_DATA(0x03); LCD_Write_DATA(0x01); LCD_Write_COM(0xC6); LCD_Write_DATA(0x02); LCD_Write_COM(0xC8); LCD_Write_DATA(0x0c); LCD_Write_DATA(0x05); LCD_Write_DATA(0x0A);//0X12 LCD_Write_DATA(0x6B);//0x7D LCD_Write_DATA(0x04); LCD_Write_DATA(0x06);//0x08 LCD_Write_DATA(0x15);//0x0A LCD_Write_DATA(0x10); LCD_Write_DATA(0x00); LCD_Write_DATA(0x60);//0x23 //LCD_Write_COM(0x36); //LCD_Write_DATA(0x0048); //LCD_Write_COM(0x36); //LCD_Write_DATA(0x0A);//0x0A LCD_Write_COM(0x36); LCD_Write_DATA(0b00000000);//0x0A LCD_Write_COM(0x0C); LCD_Write_DATA(0x55); LCD_Write_COM(0x3A); LCD_Write_DATA(0x55); LCD_Write_COM(0x38); LCD_Write_COM(0xD0); LCD_Write_DATA(0x07); LCD_Write_DATA(0x07);//VCI1 LCD_Write_DATA(0x14);//VRH 0x1D LCD_Write_DATA(0xA2);//BT 0x06 LCD_Write_COM(0xD1); LCD_Write_DATA(0x03); LCD_Write_DATA(0x5A);//VCM 0x5A LCD_Write_DATA(0x10);//VDV LCD_Write_COM(0xD2); LCD_Write_DATA(0x03); LCD_Write_DATA(0x04);//0x24 LCD_Write_DATA(0x04); LCD_Write_COM(0x11); _delay_ms(150); LCD_Write_COM(0x2A); LCD_Write_DATA(0x00); LCD_Write_DATA(0x00); LCD_Write_DATA(0x01); LCD_Write_DATA(0xDF);//320 LCD_Write_COM(0x2B); LCD_Write_DATA(0x00); LCD_Write_DATA(0x00); LCD_Write_DATA(0x01); LCD_Write_DATA(0x3F);//480 _delay_ms(100); LCD_Write_COM(0x29); _delay_ms(30); LCD_Write_COM(0x2C); _delay_ms(30); LCD_CS_H; }
Адрес пиксиля:
void UTFT_setXY(uint X1, uint Y1, uint X2, uint Y2){ LCD_Write_COM(0x2a); LCD_Write_DATA((X1>>8)& 0xFF); LCD_Write_DATA(X1 & 0xFF); LCD_Write_DATA((X2>>8)& 0xFF); LCD_Write_DATA(X2 & 0xFF); LCD_Write_COM(0x2b); LCD_Write_DATA((Y1>>8)& 0xFF); LCD_Write_DATA(Y1 & 0xFF); LCD_Write_DATA((Y2>>8)& 0xFF); LCD_Write_DATA(Y2 & 0xFF); LCD_Write_COM(0x2c); }
Рисуем пиксель:
void UTFT_drawPixel(uint X, uint Y, uint Color) { LCD_CS_L; UTFT_setXY(X, Y, X, Y); LCD_Write_DATA(Color); LCD_CS_H; }
Текст выводится по пиксельно.
void UTFT_printChar8x16(unsigned char sym, int x, int y, uint ColorPix, uint ColorFon, char Flag){ for (uchar x1=0; x1 < 16; x1++){ // вниз число байт 16 char dt1 = pgm_read_byte_far(pgm_get_far_address(FONT8x16) + (sym*16) + x1); for (uchar y1=0; y1 < 8; y1++){ // число пиксел по горизонтале if ((dt1 & (1 << (7 - y1))) != 0){ UTFT_drawPixel(x+x1,y+y1,ColorPix); } else{ if (Flag != 0){ UTFT_drawPixel(x+x1,y+y1,ColorFon); } } } } }
Повторюсь код на HX8357C отличается только инициализацией, и на 2ром дисплее отрабатывает как часы. Где ошибка? Компилятор atmelstudio6.2
Народ походу по коду проблем нету, проблема с железом. Я вчера заметил стоит дисплею полежать 30-40 минут почти все хорошо, текст идеален а фигуры в демо режиме начинают искажатся. Пло народ на дисплейном модуле нет не кирамик не танталов не электролитов. Такое в обще должно работать? И может у кого схемка есть? или назначение пинов. Пло китаиц молчит.
слишком много неизвестных. поди питания не хватает. замерьте питание стабилизатора на шилде во время демо на экране. вход должен быть стабильно 5.0-4.9в , и выход с него 3,25-3,35в. и потом уж добавляйте тантал.
есть же соседние ветки, там всё про него написано и про других. прочитайте.
Есть хорошая ветка по 3.5 но там преимущественно другие дисплеи. Мой сильно отличается. Питание в норме. Повесил тантал и керамику на 1117 3.3, есть изменения он заглючил стабильнее, начал разбиратся.
Снял дисплей с шилда, отмыл плату, хорошо припаял. Не помогло. Китаец молчит.
Разбираюсь дальше.
Инициализация, на форумах пишут мол подходит r61581, ну... по сути картинка выше. Разбирась в коде инициализации ссылаясь на даташит https://yadi.sk/d/7ykIwYJ1nB7uR
и прихожу к выводу что высказывания про r61581 полная чушь. Начиная с того что некоторые комманды для r61581 пишут мусор в eeprom ili9488, беру код UTFT от ili9486. И по pdf 9488 сравниваю, немного корректируя до значений по умолчанию. Убирая не нужный код по гаммам. И добавив установку частоты проца и обновления (убрал мерцания).
Проблема не решена но сужена область поиска.
Довайте подробнее по коду: (Видео по коду https://youtu.be/hqOEH4BKvSA)
Заливка цветом\очистка экрана, работает на ура (нет полос)
функция заливки:
Функция заливки блоками 8х8 пиксель, тоже работает.
вызываю так:
заливка пикселями по 1му не работает
переписывал функцию заливки блоками 8х8 пиксель на 4х4, перестает работать появляются полосы шириной 4 пикселя.
На видео все видно. Не пойму инициализация? код? или неисправность?
инициализация:
............
Повесил тантал и керамику на 1117 3.3, есть изменения он заглючил стабильнее, начал разбиратся.
..............
как будто минус (GND ) слабый.
что-то не полная у вас инициализация (но если у народа работает , то возможно дело в железе).
вот здесь http://arduino.ru/forum/apparatnye-voprosy/35-tft-lcd-krasnyi-megovskii-mega-2560-r3-resheno-kak-reshit-drugie выложил библиотеку UTFT, переработал несколько инициализаций от ili9488 , закинул в \UTFT\tft_drivers\ili9486 . Оставил распакованую самую лучшую, но можете поэксперементировать.
попробуйте использовать версию IDE 1.5.8.
удалите свою UTFT, замените на эту. Только для своего 16ти битного дисплея в UTFT.cpp
byte dtm[] = {......., 8, 16, SERIAL_5PIN, SERIAL_5PIN} замените обратно на byte dtm[] = {......., 16, 16, SERIAL_5PIN, SERIAL_5PIN};
По поводу минуса, исключено, питание и пульсации мерял на 1117 минус брал там же.
Глюки дисплея были убраны полным изучением и правкой инициализыции. Перед изучением я их там милион от раных авторов перепробовал. Включая ветку 3.5.
По поводу битности в том посте, ну у меня до сих пор есть соммнения по поводу 8-9-16-18, но по сути битность это только цвет, все комманды принимаются в 8 бит, и контролеру дисплея до п**ды что там на IM0-IM3 при установке адреса, или я не прав?
повторюсь:
работает на 90%, пож. смотрите видео внимательно, 2рая половина это работа функции
на 90% экрана пиксели ставятся на 10 нет. Такое ощущение что какой то глюк контролера дисплея. Собственный счетчик работает (заливка ОК), а принудительная установка адреса пикселя только на 90%.
PS я не юзаю студию от Arduino, я использую AtmelStudio. Код похож на UTFT только по тому что я его портировал от туда.
PS2 Коды показанные в этом посте прекрасно работают с HX8357С (с другой инициализацией соответственно)