Бок о бок два 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

}

, 👍1

Обсуждение

Вероятно, у них разные панели с разными требованиями к приводу., @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