Autor Tema: Problema con los timers 0 y 1 como contadores.  (Leído 3888 veces)

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

Desconectado S4y4n

  • PIC10
  • *
  • Mensajes: 7
Problema con los timers 0 y 1 como contadores.
« en: 12 de Agosto de 2009, 13:31:07 »
Estoy tratando de leer dos encoders usando los timer 0 y 1, ademas de transmitir la cuenta de los pulsos cada segundo por rs232 a una computadora, el programa se compila sin ningun problema y simulado en proteus funciona, pero cuando programo el pic y realizo la comunicacion entre este y la computadora, el pic no transmite la cuenta de pulsos, solo manda ceros. No me explico que pueda ser estoy usando el compilador CCS v4.068 en el que apenas empieso.

Pongo el codigo que funciona en proteus pero no en la vida real, nose porque... nose si haya omitido algo que proteus corrije en la simulacion.

Código: [Seleccionar]

#include <18f452.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT
#use DELAY (CLOCK=4000000)

#use rs232(baud=9600, UART1)
#use STANDARD_IO (a)
#use STANDARD_IO (c)
//#include <bootloader.h>

int16 counter1=0;
int16 counter2=0;
int segundo=0;
int segundos=0;


//*************** INT TIMER1*********************

#int_TIMER3
void TIMER3_isr(void)
{
   segundo = segundo + 1;
   
   if (segundo == 2)
   {
   segundo=0;
   segundos= segundos + 1;
   
   printf("%6lu t0 %6lu t1 %6u seg \n \r", counter1,counter2,segundos);

   
   set_timer0(0);                                        //Borrado contador
   set_timer1(0);
   
   }
   
   set_timer3(3036);                // Recarga a 0.5s
   
}
//**********************************************

VOID MAIN()
{           
 
   PORT_B_PULLUPS(TRUE);
   
   setup_timer_0(rtcc_ext_l_to_h|rtcc_off);              //Configuración TMR0
   setup_timer_1(T1_external|T1_DIV_BY_2);
   setup_timer_3(T3_internal|T3_DIV_BY_8);               //Configuración TMR1
   set_timer0(0);                                        //Borrado contador
   set_timer1(0);
 
   set_timer3(3036);                                     //Carga a 0.5s
   enable_interrupts(int_timer3);
   enable_interrupts(global);                            //Habilitación interrupciones
   
   WHILE (1)
   {
   
   counter1=get_timer0();   //Lectura contador TMR0
   counter2=get_timer1();   //Lectura contador TMR1
 
   }
}


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #1 en: 12 de Agosto de 2009, 13:58:18 »
Hola.

El printf toma demasiado tiempo como para ponerlo en la interrupcion, mejor sacalo de ahi y ponlo en el programa principal.
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #2 en: 12 de Agosto de 2009, 14:03:44 »
Para que envíe cada 1 segundo, realizaría la lectura de los timer cada 1 seg y no en cada momento:

Para configurar el módulo USART:
Código: C
  1. #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

En espera del segundo:
Código: C
  1. #int_TIMER3
  2. void TIMER3_isr(void)
  3. {
  4.    set_timer3(3036);                // Recarga a 0.5s
  5.    segundo++;
  6.    
  7.    if(segundo==2){
  8.        counter1=get_timer0();   //Lectura contador TMR0
  9.        counter2=get_timer1();   //Lectura contador TMR1
  10.        segundo=0;
  11.    
  12.        set_timer0(0);                                        //Borrado contador
  13.        set_timer1(0);
  14.        FlagSeg=1;                            // Indicamos ocurrido el Segundo.
  15.    }
  16. }

y en el main:

Código: C
  1. .
  2. .
  3. .
  4. FlagSeg=0;
  5. while(1){
  6.  
  7.     while(FlagSeg==0){}
  8.     FlagSeg=0;
  9.     printf("%6lu t0 %6lu t1\n \r", counter1,counter2);
  10.  
  11. }
No contesto mensajes privados, las consultas en el foro

Desconectado sauron

  • PIC12
  • **
  • Mensajes: 78
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #3 en: 12 de Agosto de 2009, 16:18:49 »
MLO_ está en lo correcto, no es recomendable colocar un printf ni otras instrucciones dentro de una interrupción.

Observando sobre el tiempo del timer, ¿cual es el tiempo máximo que se puede configurar en un timer? ...horas?...que el pic no se sature o presente otra anormalidad

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #4 en: 12 de Agosto de 2009, 16:49:27 »
Observando sobre el tiempo del timer, ¿cual es el tiempo máximo que se puede configurar en un timer? ...horas?...que el pic no se sature o presente otra anormalidad

Como que se sature? El timer es un contador interno, y si el microcontrolador no tiene problemas de alimentación no va a fallar.
No contesto mensajes privados, las consultas en el foro

Desconectado S4y4n

  • PIC10
  • *
  • Mensajes: 7
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #5 en: 12 de Agosto de 2009, 17:11:58 »
Gracias por las respuestas ya modifique el codigo, pero ahorita solo puedo simularlo y lo que me interesa es ver que funcione ya implementado en el pic.

Desconectado sauron

  • PIC12
  • **
  • Mensajes: 78
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #6 en: 12 de Agosto de 2009, 19:14:24 »
El timer es un contador interno, y si el microcontrolador no tiene problemas de alimentación no va a fallar.

Ok gracias por la aclaración :o.

Entonces configurando bien el timer y los contadores, se le puede dar el tiempo que uno desee?, supongamos algo exagerado de 12 horas, si usamos el timer1 con periodo máximo a 4MHz sería...
T = 65536 * 8 * 1us = 0,524288s
12 horas = 43200s
Entonces... 43200s/0,524288s = 82397,46

Cuando el registro X llegue a 82397 tenemos la cuenta de 12 horas......¿no hay problema en la practica poner al PIC a contar ese tiempo?, si no hay fallas de alimentación claro.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #7 en: 12 de Agosto de 2009, 20:06:12 »
Mientras X sea de 32 bits no hay problema  :mrgreen:
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #8 en: 12 de Agosto de 2009, 20:56:21 »
Si no funciona en real, hay que revisar el esquematico.

Saludos
El papel lo aguanta todo

Desconectado S4y4n

  • PIC10
  • *
  • Mensajes: 7
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #9 en: 13 de Agosto de 2009, 02:18:57 »
Pues ya revise todas las conecciones y verifique con un osciloscopio que los encoders funcionen correctamente, ademas no creo que sea la tablilla porque fue madada a manufacturar junto con otras decenas iguales que no han dado ningun problema.



Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #10 en: 13 de Agosto de 2009, 13:48:35 »
Podrias subir el esquema?

Saludos
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #11 en: 13 de Agosto de 2009, 14:11:16 »
Pues ya revise todas las conecciones y verifique con un osciloscopio que los encoders funcionen correctamente, ademas no creo que sea la tablilla porque fue madada a manufacturar junto con otras decenas iguales que no han dado ningun problema.

No indica nada?

Al código agrégale:

Código: C
  1. setup_adc_ports(NO_ANALOGS|VSS_VDD);
  2. setup_adc(ADC_OFF);
  3. output_float(PIN_A4);
  4. output_float(PIN_C0);
  5. setup_timer_0(rtcc_ext_l_to_h);


Saludos!
« Última modificación: 13 de Agosto de 2009, 20:55:51 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado S4y4n

  • PIC10
  • *
  • Mensajes: 7
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #12 en: 13 de Agosto de 2009, 20:38:06 »
Ya realize las ultimas modificaciones que menciona Suky y programe el pic, pero sigo sin resivir la cuenta de pulsos, el pic si transmite la cuenta de segundos transcurridos pero no los pulsos leeidos en los encoders.

Desconectado S4y4n

  • PIC10
  • *
  • Mensajes: 7
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #13 en: 13 de Agosto de 2009, 20:46:47 »
Me olvidaba del esquematico

Saludos y gracias.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con los timers 0 y 1 como contadores.
« Respuesta #14 en: 13 de Agosto de 2009, 21:29:01 »
Yo me equivoque, debe ser output_float(PIN_C0);. Después, probé exactamente ese código que posteaste y funciona correctamente  :mrgreen:

Saludos!
No contesto mensajes privados, las consultas en el foro