Autor Tema: Mi PWM no funciona  (Leído 2065 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Mi PWM no funciona
« en: 04 de Junio de 2005, 07:04:00 »
Salu2

Necesito un poco de ayuda para encontrar el error en mi programa.

Uso cristal de 1.25MHz, un PIC16F877A.

setup_timer_2(T2_DIV_BY_16,255,1); //PR2 = 255

Prescaler = 16, PR2 = 255 y Postscaler = 1.

El periodo me da de 13ms...
T=(255+1)4.(1/1.25MHz)(16)=13.1ms

Hasta ahí vamos bien...

Pero cuando escribo el valor de DUTY, el PWM saca otro tiempo...

setup_ccp1(CCP_PWM); //PWM
set_pwm1_duty(0x7e); //126d
   //D=(CCP...)(Tosc)(PRStm2)
   //D=(0x7e)(1/1.25MHz)(16)=1.616ms

Pero en vez de que 0x7e me saque 1.6ms, me saca 6.25ms.

Y luego con...

set_pwm1_duty(0xc8); //200d
   //D=(0xc8)(1/1.25MHz)(16)=2.5ms

No saca 2.5ms, saca 10.5ms.

Y luego con...

set_pwm1_duty(0x113); //275d
   //D=(0x113)(1/1.25MHz)(16)=3.52ms

No saca eso, saca 3.75ms.

No sé porque haga eso, seguí las fórmulas bien, incluso el periodo si es el correcto... creo que es error de novato pero no lo hallo... porfas chequen mi mini programa...

Todas las mediciones las emule en PROTEUS.

------------------------

#include "16f877.h"

#use delay(clock=1250000)
#fuses xt,nowdt,noput,nobrownout,nolvp,noprotect

#use fast_io (c)
#use fast_io (b)

void main (void)
{
   set_tris_c (0x00); //Todo salida
   set_tris_b (0xff); //todo entrada
   setup_timer_2(T2_DIV_BY_16,255,1); //PR2 = 255
   //T=(PR2+1)4.Tosc.PRStm2
   //T=(255+1)4.(1/1.25MHz)(16)=13.1ms
   setup_ccp1(CCP_PWM); //PWM
   while(1)
   {

   set_pwm1_duty(0x7e); //126d
   //D=(CCP...)(Tosc)(PRStm2)
   //D=(0x7e)(1/1.25MHz)(16)=1.616ms
   delay_ms(5000); //Espera giro

   set_pwm1_duty(0xc8); //200d
   //D=(0xc8)(1/1.25MHz)(16)=2.5ms
   delay_ms(5000); //Espera giro

   set_pwm1_duty(0x113); //275d
   //D=(0x113)(1/1.25MHz)(16)=3.52ms
   delay_ms(5000); //Espera giro
   }
}


Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Mi PWM no funciona
« Respuesta #1 en: 04 de Junio de 2005, 12:15:00 »
Hola Mig.

Te salen esos números porque en las fórmulas estas considerando el Duty como long, y hay que decirselo al programa.

Prueba con:

long duty_PWM1=126;

set_pwm1_duty(duty_PWM1);

... y te saldran los números correctos.

Así mismo prueba con:

int duty_PWM1=126;

set_pwm1_duty(duty_PWM1);

... y te saldran los otros números.

Un saludo



Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Mi PWM no funciona
« Respuesta #2 en: 04 de Junio de 2005, 15:53:00 »
Muchas Gracias POCHER Sonrisa

Vaya error de novato jajaja Divertido


 

anything