Autor Tema: :: Pruebas de timer con CCS ::  (Leído 5339 veces)

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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: :: Pruebas de timer con CCS ::
« Respuesta #15 en: 26 de Julio de 2012, 10:01:51 »
Pon valores adecuados y veras que comienza a funcionar  ;-)
No contesto mensajes privados, las consultas en el foro

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: :: Pruebas de timer con CCS ::
« Respuesta #16 en: 26 de Julio de 2012, 10:10:32 »
  No es recomendable usar printf dentro de una interrupción ya que ocupa muchos ciclos de instrucción. Yo haría algo así....


----------------

int8 variable

interrupcion
{
  variable = variable + 1;
}

main
{
  ......
  ......
  .... // toda la configuracion adecuada

  while (true)
  {
    if (variable >= 250)
    {
       printf (variable);
      // con todo el formateo necesario... no lo puse ya que nunca uso printf y por lo tanto no conozco su formateo
      variable = 0;
    }
  }
}
--------------------

  de esa manera sólo imprimirás variable cuando hayas contado 250*256*200nS  --> 12.8mS

  Sí lo que quieres hacer es imprimir siempre el valor de la variable, prueba configurando el timer con prescaler a 256. De esa manera te dará más tiempo para realizar la función printf.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: Pruebas de timer con CCS ::
« Respuesta #17 en: 26 de Julio de 2012, 12:56:30 »
Hola
simplifique todo como indicaros ustedes,
al final deje la variable que incrente solo a la entrada de interrupcion
y si detecta el 250 que me imprima en consola el valor de tm0
y eso lo hace y lo del led tambien quite lo del fast_io.

chicos hemos ganado el primer asalto.
pero esto continua.
asi quedo el codigo:

Código: C++
  1. int8 tm0;
  2.  
  3. #INT_TIMER0
  4. void prueba_timer0(void){
  5. output_high(PIN_B6);
  6.  
  7. tm0=tm0+1;;
  8.  
  9.  
  10. }
  11.  
  12. /*
  13. #INT_TIMER1
  14. void prueba1(void){
  15. //output_high(PIN_B7);
  16. tm1=tm1+1;
  17. printf("\n\r tm1: %u"tm1);
  18. }
  19. */
  20.  
  21.  
  22. void main()
  23. {
  24.  
  25.    setup_adc_ports(NO_ANALOGS);
  26.    setup_adc(adc_off);
  27.    setup_spi(SPI_SS_DISABLED);
  28.    setup_wdt(WDT_OFF);
  29.    setup_timer_0(RTCC_INTERNAL|RTCC_8_bit);
  30.    //setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
  31.    setup_timer_1(T1_DISABLED);
  32.    setup_timer_2(T2_DISABLED,0,1);
  33.    setup_comparator(NC_NC_NC_NC);
  34.    setup_vref(FALSE);
  35. //Setup_Oscillator parameter not selected from Intr Oscillator Config tab
  36.  
  37.    // TODO: USER CODE!!
  38.    //set_timer0(0); //retardo de led
  39.    //set_timer1(0); //retardo inc proceso
  40.    
  41.   enable_interrupts(int_timer0);
  42.   disable_interrupts(int_timer1);
  43.   enable_interrupts(global);
  44.    While(true){
  45.    
  46.    //enable_interrupts(int_timer0);
  47.    //printf("\n\r tm0: %u"tm0);
  48.    
  49.    if(tm0>=200){
  50.       output_toggle(PIN_B6);
  51.       printf("\n\r tm0:%u "tm0);
  52.       tm0=0;
  53.    }
  54.    
  55.    
  56.    /*
  57.    
  58.       if(proceso==1){
  59.          numero1=numero1+1;
  60.          printf("\n\r proceso:0 numero1: %d timer0: %d"numero1,timer0);
  61.          
  62.          //set_timer0(0);
  63.          output_low(PIN_B7);
  64.        }
  65.       if(proceso==2){
  66.          numero2=numero2+1;
  67.          printf("\n\r proceso:2 numero2: %d timer0: %d"numero2,timer0);
  68.          
  69.          //set_timer0(0);
  70.          output_low(PIN_B7);
  71.       }
  72.       if(proceso==3){
  73.          numero3=numero3+1;
  74.          printf("\n\r proceso:0 numero3: %d timer0: %d"numero3,timer0);
  75.          
  76.          //set_timer0(0);
  77.          output_low(PIN_B7);
  78.       }
  79.       if(proceso>3){
  80.          //proceso=0;
  81.          set_timer0(255); //rebasa a 10ms
  82.          set_timer1(15536); //rebasa a 10ms
  83.          
  84.       }
  85.       else{
  86.          printf("\n\r proceso= %d"proceso);
  87.          
  88.       }
  89.       */
  90.  
  91.    }//fin while
  92.    
  93.  
  94. }

continuamos

« Última modificación: 27 de Julio de 2012, 16:06:28 por pajaro »


 

anything