Бок о бок два TFT-дисплея 1.8" с драйвером ST7735, но один действует по-другому
Настройка оборудования:
- Изготовленный на заказ PCB с ATmega 2560
- Рабочая партия: TFT LCDS 1.8" с драйвером ST7735 (китайская версия)
- Плохая партия: TFT LCDS 1.8" с драйвером ST7735 (китайская версия)
Библиотека: От Adafruit, последняя версия (1.7.0)
Я использую эти ЖК-дисплеи в течение многих лет. Но, ЖК-дисплеи, которые я купил в последнее время, не работают так, как они должны быть. Снаружи они выглядят совершенно одинаковыми. Я купил у нескольких разных продавцов из Китая на всякий случай. Все они ведут себя одинаково.
Поэтому я решил найти программное решение, а не пробовать все ЖК-дисплеи на китайском рынке. Какой бы вариант ST7735s у меня ни был (продавцы утверждают, что это просто ST7735 и ничего больше), мне нужно соответствующим образом адаптировать его к своему программному обеспечению.
Чтобы сохранить эффективность пробных попыток, я тестирую только на примерах, приведенных Adafruit, пока не докажу, что это работает. Я делюсь результатами хороших и плохих ЖК-дисплеев для вашего сравнения ниже.
Любой вклад очень ценится.
ПРАВКА: Библиотека была отправлена продавцом. Но это не похоже на то, что он на 100% соответствует ST7735. Например, поскольку @Majenko попросил, я добавляю код инициализации из библиотеки;
void Lcd_Init(void)
{
//调用一次这些函数,免得编译的时候提示警告
LCD_CS =1;
if(LCD_CS==0)
{
LCD_WR_REG_DATA(0,0);
LCD_ShowString(0,0," ");
LCD_ShowNum(0,0,0,0);
LCD_Show2Num(0,0,0,0);
LCD_DrawPoint_big(0,0);
LCD_DrawRectangle(0,0,0,0);
Draw_Circle(0,0,0);
}
LCD_REST=1;
delayms(5);
LCD_REST=0;
delayms(5);
LCD_REST=1;
LCD_CS=1;
delayms(5);
LCD_CS =0; //打开片选使能
LCD_WR_REG(0x11); //Sleep out
delayms(120); //Delay 120ms
//------------------------------------ST7735S Frame Rate-----------------------------------------//
LCD_WR_REG(0xB1);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB2);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_REG(0xB3);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x05);
LCD_WR_DATA8(0x3C);
LCD_WR_DATA8(0x3C);
//------------------------------------End ST7735S Frame Rate-----------------------------------------//
LCD_WR_REG(0xB4); //Dot inversion
LCD_WR_DATA8(0x03);
LCD_WR_REG(0xC0);
LCD_WR_DATA8(0x28);
LCD_WR_DATA8(0x08);
LCD_WR_DATA8(0x04);
LCD_WR_REG(0xC1);
LCD_WR_DATA8(0XC0);
LCD_WR_REG(0xC2);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x00);
LCD_WR_REG(0xC3);
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0x2A);
LCD_WR_REG(0xC4);
LCD_WR_DATA8(0x8D);
LCD_WR_DATA8(0xEE);
//---------------------------------End ST7735S Power Sequence-------------------------------------//
LCD_WR_REG(0xC5); //VCOM
LCD_WR_DATA8(0x1A);
LCD_WR_REG(0x36); //MX, MY, RGB mode
LCD_WR_DATA8(0xC0);
//------------------------------------ST7735S Gamma Sequence-----------------------------------------//
LCD_WR_REG(0xE0);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x22);
LCD_WR_DATA8(0x07);
LCD_WR_DATA8(0x0A);
LCD_WR_DATA8(0x2E);
LCD_WR_DATA8(0x30);
LCD_WR_DATA8(0x25);
LCD_WR_DATA8(0x2A);
LCD_WR_DATA8(0x28);
LCD_WR_DATA8(0x26);
LCD_WR_DATA8(0x2E);
LCD_WR_DATA8(0x3A);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x01);
LCD_WR_DATA8(0x03);
LCD_WR_DATA8(0x13);
LCD_WR_REG(0xE1);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x16);
LCD_WR_DATA8(0x06);
LCD_WR_DATA8(0x0D);
LCD_WR_DATA8(0x2D);
LCD_WR_DATA8(0x26);
LCD_WR_DATA8(0x23);
LCD_WR_DATA8(0x27);
LCD_WR_DATA8(0x27);
LCD_WR_DATA8(0x25);
LCD_WR_DATA8(0x2D);
LCD_WR_DATA8(0x3B);
LCD_WR_DATA8(0x00);
LCD_WR_DATA8(0x01);
LCD_WR_DATA8(0x04);
LCD_WR_DATA8(0x13);
//------------------------------------End ST7735S Gamma Sequence-----------------------------------------//
LCD_WR_REG(0x3A); //65k mode
LCD_WR_DATA8(0x05);
LCD_WR_REG(0x29); //Display on
}
@Sener, 👍1
Обсуждение0
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
Вероятно, у них разные панели с разными требованиями к приводу., @Majenko
@Majenko, да, действительно. Но какой из них? Вопрос на миллион долларов. Продавцы присылают мне технические данные, драйверы и т. Д. Все указывает на ST7735., @Sener
После того, как они отправили вам код, вы должны сравнить настройки регистра запуска с вашим существующим кодом., @Majenko
@Majenko, я сделал сравнение, как вы просили. Есть и сходства, но есть и различия. Я также примерно сравнил с каким-то другим драйвером ("ILI9341"). Я все еще не мог узнать водителя. Может быть, ты знаешь. Я отредактировал свой пост и добавил этот код ИНИЦИАЛИЗАЦИИ. Вся библиотека немного длинновата, поэтому я ее сюда не добавлял. Если понадобится, я смогу. Однако, как вы знаете, вы не можете доверять продавцу, если они когда-либо присылали мне правильного водителя или они когда-либо знали, что продают., @Sener
Проблема в том, что TFT состоит из двух частей: микросхемы контроллера и панели. Чип должен быть настроен программным обеспечением, чтобы правильно управлять панелью. У вас может быть один и тот же чип на многих разных панелях, и библиотека для одной не будет работать правильно с другой. Я могу проверить код инициализации позже., @Majenko
Мне кажется, я вижу разницу. У вас есть библиотека для ST7735, но эти новые на самом деле являются ST7735 - совершенно другим (хотя и запутанно названным) чипом, которому нужна другая библиотека. У Adafruit, похоже, его нет, так что вам придется найти его у кого-то другого., @Majenko
@Majenko, я тоже так думаю. Либо я попытаюсь найти его, если он существует (возможно), либо я дам шанс тому, который дал продавец, и попытаюсь преобразовать его в библиотеку Ardunio. Спасибо за предупреждение., @Sener
Это процедура инициализации, которую необходимо заменить в библиотеке Adafruit. Его должно быть достаточно легко перенести., @Majenko
Я заменил инициализацию в соответствии с кодом, который я упомянул в своем посте. Но все, что я получаю, - это белый фон., @Sener
Я только что заказал один на eBay из Китая. Это займет несколько недель, чтобы прибыть...., @Majenko
В качестве резервного плана я попросил своего китайского производителя печатных плат поискать версии ST7735R на местном уровне. Так что, по крайней мере, я мог бы спасти положение, пока я все еще работаю над версией S. Я думаю, вы также хотите создать библиотеку для всех, это было бы здорово. Я обыскал многие ресурсные центры, такие как github. Я уверен, что кто-то уже сделал один, но многие из них утверждают, что их библиотека предназначена для ST7735, но если вы посмотрите внимательно, она все еще вызывает "initR" из библиотеки Adafruit. Я думаю, не многие люди знают об этом варианте S. Поскольку на этих ЖК-дисплеях нет "МИСО" (не читается), вы не можете запросить версию ЖК-дисплея :(, @Sener
Несколько дней назад я попросил своего производителя печатных плат посмотреть голый дисплей без задней плоскости и сказал им, что если они смогут его найти и он будет работать нормально, я могу спроектировать для него заднюю плоскость, а вы сделаете. Угадай что, они нашли одного. Но странно то, что они купили версию is-S (утверждали это), и они протестировали ее с моим PBC, и это сработало. Это безумие. Я озадачен, я не знаю, что сказать., @Sener
Мой поставщик теперь использует только версию-S (https://www.buydisplay.com/tft-display/tft-display-panel?cotroller_ic=883) итак, я предполагаю, что старое не-S-одно было прекращено. В любом случае, вариант-S более способен., @Majenko
Мой TFT только что прибыл. Я собираюсь потратить сегодняшний день на его настройку и приведение в действие. Я доложу позже., @Majenko
Ладно, это странно. Моя работает прямо из коробки. Печатная плата немного отличается от вашей, но предположительно это чип St7735S. Как и у вас, это панель вариантов "зеленая вкладка", но я не говорю ей использовать инициализацию зеленой вкладки, только черную вкладку по умолчанию, которая отлично работает (инициализация зеленой вкладки просто добавляет смещение на дисплей)., @Majenko
Тогда тебе повезло. На этот раз я не рискнул и сделал дизайн задней плоскости, который будет изготовлен на следующей неделе для голого ЖК-дисплея. Я купил голые ЖК-дисплеи. Моя фабрика их соберет. По крайней мере, таким образом я мог бы также добавить несколько телевизоров для линий SPI. В прошлый раз во время испытаний на электромагнитную совместимость ЖК-дисплей вышел из строя., @Sener
Однако вы сказали, что у Adafruit нет библиотеки ST7735S. Вы сделали его сами? Если это так, не хотели бы вы поделиться для сообщества Arduino где-нибудь доступным?, @Sener
Нет, это просто стандартная библиотека adafruit - когда я начал экспериментировать и просматривать примеры, я увидел, что у них есть функция.initR () для выбора варианта: https://github.com/adafruit/Adafruit-ST7735-Library/blob/master/examples/graphicstest/graphicstest.ino#L87, @Majenko