acid-drop

- Hacking the planet from a LilyGo T-Deck using custom firmware
git clone git://git.acid.vegas/acid-drop.git
Log | Files | Refs | Archive | README | LICENSE

TFT_Read_Reg.ino (4439B)

      1 /*
      2   Test the library readcommand8 member function
      3 
      4   This sketch reports via the Serial Monitor window
      5 
      6   #########################################################################
      7   ###### DON'T FORGET TO UPDATE THE User_Setup.h FILE IN THE LIBRARY ######
      8   ######       TO SELECT THE FONTS AND PINS YOU USE, SEE ABOVE       ######
      9   #########################################################################
     10 
     11   Created by Bodmer 14/1/17
     12 */
     13 
     14 //====================================================================================
     15 //                                  Libraries
     16 //====================================================================================
     17 
     18 #include <TFT_eSPI.h> // Graphics and font library for ILI9341 driver chip
     19 #include <SPI.h>
     20 
     21 TFT_eSPI tft = TFT_eSPI();  // Invoke library
     22 
     23 //====================================================================================
     24 //                                    Setup
     25 //====================================================================================
     26 
     27 void setup(void) {
     28   Serial.begin(115200);
     29 
     30   tft.init();
     31   tft.setRotation(2);
     32 }
     33 
     34 //====================================================================================
     35 //                                    Loop
     36 //====================================================================================
     37 
     38 void loop() {
     39 
     40   tft.fillScreen(TFT_BLUE);
     41   tft.setCursor(0, 0, 2);
     42   // Set the font colour to be white with a black background
     43   tft.setTextColor(TFT_WHITE, TFT_BLACK);
     44   // We can now plot text on screen using the "print" class
     45   tft.println("Hello World!");
     46 
     47   delay(2000);
     48 
     49   // OK, now it has been shown that the display is working reset it to defaults
     50   // This will make the screen go "white" but we can still read registers
     51 
     52   digitalWrite(TFT_RST, LOW);
     53   delay(10);
     54   digitalWrite(TFT_RST, HIGH);
     55   delay(10);
     56 
     57   printSubset(); // Print a useful subset of the readable registers
     58 
     59   readTest(); // Test 8, 16 and 32 bit reads and index on the ID register
     60 
     61   //printRange32(0x00, 0xFF); // Print a range of registers (32 bits, index = 0)
     62 
     63   delay(2000);
     64   while (1) yield();
     65 }
     66 
     67 //====================================================================================
     68 //                                  Supporting functions
     69 //====================================================================================
     70 
     71 void readTest(void)
     72 {
     73   Serial.println(); Serial.println("Test 8, 16 and 32 bit reads and the index...");
     74   // Test 8, 16 and 32 bit reads and index
     75   // Note at index 0 the register values are typically undefined (Bxxxxxxxx)
     76   Serial.println(tft.readcommand8(ILI9341_RDID4, 2), HEX);
     77   Serial.println(tft.readcommand16(ILI9341_RDID4, 2), HEX);
     78   Serial.println(tft.readcommand32(ILI9341_RDID4, 0), HEX);
     79 }
     80 
     81 //====================================================================================
     82 
     83 void printRange32(uint8_t readStart, uint8_t readEnd)
     84 {
     85   Serial.print("Registers from "); Serial.print(readStart, HEX);
     86   Serial.print(" to "); Serial.println(readEnd, HEX);
     87 
     88   for (uint8_t cmd_reg = readStart; cmd_reg < readEnd; cmd_reg++) {
     89     readRegister(cmd_reg, 4, 0);
     90   }
     91 }
     92 
     93 //====================================================================================
     94 
     95 void printSubset(void)
     96 {
     97   Serial.println();  Serial.println();
     98   readRegister(ILI9341_RDDID, 3, 1);
     99   readRegister(ILI9341_RDDST, 4, 1);
    100   readRegister(ILI9341_RDMODE, 1, 1);
    101   readRegister(ILI9341_RDMADCTL, 1, 1);
    102   readRegister(ILI9341_RDPIXFMT, 1, 1);
    103   readRegister(ILI9341_RDSELFDIAG, 1, 1);
    104   readRegister(ILI9341_RAMRD, 3, 1);
    105 
    106   readRegister(ILI9341_RDID1, 1, 1);
    107   readRegister(ILI9341_RDID2, 1, 1);
    108   readRegister(ILI9341_RDID3, 1, 1);
    109   readRegister(ILI9341_RDIDX, 1, 1); // ?
    110   readRegister(ILI9341_RDID4, 3, 1);  // ID
    111 }
    112 
    113 //====================================================================================
    114 
    115 uint32_t readRegister(uint8_t reg, int16_t bytes, uint8_t index)
    116 {
    117   uint32_t  data = 0;
    118 
    119   while (bytes > 0) {
    120     bytes--;
    121     data = (data << 8) | tft.readcommand8(reg, index);
    122     index++;
    123   }
    124 
    125   Serial.print("Register 0x");
    126   if (reg < 0x10) Serial.print("0");
    127   Serial.print(reg , HEX);
    128 
    129   Serial.print(": 0x");
    130 
    131   // Add leading zeros as needed
    132   uint32_t mask = 0x1 << 28;
    133   while (data < mask && mask > 0x1) {
    134     Serial.print("0");
    135     mask = mask >> 4;
    136   }
    137 
    138   Serial.println(data, HEX);
    139 
    140   return data;
    141 }
    142 
    143 //====================================================================================