Autor Tema: Conflicto entre TMR0 y TMR1  (Leído 2529 veces)

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

Desconectado Medusa

  • PIC18
  • ****
  • Mensajes: 252
Conflicto entre TMR0 y TMR1
« en: 10 de Febrero de 2010, 16:49:00 »
Hola, estoy usando un pic18f452 a 20MHz, y estoy tratando de implementar un programa para que me genere dos señales de diferenetes frecuencias, para esto estoy usando las interrupciones del TMR0 y TMR1, cuando uso solo uno de  las interrupicones (TMR0 o TMR1) mietras que el otro esta desabilitado todo funcio OK, pero cuando trato de usar las dos interrupciones (TMR0 y TMR1) solo el TMR0 produce la interrupcion mas no el TMR1, alguien me podria decir cual es mi error?

Aqui esta mi codigo:
Código: [Seleccionar]
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=20000000)

int16 demo;
int i,j;

#define LED    PIN_E1
#define OSC    PIN_E2

#define ON      output_high
#define OFF    output_low

#INT_TIMER0
void tempo()
   {
   set_timer0(65500);
   if (i == 0){
      i = 1;
     ON(OSC);
    }
    else {
       OFF(OSC);
       i = 0;
    }   
}

#INT_TIMER1
void temp1()
   {
    set_timer1(26462);
    if (j == 0){
       j = 1;
       ON(LED);
       }
      else {
          OFF(LED);
          j = 0;
    }   
}

void main(){

    setup_timer_0(RTCC_INTERNAL | RTCC_DIV_2);
    enable_interrupts(INT_TIMER0);

    setup_timer_1(T1_INTERNAL | T1_DIV_BY_2);
    enable_interrupts(INT_TIMER1);
    set_timer1(26462);

    enable_interrupts(GLOBAL);

    OFF(LED);
    OFF(OSC);

    while(true);
}

Desconectado c4_esp_VR

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
    • www.muchotrasto.com
Re: Conflicto entre TMR0 y TMR1
« Respuesta #1 en: 11 de Febrero de 2010, 19:15:20 »
Hola Medusa:

No recuerdo muy bien, pero creo recordar que uno de los dos timers es de 8 bits (creo que es el timer0) por lo que sólo puedes contar hasta 255 y tienes puesto...set_timer0(65500)

Espero que te sirva.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Conflicto entre TMR0 y TMR1
« Respuesta #2 en: 11 de Febrero de 2010, 20:40:39 »
el timer0 del 18f452 puede ser configurado a 8 y 16bits

mm con respecto al problema de medusa suena raro...

crees que puedas configurar manualmente los registros? es decir hacer defines a los registros involucrados para la configuración de los timers y de la interrupción de cada uno.

saludos.
.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Conflicto entre TMR0 y TMR1
« Respuesta #3 en: 11 de Febrero de 2010, 20:51:42 »
Hola.

Pues raro, a mi me ha pasado que la frecuencia se corre un poco, pero es por la prioridad de las interrupciones, pero se generan las dos interrupciones normalmente ... en la simulacion va bien?

Saludos
El papel lo aguanta todo

Desconectado Medusa

  • PIC18
  • ****
  • Mensajes: 252
Re: Conflicto entre TMR0 y TMR1
« Respuesta #4 en: 12 de Febrero de 2010, 11:31:37 »
Nop, en la simulacion tambien es igual, solo aparentemete trabaja el TMR0  :5]

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Conflicto entre TMR0 y TMR1
« Respuesta #5 en: 12 de Febrero de 2010, 13:46:56 »
Esta raro, en simulacion se puede ver el parpadeo de E2, E1 siempre esta en 1, en el osciloscopio de proteus no se puede ver la onda de E2. pense q podria ser que PortE era tambien analogo pero tampoco :?
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Conflicto entre TMR0 y TMR1
« Respuesta #6 en: 12 de Febrero de 2010, 14:25:35 »
Muy raro, no sera tu compilador ?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Conflicto entre TMR0 y TMR1
« Respuesta #7 en: 12 de Febrero de 2010, 16:01:44 »
Lo simule para un pic16F628 pero poniendo en el timer0 el valor 220 y utilizando el puerto B y funciona bien en el proteus. Puse 220 porque tiene que contar 36 para que haya overflow y en el programa de medusa también cuenta 36 hasta que se produce el overflow.

Quizá algún bug en el compilador....


De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Conflicto entre TMR0 y TMR1
« Respuesta #8 en: 12 de Febrero de 2010, 16:22:40 »
prueba asigando una prioridad mas alta al timer1:

Código: [Seleccionar]
#priority timer1,timer0

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Conflicto entre TMR0 y TMR1
« Respuesta #9 en: 12 de Febrero de 2010, 16:39:21 »
Tal vez como dice pablomanieri funcione.

Yo agregué esta línea

Código: [Seleccionar]
#include <18F452.h>
inmediatamente después de #include <18F452.h>

y a su vez modifiqué el encabezado de la interrupción del timer0 de esta manera "#INT_TIMER0 high" y quedó funcionando en el proteus. Simulado en el 18F452
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Conflicto entre TMR0 y TMR1
« Respuesta #10 en: 12 de Febrero de 2010, 16:40:10 »
Tal vez como dice pablomanieri funcione.

Yo agregué esta línea

Código: [Seleccionar]
#DEVICE HIGH_INTS=TRUE
inmediatamente después de #include <18F452.h>

y a su vez modifiqué el encabezado de la interrupción del timer0 de esta manera "#INT_TIMER0 high" y quedó funcionando en el proteus. Simulado en el 18F452

Perdón, quize modificar el mensaje anterior pero le pifié al botón
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Conflicto entre TMR0 y TMR1
« Respuesta #11 en: 12 de Febrero de 2010, 16:51:52 »
No se que es lo que intentas hacer, pero para generar una frecuencia tan alta, te conviene usar el pwm del pic. Y la frecuencia mas baja si la haces con un timer

Desconectado canival35

  • PIC10
  • *
  • Mensajes: 36
Re: Conflicto entre TMR0 y TMR1
« Respuesta #12 en: 20 de Febrero de 2010, 02:02:32 »
Veo que no tienes activado la configuracion de interrupciones por prioridad, o los niveles de prioridad, deberias de hacer eso y darle una alta prioridad al TMR0 quizas y una prioridad baja al TMR1


 

anything