Autor Tema: Timer1 como contador externo y Timer3 como temporizador  (Leído 2961 veces)

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

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Timer1 como contador externo y Timer3 como temporizador
« en: 06 de Mayo de 2007, 15:25:30 »
 Hola amigos, estoy configurando al Timer1 como contador externo asíncrono y al Timer3 como temporizador interno, cada 20 000 cuentas del timer3 entra en interrupción y coje el valor actual del timer1 y lo resetea, luego sale y se halla con una fórmula las RPM de un motor que se envían al uart.

 El problema es que cuando lo pruebo en el hiperterminal no me aparece nada, parece que no entra en interrupción, estoy suponiendo que el timer 1 y 3 son de 16bits. Me sale esta advertencia al compilar:

Warning 208 Line12[1,11]:  Function not void and does not return a value TIMER3_isr

El pin 15 (T13CKI) lo tengo por el momento al aire, por este pin se mete los pulsos asíncronos?

Código: [Seleccionar]
#include <18F4550.h>
#FUSES NOWDT,XT,NOPROTECT,BROWNOUT,NOLVP,BROWNOUT,BORV28
#use delay(clock=4000000)
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use fast_io(D)
#ZERO_RAM
#int_TIMER3

char orden;
unsigned int16 CNT;

TIMER3_isr()

   orden='B';            /* permiso para hallar RPM*/
   CNT=get_timer1();     /* cuenta actual del encoder*/
   set_timer1(0);        /* resetea cuenta del encoder*/
}


void main()
{
   int16 RPM;
   setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
   setup_timer_3(T3_INTERNAL|T3_DIV_BY_1);
   enable_interrupts(INT_TIMER3);
   enable_interrupts(GLOBAL);

   SET_TRIS_d(0b11111101);
   output_high(PIN_D1);   /* PORTD como salida, _D1=0 */
   orden='X';
   set_timer3(45536);    /* 20000 cuentas son 20mseg*/
   
   while (1)
    {
       if (orden=='B')
        {  /* 20mseg cumplidos, hallando RPM*/
           set_timer3(45536);    /* 20000 cuentas para 20mseg*/
           RPM=(int16)(2.9296*CNT);
           printf("V%Lu ",RPM); 
           orden='X';
        } 
       else
        {  /* aun no se ha cumplido los 20mseg*/
           delay_us(10);
        }
    }

}

Agradesco las ayudas, gracias.
control de movimiento

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Timer1 como contador externo y Timer3 como temporizador
« Respuesta #1 en: 12 de Mayo de 2007, 06:47:50 »
La llamadas a las interrupciones juntalas con su código:
Código: C
  1. #int_TIMER3
  2. void TIMER3_isr(void)
  3. {  
  4.    orden='B';            /* permiso para hallar RPM*/
  5.    CNT=get_timer1();     /* cuenta actual del encoder*/
  6.    set_timer1(0);        /* resetea cuenta del encoder*/
  7. }

Por este pin es el que debes introducirles los pulsos RC0/T1OSO/T13CKI.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Timer1 como contador externo y Timer3 como temporizador
« Respuesta #2 en: 22 de Mayo de 2007, 19:26:00 »
Gracias vszener por la aclaración y disculpa por la demora, recién apliqué tu sugerencia pero para otro ejm y funcionó.

Código: [Seleccionar]
#int_TIMER3void TIMER3_isr(void)


lo probaré para el contador asíncrono,

Saludos
control de movimiento


 

anything