The "HPWM" Command only works with CCPx Modules, not PWMx. This should get you functional:

Code:
#CONFIG
 CONFIG PPS1WAY = OFF                ;PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence)
#ENDCONFIG


Value       VAR     BYTE


Init:
;   -=- NOTE: This is merely example code.  There are no SFRs for OSC and other Important Registers!! -=-


    TRISC.2 = 1                     ;Initialize PWM4 Output as an Input, will change later
    ANSELC.2 = 0                    ;Make PWM4 Output Digital
    PIE4.1 = 0                      ;Ensure TMR2 Interrupt is Disabled
    PIR4.1 = 0                      ;Clear TMR2 Interrupt Flag
    
; -=- NOTE: Section 20 of the Data Sheet Covers Pre/Post Scalers for Timer 2 -=-
    T2CON = %00100000               ;1:4 Prescaler, note ON = 0
    T2CON.7 = 1                     ;Turn Timer 2 ON in Separate Operation
    WHILE PIR4.1 = 0                ;Wait Until Timer2 is Running
    WEND
    PIR4.1 = 0                      ;Timer 2 is Now Running
    TRISC.2 = 0                     ;Now Change RC2 to Output
    PPSLOCK = $55                   ;Peripheral Pin Select
    PPSLOCK = $AA                   ; Unlock Sequence
    PPSLOCK.0 = 0                   ; PPS = UNLOCKED
    RC2PPS = $08                    ;PWM4 Output on RC2
; -=- NOTE: You can Lock PPS when you're done (Optional, but Recommended)
    PPSLOCK = $55                   ;Peripheral Pin Select
    PPSLOCK = $AA                   ; Unlock Sequence
    PPSLOCK.0 = 1                   ; PPS = LOCKED
    PWM4DCL = 0
    PWM4DCH = 100                   ;THIS IS YOUR DUTY CYCLE REGISTER, 0 >> 255 (8-bit)
    PWM4CON = $80                   ;Turn PWM4 ON
    
Main:
DO
    'GOSUB Get_PWM4                 ; -=- Determine Value for PWM4 DC%
    PWM4DCH = Value
    LOOP