Autor Tema: Ayuda pwm  (Leído 3312 veces)

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

Desconectado rabacero

  • PIC10
  • *
  • Mensajes: 7
Ayuda pwm
« en: 10 de Junio de 2009, 14:22:36 »
Hola amigos del foro.
Tengo una duda en la programación en C, ya que tengo que hacer un programa de tengo que controlar iluminacion en lazo abierto mediante pwm.
Lo que hace el Programa es lo siguiente:
Este programa controla el ciclo de trabajo de la salida PWM
(patita CCP1) con la cual controlará el nivel de iluminación
promedio producido por una lámpara controlada con esta señal
Se usa un botón conectado a RB0 para incrementar el nivel y
otro conectado a RB1 para disminuirlo.
y obviamente tengo simularlo en proteus y cuando lo trato de simular el ciclo de trabajo del ancho del pulso va variando solo sin apretar botoneras ni nada:?

El problema que tengo es que cuando lo hago en c no me funciona:(
aca esta el programa que hice en C.

                                                         #include <16F877a.h>
                                                         #fuses XT,NOWDT
                                                         #use delay (clock=14745600)
                                                         #byte puerto_b=00
                                                         
                                                         void main () {
                                                         set_tris_b(0xFF);
                                                         enable_interrupts(int_ext);
                                                         ext_int_edge(L_TO_H)
                                                         
                                                         
                                                         setup_timer_2(T2_DIV_BY_1,255,1);
                                                         setup_ccp1(CCP_PWM);
                                                       
                                                       
                                                         do{
                                                         set_pwm1_duty(0);
                                                         set_pwm2_duty(255);
                                                         delay_ms(50);
                                                         }
                                                         }


Hay algo que tengo malo?
o me faltara alguna sentencia? ya que no me manejo mucho en C
cualquier ayuda es bienvenida....

gracias de antemano:)

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Ayuda pwm
« Respuesta #1 en: 10 de Junio de 2009, 14:43:30 »
te acossejo que vea como lo hizo nuestros amigo Nocturno
http://www.todopic.com.ar/foros/index.php?topic=19736.0
saludo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Ayuda pwm
« Respuesta #2 en: 10 de Junio de 2009, 15:26:50 »
El ciclo de trabajo del PWM1 lo modificas con set_pwm1_duty(0), set_pwm2_duty(255) seria para PWM2 que no lo has configurado y si vas a usarlo debes agregar setup_ccp2(CCP_PWM).

Otra cosa, estas seguro que esa es la velocidad del cristal?
No contesto mensajes privados, las consultas en el foro

Desconectado rabacero

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda pwm
« Respuesta #3 en: 10 de Junio de 2009, 15:38:58 »
El ciclo de trabajo del PWM1 lo modificas con set_pwm1_duty(0), set_pwm2_duty(255) seria para PWM2 que no lo has configurado y si vas a usarlo debes agregar setup_ccp2(CCP_PWM).

Otra cosa, estas seguro que esa es la velocidad del cristal?


asi es esa es la velocidad del cristal segun la problematica del ejercisio
vale por la info ;)

Desconectado J_jOsE

  • PIC12
  • **
  • Mensajes: 57
Re: Ayuda pwm
« Respuesta #4 en: 10 de Junio de 2009, 16:05:10 »
hola rabacero

talvez esto te sirva, es lo que dice tu problema pero a otra frecuencia y con otro cristal

------------------------------------------------------------
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#byte PORT_B=0x06
#byte PORT_C=0x07
#bit RB0=0x06.0
#bit RB1=0x06.1

int PM1=0;

void main()
{     
   set_tris_b(0x03);
   set_tris_c(0x00);     
   PORT_C=0x00;
     //configuracio de PWM
         SET_TIMER2(0);
         SETUP_CCP1(CCP_PWM_PLUS_1);
         SETUP_TIMER_2(T2_DIV_BY_16,0xC8,0x01); //C6 equal 198
         PM1=0;         
         SET_PWM1_DUTY(PM1);
   while(true)
   {               
      if(RB0==1&&PM1<0xC8) //incrementa si es menor al periodo del PWM
      {     delay_ms(25);
            if(RB0==1)     //si se press MODO
            {PM1++;}
      }     
      if(RB1==1&&PM1>0)
      {     delay_ms(25);
            if(RB1==1)     //si se press MODO
            { PM1--; }
      }     
      SET_PWM1_DUTY(PM1);                                     
   }
}

------------------------------------------------------------
y creo que el problema es el valor del Cristal que usas, aca ( http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator ) podes calcular los parámetros para configurar el PWM
SETUP_TIMER_2(TIMER2 Prescaler,PR2,0x01);

y probando con el valor que decís no da a ninguna frecuencia de PWM

salu_2 a to_2
No Pain No Gain

Desconectado rabacero

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda pwm
« Respuesta #5 en: 11 de Junio de 2009, 13:59:29 »
hola rabacero

talvez esto te sirva, es lo que dice tu problema pero a otra frecuencia y con otro cristal

------------------------------------------------------------
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#byte PORT_B=0x06
#byte PORT_C=0x07
#bit RB0=0x06.0
#bit RB1=0x06.1

int PM1=0;

void main()
{     
   set_tris_b(0x03);
   set_tris_c(0x00);     
   PORT_C=0x00;
     //configuracio de PWM
         SET_TIMER2(0);
         SETUP_CCP1(CCP_PWM_PLUS_1);
         SETUP_TIMER_2(T2_DIV_BY_16,0xC8,0x01); //C6 equal 198
         PM1=0;         
         SET_PWM1_DUTY(PM1);
   while(true)
   {               
      if(RB0==1&&PM1<0xC8) //incrementa si es menor al periodo del PWM
      {     delay_ms(25);
            if(RB0==1)     //si se press MODO
            {PM1++;}
      }     
      if(RB1==1&&PM1>0)
      {     delay_ms(25);
            if(RB1==1)     //si se press MODO
            { PM1--; }
      }     
      SET_PWM1_DUTY(PM1);                                     
   }
}

------------------------------------------------------------
y creo que el problema es el valor del Cristal que usas, aca ( http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator ) podes calcular los parámetros para configurar el PWM
SETUP_TIMER_2(TIMER2 Prescaler,PR2,0x01);

y probando con el valor que decís no da a ninguna frecuencia de PWM

salu_2 a to_2

















Amigo J_jose sinceramente te pasaste compañero....
ahi funciona perfectamente solmante modifique algunas cosillas y funciona de maravilla

gracias ;)

Desconectado J_jOsE

  • PIC12
  • **
  • Mensajes: 57
Re: Ayuda pwm
« Respuesta #6 en: 12 de Junio de 2009, 09:43:38 »

aqui toy para ayudar con todo lo que pueda  :)


me da gusto que te haya servido



salu_2 a to_2
No Pain No Gain

Desconectado david1820

  • PIC10
  • *
  • Mensajes: 3
Re: Ayuda pwm
« Respuesta #7 en: 13 de Junio de 2009, 14:34:00 »
Hola a todos soy nuevo en el foro así como lo soy totalmente en la proogramacion de PIC comprendo bien el concepto de PWM, y en programación estoy totalmente congelado, quisiera saber si me podrías ayudar con lo siguiente necesito hacer algo similar al programa que te postearon aquí pero solamente ocupo aplastar un switch y al soltarlo que la iluminación disminuya.

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Ayuda pwm
« Respuesta #8 en: 13 de Junio de 2009, 20:38:23 »
solamente usa un caso mira aqui te lo dejo

Código: C
  1. #include <18F2550.h>
  2. #FUSES HS,NOWDT,NOPROTECT,NOLVP
  3. #use delay(clock=20000000)
  4. #use standard_io(a)
  5.  
  6. void main()
  7. {
  8.    setup_ccp2(CCP_PWM);
  9.    setup_timer_2(T2_DIV_BY_4, 255, 1);
  10.     do {
  11.    switch(input_a())
  12.       {
  13.          case 0x00:
  14.          set_pwm2_duty(0);
  15.          break;
  16.          case 0x01:
  17.          set_pwm2_duty(255);
  18.          break;
  19.  
  20.  
  21.  
  22.       }
  23.    
  24.    } while (TRUE);
  25. }

Desconectado david1820

  • PIC10
  • *
  • Mensajes: 3
Re: Ayuda pwm
« Respuesta #9 en: 13 de Junio de 2009, 23:44:28 »
Muchas gracias intentare con eso.