Autor Tema: Por Favor ayuda PWM  (Leído 2532 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado andpic

  • PIC10
  • *
  • Mensajes: 30
Por Favor ayuda PWM
« en: 09 de Noviembre de 2005, 12:44:00 »
Hola Muchachos: Por favor necesito que me digan en que puedo estar fallando en este programita que no me anda. Necesito sacar una frecuencia de 153600hz, tengo un pic 16f819 de Oscilador interno=8Mhz. Segun mis calculos el PR2 debe ser igual a 12. y el cycle duty = 26. El tema es que no me larga nada. Por favor si alguien me puede dar una mano. Diganme si necesito configurar otra cosa al pic para que ande. Ej salida al puerto,algo del oscilador interno, etc.
Aca va el programa:


#include <16f819.h>
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT
#fuses INTRC
#use delay(clock=8000000)

void main(void){

   long duty_PWM1;
 
   setup_timer_2(T2_DIV_BY_1, 12, );

   setup_ccp1 (CCP_PWM);

   duty_PWM1 = 26;

   set_pwm1_duty(duty_PWM1);

   while(1){
   }
}

Gracias

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Por Favor ayuda PWM
« Respuesta #1 en: 09 de Noviembre de 2005, 14:16:00 »
Te pego una práctica sencilla que hice con el PWM, con una frecuencia cte (10khz) va aumentando y disminuyendo el duty en un bucle:

Codigo:

#include <16F877.h>
#fuses NOLVP,HS,NOWDT,NOPROTECT,PUT
#use delay(clock=20000000)                   // 0.2us por instruccion

#include <LCD_4x20.C>

#ORG 0x1F00,0x1FFF {} //for the 8k 16F876/7 bootloader

void main(void)
{
   int i;
   lcd_init();
   printf(lcd_putc,"fPWM, en CCP1 10khz"Giño;
   setup_ccp1(CCP_PWM);
   setup_timer_2(T2_DIV_BY_1,100,1);
   while(1)
   {
      for(i=1;i<=99;++i)
      {
      set_pwm1_duty(i);
      delay_ms(50);
      }
      for(i=99;i>=1;--i)
      {
      set_pwm1_duty(i);
      delay_ms(50);
      }
   }
}

Si juegas contra el mejor, pierdes como los demás.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Por Favor ayuda PWM
« Respuesta #2 en: 09 de Noviembre de 2005, 18:42:00 »
Asumiendo que tu Postscaler es de 1, en la instrucción

setup_timer_2(T2_DIV_BY_1, 12, );

seguramente es necesario que la pongas así...

setup_timer_2(T2_DIV_BY_1, 12,1);

Y de los demás cálculos, fpwm, duty y resolución, todo está bien.




Divertido

Desconectado andpic

  • PIC10
  • *
  • Mensajes: 30
RE: Por Favor ayuda PWM
« Respuesta #3 en: 10 de Noviembre de 2005, 06:26:00 »
OK, muchachos Gracias por sus ayudas. Por lo que me han comentado esta relativamente bien lo que hice, pero entonces porque no me anda?.
Parte electronica
Puede ser que se me meta ruido en la placa y por eso me muestra cualquier cosa. La fuente que estoy utilizando para alimentar el circuito me esté metiendo ruido. Digo esto porque en un momento medí 50hz supongo que son los de la linea.. El circuito lo tengo conectado con una fuente de 220VAC a 12VDC, luego va a un 7805. Pero no se porque me dio esa frecuencia (50 Hz).
Alguien tiene un circuito con el que le haya andado el PWM que me lo pase? ara ver que estoy haciendo mal. O con que alimentan a circuitos en el que tienen un PWM para eliminar ruido?
Parte software
Me esta faltando configurar algo mas?
Tengo que setear el puerto como salida, en mi caso el RB3?
Necesito colocar la intrucción set_trisa(11b000001) para configurar los puertos?

Please Help!!!!!!!

Gracias Totales

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
RE: Por Favor ayuda PWM
« Respuesta #4 en: 10 de Noviembre de 2005, 06:38:00 »
Estos 50Hz que mides es la frecuencia de la señal senoidal que viene de la linea de 220v. Con el ccs no he probado si el pwm funciona bien sin configurar los puertos pero no cuesta nada configurar el tris. Para poner rb3 como salida basta con poner a 0 el bit correspondiente.

set_tris_b(0b11110111); // todo el puertob son entradas menos rb3 que es salida

La instruccion set_tris_a es para configurar el puerto A, para configurar los otros es set_tris_x donde x es el nombre del puerto a configurar y para darle valores es

set_tris_x(0bxxxxxxxx); 0b indica notacion binaria.

Si buscas un poco por el foro, no se donde hay un manual del ccs donde explica la sintaxis de todas las instrucciones. Utiliza el buscador a ver si hay suerte.

El circuito para el PWM dependiendo de lo que quieras regular sera de una forma o de otra.