Autor Tema: Ayuda, con los TIM  (Leído 1836 veces)

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

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Ayuda, con los TIM
« en: 06 de Noviembre de 2009, 18:41:04 »
Cordial Saludo.
Tengo un problema con los TIM de un HC08JL8, voy a tratar de hacerme entender:
El JL8 tiene 2 TIM TIM1 y TIM2, ambos tiene su registro TSC para configurar el Preescaler, la bandera de interrupción y el de habilitación; Resulta que quiero que cada cierto tiempo(siempre debe ser el mismo) halla un nivel alto en el PTD5 durante unos microsegundos, entonces uso el TIM1 para que cada cierto tiempo me active el PTD5 mediante una interrupción, ahora cuando esto pasa borro la bandera TOF, entra a funcionar el TIM2 con su interrupción habilitada para cuando llegue la interrupción  apague el PTD5, me deshabilite el TIM2, hasta una nueva llegada de la interrupción del TIM1..pongo el texto en lenguaje C para su comprención:

Código: C
  1. void  TIM1_Setup(void){
  2. TIM1_TSC=0x36;
  3. TIM1_TMOD=1000;
  4. TIM1_TSC=0x46;
  5. }
  6.  
  7. void  TIM2_Setup(void){
  8. TIM2_TSC=0x36;
  9. TIM2_TMOD=100;
  10. // No habilito la interrupción del TIM2 hasta que no llegue la del TIM1
  11.  
  12. }
  13.  
  14.  
  15. interrupt 6 void TIM1_isr(void){
  16. PTD5 = 1;  // enciendo PTD5
  17. TIM2_TSC=0x46;
  18. TIM1_TSC_TOF=0;
  19. }
  20.  
  21. interrupt 9 void TIM2_isr(void){
  22. PTD5 = 0;  // APAGO PTD5
  23. TIM2_TSC=0x36; //Deshabilito interrupción por el TIM2
  24. //No borro la bandera TOF ya que lo hago cuando se vuelva a interrumpit el TIM1
  25. }

Bueno en el main, habilito interrupciones, y ejecuto los setup de cada TIM, el problema que tengo es que el TIM2 no hace el conteo por lo tanto no tengo interrupción y siempre la salida está en ON ; ahora si uso uno solamente de los TIM  me funciona bien cada vector, osea me hace la interrupción los 2 TIM, pero no así cuando dentro de una interrupción hay otra de menos duración..que hago mal?...Espero me halla hecho entender, como anecdota hago lo mismo en assembler y funciona muy bien, entonces creo que es algo que me hace falta en lenguaje C.

Gracias de antemano por la ayuda.

Saludos

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Ayuda, con los TIM
« Respuesta #1 en: 07 de Noviembre de 2009, 11:49:24 »
Hola.
Encontré la solución a mi problema, adjunto las lineas modificadas con lo que ya doy por terminado este percance que me ha durado más de un día.


Código: [Seleccionar]
void TM0_Cal (void){
         
         
          T1SC=0x30;
          T1MOD = Vreal_Frecuencia;
          (void)T1SC;
          T1SC=0x46;
         
         
                 
}



void TM1_Cal (void){

         
          T2SC=0x30;
          T2MOD = Vreal_AnchoPulso;     
          (void)T2SC;
          T2SC=0x36;
         
         
}


interrupt 6 void INT_TIM1Ovrisr(void){
         
          T2SC=0x30;
          (void)T2SC;
          T2SC=0x46;
         
          PTD_PTD5 = 1;
          T1SC=0x30;
          (void) T1SC;
          T1SC=0x46;
                   
         
}

interrupt 9 void INT_TIM2Ovrisr(void){
         
         
          PTD_PTD5 = 0;
          T2SC = 0x30;
          (void) T2SC;
          T2SC=0x36;
         
         
}

Saludos


 

anything