mcc (configurador de código mplab x) módulo pwm

0

Soy bastante nuevo en la programación de microcontroladores y recientemente he estado tratando de usar el módulo PWM de PIC16F1455 a través de MCC (configurador de código mplab x). Aunque sigo los mismos pasos que vi en los tutoriales, no puedo hacer que funcione, es decir, cuando lo simulo en Proteus, no recibí ninguna señal del pin correspondiente del microcontrolador, que normalmente se supone que emite una onda cuadrada con 50 % de ciclo de trabajo y 1 ms periodo. ¿Alguien ha experimentado tal situación, o puede ver algo incorrecto con el código de abajo? Aquí hay algunos archivos fuente relevantes:

main.c

#include "mcc_generated_files/mcc.h"
void main(void)
{
    SYSTEM_Initialize();
    while (1)
   {
   }
}

configuración

 // CONFIG1
#pragma config FOSC = INTOSC    
#pragma config WDTE = OFF    
#pragma config PWRTE = OFF    
#pragma config MCLRE = OFF   
#pragma config CP = OFF    
#pragma config BOREN = ON    
#pragma config CLKOUTEN = OFF                                        
#pragma config IESO = OFF    
#pragma config FCMEN = OFF    

// CONFIG2
#pragma config WRT = OFF   
#pragma config CPUDIV = CLKDIV6    
#pragma config USBLSCLK = 48MHz    
#pragma config PLLMULT = 3x 
#pragma config PLLEN = ENABLED   
#pragma config STVREN = ON    
#pragma config BORV = LO    
#pragma config LPBOR = OFF    
#pragma config LVP = ON    

#include "mcc.h"

SYSTEM_Initialize function

void SYSTEM_Initialize(void)
{

    PIN_MANAGER_Initialize();
    OSCILLATOR_Initialize();
    WDT_Initialize();
    PWM1_Initialize();
    TMR2_Initialize();
}

implementación de funciones llamadas dentro de SYSTEM_Initialize

void OSCILLATOR_Initialize(void)
{
     // SCS FOSC; SPLLMULT 3xPLL; SPLLEN disabled; IRCF 8MHz_HF; 
     OSCCON = 0x78;
     // TUN 0; 
     OSCTUNE = 0x00;
     // ACTSRC SOSC; ACTUD enabled; ACTEN disabled; 
     ACTCON = 0x00;
     // SBOREN disabled; BORFS disabled; 
     BORCON = 0x00;
     // Wait for PLL to stabilize
     while(PLLRDY == 0)
     {
     }
}

void WDT_Initialize(void)
{
    // WDTPS 1:65536; SWDTEN OFF; 
    WDTCON = 0x16;
}

void PIN_MANAGER_Initialize(void)
{

    LATA = 0x00;    
    LATC = 0x00;    

    TRISA = 0x30;
    TRISC = 0x1F;

    ANSELC = 0x0F;
    ANSELA = 0x10;

    WPUA = 0x00;
    OPTION_REGbits.nWPUEN = 1;


    APFCON = 0x00; 

}   

 void PWM1_Initialize(void)
 {
     // PWM1POL active_hi; PWM1OE enabled; PWM1EN enabled; 
     PWM1CON = 0xC0;   

     // PWM1DCH 124; 
     PWM1DCH = 0x7C;   

     // PWM1DCL 3; 
     PWM1DCL = 0xC0;   

 }

void TMR2_Initialize(void)
{
    // Set TMR2 to the options selected in the User Interface

    // PR2 249; 
    PR2 = 0xF9;

    // TMR2 0; 
    TMR2 = 0x00;

    // Clearing IF flag.
    PIR1bits.TMR2IF = 0;

    // T2CKPS 1:4; T2OUTPS 1:1; TMR2ON on; 
    T2CON = 0x05;
}

oscilador interno

#define _XTAL_FREQ  4000000

MCC genera estas funciones en diferentes archivos, pero supongo que este es el código relevante.

Y aquí está el circuito de Proteus:

    
pregunta bbb

0 respuestas

Lea otras preguntas en las etiquetas