Actualmente estoy haciendo todo lo posible para codificar una solución de software para PWM en un PIC20F202 pero tengo un problema. Estoy probando un desvanecimiento en bucle y un fundido con un LED y está funcionando bien y sin problemas, pero en intervalos un tanto regulares, hay un fuerte golpe en la secuencia de desvanecimiento que no puedo explicar de ninguna manera. He mirado el código tantas veces, he comprobado los contactos en la placa de pruebas, no sé qué más debo buscar.
/******************************************************************************/
/* Files to Include */
/******************************************************************************/
#if defined(__XC)
#include <xc.h> /* XC8 General Include File */
#elif defined(HI_TECH_C)
#include <htc.h> /* HiTech General Include File */
#endif
#include <stdint.h> /* For uint8_t definition */
#include <stdbool.h> /* For true/false definition */
#include "system.h" /* System funct/params, like osc/peripheral config */
#include "user.h" /* User funct/params, such as InitApp */
/******************************************************************************/
/* User Global Variable Declaration */
/******************************************************************************/
/* i.e. uint8_t <variable_name>; */
/******************************************************************************/
/* Main Program */
/******************************************************************************/
#define _XTAL_FREQ 4000000
void main(void)
{
/* Configure the oscillator for the device */
ConfigureOscillator();
/* Initialize I/O and Peripherals for application */
InitApp();
/* TODO <INSERT USER APPLICATION CODE HERE> */
const uint8_t MAX = 100;
uint16_t oncount=1;
int8_t delta=1;
TRIS = 0b111101;
for(;;){
GPIO = 0b000010;
for(uint16_t i=1;i<oncount;i++)
__delay_us(1);
GPIO =0;
for(uint16_t i=1;i<(MAX-oncount);i++)
__delay_us(1);
oncount += delta;
if(oncount == MAX)
delta = delta * (-1);
if(oncount == 0)
delta = delta * (-1);
}
}