Difference between revisions of "Unit PiTFT28"

From Ultibo.org
Jump to: navigation, search
 
(6 intermediate revisions by the same user not shown)
Line 7: Line 7:
 
'''Adafruit PiTFT 2.8" LCD Driver unit'''
 
'''Adafruit PiTFT 2.8" LCD Driver unit'''
  
The Adafruit PiTFT 2.8" LCD is a 320 x 240 pixel TFT with resistive touchscreen using an ILITEK ILI9340 driver and a STMicroelectronics STMPE811 resistive touchscreen controller.
+
The Adafruit PiTFT 2.8" and PiTFT 3.2" LCD is a 320 x 240 pixel TFT with resistive touchscreen using an ILITEK ILI9340 driver and a STMicroelectronics STMPE610 resistive touchscreen controller. There is also a version available that includes a capacitive touchscreen using the Focaltech FT6236 controller.
 
   
 
   
This unit ties together the various components needed to make one of these boards work with Ultibo by finding the correct SPI device, creating the STMPE811 Touch device, creating the ILI9340 Framebuffer device and registering all of it with the correct parameters for the Adafruit board.
+
This unit ties together the various components needed to make one of these boards work with Ultibo by finding the correct SPI or I2C device, creating the STMPE610 or FT6236 Touch device, creating the ILI9340 Framebuffer device and registering all of it with the correct parameters for the Adafruit board.
  
 
Details:
 
Details:
Line 31: Line 31:
 
Backlight GPIO: GPIO_PIN_2 (STMPE GPIO)
 
Backlight GPIO: GPIO_PIN_2 (STMPE GPIO)
  
'''STMPE'''
+
'''STMPE (Resistive touch)'''
 
    
 
    
 
Chip: STMPE_CHIP_610
 
Chip: STMPE_CHIP_610
Line 42: Line 42:
  
 
IRQ GPIO: GPIO_PIN_24 (Trigger: GPIO_TRIGGER_FALLING)(Pull: GPIO_PULL_UP)
 
IRQ GPIO: GPIO_PIN_24 (Trigger: GPIO_TRIGGER_FALLING)(Pull: GPIO_PULL_UP)
 
+
 
 +
'''FT6236 (Capacitive touch)'''
 +
 
 +
I2C Address: 0x38
 +
 
 +
IRQ GPIO: GPIO_PIN_24 (Trigger: GPIO_TRIGGER_FALLING)(Pull: GPIO_PULL_UP)
 +
 
 
'''Switches'''
 
'''Switches'''
 
    
 
    
Line 82: Line 88:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
<div style="font-size: 14px; padding-left: 12px;">'''PiTFT28 GPIO constants''' <code> PITFT28_LCD_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''PiTFT28 GPIO''' <code> PITFT28_LCD_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 104: Line 110:
 
----
 
----
  
''To be documented''
+
 
 +
'''PiTFT28 specific types'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PPiTFT28LCD = ^TPiTFT28LCD;</code>
 +
 
 +
<code>TPiTFT28LCD = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>Signature:LongWord;</code>
 +
| Signature for entry validation
 +
|-
 +
| <code>Rotation:LongWord;</code>
 +
| Framebuffer rotation (eg FRAMEBUFFER_ROTATION_180)
 +
|-
 +
| <code>SPI:PSPIDevice;</code>
 +
| SPI device for this display
 +
|-
 +
| <code>I2C:PI2CDevice;</code>
 +
| I2C device for this display
 +
|-
 +
| <code>GPIO:PGPIODevice;</code>
 +
| GPIO device for this display
 +
|-
 +
| <code>Touch:PTouchDevice;</code>
 +
| Touch (STMPE or FT6236) device for this display
 +
|-
 +
| <code>Backlight:PGPIODevice;</code>
 +
| Backlight GPIO (STMPE) device for this display
 +
|-
 +
| <code>Framebuffer:PFramebufferDevice;</code>
 +
| Framebuffer (ILI9340) device for this display
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
=== Public variables ===
 
=== Public variables ===
Line 115: Line 157:
 
|-
 
|-
 
| <code>PITFT28_SPI_DEVICE:String = 'SPI0';</code>
 
| <code>PITFT28_SPI_DEVICE:String = 'SPI0';</code>
| style="width: 65%;"|
+
| style="width: 40%;"|
 
|-
 
|-
 
|}
 
|}
Line 121: Line 163:
 
|-
 
|-
 
| <code>PITFT28_LCD_CHIPSELECT:Word = SPI_CS_0;</code>
 
| <code>PITFT28_LCD_CHIPSELECT:Word = SPI_CS_0;</code>
| style="width: 65%;"|
+
| style="width: 40%;"|
 
|-
 
|-
 
|}
 
|}
Line 127: Line 169:
 
|-
 
|-
 
| <code>PITFT28_TOUCH_CHIPSELECT:Word = SPI_CS_1;</code>
 
| <code>PITFT28_TOUCH_CHIPSELECT:Word = SPI_CS_1;</code>
| style="width: 65%;"|
+
| style="width: 40%;"|
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>PITFT28_I2C_DEVICE:String = 'I2C0';</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>PITFT28_TOUCH_ADDRESS:Word = $38;</code>
 +
| style="width: 40%;"|
 
|-
 
|-
 
|}
 
|}
Line 144: Line 198:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| Called only during system startup
 
| Called only during system startup
 
|-
 
|-
Line 151: Line 205:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
<pre style="border: 0; padding-bottom:0px;">function PiTFT28Start(Rotation:LongWord; const Device:String; DisplaySelect,TouchSelect:Word):THandle;</pre>
+
<pre style="border: 0; padding-bottom:0px;">function PiTFT28Start(Rotation:LongWord; const Device:String; DisplaySelect,TouchSelect:Word):THandle; inline;</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Start the PiTFT28 driver and register the Touch, Backlight (GPIO) and Framebuffer devices associated with the display</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Start the PiTFT28 driver and register the Touch, Backlight (GPIO) and Framebuffer devices associated with the display</div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Rotation'''
+
! Rotation
 
| The rotation of the display (eg FRAMEBUFFER_ROTATION_180)
 
| The rotation of the display (eg FRAMEBUFFER_ROTATION_180)
 
|-
 
|-
! '''Device'''
+
! Device
 
| The SPI device that the ILI9340 and STMPE610 devices are connected to
 
| The SPI device that the ILI9340 and STMPE610 devices are connected to
 
|-
 
|-
! '''DisplaySelect'''
+
! DisplaySelect
 
| The SPI chip select of the ILI9340 LCD controller
 
| The SPI chip select of the ILI9340 LCD controller
 
|-
 
|-
! '''TouchSelect'''
+
! TouchSelect
 
| The SPI chip select of the STMPE610 touch controller
 
| The SPI chip select of the STMPE610 touch controller
 
|-
 
|-
! '''Return'''
+
! Return
 +
| The handle of the PiTFT28 on success or INVALID_HANDLE_VALUE on failure
 +
|-
 +
! Note
 +
| This function will be called during startup if the parameter PITFT28_AUTOSTART is True
 +
Can be called multiple times to support more than one PiTFT LCD display
 +
|-
 +
! Note
 +
| Replaced by PiTFT28ResistiveStart to accommodate capacitive display option
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PiTFT28ResistiveStart(Rotation:LongWord; const Device:String; DisplaySelect,TouchSelect:Word):THandle;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Start the PiTFT28 driver and register the resistive Touch, Backlight (GPIO) and Framebuffer devices associated with the display</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Rotation
 +
| The rotation of the display (eg FRAMEBUFFER_ROTATION_180)
 +
|-
 +
! Device
 +
| The SPI device that the ILI9340 and STMPE610 devices are connected to
 +
|-
 +
! DisplaySelect
 +
| The SPI chip select of the ILI9340 LCD controller
 +
|-
 +
! TouchSelect
 +
| The SPI chip select of the STMPE610 touch controller
 +
|-
 +
! Return
 +
| The handle of the PiTFT28 on success or INVALID_HANDLE_VALUE on failure
 +
|-
 +
! Note
 +
| This function will be called during startup if the parameter PITFT28_AUTOSTART is True
 +
Can be called multiple times to support more than one PiTFT LCD display
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function PiTFT28CapacitiveStart(Rotation:LongWord; const SPIDevice,I2CDevice:String; DisplaySelect,TouchAddress:Word):THandle;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Start the PiTFT28 driver and register the capacitive Touch and Framebuffer devices associated with the display</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Rotation
 +
| The rotation of the display (eg FRAMEBUFFER_ROTATION_180)
 +
|-
 +
! SPIDevice
 +
| The SPI device that the ILI9340 device is connected to
 +
|-
 +
! I2CDevice
 +
| The I2C device that the FT6236 device is connected to
 +
|-
 +
! DisplaySelect
 +
| The SPI chip select of the ILI9340 LCD controller
 +
|-
 +
! TouchAddress
 +
| The I2C address of the FT6236 touch controller
 +
|-
 +
! Return
 
| The handle of the PiTFT28 on success or INVALID_HANDLE_VALUE on failure
 
| The handle of the PiTFT28 on success or INVALID_HANDLE_VALUE on failure
 
|-
 
|-
! '''Note'''
+
! Note
 
| This function will be called during startup if the parameter PITFT28_AUTOSTART is True
 
| This function will be called during startup if the parameter PITFT28_AUTOSTART is True
 
Can be called multiple times to support more than one PiTFT LCD display
 
Can be called multiple times to support more than one PiTFT LCD display
Line 177: Line 293:
 
|}
 
|}
 
</div></div>
 
</div></div>
<br />  
+
<br />  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 
<pre style="border: 0; padding-bottom:0px;">function PiTFT28Stop(Handle:THandle):Boolean;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function PiTFT28Stop(Handle:THandle):Boolean;</pre>
Line 184: Line 300:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Handle'''
+
! Handle
 
| The handle of the PiTFT28 or INVALID_HANDLE_VALUE for the default display
 
| The handle of the PiTFT28 or INVALID_HANDLE_VALUE for the default display
 
|-
 
|-
! '''Return'''
+
! Return
 
| True if completed or False on failure
 
| True if completed or False on failure
 
|-
 
|-

Latest revision as of 05:08, 13 September 2022

Return to Unit Reference


Description


Adafruit PiTFT 2.8" LCD Driver unit

The Adafruit PiTFT 2.8" and PiTFT 3.2" LCD is a 320 x 240 pixel TFT with resistive touchscreen using an ILITEK ILI9340 driver and a STMicroelectronics STMPE610 resistive touchscreen controller. There is also a version available that includes a capacitive touchscreen using the Focaltech FT6236 controller.

This unit ties together the various components needed to make one of these boards work with Ultibo by finding the correct SPI or I2C device, creating the STMPE610 or FT6236 Touch device, creating the ILI9340 Framebuffer device and registering all of it with the correct parameters for the Adafruit board.

Details:

ILI9340

Width: 240

Height: 320

SPI Mode: 0

SPI Frequency: 32000000

SPI Chip Select: SPI_CS_0

DC GPIO: GPIO_PIN_25 (Pull: GPIO_PULL_NONE)

RST GPIO: GPIO_PIN_UNKNOWN

Backlight GPIO: GPIO_PIN_2 (STMPE GPIO)

STMPE (Resistive touch)

Chip: STMPE_CHIP_610

SPI Mode: 0

SPI Frequency: 500000

SPI Chip Select: SPI_CS_1

IRQ GPIO: GPIO_PIN_24 (Trigger: GPIO_TRIGGER_FALLING)(Pull: GPIO_PULL_UP)

FT6236 (Capacitive touch)

I2C Address: 0x38

IRQ GPIO: GPIO_PIN_24 (Trigger: GPIO_TRIGGER_FALLING)(Pull: GPIO_PULL_UP)

Switches

SW1 GPIO: GPIO_PIN_22

SW2 GPIO: GPIO_PIN_27

SW3 GPIO: GPIO_PIN_17

SW4 GPIO: GPIO_PIN_23

Constants



PiTFT28 specific constants PITFT28_*
PITFT28_FRAMEBUFFER_DESCRIPTION = 'Adafruit PiTFT 2.8" LCD'; Description of PiTFT28 device
 
PITFT28_SIGNATURE = $AF000028;  
 
PITFT28_SCREEN_WIDTH = 240;  
PITFT28_SCREEN_HEIGHT = 320;  


PiTFT28 GPIO PITFT28_LCD_*
PITFT28_LCD_DC = GPIO_PIN_25;  
PITFT28_TOUCH_IRQ = GPIO_PIN_24;  
 
NAPITFT28_LCD_BL = GPIO_PIN_2; STMPE GPIO


Type definitions



PiTFT28 specific types

PPiTFT28LCD = ^TPiTFT28LCD;

TPiTFT28LCD = record

Signature:LongWord; Signature for entry validation
Rotation:LongWord; Framebuffer rotation (eg FRAMEBUFFER_ROTATION_180)
SPI:PSPIDevice; SPI device for this display
I2C:PI2CDevice; I2C device for this display
GPIO:PGPIODevice; GPIO device for this display
Touch:PTouchDevice; Touch (STMPE or FT6236) device for this display
Backlight:PGPIODevice; Backlight GPIO (STMPE) device for this display
Framebuffer:PFramebufferDevice; Framebuffer (ILI9340) device for this display


Public variables



PiTFT28 specific variables

PITFT28_SPI_DEVICE:String = 'SPI0';
PITFT28_LCD_CHIPSELECT:Word = SPI_CS_0;
PITFT28_TOUCH_CHIPSELECT:Word = SPI_CS_1;
PITFT28_I2C_DEVICE:String = 'I2C0';
PITFT28_TOUCH_ADDRESS:Word = $38;


Function declarations



Initialization functions

procedure PiTFT28Init;
Description: Initialize the PiTFT28 unit and parameters
Note Called only during system startup


function PiTFT28Start(Rotation:LongWord; const Device:String; DisplaySelect,TouchSelect:Word):THandle; inline;
Description: Start the PiTFT28 driver and register the Touch, Backlight (GPIO) and Framebuffer devices associated with the display
Rotation The rotation of the display (eg FRAMEBUFFER_ROTATION_180)
Device The SPI device that the ILI9340 and STMPE610 devices are connected to
DisplaySelect The SPI chip select of the ILI9340 LCD controller
TouchSelect The SPI chip select of the STMPE610 touch controller
Return The handle of the PiTFT28 on success or INVALID_HANDLE_VALUE on failure
Note This function will be called during startup if the parameter PITFT28_AUTOSTART is True

Can be called multiple times to support more than one PiTFT LCD display

Note Replaced by PiTFT28ResistiveStart to accommodate capacitive display option


function PiTFT28ResistiveStart(Rotation:LongWord; const Device:String; DisplaySelect,TouchSelect:Word):THandle;
Description: Start the PiTFT28 driver and register the resistive Touch, Backlight (GPIO) and Framebuffer devices associated with the display
Rotation The rotation of the display (eg FRAMEBUFFER_ROTATION_180)
Device The SPI device that the ILI9340 and STMPE610 devices are connected to
DisplaySelect The SPI chip select of the ILI9340 LCD controller
TouchSelect The SPI chip select of the STMPE610 touch controller
Return The handle of the PiTFT28 on success or INVALID_HANDLE_VALUE on failure
Note This function will be called during startup if the parameter PITFT28_AUTOSTART is True

Can be called multiple times to support more than one PiTFT LCD display


function PiTFT28CapacitiveStart(Rotation:LongWord; const SPIDevice,I2CDevice:String; DisplaySelect,TouchAddress:Word):THandle;
Description: Start the PiTFT28 driver and register the capacitive Touch and Framebuffer devices associated with the display
Rotation The rotation of the display (eg FRAMEBUFFER_ROTATION_180)
SPIDevice The SPI device that the ILI9340 device is connected to
I2CDevice The I2C device that the FT6236 device is connected to
DisplaySelect The SPI chip select of the ILI9340 LCD controller
TouchAddress The I2C address of the FT6236 touch controller
Return The handle of the PiTFT28 on success or INVALID_HANDLE_VALUE on failure
Note This function will be called during startup if the parameter PITFT28_AUTOSTART is True

Can be called multiple times to support more than one PiTFT LCD display


function PiTFT28Stop(Handle:THandle):Boolean;
Description: Stop the PiTFT28 driver and deregister the Touch, Backlight (GPIO) and Framebuffer devices associated with the display
Handle The handle of the PiTFT28 or INVALID_HANDLE_VALUE for the default display
Return True if completed or False on failure


Return to Unit Reference