maybe the chip?

for my part I used

12F683, 16F690 old regular Pic.

I tried richard code, and it's impressive asm code, that I can't do for sure.

so I stick to basic.

when you're back on this LCD, try this 'self text' backpack for 16F690 maybe it will give a hint.

Code:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Name  : 16F690 LCD BACKPACK  Self Text
' File  : "D:\PIC\PBP3\16F690\LCD BACKPACK\16F690 LCD BACKPACK Self Text.pbp"
' Date  : Oct 4-2025
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Serin2   
'#CONFIG
'  __config  _INTRC_OSC_CLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF
'#ENDCONFIG


 ' HSERIN
#CONFIG
  __config  _HS_OSC & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _IESO_OFF & _FCMEN_OFF
#ENDCONFIG


DEFINE OSC 20       ' Core is running at EXT-CRYSTAL 20MHz PBP 33,217
'DEFINE OSC 8
ANSEL = 0           ' Set all pins digital
ANSELH = 0          ' Set all pins digital
OPTION_REG.7 = 0    ' PORTA/PORTB pull-ups are enabled by individual port latch values
CM1CON0 = 0         ' Analog comparators off


En var Portb.4 : low en
RS var Portb.6 : low rs
B1 var byte : b1 = 0
C VAR BYTE : C = 100
I VAR BYTE 


' 1602
ArrayA var Byte [16] : ARRAYWRITE ArrayA,["ABCDEF1234567890"] ' Line 1
ArrayB var Byte [16] : ARRAYWRITE ArrayB,["1234567890!@#$%^"] ' Line 2
' 2004
'ArrayC var Byte [20] : ARRAYWRITE ArrayC,["ABCDEF1234567890!@#$"] ' Line 1
'ArrayD var Byte [20] : ARRAYWRITE ArrayD,["1234567890!@#$%^!@#$"] ' Line 2
'ArrayE var Byte [20] : ARRAYWRITE ArrayE,["ABCDEF1234567890!@#$"] ' Line 3
'ArrayF var Byte [20] : ARRAYWRITE ArrayF,["1234567890!@#$%^!@#$"] ' Line 4


TRISA = 0 : TRISB = %00100000 : TRISC = 0
PORTA = 0 : PORTB = 0 : PORTC = 0
OSCCON = $70  


pause 100
high Porta.0              ' Backlight ON
gosub LCDinit             ' initialise LCD
pause 100


main:
' 1602
Low RS : PORTC = 128 : High En : PauseUS 1 : Low En : High RS : Pause 3 ' Line 1
For I = 0 To 15
    PORTC = ArrayA[I] 
    High En : PauseUS 1 : Low En
    Pause C
Next I
Low RS : PORTC = 192 : High En : PauseUS 1 : Low En : High RS : Pause 3 ' Line 2
For I = 0 To 15 
    PORTC = ArrayB[I] 
    High En : PauseUS 1 : Low En
    Pause C
Next I


' 2004 
'Low RS : PORTC = 128 : High En : PauseUS 1 : Low En : High RS : Pause 3 ' Line 1
'For I = 0 To 19
'    PORTC = ArrayC[I] 
'    High En : PauseUS 1 : Low En
'    Pause C
'Next I
'Low RS : PORTC = 192 : High En : PauseUS 1 : Low En : High RS : Pause 3 ' Line 2
'For I = 0 To 19 
'    PORTC = ArrayD[I] 
'    High En : PauseUS 1 : Low En
'    Pause C
'Next I
'Low RS : PORTC = 148 : High En : PauseUS 1 : Low En : High RS : Pause 3 ' Line 3
'For I = 0 To 19
'    PORTC = ArrayE[I] 
'    High En : PauseUS 1 : Low En
'    Pause C
'Next I
'Low RS : PORTC = 212 : High En : PauseUS 1 : Low En : High RS : Pause 3 ' Line 4
'For I = 0 To 19 
'    PORTC = ArrayF[I] 
'    High En : PauseUS 1 : Low En
'    Pause C
'Next I
 
Pause 1000
Low RS : PORTC = 1 : High En : PauseUS 1 : Low En : High RS : PauseUS 4  ' Clear display 
Pause 500
'Low PORTA.0      ' Bacck Light off
Pause 200
High PORTA.0     ' Bacck Light on
Pause 200


C = C - 20
If C < 20 Then 
C = 100
EndIf


GoTo main
    
LCDINIT:				  ' Standard LCD Module Initialisation
PORTC = %00000001 : HIGH EN : PAUSEus 1 : LOW EN : pause 4 ' Clear Display
PORTC = %00000010 : HIGH EN : PAUSEus 1 : LOW EN : pause 2 ' Return Home
PORTC = %00111000 : HIGH EN : PAUSEus 1 : LOW EN : Pause 2 ' 8 bit, 2 line, 5x8 Characters
PORTC = %00000110 : HIGH EN : PAUSEus 1 : LOW EN : Pause 2 ' Entry mode
PORTC = %00001100 : HIGH EN : PAUSEus 1 : LOW EN : Pause 2 ' %00001DCB Display on/off, Cursor on/off, Blink y/n	  
RETURN