Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 2 of 2

Thread: GSL1680 touch screen problems

  1. #1
    Senior Member
    Join Date
    Nov 2015
    Location
    Cold hollow VT
    Posts
    169

    GSL1680 touch screen problems

    I recently purchased a TFTM050A2 display form Buydisplay.com and am having problems getting the touch screen working. Just to be clear though the display part is functioning thanks to the examples in the IDE. I added the I2C scan bus example to my code and it finds the touch controller just fine. Since the touch screen example was not working, I turned on the debug bits in the touch chip initialization. My I2C is pulled up to 3.3v from the Teensy 3.5 via 4.7K-ohm resistors.

    Code:
    GSL1680: Start boot up sequence
    Toggle Wake
    Clear reg
    i2c write error: 3 0
    Reset chip
    i2c write error: 3 0
    i2c write error: 2 BC
    GSL1680: Load FW
    Reset chip 2
    i2c write error: 3 0
    i2c write error: 2 BC
    Startup Chip
    GSL1680: Boot up complete
    I do notice I'm getting some I2C errors and have tried this code at various I2C bus speed settings and Teensy CPU speed settings with no joy, usually the same errors shown above.

    I poked around and found that error codes decode into
    0: success
    1: data too long to fit in transmit buffer
    2: received NACK on transmit of address
    3: received NACK on transmit of data
    4: other error

    but I really don't know what causes them. The display is the only device on the I2C bus. Am I seeing these errors and wrongly assuming they are cause for alarm? Anyway the touch screen does not seem to be responding. I have seen this thread here https://forum.pjrc.com/threads/26256...r-with-Teensy3 .

    This is my code
    Code:
      //
      //  An example of the internal support for the capacitive touch screen
      //  that use FT5206.
      //  Using FT5206 instead resistive RA8875 one give more precision, don't need any calibration
      //  and you have max 5 concurrent touches plus gesture and more...
      //
      //
      //--------------------------------------------------------------------------------------------
      //                                    HISTORY
      //--------------------------------------------------------------------------------------------
      //  1   April   2020    Start with RA8875 -- FT5206 touch screen driver.
      //                      Discover touch screen is GSL1680F.
      //                      Add I2C scanner code from examples.
      //  2   April   2020    Change driver for display to GSL1680F
      //                      sileadinc.com is all chinese website.
      //                      https://linux-sunxi.org/GSL1680    has some info on this chip
      //                      I2C pulled to 3.3v via 4.7K resistors.
      //    https://forum.pjrc.com/threads/26256-Has-anyone-tried-running-the-GSL16880-capacitive-touchscreen-controller-with-Teensy3/page4
      //                      The default value for Wire.endTransmission() is TRUE (bus gets released) 
      //                        FALSE sends a restart message.
      //                      A status byte is returned:
      //                      0:success
      //                      1:data too long to fit in transmit buffer
      //                      2:received NACK on transmit of address
      //                      3:received NACK on transmit of data
      //                      4:other error 
      //  9   April   2020    display is functioning properly.   Cap touch is not.
      //
      //
      //
      //
      //
      //
    
    #include <SPI.h>
    #include <RA8875.h>
    #include <Wire.h>
    #include "GSL1680.h"
    #include "gslX680firmware.h"
    
    
      #define RA8875_CS         9     //  not connected
      #define RA8875_RESET      25                 
      #define RA8875_INT        12     //  not connected
      
      #define RA8875_MISO 8           //  miso on pin#8 (alt)
      #define RA8875_MOSI 11          //  mosi on pin#11
      #define RA8875_SCLK 14           //  sclk on pin #14 (alt)
      #define RA8875_WAIT 24
      #define RA8875_BL_PWM 29
      #define RA8875_CTP_INT 30
      #define RA8875_CTP_SDA 34
      #define RA8875_CTP_SCL 33
      #define RA8875_CTP_RST 31
    
      #define MAXTOUCHLIMIT     5//1...5
    
      //  ------------  I2C scanner variables
      byte I2Cerror, address;
      int nDevices;
      //  ------------
      int x=0;
      int y;
      //  ------------
    
      //  RA8875 tft = RA8875(RA8875_CS, RA8875_RESET);
      //or
      //  RA8875 tft = RA8875(RA8875_CS);//Teensy (not using rst pin)
      //or (for audio board)
      //  RA8875 tft = RA8875(RA8875_CS,RA8875_RESET,RA8875_MOSI,RA8875_SCLK);//Teensy using alternative SPI pin
      //or
        RA8875 tft = RA8875(RA8875_CS,RA8875_RESET,RA8875_MOSI,RA8875_SCLK,RA8875_MISO);//Teensy using alternative SPI pin + alt miso
    
      //  ------------
    
      #define error 1
      #define info 1
      #define WAKE 4              //  teensy wake pin     DON'T UNDERSTAND USE OF THESE PINS
      #define INTRPT 30           //  teensy interrupt pin
      //  GSL1680 TS = GSL1680();
        GSL1680 TS = GSL1680(error, info);      // An other constructor is available to enable some debug on serial
    
    //  --------------------------------------  SETUP
    void setup(){
      
      Serial.begin(9600);
      long unsigned debug_start = millis ();
      while (!Serial && ((millis () - debug_start) <= 5000)) ;
    
      pinMode(13, OUTPUT);
    
      pinMode(RA8875_RESET, OUTPUT);
      digitalWrite(RA8875_RESET, HIGH);
      pinMode(RA8875_CS, OUTPUT);
      digitalWrite(RA8875_CS, HIGH);
      pinMode(RA8875_WAIT, INPUT);
      pinMode(RA8875_INT, INPUT);
      pinMode(RA8875_CTP_RST, OUTPUT);
      digitalWrite(RA8875_CTP_RST, HIGH);     //  these pins may also be defined in the driver file
      pinMode(RA8875_CTP_INT, INPUT);         //  
      
      Wire.setSDA(RA8875_CTP_SDA);    //  use alternate I2c for touch screen
      Wire.setSCL(RA8875_CTP_SCL);
    
      SPI.setSCK(RA8875_SCLK);     //  use alternate SPI pins
      SPI.setMISO(RA8875_MISO);
      SPI.setMOSI(RA8875_MOSI);
    
      analogWrite(RA8875_BL_PWM,200);     //  0 is dark  256 is bright
      delay(100);
      
      //  begin display: Choose from: RA8875_480x272, RA8875_800x480, RA8875_800x480ALT, Adafruit_480x272, Adafruit_800x480
      tft.begin(RA8875_800x480);
      Serial.print("TFT: ");Serial.println(x);
      tft.fillWindow(RA8875_BLACK);
      tft.setTextColor(RA8875_WHITE,RA8875_BLACK);
      tft.setFontScale(1);      //font x1
      tft.setCursor(0, 0);
      tft.print("Hello World!0");
     
    
      Wire.setClock(100000);    //  100khz bus speed
      scanBus();                //  must scanbus BEFORE touch screen initialization
    
      TS.begin(RA8875_CTP_RST, RA8875_CTP_INT);
      
    
    
    }
    //  --------------------------------------  LOOP
    void loop(){
    
      delay(500);
      digitalWrite(13,!(digitalRead(13)));    //  blink LED
      
      readTS();
      
    }       //  end loop
    //  --------------------------------------  I2C scanner
    void scanBus() {
    
      Serial.println(F("Scanning..."));
    
      nDevices = 0;
      for (address = 1; address < 127; address++) {
        // The i2c_scanner uses the return value of
        // the Write.endTransmisstion to see if
        // a device did acknowledge to the address.
        Wire.beginTransmission(address);
        I2Cerror = Wire.endTransmission();
    
        if (I2Cerror == 0) {
          Serial.print(F("Device found at address 0x"));
          if (address < 16) {
            Serial.print("0");
          }
          Serial.print(address,HEX);
          Serial.print("  (");
          printKnownChips(address);
          Serial.println(")");
    
          nDevices++;
        } else if (I2Cerror==4) {
          Serial.print(F("Unknown error at address 0x"));
          if (address < 16) {
            Serial.print("0");
          }
          Serial.println(address,HEX);
        }
      }
      if (nDevices == 0) {
        Serial.println(F("No I2C devices found\n"));
      } else {
        Serial.println(F("done\n"));
      }
      delay(5000);           // wait 5 seconds for next scan
    }       //  end scanner
    
    //  --------------------------------------  I2C Chip Decoder
    void printKnownChips(byte address)
    {
      // Is this list missing part numbers for chips you use?
      // Please suggest additions here:
      // https://github.com/PaulStoffregen/Wire/issues/new
      switch (address) {
        case 0x00: Serial.print(F("AS3935")); break;
        case 0x01: Serial.print(F("AS3935")); break;
        case 0x02: Serial.print(F("AS3935")); break;
        case 0x03: Serial.print(F("AS3935")); break;
        case 0x0A: Serial.print(F("SGTL5000")); break; // MCLK required
        case 0x0B: Serial.print(F("SMBusBattery?")); break;
        case 0x0C: Serial.print(F("AK8963")); break;
        case 0x10: Serial.print(F("CS4272")); break;
        case 0x11: Serial.print(F("Si4713")); break;
        case 0x13: Serial.print(F("VCNL4000,AK4558")); break;
        case 0x18: Serial.print(F("LIS331DLH")); break;
        case 0x19: Serial.print(F("LSM303,LIS331DLH")); break;
        case 0x1A: Serial.print(F("WM8731")); break;
        case 0x1C: Serial.print(F("LIS3MDL")); break;
        case 0x1D: Serial.print(F("LSM303D,LSM9DS0,ADXL345,MMA7455L,LSM9DS1,LIS3DSH")); break;
        case 0x1E: Serial.print(F("LSM303D,HMC5883L,FXOS8700,LIS3DSH")); break;
        case 0x20: Serial.print(F("MCP23017,MCP23008,PCF8574,FXAS21002,SoilMoisture")); break;
        case 0x21: Serial.print(F("MCP23017,MCP23008,PCF8574")); break;
        case 0x22: Serial.print(F("MCP23017,MCP23008,PCF8574")); break;
        case 0x23: Serial.print(F("MCP23017,MCP23008,PCF8574")); break;
        case 0x24: Serial.print(F("MCP23017,MCP23008,PCF8574")); break;
        case 0x25: Serial.print(F("MCP23017,MCP23008,PCF8574")); break;
        case 0x26: Serial.print(F("MCP23017,MCP23008,PCF8574")); break;
        case 0x27: Serial.print(F("MCP23017,MCP23008,PCF8574,LCD16x2,DigoleDisplay")); break;
        case 0x28: Serial.print(F("BNO055,EM7180,CAP1188")); break;
        case 0x29: Serial.print(F("TSL2561,VL6180,TSL2561,TSL2591,BNO055,CAP1188")); break;
        case 0x2A: Serial.print(F("SGTL5000,CAP1188")); break;
        case 0x2B: Serial.print(F("CAP1188")); break;
        case 0x2C: Serial.print(F("MCP44XX ePot")); break;
        case 0x2D: Serial.print(F("MCP44XX ePot")); break;
        case 0x2E: Serial.print(F("MCP44XX ePot")); break;
        case 0x2F: Serial.print(F("MCP44XX ePot")); break;
        case 0x33: Serial.print(F("MAX11614,MAX11615")); break;
        case 0x34: Serial.print(F("MAX11612,MAX11613")); break;
        case 0x35: Serial.print(F("MAX11616,MAX11617")); break;
        case 0x38: Serial.print(F("RA8875,FT6206,MAX98390")); break;
        case 0x39: Serial.print(F("TSL2561, APDS9960")); break;
        case 0x3C: Serial.print(F("SSD1306,DigisparkOLED")); break;
        case 0x3D: Serial.print(F("SSD1306")); break;
        case 0x40: Serial.print(F("PCA9685,Si7021,MS8607, GSL1680F")); break;
        case 0x41: Serial.print(F("STMPE610,PCA9685")); break;
        case 0x42: Serial.print(F("PCA9685")); break;
        case 0x43: Serial.print(F("PCA9685")); break;
        case 0x44: Serial.print(F("PCA9685, SHT3X")); break;
        case 0x45: Serial.print(F("PCA9685, SHT3X")); break;
        case 0x46: Serial.print(F("PCA9685")); break;
        case 0x47: Serial.print(F("PCA9685")); break;
        case 0x48: Serial.print(F("ADS1115,PN532,TMP102,LM75,PCF8591")); break;
        case 0x49: Serial.print(F("ADS1115,TSL2561,PCF8591")); break;
        case 0x4A: Serial.print(F("ADS1115,Qwiic Keypad")); break;
        case 0x4B: Serial.print(F("ADS1115,TMP102,BNO080,Qwiic Keypad")); break;
        case 0x50: Serial.print(F("EEPROM,FRAM")); break;
        case 0x51: Serial.print(F("EEPROM")); break;
        case 0x52: Serial.print(F("Nunchuk,EEPROM")); break;
        case 0x53: Serial.print(F("ADXL345,EEPROM")); break;
        case 0x54: Serial.print(F("EEPROM")); break;
        case 0x55: Serial.print(F("EEPROM")); break;
        case 0x56: Serial.print(F("EEPROM")); break;
        case 0x57: Serial.print(F("EEPROM")); break;
        case 0x58: Serial.print(F("TPA2016,MAX21100")); break;
        case 0x5A: Serial.print(F("MPR121")); break;
        case 0x60: Serial.print(F("MPL3115,MCP4725,MCP4728,TEA5767,Si5351")); break;
        case 0x61: Serial.print(F("MCP4725,AtlasEzoDO")); break;
        case 0x62: Serial.print(F("LidarLite,MCP4725,AtlasEzoORP")); break;
        case 0x63: Serial.print(F("MCP4725,AtlasEzoPH")); break;
        case 0x64: Serial.print(F("AtlasEzoEC")); break;
        case 0x66: Serial.print(F("AtlasEzoRTD")); break;
        case 0x68: Serial.print(F("DS1307,DS3231,MPU6050,MPU9050,MPU9250,ITG3200,ITG3701,LSM9DS0,L3G4200D")); break;
        case 0x69: Serial.print(F("MPU6050,MPU9050,MPU9250,ITG3701,L3G4200D")); break;
        case 0x6A: Serial.print(F("LSM9DS1")); break;
        case 0x6B: Serial.print(F("LSM9DS0")); break;
        case 0x6F: Serial.print(F("Qwiic Button")); break;
        case 0x70: Serial.print(F("HT16K33")); break;
        case 0x71: Serial.print(F("SFE7SEG,HT16K33")); break;
        case 0x72: Serial.print(F("HT16K33")); break;
        case 0x73: Serial.print(F("HT16K33")); break;
        case 0x76: Serial.print(F("MS5607,MS5611,MS5637,BMP280")); break;
        case 0x77: Serial.print(F("BMP085,BMA180,BMP280,MS5611")); break;
        case 0x7C: Serial.print(F("FRAM_ID")); break;
        default: Serial.print(F("unknown chip"));
      }
    }     //  end magic decoder ring
    
    
      //  --------------------------------------  
      void readTS() {
        if(digitalRead(INTRPT) == HIGH) {
          Serial.println("Touch");
          int NBFinger = TS.dataread();
          for(int i=0; i<NBFinger; i++){
            Serial.print(TS.readFingerID(i));
            Serial.print(" ");
            Serial.print(TS.readFingerX(i));
            Serial.print(" ");
            Serial.print(TS.readFingerY(i));
            Serial.println("");
          }
          Serial.println("---");
        }
      }         //  end readTS
      //  --------------------------------------  
      void basics() {
        if (digitalRead(RA8875_CTP_INT) == HIGH)  {Serial.println("Touched");}
        if (digitalRead(RA8875_CTP_RST) == LOW)  {Serial.println("reset");}
      }
    
    //  --------------------------------------  
    
    
    //  --------------------------------------  
    
    
    //  --------------------------------------

  2. #2
    Senior Member
    Join Date
    Nov 2015
    Location
    Cold hollow VT
    Posts
    169
    I am finding that I have not fried my display and/or touch screen and am getting closer to resolving my problem(s). Refer to this post for more detail.

    https://forum.pjrc.com/threads/63344...166#post256166

Posting Permissions

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