Autor Tema: problemillas con el TMR1  (Leído 1945 veces)

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

Desconectado newells5

  • PIC10
  • *
  • Mensajes: 18
problemillas con el TMR1
« en: 27 de Marzo de 2006, 04:14:00 »
La idea del ejercicio es que divida una frecuencia entre 4. Le meto una señal "f" por RC0 para que salga una señal "f/4" por RB0. Yo creo que esta bien pero no funciona, a ver si veis algun fallo...


#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)

int a;


#int_timer1      //interrupcion del TMR1
   void cuenta()
   {
   disable_interrupts(GLOBAL);      //deshabilito las interrupciones por seguridad
      a=!a;      //cada vez que i=4 cambio el valor de a
   set_TIMER1(0xFFFC);      //cargo el TMR1 para que se desborde al contar 4
   }




void main()      //PROGRAMA PRINCIPAL
{
   set_TRIS_C(00000001);      //RC0 como entrada de pulsos para TMR1
   set_TRIS_B(11111110);      //RB0 como salida del divisor
   SETUP_TIMER_1(T1_EXTERNAL);   //TMR1 cuenta segun pulsos externos
   disable_interrupts(GLOBAL);      
   enable_interrupts(int_timer1);
   set_TIMER1(0xFFFC);         //cargo TMR con FFFC para que se desborde al contar 4
   enable_interrupts(GLOBAL);
   

   do
   {
      
      if(a=0)               //si a=0...
         output_b(0x01);      //...salida=1
      if(a=1)               //si a=º...
         output_b(0x00);      //...salida=0
      enable_interrupts(GLOBAL);
   }while(true);               //bucle infinito
}

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: problemillas con el TMR1
« Respuesta #1 en: 27 de Marzo de 2006, 05:46:00 »
Escrito originalmente por newells5

Codigo:

#int_timer1      //interrupcion del TMR1
   void cuenta()
   {
   disable_interrupts(GLOBAL);      //deshabilito las interrupciones por seguridad
      a=!a;      //cada vez que i=4 cambio el valor de a
   set_TIMER1(0xFFFC);      //cargo el TMR1 para que se desborde al contar 4
   }






Porque deshabilitas las interrupciones globales en la rutina de interrupcion?  Esto lo hace el pic automáticamente!!

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado newells5

  • PIC10
  • *
  • Mensajes: 18
RE: problemillas con el TMR1
« Respuesta #2 en: 27 de Marzo de 2006, 06:10:00 »
Ya lo he solucionado.

He metido el bucle de cambio 0 --> 1 y 1 --> 0 dentro de la interrupcion y funciona bien.

Suponogo que el problema venia porque salia de la interrupcion y antes de ejecutar el bucle volvia a entrar.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: problemillas con el TMR1
« Respuesta #3 en: 27 de Marzo de 2006, 21:01:00 »
Escrito originalmente por newells5
Ya lo he solucionado.

He metido el bucle de cambio 0 --> 1 y 1 --> 0 dentro de la interrupcion y funciona bien.

Suponogo que el problema venia porque salia de la interrupcion y antes de ejecutar el bucle volvia a entrar.


De todas formas hazme caso y no uses el deshabilitar las interrupciones globales justamente en la rutina de interrupcion porque no tiene sentido! ya que esto es realizado automáticamente por el PIC.

Luego uno debe hacer un retfie (esto si que hay que hacerlo manualmente) con lo cual se vuelve a reactivar el GIE.  Eso si, lo de usar el RETFIE lo hace solito el C por lo cual no debieras preocuparte.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything