Usando PSMC en lugar de CCP

0

Hola, estoy creando un controlador de motor y decidí usar PSMC en lugar de CCP para crear mi PWM. Mi decisión se basó en el hecho de que no tengo suficientes puertos CCP en mi foto 16f1788 para el proyecto. Estoy usando el módulo PSMCdesigner proporcionado por Microchip. Lo revisé y generé mi código, pero desafortunadamente el código no funciona. Sé cómo programar CCP, pero nunca trabajé con PSMC antes de que quisiera obtener ayuda. Aquí está el código que generé a través del programa.

#include <xc.h>
// Config word

// CONFIG1
#pragma config FOSC = INTOSC    // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = ON        // Watchdog Timer Enable (WDT enabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON       // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON        // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
#pragma config VCAPEN = OFF     // Voltage Regulator Capacitor Enable bit (Vcap functionality is disabled on RA6.)
 #pragma config PLLEN = ON       // PLL Enable (4x PLL enabled)
 #pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
 #pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
 #pragma config LPBOR = OFF      // Low Power Brown-Out Reset Enable Bit (Low power brown-out is disabled)
 #pragma config LVP = ON         // Low-Voltage Programming Enable (Low-voltage programming enabled)





  void main(void)

{


PSMC1CON  = 0x00;
PSMC1MDL  = 0x00;
PSMC1SYNC = 0x00;
PSMC1CLK  = 0x30;
PSMC1POL  = 0x00;
PSMC1BLNK = 0x00;
PSMC1REBS = 0x00;
PSMC1FEBS = 0x00;
PSMC1PHS  = 0x00;
PSMC1DCS  = 0x00;
PSMC1PRS  = 0x00;
PSMC1ASDC = 0x00;
PSMC1ASDL = 0x00;
PSMC1ASDS = 0x00;
PSMC1PHH  = 0x00;
PSMC1PHL  = 0x14;
PSMC1DCH  = 0x00;
PSMC1DCL  = 0x00;
PSMC1PRH  = 0x00;
PSMC1PRL  = 0xC7;
PSMC1DBR  = 0x00;
PSMC1DBF  = 0x00;
PSMC1FFA  = 0x00;
PSMC1BLKR = 0x04;
PSMC1BLKF = 0x02;
PSMC1STR0 = 0x3F;
PSMC1STR1 = 0x80;
PSMC1INT  = 0x00;
PSMC1OEN  = 0x05;
PSMC1CON  = 0x80;
PIE4     &= 0xEE;
PIE4     |= 0x00;



   }
    
pregunta sam brosteain

1 respuesta

4

Tiene un problema fatal con su código que no tiene nada que ver con el módulo PSMC. Los microcontroladores son hardware de un solo propósito, por lo que no existe tal cosa como "salir" del código. DEBES tener un bucle infinito de algún tipo.

Si su función main () simple finaliza, como lo hace la suya, el chip tendrá un comportamiento indefinido. En el caso de los PIC, reiniciará el chip y comenzará de nuevo. Una y otra vez, mientras tenga poder. Probablemente nunca verá ninguna salida en ningún pin.

La forma más fácil de solucionar esto solo para probar el módulo PSMC es poner "while (1);" como la última línea de código en main ().

    
respondido por el Dan Laks

Lea otras preguntas en las etiquetas