Hello there,

Here's a code snippet involving a 72x40 OLED display and this PIC having lots of memory.

I'm comparing this program with another I made with a 16F690 but, of course, there are some changes.

Unfortunately, I can't find what is still missing -or wrong- so any idea is welcome to help me get this display working

Code:
' ====== FUSES =====================================================================================
' External Oscillator

' 16F18446
#CONFIG
    __config _CONFIG1, _FCMEN_OFF & _CSWEN_OFF & _CLKOUTEN_OFF & _RSTOSC_EXT1X & _FEXTOSC_HS
    __config _CONFIG2, _MCLRE_OFF & _PWRTS_PWRT_64 & _LPBOREN_OFF & _BOREN_SBOREN & _BORV_LO & _ZCDDIS_OFF & _PPS1WAY_OFF & _STVREN_ON
    __config _CONFIG3, _WDTCPS_WDTCPS_31 & _WDTE_SWDTEN & _WDTCWS_WDTCWS_7 & _WDTCCS_LFINTOSC
    __config _CONFIG4, _BBSIZE_BB512 & _BBEN_OFF & _SAFEN_OFF & _WRTAPP_OFF & _WRTB_OFF & _WRTC_OFF & _WRTD_OFF & _WRTSAF_OFF & _LVP_OFF
    __config _CONFIG5, _CP_OFF
#ENDCONFIG

@ ERRORLEVEL -306
@ ERRORLEVEL -202

' ====== REGISTERS =================================================================================
' 16F18446
ANSELA  = %00000000
WPUA    = %00000000
ANSELB  = %00000000
WPUB    = %00000000
ANSELC  = %00000000
WPUC    = %00000000
ADCON0  = %00000000
ADCON1  = %00000000
ADCON2  = %00000000
ADCON3  = %00000000
INTCON  = %00000000
CM1CON0 = %00000000
CM1CON1 = %00000000
TRISA   = %00000000
TRISB   = %00000000
TRISC   = %00000000
PORTA   = %00000000
PORTB   = %00000000
PORTC   = %00000000
LATA    = %00000000
LATB    = %00000000
LATC    = %00000000
INLVLA  = %00000000
INLVLB  = %00000000
INLVLC  = %00000000


' ====== DEFINES ===================================================================================
DEFINE OSC 4

' ====== VARIABLES =================================================================================
SDA         VAR LATB.5
SCL         VAR LATB.6
I2CDevice   CON $78
Page        VAR BYTE

' ====== SSD1306 I2C 72x40 OLED display initialization =============================================
PAUSE 500 ' let OLED module settle

I2CWrite SDA,SCL,I2CDevice,[$00,$AE]
I2CWrite SDA,SCL,I2CDevice,[$00,$D5]
I2CWrite SDA,SCL,I2CDevice,[$00,$80]
I2CWrite SDA,SCL,I2CDevice,[$00,$A8]
I2CWrite SDA,SCL,I2CDevice,[$00,$3F]
I2CWrite SDA,SCL,I2CDevice,[$00,$D3]
I2CWrite SDA,SCL,I2CDevice,[$00,$00]
I2CWrite SDA,SCL,I2CDevice,[$00,$20]
I2CWrite SDA,SCL,I2CDevice,[$00,$00]
I2CWrite SDA,SCL,I2CDevice,[$00,$AD]
I2CWrite SDA,SCL,I2CDevice,[$00,$30]
I2CWrite SDA,SCL,I2CDevice,[$00,$8D]
I2CWrite SDA,SCL,I2CDevice,[$00,$14]
I2CWrite SDA,SCL,I2CDevice,[$00,$68]
I2CWrite SDA,SCL,I2CDevice,[$00,$A6]
I2CWrite SDA,SCL,I2CDevice,[$00,$A4]
I2CWrite SDA,SCL,I2CDevice,[$00,$A1]
I2CWrite SDA,SCL,I2CDevice,[$00,$C8]
I2CWrite SDA,SCL,I2CDevice,[$00,$DA]
I2CWrite SDA,SCL,I2CDevice,[$00,$12]
I2CWrite SDA,SCL,I2CDevice,[$00,$81]
I2CWrite SDA,SCL,I2CDevice,[$00,$7F]
I2CWrite SDA,SCL,I2CDevice,[$00,$D9]
I2CWrite SDA,SCL,I2CDevice,[$00,$22]
I2CWrite SDA,SCL,I2CDevice,[$00,$DB]
I2CWrite SDA,SCL,I2CDevice,[$00,$40]
I2CWrite SDA,SCL,I2CDevice,[$00,$2E]
I2CWrite SDA,SCL,I2CDevice,[$00,$AF]

' Clear display
I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,99,$22,0,4]
FOR Page = 0 TO 4
    I2CWrite SDA,SCL,I2CDevice,[$40,_
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, _
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, _
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, _
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
NEXT Page

' ====== PROGRAM ===================================================================================
MAIN:

    I2CWrite SDA,SCL,I2CDevice,[$00,$21,28,43,$22,1,4]
    GOSUB ZERO32x16

    I2CWrite SDA,SCL,I2CDevice,[$00,$21,50,65,$22,1,4]
    GOSUB ZERO32x16

    I2CWrite SDA,SCL,I2CDevice,[$00,$21,72,76,$22,1,4]
    GOSUB DOT32x16

    I2CWrite SDA,SCL,I2CDevice,[$00,$21,84,99,$22,1,4]
    GOSUB ZERO32x16

    LATB.7 = !LATB.7 ' proof of loop
    pause 500

    GOTO MAIN
END

    
' ====== CHARACTERS TO DISPLAY =====================================================================
ZERO32x16:
    I2CWrite SDA,SCL,I2CDevice,[$40,_
        128,192,224,240,240,240,240,240,240,240,240,240,240,224,192,128, _
        255,255,255,255,1,0,0,0,0,0,0,1,255,255,255,255, _
        255,255,255,255,0,0,0,0,0,0,0,0,255,255,255,255, _
        31,63,127,255,248,240,240,240,240,240,240,248,255,127,63,31]
    RETURN

DOT32x16:
    I2CWrite SDA,SCL,I2CDevice,[$40,_
        0,0,0,0,0,_
        0,0,0,0,0,_
        0,0,0,0,0,_
        248,248,248,248,248]    
    RETURN