Autor Tema: PIC 16F876 + CCS Problema con PWM  (Leído 5538 veces)

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

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
PIC 16F876 + CCS Problema con PWM
« en: 04 de Marzo de 2013, 23:59:21 »
Tengo el siguiente codigo:

Código: [Seleccionar]
#include <16F876.h>

#fuses HS,NOWDT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG,NOPROTECT

#USE DELAY(clock=8000000)

#use fast_io(A)
#use fast_io(B)
#use fast_io(C)

#define LED1 PIN_B1
#define LED2 PIN_B2

#define Enciende(x) output_high(x)
#define Apaga(x) output_low(x)
#define Estado(x) input_state(x)

void main()
{
   /*
   set_tris_a(........GP4, GP3, GP2, GP1, GP0)
   and 1 = input
   0 = output
   */
   set_tris_a(0b11000000);
   set_tris_b(0b00000000);
   set_tris_c(0b00000000);
   setup_adc(ADC_OFF);
   setup_adc_ports(NO_ANALOGS);
   PORT_B_PULLUPS(FALSE);
   signed int8 UnoPorciento = 8;
   signed int8 Multiplicador = 1;
   signed int8 PWM2 = 200;
   delay_ms(1);
   // PWM por las 2 Salidas del PIC
   SETUP_TIMER_2(T2_DIV_BY_1,199,1);
   SETUP_CCP1(CCP_PWM);
   SETUP_CCP2(CCP_PWM);
   
   while(TRUE)
   {
      if (Estado(PIN_A4)==1)
      {
         Enciende(LED1);
         Multiplicador++;
         delay_ms(500);
         Apaga(LED1);
      }
     
      if (Estado(PIN_A5)==1)
      {
         Enciende(LED2);
         Multiplicador--;
         delay_ms(500);
         Apaga(LED2);
      }
     
      if (Multiplicador < 0)
      {
         Multiplicador = 0;
      }
     
      if (Multiplicador > 100)
      {
         Multiplicador = 100;
      }
 
      set_pwm1_duty(UnoPorciento*Multiplicador);       // 10Khz 1%
      set_pwm2_duty(PWM2);     // 10Khz 25%
   }
}

Y tengo el pic montado en una protoboard, supuestamente el pic lo que deberia hacer es sacar siempre por el CCP2 un duty del 25% y darle corriente o por A4 o A5 aumentar o disminuir el duty del CCP1 en un 1%. Tambien enciende un led para que se vea que eso pasa al pulsar el boton ( conectar a +5 ).

Pues resulta que para nada actua como tal. Nada mas conectarlo a la corriente, los led's se empiezan a volver locos y empiezan a parpadear ( solamente si tengo las manos cerca de A4, parece como si A5 no hiciera nada). Si no tengo las manos cerca, tengo el led A5 siempre encendido. No se si esto es importante pero al conectarlo a la corriente por primera vez y tener las manos lejos me pasa que parpadean como 2 o 3 veces cada uno.

En las salidas pwm tengo conectados otros 2 led's para ver si hace algo y solamente esta encendido el LED de CCP2 (Supongo q el CCP 1 no lo llega a encender por estar a un 1%)

Supongo que esto sera un problema sencillo para ustedes, pero yo me estoy iniciando en el mundo de los pic y no entiendo muy bien porque pasa esto. Un amigo me dijo que tengo mucho ruido en el circuito y por eso me pasa, pero no sabria como arreglarlo.

Si necesitan el circuito o cualquier cosa diganlo y lo publico ( todavia sigo descargando el proteus y no puedo ).

Tengo un cristal de cuarzo de 8Mhz conectado.


Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #1 en: 05 de Marzo de 2013, 13:18:06 »
tienes un error al declarar tus variables

Código: [Seleccionar]
signed int8 UnoPorciento = 8;
signed int8 Multiplicador = 1;
signed int8 PWM2 = 200;

el int8 signado toma valores de -128 hasta 127, y tu lo estas inicializando con un valor de 200. deberias utilizar una variable int16 (long), ya que la resolucion de tu pwm no cabe en 8 bits solamente
"Nada es imposible, no si puedes imaginarlo"

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #2 en: 05 de Marzo de 2013, 13:53:04 »
tienes un error al declarar tus variables

Código: [Seleccionar]
signed int8 UnoPorciento = 8;
signed int8 Multiplicador = 1;
signed int8 PWM2 = 200;

el int8 signado toma valores de -128 hasta 127, y tu lo estas inicializando con un valor de 200. deberias utilizar una variable int16 (long), ya que la resolucion de tu pwm no cabe en 8 bits solamente

Tambien lo intente anteriormente con 16 eso era la segunda prueba que hice por si me equivoque.

Cuando llegue a mi casa pondre el 16 de vuelta, lo unico que ya te digo esa fue mi primera opcion y hacia lo mismo

Es posible que sea por las interferencias del protoboard ?

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #3 en: 05 de Marzo de 2013, 13:54:23 »
alguna vez me pasó que el micro se volvia loco porque faltaba poner en los fuses nolvp, esto para que no programe en bajo voltaje. intenta eso a ver si te funciona
"Nada es imposible, no si puedes imaginarlo"

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #4 en: 05 de Marzo de 2013, 13:56:06 »
alguna vez me pasó que el micro se volvia loco porque faltaba poner en los fuses nolvp, esto para que no programe en bajo voltaje. intenta eso a ver si te funciona

Lo llevo puesto, tambien lo lei por ahi, tambien tengo una resistencia a tierra en el puerto pgm por si las moscas.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #5 en: 05 de Marzo de 2013, 14:02:05 »
pon tu diagrama para ver donde esta el fallo, y tambien podrian intentar debuggeralo en proteus
"Nada es imposible, no si puedes imaginarlo"

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #6 en: 05 de Marzo de 2013, 14:20:47 »
pon tu diagrama para ver donde esta el fallo, y tambien podrian intentar debuggeralo en proteus

En proteus funciona a las mil maravillas, q anoche conseguir probarlo rapidamente, en cuanto llegue a mi casa lo subo.

Edito:

En proteus hacia una cosa que tambien pasa en normal que es q un led se quedaba encendido, lo he corregido ( en proteus, en normal sigue haciendo lo mismo ) apagando los 2 led's antes del while(1). En los led's de proteus es un poco dificil apreciar el cambio del pwm hasta cierto tiempo, yo al hacer las pruebas puse un osciloscopio.

Añado diseño en proteus:
« Última modificación: 05 de Marzo de 2013, 22:19:38 por Archangels »

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #7 en: 05 de Marzo de 2013, 22:41:46 »


Yo veo un problema con los pulsadores, cuando el pulsador esta abierto el respectivo terminal no queda con referencia alguna, yo recomiendo poner una pull - up o una pull down para conectar el respectivo terminal ya sea a VDD o VSS, por otro lado, si estas simulando el circuito en el proteus no hay necesidad de agregar el oscilador.
Un saludo desde Pereira - Colombia

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #8 en: 05 de Marzo de 2013, 22:58:40 »


Yo veo un problema con los pulsadores, cuando el pulsador esta abierto el respectivo terminal no queda con referencia alguna, yo recomiendo poner una pull - up o una pull down para conectar el respectivo terminal ya sea a VDD o VSS, por otro lado, si estas simulando el circuito en el proteus no hay necesidad de agregar el oscilador.

PullUP de cuanto seria ?
He puesto todo para que vean lo mas cerca posible de la realidad.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #9 en: 05 de Marzo de 2013, 23:14:14 »
cuando no tienes presionado tu botón, el pin no esta fijo a ningún valor, tendrías que poner una resistencia a tierra, de valor de 10K te serviria
"Nada es imposible, no si puedes imaginarlo"

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #10 en: 05 de Marzo de 2013, 23:18:54 »

Examina el esquema que adjunto.
Un saludo desde Pereira - Colombia

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #11 en: 05 de Marzo de 2013, 23:28:40 »

Examina el esquema que adjunto.

El de la izquierda seria pulldown y el de la derecha seria pullup verdad ?

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #12 en: 05 de Marzo de 2013, 23:34:53 »
el de la izquierda es pull-up, porque normalmente esta en estado alto

y el de la derecha es pull-down, porque normalmente esta en estado bajo
"Nada es imposible, no si puedes imaginarlo"

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #13 en: 05 de Marzo de 2013, 23:35:39 »
Citar
El de la izquierda seria pulldown y el de la derecha seria pullup verdad ?

Al contrario Archangels, el termino pull - up hace referencia a la resistencia que esta conectada a VDD, mientra que, pull down hace referencia al caso contrario.
Un saludo desde Pereira - Colombia

Desconectado Archangels

  • PIC10
  • *
  • Mensajes: 27
Re: PIC 16F876 + CCS Problema con PWM
« Respuesta #14 en: 05 de Marzo de 2013, 23:56:29 »
Hmm entonces con mi codigo utilizare la pull down ya que quiero detectar cuando esta a 1, muchas gracias por vuestras respuestas, mañana lo pruebo que ahora mismo en España es muy tarde y hay que dormir. Un saludo y gracias nuevamente por sus respuestas. Mañana les cuento