Forum Rule: Always post complete source code & details to reproduce any issue!
Page 8 of 9 FirstFirst ... 6 7 8 9 LastLast
Results 176 to 200 of 214

Thread: RA8875 from Buydisplay

  1. #176
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    4,205
    @KurtE - @defragster - @pd0lew

    Just downloaded your updated library. Testing on my Adafruit 5" display (800x480). It works better but when I go from corner to corner it draws starting from opposite corner in all rotations.

    Code:
    Pen at 0, 0 with rotation 0 gives:
    TX: 766 TY: 479

    Sorry for delay but was playing with the BNO055.

  2. #177
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,549
    Hi @mjs513, what is the values of your calibration settings:
    Mine are:
    Code:
    #define TOUCSRCAL_XLOW  80
    #define TOUCSRCAL_YLOW  149
    #define TOUCSRCAL_XHIGH 915
    #define TOUCSRCAL_YHIGH 893
    I should probably verify that I set the right values when using something like: tft.setTouchCalibrationData(40,996,68,890);

    Is this the Adafruit one? I should test on mine...
    It may turn out that their touch screen is connected the opposite direction and you need to instead use values like:
    Code:
    tft.setTouchCalibrationData(996, 40,890, 68);
    That the Min value is > Max value...

    If so I probably need an update to say calibrated...

    That is in the function set touch calibration, I have:
    Code:
    	_calibrated = ((minX >= maxX) || (minY >= maxY)) ? false : true;
    Maybe should be something simple like:
    Code:
    	_calibrated = ((minX || maxX) && (minY || maxY));

  3. #178
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    4,205
    @KurtE

    Yes - this is with the Adafruit RA8875.

    I used the following cal in the header:
    Code:
    #define TOUCSRCAL_XLOW  40
    #define TOUCSRCAL_XHIGH 996
    #define TOUCSRCAL_YLOW  68
    #define TOUCSRCAL_YHIGH 890
    Didn't use the settouchCalibration. I also used your values and it did the same thing. I also reversed the min/max values which made it worse.

    Update: just tried it with setTouchCalibration and it showed the same behavior. Also tested with the min/max values reversed.

  4. #179
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,549
    Aargh:

    I turned on the T4 with the adafruit one 480x272... And tried doing a calibration and I am seeing Strange values....
    I mucked up the calibrate sketch to print out more data and to allow me to run it on one that has calibration data...
    Code:
    /* Simply Touch screen library calibration V2:
      this will help you to calibrate your touch screen by modify
      4 parameters inside RA8875/_utility/RA8875Calibration.h file:
      TOUCSRCAL_XLOW  //min value of x you can get
      TOUCSRCAL_XHIGH  //max value of x you can get
      TOUCSRCAL_YLOW //min value of y you can get
      TOUCSRCAL_YHIGH  //max value of y you can get
      Normally those parameters are set as 0.
      Only for RESISTIVE TOUCH SCREEN!
      It's not a bullet-proof scientist alghorithm but calibrate
      using this method will be fast and enough accurate for basic
      touch screen operations like buttons, etc. If you need more
      precision and you don't want waste resources consider a capacitive touch!
      Now run this program and open Serial Monitor or follow screen instrunctions.
      Works with Arduino 1.0.6 IDE, Arduino 1.6.x IDE
    */
    #include <SPI.h>
    #include <RA8875.h>
    
    /*
      Arduino's
      You are using 4 wire SPI here, so:
      MOSI:  11//DUE refere to arduino site
      MISO:  12//DUE refere to arduino site
      SCK:   13//DUE refere to arduino site
      the rest of pin below:
    */
    
    #define RA8875_INT 3 //any pin
    #define RA8875_CS 10 //see below...
    /* DUE: should be any but not sure */
    #define RA8875_RESET 9//any pin or nothing!
    
    RA8875 tft = RA8875(RA8875_CS, RA8875_RESET); //arduino's
    
    
    const uint8_t samples = 20;
    uint16_t tempData[samples][2];
    volatile int count = 0;
    uint16_t tx, ty;//used as temp
    uint16_t _XLOW_VAR;
    uint16_t _YLOW_VAR;
    uint16_t _XHIGH_VAR;
    uint16_t _YHIGH_VAR;
    bool proceed;
    int scount = 0;
    
    #if !defined(USE_RA8875_TOUCH) || defined(_AVOID_TOUCHSCREEN)
    #error "you need to enable resistive touchscreen by uncommenting USE_RA8875_TOUCH in settings!"
    #endif
    
    void setup() {
      Serial.begin(38400);
      long unsigned debug_start = millis ();
      while (!Serial && ((millis () - debug_start) <= 5000)) ;
      //  begin display: Choose from: RA8875_480x272, RA8875_800x480, RA8875_800x480ALT, Adafruit_480x272, Adafruit_800x480
      tft.begin(Adafruit_480x272, 16, 12000000);//initialize RA8875
      /* Adafruit_480x272 Adafruit_800x480 RA8875_480x272 RA8875_800x480 */
      tft.useINT(RA8875_INT);//We use generic int helper for Internal Resistive Touch
      tft.touchBegin();//enable touch support for RA8875
      if (tft.touchCalibrated()) {//already calibrated?
        if (tft.width() > 480)  tft.setFontScale(1);
        Serial.println("You have old calibration data present!\n");
        Serial.println("Will temporarliy clear it!\n");
        tft.setTouchCalibrationData(0,0,0,0);
        tft.setCursor(0, 0);
        tft.setTextColor(RA8875_RED);
        tft.println("---> You have old calibration data present! <---");
        tft.setTextColor(RA8875_WHITE);
        tft.println("Will temporarily remove it\n");
    
      }
      Serial.println("Start calibration, please follow indications...\n");
      Serial.println("\nPlease press FIRMLY the TOP/LEFT angle of your screen now!\n");
      if (tft.width() > 480)  tft.setFontScale(1);
      tft.setCursor(CENTER, CENTER);
      tft.setTextColor(RA8875_WHITE);
      tft.print("Please press the TOP/LEFT angle now!");
      tft.fillCircle(5, 5, 5, RA8875_RED);
      proceed = true;
      //this enable an ISR on CPU and RA8875 INT
      tft.enableISR(true);
      //You can avoid ISR by simple ignore the line above
      //it will use the slower digitalRead(pin) alternative internally
    }
    
    void loop() {
      if (proceed) {
        if (tft.touched()) {
          if (count >= samples) {
            tft.touchEnable(false);
            count = 0;//reset counts
            uint32_t valx = 0;
            uint32_t valy = 0;
    
            if (scount < 1) {
              for (uint8_t i = 0; i < samples; i++) {
                valx += tempData[i][0];
                valy += tempData[i][1];
              }
              valx = valx / samples;
              valy = valy / samples;
              tft.fillWindow();
              if (tft.width() > 480)  tft.setFontScale(1);
              tft.setCursor(CENTER, CENTER);
              tft.setTextColor(RA8875_WHITE);
              tft.println("Top/Left done. Please do not touch screen...");
              tft.setTextColor(RA8875_RED);
              tft.setFontScale(1);
              tft.print("Please do not touch screen!");
              tft.setFontScale(0);
              Serial.print("Top/Left done...");
              Serial.print("Please do not touch screen...");
              _XLOW_VAR = valx;
              _YLOW_VAR = valy;
              delay(3000);
              tft.fillWindow();
              tft.fillCircle(tft.width() - 5, tft.height() - 5, 5, RA8875_RED);
              if (tft.width() > 480)  tft.setFontScale(1);
              tft.setCursor(CENTER, CENTER);
              tft.setTextColor(RA8875_WHITE);
              tft.print("ok, Now Touch Bottom/Right angle!");
              Serial.println("\n...done, Now Touch Bottom/Right angle!");
              delay(2000);
              tft.touchEnable(true);
              scount++;
            } else if (scount >= 1) {
              for (uint8_t i = 0; i < samples; i++) {
                valx += tempData[i][0];
                valy += tempData[i][1];
              }
              valx = valx / samples;
              valy = valy / samples;
              tft.fillWindow();
              tft.setCursor(0, 20);
              tft.setTextColor(RA8875_WHITE);
              tft.println("Calibration done...watch results!");
              Serial.println("\nCalibration done...watch results");
              _XHIGH_VAR = valx;
              _YHIGH_VAR = valy;
              tft.println("Now open file:");
              tft.setTextColor(RA8875_YELLOW);
              tft.println("RA8875/_utility/RA8875Calibration.h");
              tft.setTextColor(RA8875_WHITE);
              Serial.println("\nNow open file RA8875/_utility/RA8875Calibration.h\n");
              Serial.println("Change the following:\n");
              tft.println("Change the following:");
              tft.println(" ");
              tft.setTextColor(RA8875_GREEN);
              tft.print("#define TOUCSRCAL_XLOW   ");
              tft.setTextColor(RA8875_YELLOW);
              tft.println(_XLOW_VAR, DEC);
              tft.setTextColor(RA8875_GREEN);
              tft.print("#define TOUCSRCAL_YLOW   ");
              tft.setTextColor(RA8875_YELLOW);
              tft.println(_YLOW_VAR, DEC);
              tft.setTextColor(RA8875_GREEN);
              tft.print("#define TOUCSRCAL_XHIGH  ");
              tft.setTextColor(RA8875_YELLOW);
              tft.println(_XHIGH_VAR, DEC);
              tft.setTextColor(RA8875_GREEN);
              tft.print("#define TOUCSRCAL_YHIGH  ");
              tft.setTextColor(RA8875_YELLOW);
              tft.println(_YHIGH_VAR, DEC);
              tft.setTextColor(RA8875_WHITE);
              tft.println(" ");
              tft.println("...then save file and you are calibrated!");
              Serial.println("#define TOUCSRCAL_XLOW  0");
              Serial.println("#define TOUCSRCAL_YLOW  0");
              Serial.println("#define TOUCSRCAL_XHIGH 0");
              Serial.println("#define TOUCSRCAL_YHIGH 0");
              Serial.println("\nInto:\n");
              Serial.print("#define TOUCSRCAL_XLOW  ");
              Serial.println(_XLOW_VAR, DEC);
              Serial.print("#define TOUCSRCAL_YLOW  ");
              Serial.println(_YLOW_VAR, DEC);
              Serial.print("#define TOUCSRCAL_XHIGH ");
              Serial.println(_XHIGH_VAR, DEC);
              Serial.print("#define TOUCSRCAL_YHIGH ");
              Serial.println(_YHIGH_VAR, DEC);
              Serial.println("\nSave and Have a nice day!");
              proceed = false;
              tft.touchEnable(false);
            }
          } else {//continue get samples
            delay(1);
            tft.touchReadAdc(&tx, &ty);//we using 10bit adc data here
            if (count >= 0) {
              tempData[count][0] = tx;
              tempData[count][1] = ty;
              Serial.printf("count: %d x:%u y:%u\n", count, tx, ty);
            }
            count++;
          }
        }
      }//proceed
    }
    And I am getting weird values...
    Code:
    You have old calibration data present!
    
    Will temporarliy clear it!
    
    Start calibration, please follow indications...
    
    
    Please press FIRMLY the TOP/LEFT angle of your screen now!
    
    count: 0 x:1036 y:975
    count: 1 x:1043 y:978
    count: 2 x:1038 y:974
    count: 3 x:1042 y:974
    count: 4 x:1037 y:1069
    count: 5 x:1041 y:982
    count: 6 x:1043 y:864
    count: 7 x:1038 y:979
    count: 8 x:1044 y:985
    count: 9 x:1041 y:982
    count: 10 x:1043 y:978
    count: 11 x:1037 y:1079
    count: 12 x:1036 y:982
    count: 13 x:1037 y:902
    count: 14 x:1038 y:985
    count: 15 x:1039 y:981
    count: 16 x:1041 y:985
    count: 17 x:1039 y:984
    count: 18 x:1043 y:1036
    count: 19 x:1037 y:985
    Top/Left done...Please do not touch screen...
    ...done, Now Touch Bottom/Right angle!
    count: 0 x:3 y:65527
    count: 1 x:7 y:65527
    count: 2 x:0 y:65531
    count: 3 x:3 y:65530
    count: 4 x:4 y:65534
    count: 5 x:4 y:0
    count: 6 x:0 y:65524
    count: 7 x:8 y:65524
    count: 8 x:4 y:65531
    count: 9 x:7 y:65524
    count: 10 x:11 y:65532
    count: 11 x:3 y:65521
    count: 12 x:6 y:65528
    count: 13 x:8 y:65531
    count: 14 x:7 y:65530
    count: 15 x:7 y:65527
    count: 16 x:11 y:65528
    count: 17 x:6 y:65528
    count: 18 x:8 y:13
    count: 19 x:4 y:65524
    
    Calibration done...watch results
    
    Now open file RA8875/_utility/RA8875Calibration.h
    
    Change the following:
    
    #define TOUCSRCAL_XLOW  0
    #define TOUCSRCAL_YLOW  0
    #define TOUCSRCAL_XHIGH 0
    #define TOUCSRCAL_YHIGH 0
    
    Into:
    
    #define TOUCSRCAL_XLOW  1039
    #define TOUCSRCAL_YLOW  982
    #define TOUCSRCAL_XHIGH 5
    #define TOUCSRCAL_YHIGH 58975
    
    Save and Have a nice day!
    I am guessing I need to update a couple more places including what I mentioned about allowing min > max

    instead of calling it min and max, it should probably be called something like TOUCHCAL_UL_X TOUCHCAL_UL_Y TOUCHCAL_LR_X TOUCHCAL_LR_Y
    or the like, but don't know if I wish to muck up everything...

    So will let you know when I have something that works on this one... Hopefully it does not require changing other stuff like the clocks...
    Last edited by KurtE; 09-08-2019 at 05:44 PM. Reason: Fixed app to actuall call the setTouchCal...

  5. #180
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,549
    @mjs513 - I now have it working on my Adafruit...

    Pushed up changes, that properly clear out the calibration data when you are asking for ADC value and not point when there is calibration data.
    Also allows MIN > MAX for calibration.

    So ran the calibration stuff on Adafruit display, left the Buydisplay values in header file.
    It printed out new values to be used, that was: tft.setTouchCalibrationData(946, 77, 880, 130);

    So added that to my touch test program, and all 4 directions appeared to draw properly...

  6. #181
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    4,205
    @KurtE

    Put my calibration values in the header (min > max) and it works perfectly in all 4 rotations. So I think you broke the code. Assuming it still works on the BuyDisplay?

  7. #182
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    4,205
    @KurtE

    Think we got one more problem to solve - not with touch though. Just tried the easyPaint sketch real quick. It did work (at least the touch did once I remember to fix the constructor) with the except that the colors are messed up. No red's no whites not magenta - there is cyan, green, blue....

  8. #183
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,549
    I assume your constructor has the Adafruit with the right settings...

    You might also try with Adafruit library and sketch to see if your display is working?

    Here is mine running updated, for my display
    Code:
    void setup() 
    {
      Serial.begin(9600);
      //while (!Serial) {;}
      Serial.println("RA8875 start");
    
      //  begin display: Choose from: RA8875_480x272, RA8875_800x480, RA8875_800x480ALT, Adafruit_480x272, Adafruit_800x480
      tft.begin(Adafruit_480x272, 16, 12000000);//initialize library
      tft.setTouchCalibrationData(946, 77, 880, 130);
      tft.useINT(RA8875_INT);//We use generic int helper for Internal Resistive Touch
      tft.touchBegin();//enable Touch support!
    And
    Click image for larger version. 

Name:	IMG_0871.jpg 
Views:	6 
Size:	135.1 KB 
ID:	17537

    Got to run

  9. #184
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    4,205
    @KurtE

    Solved - ribbon cable not locked on one side. Fixed it and displays fine now.

  10. #185
    Senior Member
    Join Date
    Nov 2017
    Location
    Belgium
    Posts
    136
    Quote Originally Posted by KurtE View Post
    Hi @mjs513 and @neurofun - As a test you might try changing SPI.cpp

    To see if maybe the settings that I am experimenting with make a difference... About line 1284

    // uint32_t fastio = IOMUXC_PAD_SRE | IOMUXC_PAD_DSE(3) | IOMUXC_PAD_SPEED(3);
    uint32_t fastio = IOMUXC_PAD_DSE(6) | IOMUXC_PAD_SPEED(1);
    @KurtE
    Just want to confirm that this indeed makes a difference.
    My initial test had the 4.3" display plugged straight in my T4 protoboard and it worked without these settings.
    After adding a 20cm(8") long flat cable the display stopped working.
    Now with these settings the display works again.
    I was even able to push SPI speed up to 25.1MHz. At 25.2MHz it stopped working.

  11. #186
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,549
    FYI - Put in PR to SPI yesterday with this change and it has been merged

  12. #187
    Senior Member
    Join Date
    Nov 2017
    Location
    Belgium
    Posts
    136
    @mjs513
    The 5th touch point coordinates for the FT5206 are wrong.
    Fixed it and send you a pull request.

  13. #188
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    4,205
    @KurtE - @neurofun

    Just merged the both pull requests into the t4 branch.

  14. #189
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,549
    @mjs513 and @neurofun and ...

    Good someone tested some of the capacitive touch stuff. I probably won't be doing that for awhile... Yesterday I was going to look at some of it, including adding similar support for multiple displays with touch, when I must have hooked up something wrong..

    Actually I was hooking it up to use power supply from other board with DC/DC converter, and then saw the magic smoke

    Got it unplugged reasonably quickly (burning thumb which hit a very hot capacitor and some of it stuck to thumb)...

    Click image for larger version. 

Name:	IMG_0134-(002).jpg 
Views:	15 
Size:	43.3 KB 
ID:	17549

    Red arrow shows the CAP that obviously fried, marked C26. Not sure what else might have fried or full cause. Maybe GND from main board lost contact....?
    I will have to decide at some point if I want to order another one to enhance the touch stuff or not....

    Kurt

  15. #190
    Senior Member
    Join Date
    Nov 2017
    Location
    Belgium
    Posts
    136
    @KurtE
    Ouch, it looks you might have powered your display with the wrong polarity. C26 is part of the backlight driver circuit and is connected between GND and the 3.3V rail. Electrolytic capacitors don't like reverse polarity.
    If you are willing to try a repair I can help you troubleshooting. Or if you live in europe, you could send it to me and I will look at it free of charge. And If you plan to trash it, trash it in my direction, will pay for shipping.
    I always like a good repair challenge.

    Concerning the capacitive touch stuff. The 5 point touch coordinates work in all 4 orientations. The gesture id's(up, down, left, right) are only relative to setRotation(3). Don't know if this needs fixing, it's probably used for swiping.

  16. #191
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,549
    Thanks @neurofun, I might try to fix so any suggestions would be great. Wonder what is needed for that Cap. I may have some around that would be sufficient. Would also need to make sure I know what the proper orientation ... Any other suggestions before I try to desolder it and try putting on a different one?

    I also put a message to BuyDisplay through Ebay - asking for advice. Who knows maybe they will take pity on me as I am mainly only doing this to support the Teensy and our doing it is probably helping them sell some more of their displays...

  17. #192
    Senior Member
    Join Date
    Nov 2017
    Location
    Belgium
    Posts
    136
    @KurtE
    First you need to carefully desolder the cap and remove burned residues from the pcb with some solvent, I usually use isopropyl alcohol.
    Then next thing to do is to measure for continuity between GND and 3.3V, between GND and 5V, between 5V and 3.3V.
    If there is a short, something else is fried too.
    If no shorts, you can replace the cap. Power the board and measure if you have 3.3V.

  18. #193
    Senior Member
    Join Date
    Nov 2017
    Location
    Belgium
    Posts
    136
    @KurtE
    rectification:
    The cap is a 10uF 16V tantalium capacitor. It is connected between 5V and GND, the led driver circuit is powered by the 5V rail.
    orientation:
    with your pic as reference, the stripe(+) on the cap is facing to the right.

  19. #194
    Senior Member
    Join Date
    Nov 2017
    Location
    Belgium
    Posts
    136
    @mjs513
    I changed getGesture() to track the screen rotation and also made a new example sketch. It demonstrates swiping and pinching. Screen can be rotated by touching it with 3 fingers.
    PR send.
    https://github.com/mjs513/RA8875/pull/4/files

  20. #195
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    4,205
    @nerofun - merge complete

  21. #196
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,549
    Quote Originally Posted by neurofun View Post
    @KurtE
    rectification:
    The cap is a 10uF 16V tantalium capacitor. It is connected between 5V and GND, the led driver circuit is powered by the 5V rail.
    orientation:
    with your pic as reference, the stripe(+) on the cap is facing to the right.
    Thanks, I might be getting lucky (maybe not)

    But I was able to remove the cap (in pieces). cleaned area with isopropyl alcohol, tested resistances, no dead shorts... So found I had some CAP TANT 10uf 16v 10% 1210 caps, also verified location orientation looks like my other displays. Soldered on. Got brave hooked up to Power supply of T3.2 with DC/DC converter. No smoke... checked jumper area that would be closed if 3.3v setup (J8) and have 3.3v... next up maybe hook up rest of display, to same T3.2... Not much of loss if it does not work...

    EDIT: But so far nothing outputs... So not much luck so far...
    Last edited by KurtE; 09-11-2019 at 09:06 PM.

  22. #197
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,549
    Update: I think some of the display is working and some not so much.

    That is if I run the Adafruit library at buildtest program, I will see the display startup some brightness and dim, and then see a red display that dims to black and then you see nothing.

    Likewise with the benchmark program I can add the call tft.backlight() and see the initial screen showing rotation 0.

    But it then dims out and don't see anything else... Wonder if one of the other components is not working?

  23. #198
    Senior Member+ mjs513's Avatar
    Join Date
    Jul 2014
    Location
    New York
    Posts
    4,205
    @KurtE

    So close to fixing the display. Maybe with changing the cap you need to play with turning the backlight on manually with the backlight pin.

  24. #199
    Senior Member
    Join Date
    Nov 2017
    Location
    Belgium
    Posts
    136
    @KurtE
    If you short J15 and open J16 and then connect pin15(BL_CONTROL) to 5V, the backlight turns on as soon as you power the display.
    If the backlight then shows the same behaviour when you power the display, it is very likely that the led driver U3 (part nr PT4110E89E) is toast and needs replacement.

  25. #200
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,549
    Thanks @nerofun - I am going to assume that chip is toast... Question is trying to find someone who sells it. So far no one like Mouser or Digikey sell them. Some of the places I found, want minimum of $100 orders, plus ship from china...

    Wonder if there are alternative chips. Will do a little more investigation.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •