Autor Tema: Medir frecuencia señal cuadrada mediante INT_RB  (Leído 19998 veces)

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

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Medir frecuencia señal cuadrada mediante INT_RB
« Respuesta #30 en: 21 de Marzo de 2009, 21:24:00 »
teoricamente deberia de funcionar.... yo no he probado pese a que tengo un 18f4550 aqui parado....
algun dia que no tenga faenilla voy a probar todos los ejemplos del ccs, ya que hay buenos programas para trastear un rato....
que hablas del ejemplo del ccs?
yo cree un programa para mis necesidades que no eran muchas..... un cuentarevoluciones..... pero probe a ver la frequencia maxima que podria coseguir con el circuito y el 16f628a....
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: Medir frecuencia señal cuadrada mediante INT_RB
« Respuesta #31 en: 21 de Marzo de 2009, 21:35:19 »
 :mrgreen: si es el ejemplo frecq del CCS.... lo voy a tener que agarrar de nuevo con mas calma.... y de ultima tratar de copiar la idea  :)
LAS MALVINAS SON ARGENTINAS!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Medir frecuencia señal cuadrada mediante INT_RB
« Respuesta #32 en: 22 de Marzo de 2009, 01:38:15 »
Hola cerebro.

A mi me funciono muy bien con un 18F452 ... lo que no pude probarlo fue con un PIC12 ... no supe como pu**s conectarlo  :D

El papel lo aguanta todo

Desconectado DT85

  • PIC10
  • *
  • Mensajes: 1
Re: Medir frecuencia señal cuadrada mediante INT_RB
« Respuesta #33 en: 19 de Octubre de 2009, 06:44:22 »
cierto en los comentarios lo explica bien.... pero yo no comprendo la lectura es erronea.... lo probe con el proteus y me daba valores nada correctos....
no se...
yo al final con el 16f628a he conseguido llegar a 290khz
aqui va mi programa....

Citar
#include <16F628a.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000)    //one instruction=0.2us
#use fast_io (a)
#include <lcd_portb.c>
#byte porta = 0x06
#byte cmcon = 0x1f

unsigned int ajuste = 0;
unsigned int j,jj,jjj,jjjj,jjjjj = 0;
unsigned long pulsos,pulsos2 = 0;
unsigned long tiempo = 0;

#int_timer0
void time()
{
   ++tiempo;
   if(tiempo>76){                                                //la condicion se cumple cada 0.9998 segundos
         j = pulsos2;                                          //
         jj = pulsos/1000 %10;                                    //prepara valores de las variables
         jjj = pulsos/100 %10;                                    //para mostarlos en el lcd
         jjjj = pulsos/10 %10;                                    //
         jjjjj = pulsos %10;                                       //
         lcd_gotoxy(1,1);
         if(pulsos2<=0){
            printf(lcd_putc, "Freq= %lu Hz  "pulsos);
            ajuste = 181;                                       //ajustes de la interrupcion del timer0 para frequencias inferiores a 10Khz
         }
         else
         {
            if(pulsos2<=4){
               printf(lcd_putc, "Freq= %u%u,%u Khz  "j,jj,jjj);
               ajuste = 168;                                    //ajustes de la interrupcion del timer0 para frequencias inferiores a 40Hkz
            }
            else
            {
                  if(pulsos2<=26){
                  printf(lcd_putc, "Freq= %u%u,%u Khz  "j,jj,jjj);
                  ajuste = 154;                                 //ajustes de la interrupcion del timer0 para frequencias inferiores a 250Hkz
               }
               else
               {
                  printf(lcd_putc, "Freq= %u%u,%u Khz  "j,jj,jjj);
                  ajuste = 127;                                 //ajustes de la interrupcion del timer0 para frequencias superiores a 250Hkz
               }
            }
                                       
         }
         set_rtcc(ajuste);                                       //asigna el valor "ajuste" para ajustar el valor de frecuencias a diferentes valores
         pulsos = tiempo = pulsos2 = 0;                              //setea valores
   }
}   


void main()
{
   cmcon = 0x07;                                                //comparadores en off
   set_tris_a (0x01);                                             //solo esta el PIN_A0 como entrada, el resto salidas
   enable_interrupts(int_timer0);                                    //habilito interrupciones timer0
   setup_timer_0(rtcc_internal | rtcc_div_256);                        //configuro interrupciones timer0
   enable_interrupts(global);                                       //activo las interrupciones habilitadas
   
      lcd_init();                                                //inicio el LCD
      while(true){                                             //bucle infinito
         do{
            while(input(PIN_A0)){
               ++pulsos;
               while(input(PIN_A0)){}
            }
         }while(pulsos != 10000);                                 //hasta que pulsos no sea 10000, repetira el bucle
         pulsos = 0;                                             //setea pulsos
         ++pulsos2;                                             //suma 1 a pulsos2, con este valor obtendremos las decenas de millar,centenasde millar y unidades de millon
         
      }


}

Hola a todos, soy nuevo en este mundillo. He armado el programa en un pic 16f876, y va de maravilla. Pero tengo dudas, el porque el ajuste se hace a esos valores. Es que utilizo las formulas para hallar esos valores (ya que quiero encontrar el equivalente para un circuito con reloj de 4MHz) de la carga del timer, y no me da igual. Lo que quiero entender es el programa!
Otra pregunta: porque le das redundancia a la siguiente instrucción

while(input(PIN_A0)){
               ++pulsos;
               while(input(PIN_A0)){}


La señal se podia introducir por cualquier otro pin?

Gracias de antemano!

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Medir frecuencia señal cuadrada mediante INT_RB
« Respuesta #34 en: 20 de Octubre de 2009, 05:27:07 »
puedes utilizar el pin que tu consideres oportuno... En cuanto a lo de los ajustes es por el retardo que sufre el pic por la escritura en el lcd, a frecuencias muy altas la escritura en el lcd se combierte en una tarea para el pic que demora mucho tienpo, de ahi viene ese valor
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...


 

anything