Autor Tema: configurando timer1 externo  (Leído 12239 veces)

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

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: timer 0 interno.
« Respuesta #15 en: 09 de Mayo de 2007, 12:26:58 »
bueno en este momento no tengo a la mano el datasheet pero creo recordar que si es posible la interrupcion durante el sleep, ahora para el pic de la gamma 18F yo uso el C18, pero el CCs solo lo utilizo para la gamma 16F y 12F, si recien tas comenzando podriamos evaluar tu promocion a C18  :mrgreen:
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado paco1980

  • PIC16
  • ***
  • Mensajes: 129
Re: timer 0 interno.
« Respuesta #16 en: 09 de Mayo de 2007, 13:33:29 »
Pero creo que la configuración para lo que quiero hacer con el timer1 es similar tanto para 16f como para 18f.
Podrías intentar implementarlo para 16f917 por ejemplo?
Yo lo intenté pero no lo conseguí. Y es lo que quiero, algun ejemplo de como se podría hacer en ccs.
Ten en cuenta que no manejo el lenguaje ensamblador, y me podría volver loco intentando en ensamblador acceder a los bancos del uC para poner uno u otro bit a uno según la configuración necesaria.
Aunque yo lo desconozco, creo que con las funciones de ccs se debería de hacer sin ningún problema. (Creo).
Un saludo.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: timer 0 interno.
« Respuesta #17 en: 09 de Mayo de 2007, 16:07:33 »
ya pes voy a revisar como se puede configurar eso en CCS y te comento. hasta mas luego  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: timer 0 interno.
« Respuesta #18 en: 09 de Mayo de 2007, 18:39:57 »
Gracias micro-cadaver.
Como ya he dicho en ciertas ocasiones, no me manejo bien ni con el ensamblador, ni con el ingles.
Según el datasheet del 18f4331, y si no lo he entendido mal, el timer1 , con un cristal externo como el de la imagen que mandé. puede funcionar durante el sleep. (vamos a basarnos en el 18f4331. ok?). pero no sé que funciones del ccs debo utilizar para configurarlo como tal, ni para trabajar con el. Eso es lo que me gustaría saber, con que funciones puedo programarlo. Ya que solo se configurarlo como contador interno.
Gracias.
 

puedes leerte la función compilada set_timer1 en la ayuda ccs_c_manual.pdf pag 63 y en los parametros buscarte el archivo 18f4331.h que está en el directorio picc, (si es que el ccs soporta este micro)


PD: el título de post no corresponde a tu pregunta ¿o me equivoco?
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: timer 0 interno.
« Respuesta #19 en: 10 de Mayo de 2007, 17:11:24 »
Es un 16f917.
Creo que ya se como hacerlo, pero hasta que no consiga dicho pic no puedo probarlo, ya que ahora solo dispongo del 16f877, y ese no lleva oscilador interno.
Lo que más me trae de cabeza es lo del timer 1.
Ya que quiero configurarlo como contador asíncrono externo, y los pulsos introducirlos con un cristal externo.
¿Esto puede ser?
¿Tienes idea?
Nota: todo esto es para desbordar el timer 1 estando el pic en SLEEP.
Un saludito y gracias.


después de ver porque en el proteus, no funcionaba el timer1 como osc externo. me dí cuenta de una cosa:

parece que el cristal no funciona en este caso, este es el código simulado:

Código: C
  1. //---------------------------------------------
  2. // usando el timer1 como osc externo e interrumpiendo
  3. // en modo sleep
  4. //---------------------------------------------
  5. #include <16F877a.h>
  6.  
  7. #fuses XT,NOPROTECT,NOPUT,NOWDT,NOBROWNOUT,NOLVP,NOCPD
  8. #use delay (clock=4000000)
  9.  
  10. //*************************************************
  11. #INT_TIMER1  // rutina de servicio de interrupcion
  12. void mitimer(){
  13.    delay_cycles(1);  // pegar un punto de ruptura
  14. }
  15. //*************************************************
  16. void main(){
  17.    set_tris_a(0x0);
  18.    set_tris_b(0x0);
  19.    set_tris_c(0b0);
  20.    set_tris_d(0x0);
  21.    set_tris_e(0x0);
  22.    set_timer1(0x7fff);
  23.    setup_timer_1(0b1111);  
  24.    // pre=1:1                (T1CKPS1:T1CKPS0=0)
  25.    // osc externo habilitado  (T1OSCEN=1 y TMR1CS=1)
  26.    // clock entrada asincrono (/T1SYNC=1)
  27.    // enciendo el timer1 ()    (TMR1ON=1)
  28.    
  29.    enable_interrupts(INT_TIMER1);  //selecciono la f. interr. del timer1
  30.    enable_interrupts(GLOBAL);     // enciendo el sistema de interr.
  31.    sleep();
  32.    while(1){ // bucle eterno
  33.       delay_cycles(1);
  34.    } // fin del while
  35. } // fin del main

como está configurado para incrementar desde la frec. del oscilador externo, entonces cada incremento del TMR1 se llevará 1/Fosc externo, entonces para un prescaler de 1:1
y una frecuencia de 32768 para cada desbordamiento (arrancando desde 0) del tmr1 tenemos 2 segundos (1/32768 x 65536). para tener 1 segundo basta cargar al tmr1 la mitad
65536/2 -> 32768 que viene siendo el mismo valor del cristal

está simulado con/sin el sleep y funciona ok



en la imagen se observa que cambié el cristal por un clock conectado a T1OSI

ojo, esto es una mera simulación, faltaría corroborarlo en el protoboard.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado paco1980

  • PIC16
  • ***
  • Mensajes: 129
Re: timer 0 interno.
« Respuesta #20 en: 11 de Mayo de 2007, 04:02:12 »
gracias palitroquez.
Pero entonces por lo que me comentas, no pudiste hacerlo funcionar con cristal externo?. Puff, vaya tela.
El caso es que yo se que se puede hacer, pero no se como.

Lo conseguiremos, jajaj

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: timer 0 interno.
« Respuesta #21 en: 11 de Mayo de 2007, 12:59:40 »
Hola paco1980

yo creo que así como está debería funcionar en el protoboard, porque el inversor interno está activado.

en el proteus yo me valgo de esa artimaña, por eso digo que sería cuestión de montarlo y probar... no lo hago pues ya tengo otro montaje y se me acabó el espacio  :(
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado paco1980

  • PIC16
  • ***
  • Mensajes: 129
Re: timer 0 interno.
« Respuesta #22 en: 11 de Mayo de 2007, 14:10:19 »
ok. Gracias pedro.
Lo montaré en la protoboard y te comento.
Espero la semana que viene despejar esta duda tan pesada.
Un saludo

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: timer 0 interno.
« Respuesta #23 en: 11 de Mayo de 2007, 15:03:50 »
paco no olvides de agregarle al código otras cosas, por ejemplo que se encienda un led´s al segundo por ejemplo y cambiarle el micro por el que vayas a usar.


nos cuentas después...
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado paco1980

  • PIC16
  • ***
  • Mensajes: 129
Re: timer 0 interno.
« Respuesta #24 en: 25 de Mayo de 2007, 16:59:58 »
Hola amigo. Ya era hora que respondiera, pero estaba de viaje y hasta ahora no e podido probar.
Para empezar te doy la enhorabuena porque eres un fenomeno. Ya tengo el pic durmiendo, y saliendo del sleep por el timer1 para hacer lo que quiera.
Ahora viene lo gracioso.... Resulta que al final el único pic que he podido conseguir para trabajar con nanowats es el pic 18f4431, y resulta que la única configuración para permitir que el timer1 despierte al pic del sleep es la que me diste, pero lo gracioso es que no necesito ningún cristal. Por lo que se ve, este pic se despierta con el timer1 funcionando internamente, y el caso es que en el datasheet aparece que hay que implementar un cristal externo. Jajaja, esto es la caña.
Resulta que tengo el micro en sleep consumiendo menos de 7uA y cuando se desborda el timer1 me obedece. (No hay ningún cristal externo en ningún sitio).


 #include <18F4431.h>
  #fuses xt,t1lowpower,mclr,NOPROTECT,noPUT,NOWDT,NOBROWNOUT,LVP
  #use delay (clock=31000)
  #byte port_a  = 5
 
  #byte port_e  = 9
  #use fast_io(a)
   //*************************************************
   #INT_TIMER1  // rutina de servicio de interrupcion
   void mitimer(){
   disable_interrupts(global);
      output_toggle(pin_a0);
      set_timer1(0xf900);
      enable_interrupts(global);
      }
   //*************************************************
   void main(){
     
      set_tris_a(0x00);
      set_tris_b(0xf0);
      set_tris_c(0x00);
      set_tris_d(0x00);
      set_tris_e(0x00);
     
      setup_timer_1(0b1111);   
      set_timer1(0xf900);
      enable_interrupts(int_timer1);
      enable_interrupts(global);
 
     
      for(;;){
      sleep();
      }
     
     }

A costado pero sin entenderlo muy bien, ya está soluocionado.
Ahora que avanzo me salen ciertos problemas que pondré en un post nuevo si difiere del título de este.
Por cierto. GRACIAS PALITROQUEZ Y A TODOS LOS QUE HAN APORTADO SUS IDEAS Y CONOCIMIENTOS.

NOTA: ¿de donde eres palitroquez?

Un saludo.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: timer 0 interno.
« Respuesta #25 en: 26 de Mayo de 2007, 14:20:44 »
Hola paco1980.

me alegro que te funcionara, aunque no entendí como lo hiciste!!!

¿como es posible que el timer1 cuente sin una base de tiempos?

según la configuración:

setup_timer_1(0b1111);   

debería tomar los pulsos del cristal externo, para incrementar el par TMR1H:TMR1L

¿qué significa el fuse t1lowpower?


ahh.... ya vá... estoy viendo que colocaste como base de tiempos para el micro = 31Khz

pero, no debería ser así, esta frecuencia que declaras:

#use delay (clock=31000)

no tiene que ver con el timer1 externo asíncrono, ¿¿?? mas dudas tengo


...
NOTA: ¿de donde eres palitroquez?
...

Saludos desde la República Bolivariana de Venezuela  :mrgreen:
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado paco1980

  • PIC16
  • ***
  • Mensajes: 129
Re: timer 0 interno.
« Respuesta #26 en: 26 de Mayo de 2007, 16:20:32 »
Citar
¿qué significa el fuse t1lowpower?
según css, es una configuración del timer1 para trabajar en low power cuando el micro está en sleep.(de esta manera consigo un consumo tan bajo. o al menos eso creo, porque ya no se que pensar.jajaj).
Respecto al #use delay(31khz), tendré que decirle al micro de alguna manera a que frecuencia quiero que me haga los retardos. no?
de todas formas, El programa funciona igual tanto con el fuse XT, como con INTRC, que es lo que no entiendo, la única diferencia, es que si implemento el programa con INTRC en vez de XT, el consumo es mayor.
Como ya te comenté, estoy algo perdido, porque no comprendo como funciona de esta manera sin cristal ni nada. Es que ni si quiera le digo que use los osciladores internos.
Mañana seguiré con el tema, y ya te comento, ok?
Un saludo.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: timer 0 interno.
« Respuesta #27 en: 26 de Mayo de 2007, 16:32:14 »
si, hay que revisar los SFR para ver si estan cambiando como deben.

por cierto, sería buena idea que cambiaras el título del tema que se relacione con el timer1, pués ya terminamos hablando de éste  :D
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado paco1980

  • PIC16
  • ***
  • Mensajes: 129
Re: timer 0 interno.
« Respuesta #28 en: 26 de Mayo de 2007, 16:43:55 »
Citar

por cierto, sería buena idea que cambiaras el título del tema que se relacione con el timer1, pués ya terminamos hablando de éste  :D
ok, solo tienes que decirme como hacerlo, ya que no utilizo las opciones del foro y las desconozco.
Que título crees que convendría?

Por cierto, me has ayudado mucho y me gustaría compartir contigo algunas dudas que mañana tendré más claras, y como no soy de los que tengan mucha paciencia, me gustaría agregarte a mi messenguer, ¿me lo permites?.
Un saludo.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: timer 0 interno.
« Respuesta #29 en: 26 de Mayo de 2007, 16:55:29 »
el título podría ser "configurando el timer1 externo" algo que relaciones al timer1 como contador externo. Fijate que por allí el amigo PICmouse tiene un tema donde se expone una duda similar.

...
me gustaría agregarte a mi messenguer, ¿me lo permites?.


dale no hay problemas, pero será pa´l lunes en adelante, mañana no estaré (el ciber no trabaja los domingos   :()



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek


 

anything