PIC16 (L) F1786 tiene 3 módulos CCP. Necesito una señal PWM en el pin RB5 que pertenece al módulo CCP3, así como el pin RC6. PERO, cuando estoy configurando el PWM de acuerdo con la hoja de datos (página 277), estoy obtener señal PWM en RC6 en lugar de RB5, aunque en APFCON2 el bit CCP3SEL del registro se establece en 1. ¿Es incluso posible obtener PWM en RB5 en lugar de RC6? Y un "PERO" más: estoy usando Proteus para probar el firmware, y no sé si es un error en Proteus o me falta algo. Estoy 99% seguro de que estoy haciendo algo mal ya que este es mi segundo día de programación del microcontrolador PIC.
Gracias.
A continuación, estoy enumerando la configuración y mi código en MPLAB X IDE utilizando el compilador RC8:
#pragma config FOSC = INTOSC
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = ON
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config CLKOUTEN = OFF
#pragma config IESO = ON
#pragma config FCMEN = ON
#pragma config WRT = OFF
#pragma config VCAPEN = OFF
#pragma config PLLEN = OFF
#pragma config STVREN = ON
#pragma config BORV = LO
#pragma config LPBOR = OFF
#pragma config LVP = ON
#include <xc.h>
void main(void) {
TRISA = 0x00;
TRISB = 0x00;
TRISC = 0x00;
TRISE = 0x04;
TRISBbits.TRISB5 = 0x01;
TRISCbits.TRISC6 = 0x01;
PR2 = 0x63; // PWMPeriod = (PR2(99)+1)*4*TMR2_Prescale_Value(1)/(f(8 000 000)) = 20kHz
CCP3CONbits.CCP3M = 0x00;
// CCP3M Mode Select bits 11xx = PWM mode
CCP3CONbits.CCP3M3 = 0x01;
CCP3CONbits.CCP3M2 = 0x01;
CCPR3L = 0x32;
CCP3CONbits.DC3B = 0x00; // CCP3L:DC3B = 0x32:0x00 = 00110010 00 = 200 DEC
PIR1bits.TMR2IF = 0x00;
APFCON2bits.CCP3SEL = 0x01; // CCP3SEL: CCP3 Input/Output Pin Selection bit, if 1 then CCP3 is on pin RB5
//Timer configuration
T2CONbits.T2CKPS = 0x00; // Timer prescale value 1:1
T2CONbits.T2OUTPS = 0x00; // Timer postscale value 1:1
T2CONbits.TMR2ON = 0x01; // Enable the Timer
while(!PIR1bits.TMR2IF) // Wait until the Timer overflows and set the TMR2IF bit of the PIR1 register
{
TRISBbits.TRISB5 = 0x00; // Enable the CCP3 pin output driver
}
while(1)
{
}
return;
}