Hi,I can get a pic.. I will get one next time I order from RS..
Do you have another board you can test? Leave off the pic18f4431 and watch the SCL.. at the moment I do not get proper switching ... Here is the clock at 4Mhz
View attachment 148036
Look at the data signal (bottom) rise and fall more than half the clock.. This is either the chip itself or stray capacitance... Now both these signals are on the same port.. I also see the peak to peak IS 3,3v so we are getting neg to pos... I wonder if there is a slew issue here.. let me divulge the datasheet see it there is a setting.. I do not use the 3v3 devices..
Hi D,Hi C,
FILE (ST7789.bas):
I don't know why the TFT pin configuration doesn't work for you, since they are configured:
Proc LCD_SPI1_Init(mode As Byte, speed As Byte)
' Configure SPI pins
ConfigPin TFT_RST_IO = Output ' RESET pin as output
ConfigPin TFT_DC_IO = Output ' Data/Command pin as output
ConfigPin TFT_CS_IO = Output ' Chip Select pin as output
ConfigPin TFT_SCK_IO = Output ' Clock pin as output
ConfigPin TFT_SDI_IO = Input ' SDI pin as input
ConfigPin TFT_SDO_IO = Output ' SDO pin as output
FILE (TFT ST77xx_v01_46K20.bas):
Screen rotation is changed from this line:
Call SetRotation(1) '0 y 2 TFT horizontal, 1 y 3 TFT Vertical
You can make a first color change from this line, if it still doesn't work you will have to change the colors by hand to match the ones your TFT uses:
Call InvertDisplay(INVOFF) 'INVON/INVOFF
You can change the SPI bus speed from this other line:
Call LCD_SPI1_Init(LCD_SPI_MODE2, LCD_SPI_MASTER_SPEED0 | LCD_SPI_ENABLE) 'CLK 8Mhz (32Mhz)
Call LCD_SPI1_Init(LCD_SPI_MODE2, LCD_SPI_MASTER_SPEED1 | LCD_SPI_ENABLE) 'CLK 2Mhz (32Mhz)
Call LCD_SPI1_Init(LCD_SPI_MODE2, LCD_SPI_MASTER_SPEED2 | LCD_SPI_ENABLE) 'CLK 0.5Mhz (32Mhz)
'18F46K20 32MHz XTL PCB_9 BASE_MASTER TFT ME #164 291124 1100
Define CONFIG1L = 0x00
Define CONFIG1H = 0x06 '6= EXT8 MHz XPLL = 32 MHZ
Define CONFIG2L = 0x06 'BORV Set to 3.0V (SBOREN?)
Define CONFIG2H = 0x00
Define CONFIG3L = 0x00
Define CONFIG3H = 0x81 'Set for HVP
Define CONFIG4L = 0x80
Define CONFIG4H = 0x00
Define CONFIG5L = 0x0f
Define CONFIG5H = 0xc0
Define CONFIG6L = 0x0f
Define CONFIG6H = 0xe0
Define CONFIG7L = 0x0f
Define CONFIG7H = 0x40
Define CLOCK_FREQUENCY = 32
'OSH config
Define SINGLE_DECIMAL_PLACES = 2
Define STRING_MAX_LENGTH = 20
'IO MAP
'SET BITS ON/OFF before TRIS!
Const LATAinit = %00000000 'ON/OFF
Const LATBinit = %00000000
Const LATCinit = %00000000
Const LATDinit = %00000000
Const LATEinit = %00000000
'SET PIN IN/OUT
Const TRISAinit = %00000000
Const TRISBinit = %00000000
Const TRISCinit = %00010000
Const TRISDinit = %00000000
Const TRISEinit = %00000000
'Define SIMULATION_WAITMS_VALUE = 1 'Comment in for SIM out for PIC
Define SEROUT_DELAYUS = 1000
Disable High
Disable Low
'###############################################
'lcd driver
Const ILI9341_NOP = 0x00
Const ILI9341_SWRESET = 0x01
Const ILI9341_RDDID = 0x04
Const ILI9341_RDDST = 0x09
Const ILI9341_SLPIN = 0x10
Const ILI9341_SLPOUT = 0x11
Const ILI9341_PTLON = 0x12
Const ILI9341_NORON = 0x13
Const ILI9341_INVOFF = 0x20
Const ILI9341_INVON = 0x21
Const ILI9341_DISPOFF = 0x28
Const ILI9341_DISPON = 0x29
Const ILI9341_CASET = 0x2a
Const ILI9341_RASET = 0x2b
Const ILI9341_RAMWR = 0x2c
Const ILI9341_RAMRD = 0x2e
Const ILI9341_PTLAR = 0x30
Const ILI9341_COLMOD = 0x3a
Const ILI9341_MADCTL = 0x36
Const ILI9341_DISP_FUNC = 0xB6
Const ILI9341_MADCTL_MY = 0x80
Const ILI9341_MADCTL_MX = 0x40
Const ILI9341_MADCTL_MV = 0x20
Const ILI9341_MADCTL_ML = 0x10
Const ILI9341_MADCTL_RGB = 0x00
Const ILI9341_RDID1 = 0xda
Const ILI9341_RDID2 = 0xdb
Const ILI9341_RDID3 = 0xdc
Const ILI9341_RDID4 = 0xdd
Const LCD_BLACK = 0x0000
Const LCD_RED = 0x001f
Const LCD_BLUE = 0xf800
Const LCD_GREEN = 0x07E0
Const LCD_YELLOW = 0x07ff
Const LCD_MAGENTA = 0xf81f
Const LCD_CYAN = 0xffe0
Const LCD_WHITE = 0xffff
Dim LCD_width As Word ///< Display width as modified by current rotation
Dim LCD_height As Word ///< Display height as modified by current rotation
Dim LCD_rotation As Byte ///< Display rotation (0 thru 3)
Symbol TFT_RST = LATC.0 'RST RESET pin
Symbol TFT_DC = LATC.1 'DC (SS) Data/Command pin
Symbol TFT_CS = LATC.2 'CS Chip Select pin
Symbol TFT_SCK = LATC.3 'SCK as output
Symbol TFT_SDI = LATC.4 'SDI as input -> SDO
Symbol TFT_SDO = LATC.5 'SDO as output -> SDI
Symbol TFT_LED = LATD.3 'Screen backlight
Symbol rled = LATE.2 'Red LED
'*************************************************
Dim str As String
Dim x As Byte
'OSCCON = 0x60
'OSCTUNE.PLLEN = 1
TRISA.1 = 0
TRISC = 0
TRISD = 0
TRISE = 0
ADCON1 = 15
TFT_LED = 1 'Switch screen light on
'START UP LED
rled = 1
WaitMs 1000
rled = 0
WaitMs 1000
rled = 1
WaitMs 1000
rled = 0
WaitMs 1000
Call init_spi() 'Call SPI_init()
Call LCD_init()
str = "Hi Ian"
Main:
Toggle rled
WaitMs 100
x = 1
While x = 1
WaitMs 300
LATA.1 = 1
Call fillScreen(LCD_BLACK)
'Call fillScreen(LCD_WHITE)
WaitMs 300
LATA.1 = 0
Call fillwindow(10,10,310,230, LCD_BLUE) 'L,T,R,B
'Call fillwindow(10,10,310,230, LCD_BLUE)
WaitMs 300
LATA.1 = 1
'Call fillwindow(10,10,230,230, LCD_GREEN)
Call fillwindow(10,10,310,230, LCD_GREEN)
WaitMs 300
LATA.1 = 0
Call fillScreen(LCD_WHITE)
Call LCD_DrawLine(10,10,310,230,LCD_BLACK)'L,T,R,B
'Call LCD_DrawLine(230,10,10,230,LCD_BLACK)
Call LCD_DrawLine(10,230,310,10,LCD_BLACK)
Call LCD_DrawLine(10,120,310,120,LCD_BLACK)
Call LCD_DrawLine(160,10,160,230,LCD_BLACK)
Call LCD_Circle(160,120,100,LCD_BLUE)
'Call fillwindow(60,50,180,190, LCD_WHITE)
Call LCD_DrawRectangle(70,30,250,210,LCD_BLUE)
Call LCD_String( str,110,110, LCD_BLACK, LCD_WHITE)
WaitMs 2000
Wend
End
'Proc SPI_init()
'SSPSTAT = 0x40
'SSPCON1 = 0x30
'End Proc
Proc LCD_WRITE_COM(dat As Byte)
TFT_CS = 0
TFT_DC = 0
SSPBUF = dat
While SSPSTAT.BF = 0
Wend
TFT_DC = 1
TFT_CS = 1
End Proc
Proc LCD_WRITE_DATA(dat As Byte)
TFT_CS = 0
TFT_DC = 1
SSPBUF = dat
While SSPSTAT.BF = 0
Wend
TFT_DC = 1
TFT_CS = 1
End Proc
Proc LCD_init()
Dim idx As Byte
Dim cmd As Byte
High TFT_RST
'ConfigPin TFT_RST = Output
WaitMs 100
Low TFT_RST
WaitMs 100
High TFT_RST
WaitMs 200
Call LCD_WRITE_COM(ILI9341_SWRESET)
WaitMs 150
Call LCD_WRITE_COM(ILI9341_DISPOFF)
Call LCD_WRITE_COM(0xCB) //Power control a
Call LCD_WRITE_DATA(0x39)
Call LCD_WRITE_DATA(0x2C)
Call LCD_WRITE_DATA(0x00)
Call LCD_WRITE_DATA(0x34)
Call LCD_WRITE_DATA(0x02)
WaitMs 1
Call LCD_WRITE_COM(0xCF) //Power control b
Call LCD_WRITE_DATA(0x00)
Call LCD_WRITE_DATA(0XC1)
Call LCD_WRITE_DATA(0X30)
WaitMs 1
Call LCD_WRITE_COM(0xE8) //Timing control a
Call LCD_WRITE_DATA(0x85)
Call LCD_WRITE_DATA(0x10)
Call LCD_WRITE_DATA(0x78)
WaitMs 1
Call LCD_WRITE_COM(0xEA) //Timing control b
Call LCD_WRITE_DATA(0x00)
Call LCD_WRITE_DATA(0x00)
WaitMs 1
Call LCD_WRITE_COM(0xED) //Power on seq control
Call LCD_WRITE_DATA(0x64)
Call LCD_WRITE_DATA(0x03)
Call LCD_WRITE_DATA(0X12)
Call LCD_WRITE_DATA(0X81)
//WaitMs 1
Call LCD_WRITE_COM(0xC0) //Power control 1
Call LCD_WRITE_DATA(0x26) //VRH[5:0]
//WaitMs 1
Call LCD_WRITE_COM(0xC1) //Power control 2
Call LCD_WRITE_DATA(0x11) //SAP[2:0];BT[3:0]
//WaitMs 1
Call LCD_WRITE_COM(0xC5) //VCM control
Call LCD_WRITE_DATA(0x3e) //Contrast
Call LCD_WRITE_DATA(0x28)
// WaitMs 1
Call LCD_WRITE_COM(0xF7)
Call LCD_WRITE_DATA(0x20)
//WaitMs 1
Call LCD_WRITE_COM(ILI9341_MADCTL)
'Call LCD_WRITE_DATA(0x8) 'Top To Bottom-Left To Right CORRECT ORIENTATION
Call LCD_WRITE_DATA(0xC8) 'Top To Bottom-Left To Right CORRECT ORIENTATION |
Call LCD_WRITE_COM(ILI9341_INVOFF)
//WaitMs 1
Call LCD_WRITE_COM(ILI9341_NORON)
WaitMs 1
Call LCD_WRITE_COM(ILI9341_COLMOD )
Call LCD_WRITE_DATA(0x55)
//WaitMs 1
Call LCD_WRITE_COM(0xB7) //emtry mode
Call LCD_WRITE_DATA(0x07)
Call LCD_WRITE_COM(0x3A) //pixel format
Call LCD_WRITE_DATA(0x55) //16bit
Call LCD_WRITE_COM(ILI9341_DISP_FUNC) // Display Function Control
Call LCD_WRITE_DATA(0x08)
Call LCD_WRITE_DATA(0x82)
Call LCD_WRITE_DATA(0x27)
WaitMs 1
Call LCD_WRITE_COM(ILI9341_SLPOUT)
WaitMs 120
Call LCD_WRITE_COM(ILI9341_DISPON)
WaitMs 1
LCD_height = 240
LCD_width = 320 '240
End Proc
'/**************************************************************************/
'@brief SPI displays set an address window rectangle For blitting pixels
'@param x Top left corner x coordinate
'@param y Top left corner x coordinate
'@param W Width of window
'@param h Height of window
'/**************************************************************************/
Proc setAddrWindow(x1 As Word, y1 As Word, x2 As Word, y2 As Word)
Call LCD_WRITE_COM(ILI9341_CASET) //Column addr set
Call LCD_WRITE_DATA(x1.HB)
Call LCD_WRITE_DATA(x1.LB)
Call LCD_WRITE_DATA(x2.HB)
Call LCD_WRITE_DATA(x2.LB)
Call LCD_WRITE_COM(ILI9341_RASET) //Row addr set
Call LCD_WRITE_DATA(y1.HB)
Call LCD_WRITE_DATA(y1.LB)
Call LCD_WRITE_DATA(y2.HB)
Call LCD_WRITE_DATA(y2.LB)
Call LCD_WRITE_COM(ILI9341_RAMWR) //write to RAM
End Proc
Proc LCD_DrawLine(x1 As Word, y1 As Word, x2 As Word, y2 As Word, color As Word)
Dim t As Word
Dim xerr, yerr, delta_x, delta_y, distance As Integer
Dim incx, incy, xPix, yPix As Integer
xerr = 0
yerr = 0
delta_x = x2 - x1
delta_y = y2 - y1
xPix = x1
yPix = y1
If delta_x > 0 Then incx = 1
If delta_x = 0 Then incx = 0
If delta_x < 0 Then
incx = -1
delta_x = -delta_x
Endif
If delta_y > 0 Then incy = 1
If delta_y = 0 Then incy = 0
If delta_y < 0 Then
incy = -1
delta_y = -delta_y
Endif
If delta_x > delta_y Then
distance = delta_x
Else
distance = delta_y
Endif
For t = 0 To distance + 1 Step 1
Call LCD_DrawPoint(xPix, yPix, color)
xerr = xerr + delta_x
yerr = yerr + delta_y
If xerr > distance Then
xerr = xerr - distance
xPix = xPix + incx
Endif
If yerr > distance Then
yerr = yerr - distance
yPix = yPix + incy
Endif
Next t
End Proc
Proc LCD_Char( char As Byte, x As Word, y As Word, fcol As Word , bcol As Word)
Dim x0 As Integer
Dim idx, idx2 As Byte
Dim mask As Byte
For idx = 0 To 9 Step 1
mask = _LCDFnt(char, idx)
For idx2 = 0 To 13 Step 2
If mask And 0x80 Then
Call LCD_DrawPoint(x+idx2, y, fcol)
Call LCD_DrawPoint(x+idx2+1, y, fcol)
Call LCD_DrawPoint(x+idx2, y+1, fcol)
Call LCD_DrawPoint(x+idx2+1, y+1, fcol)
Else
Call LCD_DrawPoint(x+idx2, y, bcol)
Call LCD_DrawPoint(x+idx2+1, y, bcol)
Call LCD_DrawPoint(x+idx2, y+1, bcol)
Call LCD_DrawPoint(x+idx2+1, y+1, bcol)
Endif
mask = ShiftLeft(mask,1)
Next idx2
y = y + 2
Next idx
End Proc
Proc LCD_String( str As String, x As Word, y As Word, fcol As Word , bcol As Word)
Dim idx As Byte
Dim x0 As Word
idx = 0
While str(idx) <> 0
Call LCD_Char(str(idx), x, y,fcol,bcol)
x = x+18
idx = idx + 1
Wend
End Proc
// Rectangle
Proc LCD_DrawRectangle( x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer, color As Word)
Call LCD_DrawLine(x1, y1, x2, y1, color)
Call LCD_DrawLine(x1, y1, x1, y2, color)
Call LCD_DrawLine(x1, y2, x2, y2, color)
Call LCD_DrawLine(x2, y1, x2, y2, color)
End Proc
// Circle routine
Proc LCD_Circle(x1 As Word, y1 As Word, rad As Word, color As Word)
Dim xPix, yPix, di As Integer
xPix = 0
yPix = rad
di = 3 - ShiftLeft(rad,1)
While xPix <= yPix
Call LCD_DrawPoint(x1+xPix, y1-yPix, color)
Call LCD_DrawPoint(x1+yPix, y1-xPix, color)
Call LCD_DrawPoint(x1+yPix, y1+xPix, color)
Call LCD_DrawPoint(x1+xPix, y1+yPix, color)
Call LCD_DrawPoint(x1-xPix, y1+yPix, color)
Call LCD_DrawPoint(x1-yPix, y1+xPix, color)
Call LCD_DrawPoint(x1-xPix, y1-yPix, color)
Call LCD_DrawPoint(x1-yPix, y1-xPix, color)
xPix = xPix + 1
If di < 0 Then
di= (4 * xPix + 6) + di
Else
di= (10 + 4 * (xPix-yPix)) + di
yPix = yPix - 1
Endif
Wend
End Proc
// line drawing
Proc LCD_DrawPoint(x1 As Word, y1 As Word ,color As Word)
Call LCD_WRITE_COM(ILI9341_CASET) //Column addr set
Call LCD_WRITE_DATA(x1.HB)
Call LCD_WRITE_DATA(x1.LB)
Call LCD_WRITE_COM(ILI9341_RASET) //Row addr set
Call LCD_WRITE_DATA(y1.HB)
Call LCD_WRITE_DATA(y1.LB)
Call LCD_WRITE_COM(ILI9341_RAMWR) //write to RAM
Call LCD_WRITE_DATA(color.HB)
Call LCD_WRITE_DATA(color.LB)
End Proc
'/**************************************************************************/
Proc fillRect(x1 As Word, y1 As Word, x2 As Word, y2 As Word, color As Word)
Dim px As Long
Dim tmp As Word
If x2 > 0 And y2 > 0 Then //Nonzero width and height?
Call setAddrWindow(x1, y1, x2, y2)
px = x2
px = px * y2
TFT_CS = 0
TFT_DC = 1
While px > 1
SSPBUF = color.HB
While SSPSTAT.BF = 0
Wend
SSPBUF = color.LB
While SSPSTAT.BF = 0
Wend
px = px - 1
Wend
TFT_DC = 1
TFT_CS = 1
Endif
End Proc
'/**************************************************************************/
'@brief Fill the screen completely with one color. Update in subclasses If desired!
'@param color 16-Bit 5-6-5 Color To fill with
'/**************************************************************************/
Proc fillScreen(color As Word)
Call fillRect(0, 0, LCD_width, LCD_height, color)
End Proc
Proc fillwindow(x1 As Word,y1 As Word,x2 As Word,y2 As Word,color As Word)
Call fillRect(x1, y1, x2, y2, color)
End Proc
Function _LCDFnt(ch As Byte, idx As Byte) As Byte
Symbol Retval = _LCDFnt
Select Case ch
Case " "
Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), idx //SPACE
Case "!"
Retval = LookUp(0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x00), idx //!
Case 34
Retval = LookUp(0x00, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), idx // "
Case "#"
Retval = LookUp(0x00, 0x12, 0x12, 0x7f, 0x24, 0x24, 0xfe, 0x48, 0x48, 0x00), idx //#
Case "$"
Retval = LookUp(0x00, 0x10, 0x7c, 0x92, 0x70, 0x1c, 0x92, 0x7c, 0x10, 0x00), idx //$
Case "%"
Retval = LookUp(0x00, 0x41, 0xa2, 0x44, 0x08, 0x10, 0x22, 0x45, 0x82, 0x00), idx //%
Case "&"
Retval = LookUp(0x00, 0x10, 0x28, 0x10, 0x28, 0x44, 0x43, 0x42, 0x39, 0x00), idx //&
Case "'"
Retval = LookUp(0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), idx //'
Case "("
Retval = LookUp(0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00), idx //(
Case ")"
Retval = LookUp(0x00, 0x08, 0x04, 0x02, 0x02, 0x02, 0x20, 0x04, 0x08, 0x00), idx //)
Case "*"
Retval = LookUp(0x00, 0x08, 0x2a, 0x1c, 0x7f, 0x1c, 0x2a, 0x08, 0x00, 0x00), idx //*
Case "+"
Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x08, 0x08, 0x00, 0x00), idx //+
Case ","
Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x00), idx //,
Case "-"
Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00), idx //-
Case "."
Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00), idx //.
Case "/"
Retval = LookUp(0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00), idx ///
Case "0"
Retval = LookUp(0x00, 0x3c, 0x46, 0x4a, 0x4a, 0x52, 0x52, 0x62, 0x3c, 0x00), idx //0
Case "1"
Retval = LookUp(0x00, 0x08, 0x18, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3e, 0x00), idx //1
Case "2"
Retval = LookUp(0x00, 0x3c, 0x42, 0x02, 0x0c, 0x30, 0x40, 0x40, 0x7e, 0x00), idx //2
Case "3"
Retval = LookUp(0x00, 0x3c, 0x42, 0x02, 0x0c, 0x02, 0x02, 0x42, 0x3c, 0x00), idx //3
Case "4"
Retval = LookUp(0x00, 0x09, 0x18, 0x28, 0x48, 0x48, 0x7e, 0x08, 0x08, 0x00), idx //4
Case "5"
Retval = LookUp(0x00, 0x7e, 0x40, 0x40, 0x7c, 0x02, 0x02, 0x42, 0x3c, 0x00), idx //5
Case "6"
Retval = LookUp(0x00, 0x3c, 0x42, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x3c, 0x00), idx //6
Case "7"
Retval = LookUp(0x00, 0x7e, 0x02, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10, 0x00), idx //7
Case "8"
Retval = LookUp(0x00, 0x3c, 0x42, 0x42, 0x3c, 0x42, 0x42, 0x42, 0x3c, 0x00), idx //8
Case "9"
Retval = LookUp(0x00, 0x3c, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x42, 0x3c, 0x00), idx //9
Case ":"
Retval = LookUp(0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x08, 0x08, 0x00, 0x00), idx //:
Case ";"
Retval = LookUp(0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x08, 0x08, 0x10, 0x00), idx //;
Case "<"
Retval = LookUp(0x00, 0x04, 0x08, 0x10, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00), idx //<
Case "="
Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x3e, 0x00, 0x00, 0x00), idx //=
Case ">"
Retval = LookUp(0x00, 0x10, 0x08, 0x04, 0x02, 0x02, 0x04, 0x08, 0x10, 0x00), idx //>
Case "?"
Retval = LookUp(0x00, 0x3c, 0x42, 0x02, 0x04, 0x08, 0x08, 0x00, 0x08, 0x00), idx //?
Case "@"
Retval = LookUp(0x00, 0x7e, 0x81, 0x9b, 0xa5, 0xa6, 0x9c, 0x81, 0x7e, 0x00), idx //@
Case "A"
Retval = LookUp(0x00, 0x18, 0x24, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x00), idx //A
Case "B"
Retval = LookUp(0x00, 0x7c, 0x42, 0x42, 0x7c, 0x42, 0x42, 0x42, 0x7c, 0x00), idx //B
Case "C"
Retval = LookUp(0x00, 0x3c, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x3c, 0x00), idx //C
Case "D"
Retval = LookUp(0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x00), idx //D
Case "E"
Retval = LookUp(0x00, 0x7e, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x7e, 0x00), idx //E
Case "F"
Retval = LookUp(0x00, 0x7e, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x40, 0x00), idx //F
Case "G"
Retval = LookUp(0x00, 0x3c, 0x42, 0x40, 0x40, 0x46, 0x42, 0x42, 0x3c, 0x00), idx //G
Case "H"
Retval = LookUp(0x00, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x00), idx //H
Case "I"
Retval = LookUp(0x00, 0x7e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x7e, 0x00), idx //I
Case "J"
Retval = LookUp(0x00, 0x7e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x48, 0x30, 0x00), idx //J
Case "K"
Retval = LookUp(0x00, 0x42, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, 0x42, 0x00), idx //K
Case "L"
Retval = LookUp(0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7e, 0x00), idx //L
Case "M"
Retval = LookUp(0x00, 0x42, 0x42, 0x66, 0x5a, 0x42, 0x42, 0x42, 0x42, 0x00), idx //M
Case "N"
Retval = LookUp(0x00, 0x42, 0x42, 0x62, 0x52, 0x4a, 0x46, 0x42, 0x42, 0x00), idx //N
Case "O"
Retval = LookUp(0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00), idx //O
Case "P"
Retval = LookUp(0x00, 0x7c, 0x42, 0x42, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00), idx //P
Case "Q"
Retval = LookUp(0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x4a, 0x46, 0x3e, 0x00), idx //Q
Case "R"
Retval = LookUp(0x00, 0x7c, 0x42, 0x42, 0x7c, 0x48, 0x44, 0x42, 0x42, 0x00), idx //R
Case "S"
Retval = LookUp(0x00, 0x3c, 0x42, 0x40, 0x30, 0x0c, 0x02, 0x42, 0x3c, 0x00), idx //S
Case "T"
Retval = LookUp(0x00, 0x7e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00), idx //T
Case "U"
Retval = LookUp(0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00), idx //U
Case "V"
Retval = LookUp(0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00), idx //V
Case "W"
Retval = LookUp(0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x5a, 0x66, 0x42, 0x00), idx //W
Case "X"
Retval = LookUp(0x00, 0x42, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x42, 0x00), idx //X
Case "Y"
Retval = LookUp(0x00, 0x42, 0x42, 0x24, 0x18, 0x05, 0x08, 0x08, 0x08, 0x00), idx //Y
Case "Z"
Retval = LookUp(0x00, 0x7e, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7e, 0x00), idx //Z
Case "["
Retval = LookUp(0x00, 0x3c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x00), idx //[
Case "\"
Retval = LookUp(0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00), idx //\
Case "]"
Retval = LookUp(0x00, 0x3c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x3c, 0x00), idx //]
Case "^"
Retval = LookUp(0x00, 0x08, 0x14, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), idx //^
Case "_"
Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00), idx //_
Case "`"
Retval = LookUp(0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), idx //`
Case "a"
Retval = LookUp(0x00, 0x00, 0x00, 0x1c, 0x02, 0x1e, 0x22, 0x22, 0x1e, 0x00), idx //a
Case "b"
Retval = LookUp(0x00, 0x20, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x3c, 0x00), idx //b
Case "c"
Retval = LookUp(0x00, 0x00, 0x00, 0x1c, 0x22, 0x20, 0x20, 0x22, 0x1c, 0x00), idx //c
Case "d"
Retval = LookUp(0x00, 0x02, 0x02, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x1e, 0x00), idx //d
Case "e"
Retval = LookUp(0x00, 0x00, 0x00, 0x1c, 0x22, 0x3e, 0x20, 0x22, 0x1c, 0x00), idx //e
Case "f"
Retval = LookUp(0x00, 0x0c, 0x10, 0x10, 0x3c, 0x10, 0x10, 0x10, 0x10, 0x00), idx //f
Case "g"
Retval = LookUp(0x00, 0x00, 0x00, 0x1e, 0x22, 0x22, 0x22, 0x1e, 0x02, 0x3c), idx //g
Case "h"
Retval = LookUp(0x00, 0x20, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00), idx //h
Case "i"
Retval = LookUp(0x00, 0x08, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00), idx //i
Case "j"
Retval = LookUp(0x00, 0x08, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x30), idx //j
Case "k"
Retval = LookUp(0x00, 0x20, 0x20, 0x22, 0x24, 0x38, 0x24, 0x22, 0x22, 0x00), idx //k
Case "l"
Retval = LookUp(0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x00), idx //l
Case "m"
Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x36, 0x2a, 0x22, 0x22, 0x22, 0x00), idx //m
Case "n"
Retval = LookUp(0x00, 0x00, 0x00, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00), idx //n
Case "o"
Retval = LookUp(0x00, 0x00, 0x00, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x00), idx //o
Case "p"
Retval = LookUp(0x00, 0x00, 0x00, 0x7c, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00), idx //p
Case "q"
Retval = LookUp(0x00, 0x00, 0x00, 0x3c, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x20), idx //q
Case "r"
Retval = LookUp(0x00, 0x00, 0x00, 0x2e, 0x30, 0x20, 0x20, 0x20, 0x20, 0x00), idx //r
Case "s"
Retval = LookUp(0x00, 0x00, 0x00, 0x1c, 0x22, 0x10, 0x0c, 0x22, 0x1c, 0x00), idx //s
Case "t"
Retval = LookUp(0x00, 0x10, 0x10, 0x38, 0x10, 0x10, 0x10, 0x12, 0x0c, 0x00), idx //t
Case "u"
Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x00), idx //u
Case "v"
Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x14, 0x08, 0x00), idx //v
Case "w"
Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x2a, 0x36, 0x22, 0x00), idx //w
Case "x"
Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22, 0x00), idx //x
Case "y"
Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x1e, 0x02, 0x3c), idx //y
Case "z"
Retval = LookUp(0x00, 0x00, 0x00, 0x3e, 0x02, 0x04, 0x08, 0x10, 0x3e, 0x00), idx //z
Case "{"
Retval = LookUp(0x00, 0x04, 0x08, 0x08, 0x08, 0x10, 0x08, 0x08, 0x08, 0x04), idx //{
Case "|"
Retval = LookUp(0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00), idx //|
Case "}"
Retval = LookUp(0x00, 0x10, 0x08, 0x08, 0x08, 0x04, 0x08, 0x08, 0x08, 0x10), idx //}
Case "~"
Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00), idx //~
Case 165 '"Ñ" + chr(165) +
Retval = LookUp(0x00, 0x00, 0x00, 0x7e, 0x05, 0x09, 0x11, 0x7e), idx //Ñ
Case 164'"ñ" + chr(164) +
Retval = LookUp(0x00, 0x00, 0x00, 0x78, 0x12, 0x0a, 0x0a, 0x70), idx //ñ
EndSelect
End Function
'*******************************************************
'* *
'* START UP SPI ROUTINE *
'* *
'*******************************************************
Proc init_spi() 'PIC 18F46K20
TRISC.3 = 0 'SCK to Slave ****** output *******
TRISC.5 = 0 'MOSI ****** output *******
TRISC.4 = 1 'MISO ****** input *******
'MODE 0,0???
SSPSTAT.SMP = 0 'Input data sampled at middle of data output time ** not about clock generation **
SSPSTAT.CKE = 1 'CHANGED to 1 [0 Output data changes on clock transition from active to idle ** AS ABOVE **]
SSPSTAT.5 = 0 'I2C only
SSPSTAT.4 = 0 'I2C only
SSPSTAT.3 = 0 'I2C only
SSPSTAT.2 = 0 'I2C only
SSPSTAT.1 = 0 'I2C only
SSPCON1 = 0 'RESET THE CONTROL REGISTER **************************************ADDED
SSPCON1.WCOL = 0 'Collision detect
SSPCON1.SSPOV = 0 'Overflow
SSPCON1.SSPEN = 1 'Configure SCK,SD0,SDI,/SS ** HAS TO BE 1. To reset or reconfigure SPI mode, clear the SSPEN bit,
'reinitialize the sspcon registers And Then set the SSPEN Bit from the datasheet !!!!!!!!!!!!!!!!
SSPCON1.CKP = 1 '= idle state For clock is A HIGH level
SSPCON1.SSPM3 = 0 '0000 = SPI Master mode, clock = FOSC/4
SSPCON1.SSPM2 = 0
SSPCON1.SSPM1 = 0 ''SPI Master mode, clock = F OSC/4
SSPCON1.SSPM0 = 0
End Proc
Hi I,Okay, What do you need from me.
Hello; with the fuse configuration you use your code does not work for me, so I changed the fuse configuration to work with external crystal x 4PLL, then I changed some parameters to orient the screen and the text because it is not exactly the same as yours.Hi D and I,
Looking through yours and Ian's CODEs, I see that they are all derived from the same source, but have been modified in 3 different styles.
D, your style uses INCLUDES and is very long, and comprehensive, and for me too long.
I think we all should work from the same CODE, and modify it between us, which I think would make life easier.
If you agree, then let's choose which CODE as the BASE.
If each of you would try this CODE, which is distilled from all 3x CODES and if it works, then modify it as you wish, and we can all move forward together.
e,g, this one uses a crystal, so perhaps change it to use the Internal oscillator.
Here: is a link to show it working on my PCB: https://drive.google.com/file/d/1fzzMyRiI9qpuW6v6Yaw1QwLQAbgEcYPH/view?usp=drive_link
EDIT: D, I don't mean to critisize your CODE, as it looks superior, so this suggestion is just for testing, then perhaps we can pad it out later.
C.
Code:'18F46K20 32MHz XTL PCB_9 BASE_MASTER TFT ME #164 291124 1100 Define CONFIG1L = 0x00 Define CONFIG1H = 0x06 '6= EXT8 MHz XPLL = 32 MHZ Define CONFIG2L = 0x06 'BORV Set to 3.0V (SBOREN?) Define CONFIG2H = 0x00 Define CONFIG3L = 0x00 Define CONFIG3H = 0x81 'Set for HVP Define CONFIG4L = 0x80 Define CONFIG4H = 0x00 Define CONFIG5L = 0x0f Define CONFIG5H = 0xc0 Define CONFIG6L = 0x0f Define CONFIG6H = 0xe0 Define CONFIG7L = 0x0f Define CONFIG7H = 0x40 Define CLOCK_FREQUENCY = 32 'OSH config Define SINGLE_DECIMAL_PLACES = 2 Define STRING_MAX_LENGTH = 20 'IO MAP 'SET BITS ON/OFF before TRIS! Const LATAinit = %00000000 'ON/OFF Const LATBinit = %00000000 Const LATCinit = %00000000 Const LATDinit = %00000000 Const LATEinit = %00000000 'SET PIN IN/OUT Const TRISAinit = %00000000 Const TRISBinit = %00000000 Const TRISCinit = %00010000 Const TRISDinit = %00000000 Const TRISEinit = %00000000 'Define SIMULATION_WAITMS_VALUE = 1 'Comment in for SIM out for PIC Define SEROUT_DELAYUS = 1000 Disable High Disable Low '############################################### 'lcd driver Const ILI9341_NOP = 0x00 Const ILI9341_SWRESET = 0x01 Const ILI9341_RDDID = 0x04 Const ILI9341_RDDST = 0x09 Const ILI9341_SLPIN = 0x10 Const ILI9341_SLPOUT = 0x11 Const ILI9341_PTLON = 0x12 Const ILI9341_NORON = 0x13 Const ILI9341_INVOFF = 0x20 Const ILI9341_INVON = 0x21 Const ILI9341_DISPOFF = 0x28 Const ILI9341_DISPON = 0x29 Const ILI9341_CASET = 0x2a Const ILI9341_RASET = 0x2b Const ILI9341_RAMWR = 0x2c Const ILI9341_RAMRD = 0x2e Const ILI9341_PTLAR = 0x30 Const ILI9341_COLMOD = 0x3a Const ILI9341_MADCTL = 0x36 Const ILI9341_DISP_FUNC = 0xB6 Const ILI9341_MADCTL_MY = 0x80 Const ILI9341_MADCTL_MX = 0x40 Const ILI9341_MADCTL_MV = 0x20 Const ILI9341_MADCTL_ML = 0x10 Const ILI9341_MADCTL_RGB = 0x00 Const ILI9341_RDID1 = 0xda Const ILI9341_RDID2 = 0xdb Const ILI9341_RDID3 = 0xdc Const ILI9341_RDID4 = 0xdd Const LCD_BLACK = 0x0000 Const LCD_RED = 0x001f Const LCD_BLUE = 0xf800 Const LCD_GREEN = 0x07E0 Const LCD_YELLOW = 0x07ff Const LCD_MAGENTA = 0xf81f Const LCD_CYAN = 0xffe0 Const LCD_WHITE = 0xffff Dim LCD_width As Word ///< Display width as modified by current rotation Dim LCD_height As Word ///< Display height as modified by current rotation Dim LCD_rotation As Byte ///< Display rotation (0 thru 3) Symbol TFT_RST = LATC.0 'RST RESET pin Symbol TFT_DC = LATC.1 'DC (SS) Data/Command pin Symbol TFT_CS = LATC.2 'CS Chip Select pin Symbol TFT_SCK = LATC.3 'SCK as output Symbol TFT_SDI = LATC.4 'SDI as input -> SDO Symbol TFT_SDO = LATC.5 'SDO as output -> SDI Symbol TFT_LED = LATD.3 'Screen backlight Symbol rled = LATE.2 'Red LED '************************************************* Dim str As String Dim x As Byte 'OSCCON = 0x60 'OSCTUNE.PLLEN = 1 TRISA.1 = 0 TRISC = 0 TRISD = 0 TRISE = 0 ADCON1 = 15 TFT_LED = 1 'Switch screen light on 'START UP LED rled = 1 WaitMs 1000 rled = 0 WaitMs 1000 rled = 1 WaitMs 1000 rled = 0 WaitMs 1000 Call init_spi() 'Call SPI_init() Call LCD_init() str = "Hi Ian" Main: Toggle rled WaitMs 100 x = 1 While x = 1 WaitMs 300 LATA.1 = 1 Call fillScreen(LCD_BLACK) 'Call fillScreen(LCD_WHITE) WaitMs 300 LATA.1 = 0 Call fillwindow(10,10,310,230, LCD_BLUE) 'L,T,R,B 'Call fillwindow(10,10,310,230, LCD_BLUE) WaitMs 300 LATA.1 = 1 'Call fillwindow(10,10,230,230, LCD_GREEN) Call fillwindow(10,10,310,230, LCD_GREEN) WaitMs 300 LATA.1 = 0 Call fillScreen(LCD_WHITE) Call LCD_DrawLine(10,10,310,230,LCD_BLACK)'L,T,R,B 'Call LCD_DrawLine(230,10,10,230,LCD_BLACK) Call LCD_DrawLine(10,230,310,10,LCD_BLACK) Call LCD_DrawLine(10,120,310,120,LCD_BLACK) Call LCD_DrawLine(160,10,160,230,LCD_BLACK) Call LCD_Circle(160,120,100,LCD_BLUE) 'Call fillwindow(60,50,180,190, LCD_WHITE) Call LCD_DrawRectangle(70,30,250,210,LCD_BLUE) Call LCD_String( str,110,110, LCD_BLACK, LCD_WHITE) WaitMs 2000 Wend End 'Proc SPI_init() 'SSPSTAT = 0x40 'SSPCON1 = 0x30 'End Proc Proc LCD_WRITE_COM(dat As Byte) TFT_CS = 0 TFT_DC = 0 SSPBUF = dat While SSPSTAT.BF = 0 Wend TFT_DC = 1 TFT_CS = 1 End Proc Proc LCD_WRITE_DATA(dat As Byte) TFT_CS = 0 TFT_DC = 1 SSPBUF = dat While SSPSTAT.BF = 0 Wend TFT_DC = 1 TFT_CS = 1 End Proc Proc LCD_init() Dim idx As Byte Dim cmd As Byte High TFT_RST 'ConfigPin TFT_RST = Output WaitMs 100 Low TFT_RST WaitMs 100 High TFT_RST WaitMs 200 Call LCD_WRITE_COM(ILI9341_SWRESET) WaitMs 150 Call LCD_WRITE_COM(ILI9341_DISPOFF) Call LCD_WRITE_COM(0xCB) //Power control a Call LCD_WRITE_DATA(0x39) Call LCD_WRITE_DATA(0x2C) Call LCD_WRITE_DATA(0x00) Call LCD_WRITE_DATA(0x34) Call LCD_WRITE_DATA(0x02) WaitMs 1 Call LCD_WRITE_COM(0xCF) //Power control b Call LCD_WRITE_DATA(0x00) Call LCD_WRITE_DATA(0XC1) Call LCD_WRITE_DATA(0X30) WaitMs 1 Call LCD_WRITE_COM(0xE8) //Timing control a Call LCD_WRITE_DATA(0x85) Call LCD_WRITE_DATA(0x10) Call LCD_WRITE_DATA(0x78) WaitMs 1 Call LCD_WRITE_COM(0xEA) //Timing control b Call LCD_WRITE_DATA(0x00) Call LCD_WRITE_DATA(0x00) WaitMs 1 Call LCD_WRITE_COM(0xED) //Power on seq control Call LCD_WRITE_DATA(0x64) Call LCD_WRITE_DATA(0x03) Call LCD_WRITE_DATA(0X12) Call LCD_WRITE_DATA(0X81) //WaitMs 1 Call LCD_WRITE_COM(0xC0) //Power control 1 Call LCD_WRITE_DATA(0x26) //VRH[5:0] //WaitMs 1 Call LCD_WRITE_COM(0xC1) //Power control 2 Call LCD_WRITE_DATA(0x11) //SAP[2:0];BT[3:0] //WaitMs 1 Call LCD_WRITE_COM(0xC5) //VCM control Call LCD_WRITE_DATA(0x3e) //Contrast Call LCD_WRITE_DATA(0x28) // WaitMs 1 Call LCD_WRITE_COM(0xF7) Call LCD_WRITE_DATA(0x20) //WaitMs 1 Call LCD_WRITE_COM(ILI9341_MADCTL) 'Call LCD_WRITE_DATA(0x8) 'Top To Bottom-Left To Right CORRECT ORIENTATION Call LCD_WRITE_DATA(0xC8) 'Top To Bottom-Left To Right CORRECT ORIENTATION | Call LCD_WRITE_COM(ILI9341_INVOFF) //WaitMs 1 Call LCD_WRITE_COM(ILI9341_NORON) WaitMs 1 Call LCD_WRITE_COM(ILI9341_COLMOD ) Call LCD_WRITE_DATA(0x55) //WaitMs 1 Call LCD_WRITE_COM(0xB7) //emtry mode Call LCD_WRITE_DATA(0x07) Call LCD_WRITE_COM(0x3A) //pixel format Call LCD_WRITE_DATA(0x55) //16bit Call LCD_WRITE_COM(ILI9341_DISP_FUNC) // Display Function Control Call LCD_WRITE_DATA(0x08) Call LCD_WRITE_DATA(0x82) Call LCD_WRITE_DATA(0x27) WaitMs 1 Call LCD_WRITE_COM(ILI9341_SLPOUT) WaitMs 120 Call LCD_WRITE_COM(ILI9341_DISPON) WaitMs 1 LCD_height = 240 LCD_width = 320 '240 End Proc '/**************************************************************************/ '@brief SPI displays set an address window rectangle For blitting pixels '@param x Top left corner x coordinate '@param y Top left corner x coordinate '@param W Width of window '@param h Height of window '/**************************************************************************/ Proc setAddrWindow(x1 As Word, y1 As Word, x2 As Word, y2 As Word) Call LCD_WRITE_COM(ILI9341_CASET) //Column addr set Call LCD_WRITE_DATA(x1.HB) Call LCD_WRITE_DATA(x1.LB) Call LCD_WRITE_DATA(x2.HB) Call LCD_WRITE_DATA(x2.LB) Call LCD_WRITE_COM(ILI9341_RASET) //Row addr set Call LCD_WRITE_DATA(y1.HB) Call LCD_WRITE_DATA(y1.LB) Call LCD_WRITE_DATA(y2.HB) Call LCD_WRITE_DATA(y2.LB) Call LCD_WRITE_COM(ILI9341_RAMWR) //write to RAM End Proc Proc LCD_DrawLine(x1 As Word, y1 As Word, x2 As Word, y2 As Word, color As Word) Dim t As Word Dim xerr, yerr, delta_x, delta_y, distance As Integer Dim incx, incy, xPix, yPix As Integer xerr = 0 yerr = 0 delta_x = x2 - x1 delta_y = y2 - y1 xPix = x1 yPix = y1 If delta_x > 0 Then incx = 1 If delta_x = 0 Then incx = 0 If delta_x < 0 Then incx = -1 delta_x = -delta_x Endif If delta_y > 0 Then incy = 1 If delta_y = 0 Then incy = 0 If delta_y < 0 Then incy = -1 delta_y = -delta_y Endif If delta_x > delta_y Then distance = delta_x Else distance = delta_y Endif For t = 0 To distance + 1 Step 1 Call LCD_DrawPoint(xPix, yPix, color) xerr = xerr + delta_x yerr = yerr + delta_y If xerr > distance Then xerr = xerr - distance xPix = xPix + incx Endif If yerr > distance Then yerr = yerr - distance yPix = yPix + incy Endif Next t End Proc Proc LCD_Char( char As Byte, x As Word, y As Word, fcol As Word , bcol As Word) Dim x0 As Integer Dim idx, idx2 As Byte Dim mask As Byte For idx = 0 To 9 Step 1 mask = _LCDFnt(char, idx) For idx2 = 0 To 13 Step 2 If mask And 0x80 Then Call LCD_DrawPoint(x+idx2, y, fcol) Call LCD_DrawPoint(x+idx2+1, y, fcol) Call LCD_DrawPoint(x+idx2, y+1, fcol) Call LCD_DrawPoint(x+idx2+1, y+1, fcol) Else Call LCD_DrawPoint(x+idx2, y, bcol) Call LCD_DrawPoint(x+idx2+1, y, bcol) Call LCD_DrawPoint(x+idx2, y+1, bcol) Call LCD_DrawPoint(x+idx2+1, y+1, bcol) Endif mask = ShiftLeft(mask,1) Next idx2 y = y + 2 Next idx End Proc Proc LCD_String( str As String, x As Word, y As Word, fcol As Word , bcol As Word) Dim idx As Byte Dim x0 As Word idx = 0 While str(idx) <> 0 Call LCD_Char(str(idx), x, y,fcol,bcol) x = x+18 idx = idx + 1 Wend End Proc // Rectangle Proc LCD_DrawRectangle( x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer, color As Word) Call LCD_DrawLine(x1, y1, x2, y1, color) Call LCD_DrawLine(x1, y1, x1, y2, color) Call LCD_DrawLine(x1, y2, x2, y2, color) Call LCD_DrawLine(x2, y1, x2, y2, color) End Proc // Circle routine Proc LCD_Circle(x1 As Word, y1 As Word, rad As Word, color As Word) Dim xPix, yPix, di As Integer xPix = 0 yPix = rad di = 3 - ShiftLeft(rad,1) While xPix <= yPix Call LCD_DrawPoint(x1+xPix, y1-yPix, color) Call LCD_DrawPoint(x1+yPix, y1-xPix, color) Call LCD_DrawPoint(x1+yPix, y1+xPix, color) Call LCD_DrawPoint(x1+xPix, y1+yPix, color) Call LCD_DrawPoint(x1-xPix, y1+yPix, color) Call LCD_DrawPoint(x1-yPix, y1+xPix, color) Call LCD_DrawPoint(x1-xPix, y1-yPix, color) Call LCD_DrawPoint(x1-yPix, y1-xPix, color) xPix = xPix + 1 If di < 0 Then di= (4 * xPix + 6) + di Else di= (10 + 4 * (xPix-yPix)) + di yPix = yPix - 1 Endif Wend End Proc // line drawing Proc LCD_DrawPoint(x1 As Word, y1 As Word ,color As Word) Call LCD_WRITE_COM(ILI9341_CASET) //Column addr set Call LCD_WRITE_DATA(x1.HB) Call LCD_WRITE_DATA(x1.LB) Call LCD_WRITE_COM(ILI9341_RASET) //Row addr set Call LCD_WRITE_DATA(y1.HB) Call LCD_WRITE_DATA(y1.LB) Call LCD_WRITE_COM(ILI9341_RAMWR) //write to RAM Call LCD_WRITE_DATA(color.HB) Call LCD_WRITE_DATA(color.LB) End Proc '/**************************************************************************/ Proc fillRect(x1 As Word, y1 As Word, x2 As Word, y2 As Word, color As Word) Dim px As Long Dim tmp As Word If x2 > 0 And y2 > 0 Then //Nonzero width and height? Call setAddrWindow(x1, y1, x2, y2) px = x2 px = px * y2 TFT_CS = 0 TFT_DC = 1 While px > 1 SSPBUF = color.HB While SSPSTAT.BF = 0 Wend SSPBUF = color.LB While SSPSTAT.BF = 0 Wend px = px - 1 Wend TFT_DC = 1 TFT_CS = 1 Endif End Proc '/**************************************************************************/ '@brief Fill the screen completely with one color. Update in subclasses If desired! '@param color 16-Bit 5-6-5 Color To fill with '/**************************************************************************/ Proc fillScreen(color As Word) Call fillRect(0, 0, LCD_width, LCD_height, color) End Proc Proc fillwindow(x1 As Word,y1 As Word,x2 As Word,y2 As Word,color As Word) Call fillRect(x1, y1, x2, y2, color) End Proc Function _LCDFnt(ch As Byte, idx As Byte) As Byte Symbol Retval = _LCDFnt Select Case ch Case " " Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), idx //SPACE Case "!" Retval = LookUp(0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x00), idx //! Case 34 Retval = LookUp(0x00, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), idx // " Case "#" Retval = LookUp(0x00, 0x12, 0x12, 0x7f, 0x24, 0x24, 0xfe, 0x48, 0x48, 0x00), idx //# Case "$" Retval = LookUp(0x00, 0x10, 0x7c, 0x92, 0x70, 0x1c, 0x92, 0x7c, 0x10, 0x00), idx //$ Case "%" Retval = LookUp(0x00, 0x41, 0xa2, 0x44, 0x08, 0x10, 0x22, 0x45, 0x82, 0x00), idx //% Case "&" Retval = LookUp(0x00, 0x10, 0x28, 0x10, 0x28, 0x44, 0x43, 0x42, 0x39, 0x00), idx //& Case "'" Retval = LookUp(0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), idx //' Case "(" Retval = LookUp(0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00), idx //( Case ")" Retval = LookUp(0x00, 0x08, 0x04, 0x02, 0x02, 0x02, 0x20, 0x04, 0x08, 0x00), idx //) Case "*" Retval = LookUp(0x00, 0x08, 0x2a, 0x1c, 0x7f, 0x1c, 0x2a, 0x08, 0x00, 0x00), idx //* Case "+" Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x08, 0x08, 0x00, 0x00), idx //+ Case "," Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x00), idx //, Case "-" Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00), idx //- Case "." Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00), idx //. Case "/" Retval = LookUp(0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00), idx /// Case "0" Retval = LookUp(0x00, 0x3c, 0x46, 0x4a, 0x4a, 0x52, 0x52, 0x62, 0x3c, 0x00), idx //0 Case "1" Retval = LookUp(0x00, 0x08, 0x18, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3e, 0x00), idx //1 Case "2" Retval = LookUp(0x00, 0x3c, 0x42, 0x02, 0x0c, 0x30, 0x40, 0x40, 0x7e, 0x00), idx //2 Case "3" Retval = LookUp(0x00, 0x3c, 0x42, 0x02, 0x0c, 0x02, 0x02, 0x42, 0x3c, 0x00), idx //3 Case "4" Retval = LookUp(0x00, 0x09, 0x18, 0x28, 0x48, 0x48, 0x7e, 0x08, 0x08, 0x00), idx //4 Case "5" Retval = LookUp(0x00, 0x7e, 0x40, 0x40, 0x7c, 0x02, 0x02, 0x42, 0x3c, 0x00), idx //5 Case "6" Retval = LookUp(0x00, 0x3c, 0x42, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x3c, 0x00), idx //6 Case "7" Retval = LookUp(0x00, 0x7e, 0x02, 0x02, 0x04, 0x08, 0x10, 0x10, 0x10, 0x00), idx //7 Case "8" Retval = LookUp(0x00, 0x3c, 0x42, 0x42, 0x3c, 0x42, 0x42, 0x42, 0x3c, 0x00), idx //8 Case "9" Retval = LookUp(0x00, 0x3c, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x42, 0x3c, 0x00), idx //9 Case ":" Retval = LookUp(0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x08, 0x08, 0x00, 0x00), idx //: Case ";" Retval = LookUp(0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x08, 0x08, 0x10, 0x00), idx //; Case "<" Retval = LookUp(0x00, 0x04, 0x08, 0x10, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00), idx //< Case "=" Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x3e, 0x00, 0x00, 0x00), idx //= Case ">" Retval = LookUp(0x00, 0x10, 0x08, 0x04, 0x02, 0x02, 0x04, 0x08, 0x10, 0x00), idx //> Case "?" Retval = LookUp(0x00, 0x3c, 0x42, 0x02, 0x04, 0x08, 0x08, 0x00, 0x08, 0x00), idx //? Case "@" Retval = LookUp(0x00, 0x7e, 0x81, 0x9b, 0xa5, 0xa6, 0x9c, 0x81, 0x7e, 0x00), idx //@ Case "A" Retval = LookUp(0x00, 0x18, 0x24, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x00), idx //A Case "B" Retval = LookUp(0x00, 0x7c, 0x42, 0x42, 0x7c, 0x42, 0x42, 0x42, 0x7c, 0x00), idx //B Case "C" Retval = LookUp(0x00, 0x3c, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x3c, 0x00), idx //C Case "D" Retval = LookUp(0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x00), idx //D Case "E" Retval = LookUp(0x00, 0x7e, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x7e, 0x00), idx //E Case "F" Retval = LookUp(0x00, 0x7e, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x40, 0x00), idx //F Case "G" Retval = LookUp(0x00, 0x3c, 0x42, 0x40, 0x40, 0x46, 0x42, 0x42, 0x3c, 0x00), idx //G Case "H" Retval = LookUp(0x00, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x00), idx //H Case "I" Retval = LookUp(0x00, 0x7e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x7e, 0x00), idx //I Case "J" Retval = LookUp(0x00, 0x7e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x48, 0x30, 0x00), idx //J Case "K" Retval = LookUp(0x00, 0x42, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, 0x42, 0x00), idx //K Case "L" Retval = LookUp(0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7e, 0x00), idx //L Case "M" Retval = LookUp(0x00, 0x42, 0x42, 0x66, 0x5a, 0x42, 0x42, 0x42, 0x42, 0x00), idx //M Case "N" Retval = LookUp(0x00, 0x42, 0x42, 0x62, 0x52, 0x4a, 0x46, 0x42, 0x42, 0x00), idx //N Case "O" Retval = LookUp(0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00), idx //O Case "P" Retval = LookUp(0x00, 0x7c, 0x42, 0x42, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00), idx //P Case "Q" Retval = LookUp(0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x4a, 0x46, 0x3e, 0x00), idx //Q Case "R" Retval = LookUp(0x00, 0x7c, 0x42, 0x42, 0x7c, 0x48, 0x44, 0x42, 0x42, 0x00), idx //R Case "S" Retval = LookUp(0x00, 0x3c, 0x42, 0x40, 0x30, 0x0c, 0x02, 0x42, 0x3c, 0x00), idx //S Case "T" Retval = LookUp(0x00, 0x7e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00), idx //T Case "U" Retval = LookUp(0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00), idx //U Case "V" Retval = LookUp(0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00), idx //V Case "W" Retval = LookUp(0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x5a, 0x66, 0x42, 0x00), idx //W Case "X" Retval = LookUp(0x00, 0x42, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x42, 0x00), idx //X Case "Y" Retval = LookUp(0x00, 0x42, 0x42, 0x24, 0x18, 0x05, 0x08, 0x08, 0x08, 0x00), idx //Y Case "Z" Retval = LookUp(0x00, 0x7e, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7e, 0x00), idx //Z Case "[" Retval = LookUp(0x00, 0x3c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x00), idx //[ Case "\" Retval = LookUp(0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00), idx //\ Case "]" Retval = LookUp(0x00, 0x3c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x3c, 0x00), idx //] Case "^" Retval = LookUp(0x00, 0x08, 0x14, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), idx //^ Case "_" Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00), idx //_ Case "`" Retval = LookUp(0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00), idx //` Case "a" Retval = LookUp(0x00, 0x00, 0x00, 0x1c, 0x02, 0x1e, 0x22, 0x22, 0x1e, 0x00), idx //a Case "b" Retval = LookUp(0x00, 0x20, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x3c, 0x00), idx //b Case "c" Retval = LookUp(0x00, 0x00, 0x00, 0x1c, 0x22, 0x20, 0x20, 0x22, 0x1c, 0x00), idx //c Case "d" Retval = LookUp(0x00, 0x02, 0x02, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x1e, 0x00), idx //d Case "e" Retval = LookUp(0x00, 0x00, 0x00, 0x1c, 0x22, 0x3e, 0x20, 0x22, 0x1c, 0x00), idx //e Case "f" Retval = LookUp(0x00, 0x0c, 0x10, 0x10, 0x3c, 0x10, 0x10, 0x10, 0x10, 0x00), idx //f Case "g" Retval = LookUp(0x00, 0x00, 0x00, 0x1e, 0x22, 0x22, 0x22, 0x1e, 0x02, 0x3c), idx //g Case "h" Retval = LookUp(0x00, 0x20, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00), idx //h Case "i" Retval = LookUp(0x00, 0x08, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00), idx //i Case "j" Retval = LookUp(0x00, 0x08, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x30), idx //j Case "k" Retval = LookUp(0x00, 0x20, 0x20, 0x22, 0x24, 0x38, 0x24, 0x22, 0x22, 0x00), idx //k Case "l" Retval = LookUp(0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x00), idx //l Case "m" Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x36, 0x2a, 0x22, 0x22, 0x22, 0x00), idx //m Case "n" Retval = LookUp(0x00, 0x00, 0x00, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00), idx //n Case "o" Retval = LookUp(0x00, 0x00, 0x00, 0x1c, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x00), idx //o Case "p" Retval = LookUp(0x00, 0x00, 0x00, 0x7c, 0x14, 0x14, 0x14, 0x08, 0x00, 0x00), idx //p Case "q" Retval = LookUp(0x00, 0x00, 0x00, 0x3c, 0x22, 0x22, 0x22, 0x3c, 0x20, 0x20), idx //q Case "r" Retval = LookUp(0x00, 0x00, 0x00, 0x2e, 0x30, 0x20, 0x20, 0x20, 0x20, 0x00), idx //r Case "s" Retval = LookUp(0x00, 0x00, 0x00, 0x1c, 0x22, 0x10, 0x0c, 0x22, 0x1c, 0x00), idx //s Case "t" Retval = LookUp(0x00, 0x10, 0x10, 0x38, 0x10, 0x10, 0x10, 0x12, 0x0c, 0x00), idx //t Case "u" Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1c, 0x00), idx //u Case "v" Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x14, 0x08, 0x00), idx //v Case "w" Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x2a, 0x36, 0x22, 0x00), idx //w Case "x" Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x14, 0x08, 0x14, 0x22, 0x22, 0x00), idx //x Case "y" Retval = LookUp(0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x22, 0x1e, 0x02, 0x3c), idx //y Case "z" Retval = LookUp(0x00, 0x00, 0x00, 0x3e, 0x02, 0x04, 0x08, 0x10, 0x3e, 0x00), idx //z Case "{" Retval = LookUp(0x00, 0x04, 0x08, 0x08, 0x08, 0x10, 0x08, 0x08, 0x08, 0x04), idx //{ Case "|" Retval = LookUp(0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00), idx //| Case "}" Retval = LookUp(0x00, 0x10, 0x08, 0x08, 0x08, 0x04, 0x08, 0x08, 0x08, 0x10), idx //} Case "~" Retval = LookUp(0x00, 0x00, 0x00, 0x00, 0xcc, 0x33, 0x00, 0x00, 0x00, 0x00), idx //~ Case 165 '"Ñ" + chr(165) + Retval = LookUp(0x00, 0x00, 0x00, 0x7e, 0x05, 0x09, 0x11, 0x7e), idx //Ñ Case 164'"ñ" + chr(164) + Retval = LookUp(0x00, 0x00, 0x00, 0x78, 0x12, 0x0a, 0x0a, 0x70), idx //ñ EndSelect End Function '******************************************************* '* * '* START UP SPI ROUTINE * '* * '******************************************************* Proc init_spi() 'PIC 18F46K20 TRISC.3 = 0 'SCK to Slave ****** output ******* TRISC.5 = 0 'MOSI ****** output ******* TRISC.4 = 1 'MISO ****** input ******* 'MODE 0,0??? SSPSTAT.SMP = 0 'Input data sampled at middle of data output time ** not about clock generation ** SSPSTAT.CKE = 1 'CHANGED to 1 [0 Output data changes on clock transition from active to idle ** AS ABOVE **] SSPSTAT.5 = 0 'I2C only SSPSTAT.4 = 0 'I2C only SSPSTAT.3 = 0 'I2C only SSPSTAT.2 = 0 'I2C only SSPSTAT.1 = 0 'I2C only SSPCON1 = 0 'RESET THE CONTROL REGISTER **************************************ADDED SSPCON1.WCOL = 0 'Collision detect SSPCON1.SSPOV = 0 'Overflow SSPCON1.SSPEN = 1 'Configure SCK,SD0,SDI,/SS ** HAS TO BE 1. To reset or reconfigure SPI mode, clear the SSPEN bit, 'reinitialize the sspcon registers And Then set the SSPEN Bit from the datasheet !!!!!!!!!!!!!!!! SSPCON1.CKP = 1 '= idle state For clock is A HIGH level SSPCON1.SSPM3 = 0 '0000 = SPI Master mode, clock = FOSC/4 SSPCON1.SSPM2 = 0 SSPCON1.SSPM1 = 0 ''SPI Master mode, clock = F OSC/4 SSPCON1.SSPM0 = 0 End Proc
Hi D,Hello; with the fuse configuration you use your code does not work for me, so I changed the fuse configuration to work with external crystal x 4PLL, then I changed some parameters to orient the screen and the text because it is not exactly the same as yours.
I have noticed that if the text string is longer than 17 characters it is cut off. I am reviewing the code but for the moment I have not found the problem.
Hi D,HI C:
To configure my TFT:
Call SetRotation(1) '0 and 2 TFT horizontal, 1 and 3 TFT Vertical
Const ILI9341_MADCTL_MV = 0x60 '0, 20, 40, 60, Rotate text.
---
Proc LCD_String( str As String, x As Word, y As Word, fcol As Word , bcol As Word)
Dim idx As Byte
'Dim x0 As Word
idx = 0
While str(idx) <> 0
Call LCD_Char(str(idx), x, y,fcol,bcol)
x = x+14 '18, To reduce the space between characters.
idx = idx + 1
Wend
End Proc
---
This is the configuration to avoid problems during testing. If your PCB has a reset button you can enable MCLR:
View attachment 148421
And remember this code indicates if you are working at the desired frequency:
'Test Clock frequency
UART1_Init 115200
UART1_Write 0x0C
WaitMs 100
UART1_Write "Ready"
And inserting the blinking of an LED in the code indicates that the microcontroller is not blocked but does not indicate that you are working at the desired frequency.
They are resources that are used to verify completely different topics.
Hi I,Hi C.. I was pulled away again, I was drafted to sort the Bank out.
I will try your code on Monday... I took it to work so I could analyze the signals
Hi I,I made a little hat for your board.. It has the TFT on it
So I'll keep using that one.
Hi D,I have tested the ILI9341 display using a 10Mhz SPI bus clock frequency and it works.
Hi D,Hi C; the code is updated and the changes are indicated. Regarding the ILI9341 TFT, I thought that is the one we are currently using because it is the one mentioned in your code. I prefer the ST7789 because it can go faster up to 16Mhz SPI bus speed and works at 5V.
Hi C, here’s a description of the PIC18F16K22 fuses:Hi D,
Update, thanks. Will you let me know also the differences in the CONFIGS 2L, 2H, 3L,and 3H please.
Some of the posted CODE looks like this:
Const ST77XX_NOP = 0x00 ' No operation
Const ST77XX_SWRESET = 0x01 ' Software reset
Const ST77XX_RDDID = 0x04 ' Read display ID
Const ST77XX_RDDST = 0x09 ' Read display status
and some looks like this, so there's some confusion.
Const ILI9341_NOP = 0x00
Const ILI9341_SWRESET = 0x01
Const ILI9341_RDDID = 0x04
Const ILI9341_RDDST = 0x09
I think both types of CODE come from the same source, so they both work, but I'm not sure?
Once Ian has got his to work, I'll re-write it so it is clearer. I'll only make small adjustments, then we can all check again.
Cheers, C.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?