This is the working code. It steps up through 21 steps of PWM (from 30 to 50) and then steps down (from 50 to 20). The result is an output voltage between 5.5V and 8.5V (the numbers are rounded up). This is design for testing the flexibility of the system only. Final code will implement a temperature controlling algorithm. BTW I switched to PIC16F819 since this is the PIC I'm going to use for this task.

Code based on Dave's input (183):
Code:
@__config_device_pic16f819
@__config_wdt_off
@__config_hs_osc
@__config_pwrt_on
@__config_mclr_off
@__config_lvp_off
@__config_protect_on
@__config_CCP1_RB2

OSCCON=%01110111     
DEFINE OSC 8        
            
i           var         word
pwm_out     var         PORTB.2
pwm_pars    var         word
min_pwm     con         30
max_pwm     con         50
CCP1CON = %00001100     
PR2 = 15            
CCPR1L = 0         
CCP1CON.5 = 0
CCP1CON.4 =0
                                                                                               
    High pwm_out
    Pause 500
    Low pwm_out
    T2CON.2 = 1 
    goto Main
set_pwm_pars:
     CCPR1L = pwm_pars >> 2
     CCP1CON=$0C|((pwm_pars&$3)<<4) 
     RETURN
Main:
     for i=min_pwm to max_pwm
     pwm_pars = i
     gosub set_pwm_pars
     pause 250
     next
     for i=max_pwm to min_pwm step -1
     pwm_pars = i
     gosub set_pwm_pars
     pause 250
     next
     Pause 5000
Goto Main
With the same main loop I changed the subroutine set_pwm_pars based on Pedja089 input (163):

Code:
set_pwm_pars:
     CCP1CON.5 = pwm_pars.1                
     CCP1CON.4 = pwm_pars.0
     CCPR1L = pwm_pars >> 2
     RETURN
Finally my simplified version for the subroutine (187):

Code:
set_pwm_pars:
     CCP1CON.5 = pwm_pars.1                
     CCP1CON.4 = pwm_pars.0
     CCPR1L = pwm_pars / 4
     RETURN
The output from all is the same (as expected). Cannot comment on execution speed and for my purposes it doesn’t really matter. I will only set a step, based on the temperature control algorithm, and sit on it for a while. I’m sure that the wine will not mind a few microseconds shifted response.
The one difference between the three versions is the code space required. The numbers in parentheses are showing that.

So far I’m happy with my results.
I will work on the hardware for the next few days and start working on the temperature control algorithm after that.
Before I start this new task I’m asking all the people in this forum that might have some experience in this field: Am I on the right track? Is there a better way to do it?
I love its simplicity and the fact that I fully understand how it works but in the same time I hate to find it out that is wrong after I already spent a lot of time on it.

As always looking forward for input.

Nick