Autor Tema: CCP2... No encuentro el problema  (Leído 2403 veces)

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

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
CCP2... No encuentro el problema
« en: 01 de Febrero de 2008, 02:37:54 »
Hola muchachos.... He hecho este programa, claro con ayuda de otros que encontre por allí.... y creo que no funciona por un error de concepto o algo así, pero no se...

La cuestión es que intento variar el periodo de una onda cuadrada a través de la variable periodo... Pero no me varia... por más que muevo el valor de pèriodo, pues el ccp2 nunca varia su periodo y no se porque.... alguien que por favor se apiade de mi y me gaha ver el error, porque de pana yo no lo veo.... Gracias y disculpen la molestia!!!

Aquí está el codigo de todas maneras!!!!

#include <18f4550.h>
#fuses NOWDT,NOPROTECT,NOCPD,NOLVP,INTRC_IO,NOMCLR,CCP2C1,NOPBADEN
#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
#use fast_io (E)
#use delay(clock=4000000)
#byte RCON=0xFD0
#bit POR=RCON.1                                     // Bit de la bandera del Power On Reset
#bit IPEN=RCON.7                                    // Habilita la prioridad de las interrupciones
#byte INTCON1=0xFF2
#bit RBIF=INTCON1.0
#byte INTCON3=0xFF2


void handle_ccp2_int(void);

//::::::::::::::::::::::::::::Declaración de variables:::::::::::::::::::::::::::::::::::::::::::::::::::::
int flagcon=0,periodo;
//:::::::::::::::::::::::::::::::INTERRUPCIÓN POR CCP2:::::::::::::::::::::::::::::::::::::::::::::::::::::
#INT_CCP2
void handle_ccp2_int(void)
{

   if(flagcon==1)
      {
         setup_ccp2(CCP_COMPARE_CLR_ON_MATCH);      // Configura CCP2 en modo COMPARE cambiando a bajo
         flagcon=0;
      }
   else
      {
         setup_ccp2(CCP_COMPARE_SET_ON_MATCH);      // Configura CCP2 en modo COMPARE cambiando a alto
         flagcon=1;
      }
   CCP_2=0;                                         // Para que se me desbord el timer
   SET_TIMER1(0);                                   // Inicializo el timer 1
   CCP_2=periodo;                                         // Para que se me desborde el timer 1

}

//::::::::::::::::::::::::::::.Programa principal::::::::::::::::::::::::::::::::::::::::::.
 void main(void)
{
      if(POR==0)                                   // Reset por POR
   {
         output_high(PIN_D2);
         delay_ms(1000);
         POR=1;                                    // Limpio la bandera del POR
         output_d(0x00);                           // Limpio el puerto d
   }
         setup_adc(ADC_OFF);                       // Deshabilito el conversor A/D
         setup_adc_ports(NO_ANALOGS);              // Deshabilito las entradas análogicas
         setup_spi(FALSE);                         // Deshabilito el mosulo SPI
         setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
         setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);   // Timer 1 en modo contador con predivisor en 1
         setup_comparator(NC_NC_NC_NC);
         set_tris_c (0x00);                        // Configura puerto c como salida
         set_tris_d (0x00);                        // Configura puerto d como salida
         set_tris_a (0xFF);                        // Configura puerto a como entrada
         setup_ccp2(CCP_COMPARE_SET_ON_MATCH);     // Configura CCP2 en modo COMPARE cambiando a bajo
         enable_interrupts(INT_CCP2);              // Activo la interrupción por CCP2
         enable_interrupts(global);                // Habilito las interrupciones globales
         periodo=1000;



//:::::::::::::::::::::::Espero que algún botón sea pulsado::::::::::::::::::::::::::::::::
     while(true)
         {
            output_high(PIN_D0);
            delay_ms(1000);
            output_low(PIN_D0);
            delay_ms(1000);
            output_high(PIN_D1);
            delay_ms(1000);
            output_low(PIN_D1);

         }
}


Atte: Enigma... La llanerita de Guayana :-)
« Última modificación: 01 de Febrero de 2008, 04:06:52 por Enigma »
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: CCP2... No encuentro el problema
« Respuesta #1 en: 01 de Febrero de 2008, 17:35:08 »
Yo del unico modo que use hasta ahora el modulo CCP es por comparacion con el Timer1, generando bases de tiempo muy precisos.
Por las dudas, has mirado los hilos creados por Diego (Redpic) acerca de los varios usos de estos modulos??
Porque no te das una vuelta por alli?? :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: CCP2... No encuentro el problema
« Respuesta #2 en: 01 de Febrero de 2008, 17:55:02 »
Si ya lo lei, y de allí fue que me ayude para hacer este ejemplito pero no me funciona y no se porque!!!!! Solo lo he modificado un pelin, y bueno esa modificación no me funciona ni en vida real ni en simulación y no logro entender porque!!!!! :(

Y así es que estoy usando el modulo CCP en modo comparación... pero al parecer no compara nada! :(

Atte: Enigma... La llanerita de Guayana :(
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: CCP2... No encuentro el problema
« Respuesta #3 en: 01 de Febrero de 2008, 18:14:26 »
Y en que parte del programa cambias el valor de la variable periodo? veo que antes del while(true) haces periodo = 1000 y en la rutina de interrupcion haces CCP_2 =  periodo, pero periodo nunca cambia, al simular el archivo que dejaste veo una señal cuadrada en el pin RC1/CCP2.


Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: CCP2... No encuentro el problema
« Respuesta #4 en: 01 de Febrero de 2008, 19:06:50 »
La cambio directamente el el software, es que como primer objetivo que me trace al empezar este programa es lograr modificar al CCP2 de una forma indirecta a través de una variable, y no directamente así colocandole un número, una vezque me funcione así pondre un pulsador para que me aumente periodo y así cambiar a CCP2... Si yo también veo la onda cuadrada... Pero en vida real, al parecer la frecuencia es muy rapida o no se, porque se ve un led siempre encendido sin parpadear.... Pero si te modificas periodo via programa, verás que en la simulación la onda cuadrada sigue igual y en vida real, hace lo mismo!

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: CCP2... No encuentro el problema
« Respuesta #5 en: 01 de Febrero de 2008, 21:31:23 »
La cambio directamente el el software, es que como primer objetivo que me trace al empezar este programa es lograr modificar al CCP2 de una forma indirecta a través de una variable, y no directamente así colocandole un número, una vezque me funcione así pondre un pulsador para que me aumente periodo y así cambiar a CCP2... Si yo también veo la onda cuadrada... Pero en vida real, al parecer la frecuencia es muy rapida o no se, porque se ve un led siempre encendido sin parpadear.... Pero si te modificas periodo via programa, verás que en la simulación la onda cuadrada sigue igual y en vida real, hace lo mismo!

Atte: Enigma... La llanerita de Guayana :-)

probe cambiando el valor de periodo antes de entrar al while(true) y si cambia la frecuencia de la señal cuadrada, probe con 100 y con 10000, ahora en la vida real hay otras variables que debes tomar en cuenta, la velocidad a la que esta trabajando el PIC por , los fuses , por ejemplo, ahora si solo ves el led siempre encendido muy probablemente la señal tenga mucha frecuencia, por ejemplo si periodo es 1000 y el ciclo de instruccion es 1 us (cristal de 4 MHz) el tiempo alto y el tiempo bajo seria 1 ms y tendrias una frecuencia de 500 Hz lo cual no puedes ver a simple vista . que valor de cristal estas usando ?. configuraste los fuses para ese cristal?

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: CCP2... No encuentro el problema
« Respuesta #6 en: 01 de Febrero de 2008, 21:45:13 »
Si yo me imagine que la frecuencia seria muy alta, puesto que es preescalador lo tengo en 1 y el cristal es de 4MHZ, por eso probaba con valores pequeños como de 100 y 50 en el CCP2, pero igualito, yo también le asigne un valor a la varible periodo, fuera del while, y pues cuando queme el pic para ver lo que sucedia en vida real, se quedaba encendido ahi todo el tiempo....

Ahora, analizando un poco lo que me preguntas, acerca del cristal.... Yo estoy usando el oscilador interno... pero la formula la hice para 4 Mhz... en ese caso? ummm.... como puedo establecer el CCP2 a esa frecuencia de oscilación si lo estoy poniendo a contar con su oscilador interno????

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 624
Re: CCP2... No encuentro el problema
« Respuesta #7 en: 01 de Febrero de 2008, 22:01:22 »
Bueno Enigma , ahora que revise tu programa con un poco mas de detalle me di cuenta que cometes un error a la hora de declarar la variable periodo, la declaras como una variable de 8 bits siendo que tanto el CCP_2 como el TMR1 son de 16 bits , declarala de la siguiente forma int16  periodo, con esto podras ponerle valores hasta 65535. 

Citar
, por eso probaba con valores pequeños como de 100 y 50 en el CCP2, pero igualito, yo también le asigne un valor a la varible periodo, fuera del while, y pues cuando queme el pic para ver lo que sucedia en vida real, se quedaba encendido ahi todo el tiempo....

Este es tu otro error, los valores pequeños de CCP_2 producen frecuecias mas elevadas, parece raro pero es asi, esto se debe a que la interrupcion se produce "Cuando TMR1 llega a ser igual al valor en CCP_2", entonces si tu pones en CCP_2 el valor de 100 por tu configuracion de TMR1 este llegara a 100 en 100 us por lo que tu frecuencia sera de 5000 Hz , Si embargo si a CCP_2 le pones el valor de 10000, al TMR1 le tomara 10 ms igualar el valor de CCP_2 , entonces tu frecuencia sera de 50 Hz.

Finalizando , para notar el parpadeo tu frecuencia debe ser menor a 50 Hz , que tal 10 Hz , para esto tienes un periodo de 100 ms , con lo que el tiempo alto que es igual al tiempo bajo sera 50 ms poniendo periodo = 50000 ya tendras este tiempo, pero no te olvides que periodo debe ser de 16 bits.

Saludos

La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: CCP2... No encuentro el problema
« Respuesta #8 en: 01 de Febrero de 2008, 23:18:19 »
 :shock:

Waoooooooo!!!! esa era la explicación que yo necesitaba!!!! Naguara, viste así es que se explica!!! chamo, deberias ser mi profesor de la materia Microprocesadores II, en vez del que tengo actualmente!!!! yuuupi!!! ya no me siento tan perdida!!!! jejejejeje :-/ voy a probar lo que me dices!!!! :mrgreen:

A ver como me va!!!, cualquier cosa posteo los resultados!!! jejejejeje :mrgreen:

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!


 

anything