Autor Tema: interrupcion por conteo  (Leído 7176 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: interrupcion por conteo
« Respuesta #15 en: 26 de Enero de 2010, 14:01:07 »
Saludos

Por que no intentas lo siguiente setup_timer_0(xxxx) por lo siguiente setup_counters(xxxxx) te puede servir.
Un saludo desde Pereira - Colombia

Desconectado kidpic

  • PIC16
  • ***
  • Mensajes: 231
Re: interrupcion por conteo
« Respuesta #16 en: 26 de Enero de 2010, 16:50:29 »
sigue sin responder a la interrupcion. estas son las lineas que agregue y se compilan bien . Pruebo con counters y sigue igual.


#byte trisA=0x85
#byte portA=0x05
#byte option_reg=0x81 

//atencion de la interrupcion
 
#int_timer0 //la siguiente función tiene que ser la de interrupción del TMR0
void timer0_isr(void) //function interrupción TMR0
{
 write_ext_eeprom (dir++,value);
 write_ext_eeprom (dir++,(value>>8));
 write_ext_eeprom (dir++,hr);
 write_ext_eeprom (dir++,min);
 write_ext_eeprom (dir++,day);
 write_ext_eeprom (dir++,mth);
   
set_timer0(0xF1); //inicializa el timer


 //configuro interrupcion por tmr0
                  
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_4);
enable_interrupts(GLOBAL);
set_TIMER0(0xF1); //inicializa el timer0
                     
 //configuro puerto A PinA4 como entrada
   
bit_clear(option_reg,7);     // habilitacion de pull-up
bit_set(trisA,4);          // A4 como entrada
 
Si quieres trascender..., enseña humildemente  lo que sabes.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: interrupcion por conteo
« Respuesta #17 en: 26 de Enero de 2010, 18:08:51 »
Saludos

A mi funciona debes estás configurando mal algo o debes estar simulando mal para que tengas encuenta lo siguiente:

Como estás configurando con un prescaler de 1:4 debes esperar 64 pulsos en TOCK1 y no 16 además intentaste configurar el timer con la siguiente línea.

setup_counters(RTCC_EXT_L_TO_H , RTCC_DIV_4); espero que te funcione.
Un saludo desde Pereira - Colombia

Desconectado kidpic

  • PIC16
  • ***
  • Mensajes: 231
Re: interrupcion por conteo
« Respuesta #18 en: 26 de Enero de 2010, 19:08:46 »
Bueno si te funciona a vos es una alegria estoy haciendo algo mal yoó. No lo estoy simulando pero si tengo el proteus. (no se como incorporar este programa al proteus)  Lo que me importa que esta funcionando la llamada a interrupcion.
Lo estoy probando con el hard directamebte trabajo con pickit2 y no obtengo resultados positivos.
Np entiendo lo de los 16 o 64, aparte reemplazo la linea de configuracion por la que me decis y aparece este error

EXPECT COMMA    (en esa linea)
Si quieres trascender..., enseña humildemente  lo que sabes.

Desconectado kidpic

  • PIC16
  • ***
  • Mensajes: 231
Re: interrupcion por conteo
« Respuesta #19 en: 26 de Enero de 2010, 20:18:34 »
Chenao , me podrias pasar el archivo para correrlo con el proteus.
Gracias
Si quieres trascender..., enseña humildemente  lo que sabes.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: interrupcion por conteo
« Respuesta #20 en: 27 de Enero de 2010, 00:31:47 »
Saludos

Con respecto a lo del prescaler debes tener varias cosas en cuenta pero mejor vamos a explicarlo en tu código tienes la siguiente instrucción SET_TIMER0(0xF1) que en décimal es 241 ahora tenemos que cada 15 pulsos se va desbordad el timer0 hasta aqui todo bien lo básico pero después estas configurando el timer externo y además con un predivisor de frecuencia que es 1: 4 acá va el chiste como estás trabajando timer0 con pulso externo en TOCK1 esté se convierte en el reloj y como tienes un predivisor 1:4 pues cada 4 pulso se incrementa el timer0 entonces para que cuente de 241 hasta 256 necesita 15*4 = 60 acá tuve un problema con el cálculo por que lo hice algo afanado.

Con respecto al la línea de código no estás copiando bien la instrucción ya que no estás poniendo la coma como aquí se muestra.

setup_counters(RTCC_EXT_L_TO_H , RTCC_DIV_4);  "la coma está en la mitad del parentisis"

Acá adjunto la simulación esta hecha en el proteus versión 7.2 espero que te sirva.
 
Un saludo desde Pereira - Colombia

Desconectado kidpic

  • PIC16
  • ***
  • Mensajes: 231
Re: interrupcion por conteo
« Respuesta #21 en: 27 de Enero de 2010, 02:02:03 »
gracias chenao. me surge una duda :yo necesito que desborde e interrumpa cada 60 pulsos con una frecuencia de 1hz que estaran entrado por el ra4.
lo cargo al timer con ese numero porque lo calcule con esta formula.

inter_tmr0 =(1/frecuencia del clock externo)X(256- valor del tmr0)Xprescaler

inter_tmr0 = es el tiempo en que se produce la interrupcion que sera igual a 60
frecuebcia del cclk externo = 1hz
prescaler=4
valor del tmr0 =es lo que despejo y me da 0XF1

puede que no este usando la formula correcta. si no es asi que calculo tendria que hacer para evitar lo que dices vos. örque no puedo modificar la frec de entrada
Si quieres trascender..., enseña humildemente  lo que sabes.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: interrupcion por conteo
« Respuesta #22 en: 27 de Enero de 2010, 02:08:09 »
Me parece que estas entendiendo algo mal.

Deberias configurar el timer 0 como contador de pulsos externo. No necesitas hacer ningun calculo de tiempos con el Timer0 porque la idea es que lo uses como contador de pulsos, no contador de ciclos de reloj del uC.

Si el preescaler es 1:2 entonces vas a tener que precargar al timer0 con el valor 256-60/2= 226.

Por favor, lee cuidadosamente el funcionamiento del Timer0 en el datasheet.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado kidpic

  • PIC16
  • ***
  • Mensajes: 231
Re: interrupcion por conteo
« Respuesta #23 en: 27 de Enero de 2010, 09:38:28 »
saque informacion de este documento, te paso el link para que te fijes. Tal vez estoy errado en mi interpretacion

http://www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr0-como-contador.html
Si quieres trascender..., enseña humildemente  lo que sabes.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: interrupcion por conteo
« Respuesta #24 en: 27 de Enero de 2010, 11:22:41 »
Estas interpretando mal, porque como bien dice Bruno debes entender que lo estas configurando como contador, entonces no necesitas saber que frecuencia tiene el clock externo, sino al saber que necesitas recibir 60 pulsos realizas el calculo como se te muestra (Pre-cargar con 226)


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

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: interrupcion por conteo
« Respuesta #25 en: 27 de Enero de 2010, 11:25:53 »
Saludos

Como dice el compañero Bruno ahora el timer no está contando por cada ciclo de reloj si no que está contando cada vez que hay un pulso externo en TOCK1 para tu caso cada 4 Hz (por el prescalador) de todas manera consulta el datasheet ahy explican detalladamente está configuración.
Un saludo desde Pereira - Colombia

Desconectado kidpic

  • PIC16
  • ***
  • Mensajes: 231
Re: interrupcion por conteo
« Respuesta #26 en: 27 de Enero de 2010, 12:28:21 »
Gracias muchachos, que confusion!!.
En limpio: con un prescaler de 4 y cuando entren 60 pulsos externos ( que vienen de un ds1307) cual es valor de carga del timer0??
de acuerdo a lo que uds. ddicen sera (256 -60/4)= 241. Confirmelo por favor !!!

Entonces no tengo que tener en cuenta esta formula

inter_tmr0 =(1/frecuencia del clock externo)X(256- valor del tmr0)Xprescaler

GRacias, donde consigo el datasheet?????
Si quieres trascender..., enseña humildemente  lo que sabes.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: interrupcion por conteo
« Respuesta #27 en: 27 de Enero de 2010, 12:42:45 »
Saludos

Si es correcto el cálculo. No tienes que tener en cuenta la fórmula impirica del timer0. el datasheet lo consigues en la página de microship (creo que así se escribe) o si no preguntale al google.
Un saludo desde Pereira - Colombia

Desconectado kidpic

  • PIC16
  • ***
  • Mensajes: 231
Re: interrupcion por conteo
« Respuesta #28 en: 27 de Enero de 2010, 12:57:59 »
saludos Chenau, haciendo  cuentas  el 241 tambien lo obtengo de esta formula despejando el "valor de  timer0"

inter_tmr0 =(1/frecuencia del clock externo)X(256- valor del tmr0)Xprescaler

despues de todo sigo sin respuesta requerida de la interrupcion.
tal vez el trabajar con una interrupcion dentro de otra provoca algun conflicto en este codigo.

Si quieres trascender..., enseña humildemente  lo que sabes.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: interrupcion por conteo
« Respuesta #29 en: 27 de Enero de 2010, 13:15:09 »
Saludos

Por supuesto es el valor que estas cargando con la instrucción set_timer0(xxxx) en esté caso xxxx es 241 pero lo que cambia es la forma como el timer se incrementa ya no se incrementa por cada 4 ciclos de reloj (1:4) si no cada 4 pulso en RA4 (TOCK1) es la diferencia entre la configuración contador y la configuración timer. No has consultado el datasheet?

Si no estás resiviendo respuesta de interrupción te recomiendo que pruebes tu código por parte para identificar donde puede estás el error.
Un saludo desde Pereira - Colombia


 

anything