Tengo problemas para que una salida PWM simple funcione en un PIC32MX775F512H . Mirando en línea , esto parece ser todo lo que necesito para que algo funcione:
int main(void)
{
SYSTEMConfig(SYSTEM_FREQ_HZ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
OpenOC1( OC_ON | OC_TIMER2_SRC | OC_PWM_FAULT_PIN_DISABLE, 0, 0);
OpenTimer2( T2_ON | T2_PS_1_1 | T2_SOURCE_INT, 0xFFFF);
SetDCOC1PWM(0x4000); // 50% duty cycle
while(1)
{
}
}
Sin embargo, el pin OC1 (pin 46 en el paquete 64 QFN) no parece estar haciendo nada.
Consulte la página 54 en la hoja de datos de oc. Hay un elemento en la lista que el código de ejemplo que muestra el OP no coincide, aunque es posible que ese no sea el problema. #3 Escriba el registro OxCR con el ciclo de trabajo inicial.
Personalmente, no me importa el uso de macros porque es demasiado genérico y difícil de verificar el código, como se indicó anteriormente, y, a veces, las macros tienen errores. Si está utilizando MplabX, haga clic con el botón derecho en la macro y vaya a la declaración para revisar la implementación.
La página 65 tiene un ejemplo completo, excepto por una subrutina principal, se puede copiar y pegar con bastante facilidad.
Los chips Pic32 (y otros de la familia MC) no funcionan muy bien. Todo lo que se necesita es un poco mal en alguna parte y las cosas simplemente no funcionarán. Cada detalle importa. Ir a través de cada uno paso a paso y funcionará. Además, no tengo suficiente reputación para comentar, pero ¿podría @RocketMagnet dar más detalles sobre cómo está comprobando el pin OC1?
Además, 0xFFFF/0x4000 = ciclo de trabajo del 33 %.
Código añadido --
#include <stdio.h>
#include <stdlib.h>
#include "p32xxxx.h"
#include "plib.h"
#define SYSTEM_FREQ_HZ 80000000
#pragma config FPLLODIV = DIV_1, FSOSCEN = OFF, FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FWDTEN = OFF, FPBDIV = DIV_1, POSCMOD = XT, FNOSC = PRIPLL, CP = OFF
#pragma config FMIIEN = ON, FETHIO = OFF, FUSBIDIO = OFF, FVBUSONIO = OFF // external PHY in RMII/alternate configuration
#pragma config UPLLEN = ON,UPLLIDIV = DIV_2
/*
*
*/
int main(void)
{
SYSTEMConfig(SYSTEM_FREQ_HZ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);
OpenOC1( OC_ON | OC_TIMER2_SRC | OC_PWM_FAULT_PIN_DISABLE, 0, 0);
OpenTimer2( T2_ON | T2_PS_1_1 | T2_SOURCE_INT, 0xFFFF);
unsigned short a;
int b;
while(1)
{
for(b=0;b<100;b++)
Nop();
SetDCOC1PWM(a++);
}
}
abdullah kahraman
"HardwareProfile.h"
archivo. Como veo, no configuró ninguna de las funciones de los pines. No sé mucho sobre PIC32, pero tal vez el pin se comparte con una entrada digital o una entrada analógica o cualquier otro periférico, y es posible que deba configurarlo para usarlo como salida PWM.Cuchara