Помогите с цоколевкой lcd дисплея

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Delphin911, 14 апр 2020.

  1. Delphin911

    Delphin911 Нерд

    Есть дисплейчик от старенького Акателя OT-305, с маркировкой на шлейфе FPC268-4 A1. Сам телефон давно без аккумулятора валяется. Он маленький, как раз часы, будильники показать. Хочу его на поливалку на дачу пристроить. Собственно все уже настроено и работает на стандартном 2х строчном ардуиновском дисплее. Но уж очень он большой.
    Может кто поможет с цоколевкой?
     

    Вложения:

    • Shleyf.jpg
      Shleyf.jpg
      Размер файла:
      95,9 КБ
      Просмотров:
      259
  2. забудь... на них не документации, не запчастей.
     
    NikitOS нравится это.
  3. Delphin911

    Delphin911 Нерд

    Да мне запчасти какие нужны? С цоколевкой разобраться разве что. На Али нашел похожий дисплейчик, но он там 18 контактов, а у меня 20. Но в документации там 20 контактов.
     
  4. и что дальше?
    там таких похожих...
     
    NikitOS нравится это.
  5. Delphin911

    Delphin911 Нерд

    В смысле? Есть библиотека Adafruit_TFTLCD.h, есть схема подключения к Ардуино. Будет цоколевка, подключу.
     
  6. b707

    b707 Гуру

    мало подключить, надо еще суметь с ним работать. Как вы на него что-то выведете? Описание команд есть? - нет - или вы думаете у всех дисплеев одни и те же команды и библиотека Adafruit_TFTLCD.h, подходит к любому?


    Вывод - разбираться с подключением дисплеев от телефонов, кассовых аппаратов и разного другого старья имеет смысл только когда у вас их десятки и сотни одинаковых. Тратить время на возню с одним дисплеем,. стоимость которого вряд ли больше 200 рублей - глупость
     
    NikitOS и Пушной звер нравится это.
  7. parovoZZ

    parovoZZ Гуру

    Никто.
     
    NikitOS нравится это.
  8. Delphin911

    Delphin911 Нерд

    Ну мне бы цоколевочку, а там уж я сам. Ну нет так нет.
     
  9. parovoZZ

    parovoZZ Гуру

    ЛА подоткни и сам посмотри где что.
     
  10. Delphin911

    Delphin911 Нерд

    ЛА это что?
     
  11. логический анализатор видимо.
    а мне бы схему, чтобы узнать что за дисплей и на каком контроллере собран, потом документацию на контроллер, а потом по обстоятельствам.

    возьмите в китае тфт на st7735, если прям так надо.
     
    NikitOS нравится это.
  12. Delphin911

    Delphin911 Нерд

    Да заказал я на АЛи парочку. Но это на всякий случай. Этот же просто любопытно подключить и все. Если бы позарез надо было, я бы уже где-нить денег предложил. А так, сижу дома, типа работаю удаленно, а это хобби.
     
  13. Delphin911

    Delphin911 Нерд

    Ну вот, все получилось. Библиотека UTFT.h. Выбираем TFT28UNO и все отлично работает!
     
    Airbus нравится это.
  14. ZAZ-965

    ZAZ-965 Гуру

    @Delphin911, так напишите распиновку и пример скетча - другим пригодится.
     
    NikitOS и Airbus нравится это.
  15. Delphin911

    Delphin911 Нерд

    Конечно выкладываю мои результаты изысканий. Сразу оговорюсь, что скетч писал не я, но он точно работает на UNO.
    Вот цоколевка моего дисплея.
    [​IMG]
    Вот таблица подключения к ардуино:
    CS - A3
    CD(RS) - A2
    WR - A1
    RD - A0
    RESET - A4 или RESET ардуинки
    D0 - 8
    D1 - 9
    D2 - 2
    D3 - 3
    D4 - 4
    D5 - 5
    D6 - 6
    D7 - 7
    Собственно первые 5 сигналов можно цеплять по своему усмотрению, только указать в строке скетчя правильно: UTFT myGLCD(TFT28UNO, A2, A1, A3, A4, A0);
    Вот код, который прогоняет весь тест.
    В файле UTFT.cpp после строк
    UTFT::UTFT(){}

    UTFT::UTFT(byte model, int RS, int WR, int CS, int RST, int SER){
    в таблице надо для экрана TFT28UNO поставить разрешение 127х127 и следующую троку поставить 8.
    В файле tft_drivers\ili9341\uno\std/initlcd.h в строках
    LCD_Write_COM(0x36); //MX, MY, RGB mode
    LCD_Write_DATA(0x48);
    поменял 48 на А8. Это устанавливается направление надписей на экране.

    Вот код, который прогоняет весь тест.
    Код (C++):

    #include <UTFT.h>

    // Declare which fonts we will be using
    extern uint8_t SmallFont[];

    // Declare an instance of the class
    UTFT myGLCD(TFT28UNO, A2, A1, A3, A4, A0);   // Remember to change the model parameter to suit your display module!

    void setup()
    {
      randomSeed(analogRead(0));

    // Setup the LCD
      myGLCD.InitLCD(PORTRAIT);
      myGLCD.setFont(SmallFont);
    }

    void loop()
    {
      byte buf[126];
      int x, x2;
      int y, y2;
      int r;

    // Clear the screen and draw the frame
      myGLCD.clrScr();
      myGLCD.setContrast(64);

      myGLCD.setColor(255, 0, 0);
      myGLCD.fillRect(0,0,127,12);
      myGLCD.setColor(64, 64, 64);
      myGLCD.fillRect(0,117,127,127);
      myGLCD.setColor(255, 255, 255);
      myGLCD.setBackColor(255,0,0);
      myGLCD.print("Universal TFT", CENTER, 0);
      myGLCD.setBackColor(64,64,64);
      myGLCD.setColor(255,255,0);
      myGLCD.print("H.Karlsen", LEFT, 116);
      myGLCD.print("(C)2015", RIGHT, 116);
      myGLCD.setColor(0,255,0);
      myGLCD.drawRect(0,13,127,116);

    // Draw crosshairs
      myGLCD.setColor(0,0,255);
      myGLCD.drawLine(63,14,63,115);
      myGLCD.drawLine(1,63,126,63);
      for (int i=3; i<128; i+=10)
        myGLCD.drawLine(i, 61, i, 65);
      for (int i=14; i<118; i+=10)
        myGLCD.drawLine(61, i, 65, i);

    // Draw sin-, cos- and tan-lines
      myGLCD.setColor(0,255,255);
      myGLCD.setBackColor(0,0,0);
      myGLCD.print("Sin", 2, 14);
      for (int i=1; i<126; i++)
      {
        myGLCD.drawPixel(i,63+(sin(((i*2.85)*3.14)/180)*45));
      }

      myGLCD.setColor(255,0,0);
      myGLCD.print("Cos", 2, 26);
      for (int i=1; i<126; i++)
      {
        myGLCD.drawPixel(i,63+(cos(((i*2.85)*3.14)/180)*45));
      }

      myGLCD.setColor(255,255,0);
      myGLCD.print("Tan", 2, 38);
      for (int i=1; i<126; i++)
      {
        myGLCD.drawPixel(i,63+(tan(((i*2.85)*3.14)/180)));
      }

      delay(2000);

      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,14,126,115);
      myGLCD.setColor(0,0,255);
      myGLCD.drawLine(63,14,63,115);
      myGLCD.drawLine(1,63,126,63);

    // Draw a moving sinewave
      x=1;
      for (int i=1; i<3654; i++)
      {
        x++;
        if (x==127)
          x=1;
        if (i>127)
        {
          if ((x==63)||(buf[x-1]==63))
            myGLCD.setColor(0,0,255);
          else
            myGLCD.setColor(0,0,0);
          myGLCD.drawPixel(x,buf[x-1]);
        }
        myGLCD.setColor(0,255,255);
        y=63+(sin(((i*1.3)*3.14)/180)*45);
        myGLCD.drawPixel(x,y);
        buf[x-1]=y;
    //    delay(3);
      }

      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,14,126,115);

    // Draw some filled rectangles
      for (int i=1; i<6; i++)
      {
        switch (i)
        {
          case 1:
            myGLCD.setColor(255,0,255);
            break;
          case 2:
            myGLCD.setColor(255,0,0);
            break;
          case 3:
            myGLCD.setColor(0,255,0);
            break;
          case 4:
            myGLCD.setColor(0,0,255);
            break;
          case 5:
            myGLCD.setColor(255,255,0);
            break;
        }
        myGLCD.fillRect(10+(i*10),10+(i*10), 60+(i*10), 60+(i*10));
      }

      delay(2000);

      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,14,126,115);

    // Draw some filled, rounded rectangles
      for (int i=1; i<6; i++)
      {
        switch (i)
        {
          case 1:
            myGLCD.setColor(255,0,255);
            break;
          case 2:
            myGLCD.setColor(255,0,0);
            break;
          case 3:
            myGLCD.setColor(0,255,0);
            break;
          case 4:
            myGLCD.setColor(0,0,255);
            break;
          case 5:
            myGLCD.setColor(255,255,0);
            break;
        }
        myGLCD.fillRoundRect(70-(i*10),10+(i*10), 120-(i*10), 60+(i*10));
      }

      delay(2000);

      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,14,126,115);

    // Draw some filled circles
      for (int i=1; i<6; i++)
      {
        switch (i)
        {
          case 1:
            myGLCD.setColor(255,0,255);
            break;
          case 2:
            myGLCD.setColor(255,0,0);
            break;
          case 3:
            myGLCD.setColor(0,255,0);
            break;
          case 4:
            myGLCD.setColor(0,0,255);
            break;
          case 5:
            myGLCD.setColor(255,255,0);
            break;
        }
        myGLCD.fillCircle(30+(i*10),35+(i*10), 25);
      }

      delay(2000);

      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,14,126,115);

      // Draw some lines in a pattern
      myGLCD.setColor (255,0,0);
      for (int i=11; i<115; i+=3)
      {
        myGLCD.drawLine(1, i, i-10, 115);
      }
      myGLCD.setColor (255,0,0);
      for (int i=112; i>14; i-=3)
      {
        myGLCD.drawLine(126, i, i+14, 14);
      }
      myGLCD.setColor (0,255,255);
      for (int i=115; i>14; i-=3)
      {
        myGLCD.drawLine(1, i, 116-i, 14);
      }
      myGLCD.setColor (0,255,255);
      for (int i=14; i<115; i+=3)
      {
        myGLCD.drawLine(126, i, 140-i, 115);
      }

      delay(2000);

      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,14,126,115);

    // Draw some random circles
      for (int i=0; i<100; i++)
      {
        myGLCD.setColor(random(255), random(255), random(255));
        x=22+random(85);
        y=35+random(59);
        r=random(20);
        myGLCD.drawCircle(x, y, r);
      }

      delay(2000);

      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,14,126,115);

    // Draw some random rectangles
      for (int i=0; i<100; i++)
      {
        myGLCD.setColor(random(255), random(255), random(255));
        x=2+random(124);
        y=15+random(101);
        x2=2+random(124);
        y2=15+random(101);
        myGLCD.drawRect(x, y, x2, y2);
      }

      delay(2000);

      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,14,126,115);

    // Draw some random rounded rectangles
      for (int i=0; i<100; i++)
      {
        myGLCD.setColor(random(255), random(255), random(255));
        x=2+random(124);
        y=15+random(101);
        x2=2+random(124);
        y2=15+random(101);
        myGLCD.drawRoundRect(x, y, x2, y2);
      }

      delay(2000);

      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,14,126,115);

    // Draw some random lines
      for (int i=0; i<100; i++)
      {
        myGLCD.setColor(random(255), random(255), random(255));
        x=2+random(124);
        y=15+random(101);
        x2=2+random(124);
        y2=15+random(101);
        myGLCD.drawLine(x, y, x2, y2);
      }

      delay(2000);

      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,14,126,115);

    // Draw some random pixels
      for (int i=0; i<5000; i++)
      {
        myGLCD.setColor(random(255), random(255), random(255));
        myGLCD.drawPixel(2+random(124), 15+random(101));
      }

      delay (2000);

    // Set up the "Finished"-screen
      myGLCD.setContrast(0);
      myGLCD.fillScr(0,0,255);
      myGLCD.setColor(255,0,0);
      myGLCD.fillRoundRect(2, 40, 125, 88);

      myGLCD.setColor(255,255,255);
      myGLCD.setBackColor(255,0,0);
      myGLCD.print("That's it!", CENTER, 46);
      myGLCD.print("Restarting in a", CENTER, 66);
      myGLCD.print("few seconds...", CENTER, 76);

      myGLCD.setColor(0,0,0);
      myGLCD.setBackColor(0,0,255);
      myGLCD.print("Runtime: (msecs)", CENTER, 108);
      myGLCD.printNumI(millis(), CENTER, 118);

      myGLCD.setContrast(64);

      delay (10000);

    // Fade screen to black
      for (int i=64; i>0; i--)
      {
        myGLCD.setContrast(i);
        delay(100);
      }
    }
    Но хочу сказать, что не доконца я докопался. Все какое-то ну очень блеклое.
     
    Последнее редактирование: 16 апр 2020
    ZAZ-965 нравится это.
  16. Delphin911

    Delphin911 Нерд

    Народ, подскажите как писать в коде RESET контакт ардуино? Вот есть там функция обозначения модели экрана (или чипа)
    Код (C++):
    UTFT myGLCD(TFT28UNO, A2, A1, A3, A4, A0);
    Так вот 5 параметр в инструкции это RESET. Типа его можно посадить на любой свободный контакт Ардуинки или на RESET Ардуинки. Но как в функции указать, что я на RESET сажаю?
    Да, кстати один знающий товарищ в другом форуме написал правильную цветовую кодировку (ну более правильную). Вот этим кодом надо заменить код в файле /tft_drivers/ILI9163
    Код (C++):
        LCD_Write_COM(0x11);//Sleep exit
        delay(120);
        LCD_Write_COM(0x26);  //Set Default Gamma
        LCD_Write_DATA(0x04);
        LCD_Write_COM(0xB1);
        LCD_Write_DATA(0x08);//10
        LCD_Write_DATA(0x08);//08
        LCD_Write_COM(0xC0);  //Set VRH1[4:0] & VC[2:0] for VCI1 & GVDD
        LCD_Write_DATA(0x0A);
        LCD_Write_DATA(0x02);
        LCD_Write_COM(0xC1);  //Set BT[2:0] for AVDD & VCL & VGH & VGL
        LCD_Write_DATA(0x02);
        LCD_Write_COM(0xC5);  //Set VMH[6:0] & VML[6:0] for VOMH & VCOML
        LCD_Write_DATA(0x50);
        LCD_Write_DATA(0x5B);
        LCD_Write_COM(0xC7);
        LCD_Write_DATA(0x40);     //offset=0//C0
        LCD_Write_COM(0x3A);  //Set Color Format
        LCD_Write_DATA(0x05);
        LCD_Write_COM(0x2A);  //Set Column Address
        LCD_Write_DATA(0x00);
        LCD_Write_DATA(0x00);
        LCD_Write_DATA(0x00);
        LCD_Write_DATA(0x7F);
        LCD_Write_COM(0x2B);  //Set Page Address
        LCD_Write_DATA(0x00);
        LCD_Write_DATA(0x00);
        LCD_Write_DATA(0x00);
        LCD_Write_DATA(0x7F);
        LCD_Write_COM(0xB4);  //frame inversion
        LCD_Write_DATA(0x07);
        LCD_Write_COM(0x36);  //Set Scanning Direction
        LCD_Write_DATA(0xC8);
        LCD_Write_COM(0xF2);  //Enable Gamma bit
        LCD_Write_DATA(0x01);
        LCD_Write_COM(0xE0);
        LCD_Write_DATA(0x3F);//p1          // xx VP63[5:0]             //       //
        LCD_Write_DATA(0x25);//p2          // xx VP62[5:0]             //       //
        LCD_Write_DATA(0x1C);//p3         // xx VP61[5:0]             //       //
        LCD_Write_DATA(0x1E);//p4          // xx VP59[5:0]             //       //
        LCD_Write_DATA(0x20);//p5          // xx VP57[5:0]             //       //
        LCD_Write_DATA(0x12);//p6         // xxx VP50[4:0]  //       //
        LCD_Write_DATA(0x2A);//p7          // x VP43[6:0]              //       //
        LCD_Write_DATA(0x90);//p8          // VP36[3:0] VP27[3:0]        //       //
        LCD_Write_DATA(0x24);//p9          // x VP20[6:0]              //       //
        LCD_Write_DATA(0x11);//p10       // xxx VP13[4:0]  //       //
        LCD_Write_DATA(0x00);//p11       // xx VP6[5:0]               //       //
        LCD_Write_DATA(0x00);//p12       // xx VP4[5:0]               //       //
        LCD_Write_DATA(0x00);//p13       // xx VP2[5:0]               //       //
        LCD_Write_DATA(0x00);//p14       // xx VP1[5:0]               //       //
        LCD_Write_DATA(0x00);//p15       // xx VP0[5:0]               //       //
        LCD_Write_COM(0xE1);  
        LCD_Write_DATA(0x20);//p1          // xx VN0[5:0]               //       //
        LCD_Write_DATA(0x20);//p2         // xx VN1[5:0]               //       //
        LCD_Write_DATA(0x20);//p3          // xx VN2[5:0]               //       //
        LCD_Write_DATA(0x20);//p4          // xx VN4[5:0]              //       //
        LCD_Write_DATA(0x05);//p5          // xx VN6[5:0]               //       //
        LCD_Write_DATA(0x00);//p6          // xxx VN13[4:0] //       //
        LCD_Write_DATA(0x15);//p7          // x VN20[6:0]              //       //
        LCD_Write_DATA(0xA7);//p8          // VN36[3:0] VN27[3:0]       //       //
        LCD_Write_DATA(0x3D);//p9         // x VN43[6:0]              //       //
        LCD_Write_DATA(0x18);//p10       // xxx VN50[4:0] //       //
        LCD_Write_DATA(0x25);//p11       // xx VN57[5:0]            //       //
        LCD_Write_DATA(0x2A);//p12       // xx VN59[5:0]            //       //
        LCD_Write_DATA(0x2B);//p13       // xx VN61[5:0]            //       //
        LCD_Write_DATA(0x2B);//p14       // xx VN62[5:0]            //       //    
        LCD_Write_DATA(0x3A);//p15         // xx VN63[5:0]            //       /
        LCD_Write_COM(0x29);//Display on
        break;
     
  17. parovoZZ

    parovoZZ Гуру

    Reset - это вход. Если его сделать выходом, он перестанет быть reset-ом. Да и прошить потом МК без HV программатора будет невозможно.
     
  18. Delphin911

    Delphin911 Нерд

    Меня ввело в заблуждение, что в описании написано, что RESET экрана можно посадить на RESET ардуино.

    #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
    Вот так пишется.
     
  19. parovoZZ

    parovoZZ Гуру

    Читать надо даташиты, а не коряво переведённые описания.
     
  20. Delphin911

    Delphin911 Нерд

    Вы чуть раньше успели.
    #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
    Вот так везде написано.