Autor Tema: Economizar Backlight  (Leído 3424 veces)

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

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Economizar Backlight
« en: 16 de Agosto de 2008, 13:39:04 »
Hola gente.
Tengo apartatito que me arme que tiene un display. Hasta ahora hacia que cuando presione una tecla quede prendido durante un minuto, pero ahora queria que quede siempre prendido.
Tengo entendido que el backlight aparte de horas de uso, calienta y se puede quemar por eso queria usar un timer para hacer una especie de pwm para que no quede siempre prendido.
El tema es que parpadea y no le encuentro la vuelta.
Alguien me podria decir en que estoy fallando.

Muchas gracias.

Código: [Seleccionar]
#int_timer1
clockisr2() {
   if (Intcount == 4)
   {
       output_low(PIN_B0);
   }   
   
   else if(Intcount == 5)
   {
      Intcount = 0;
      output_high(PIN_B0);
   }   
   Intcount++;     
}

Seteos del main.

   set_timer0(0);
   set_timer1(0);
   setup_oscillator(OSC_8MHZ,OSC_INTRC);
   setup_counters(RTCC_INTERNAL, RTCC_DIV_2);
   enable_interrupts(GLOBAL);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(AN0_TO_AN2);
   set_adc_channel(2);
   enable_interrupts(INT_AD);
   read_adc(ADC_START_ONLY);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(INT_TIMER1);
   enable_interrupts(global);



Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Economizar Backlight
« Respuesta #1 en: 16 de Agosto de 2008, 14:36:25 »
Si el pic que está usando cuenta con módulo ccp,quizá te venga mejor que lo uses para tu propósito.
Viendo esa rutina de interrupción creo que no está muy bien construída...puedes ir probando a recargar el timer con diferentes valores dentro de la rutina de interrupción para acortar el tiempo entre interrupciones,por ejemplo:

set_timer1(127);

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Economizar Backlight
« Respuesta #2 en: 16 de Agosto de 2008, 15:01:02 »
Una duda... al final de la interrupcion del timer, no hay q recargarlo nuevamente? o esto se hace automaticamente?

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Economizar Backlight
« Respuesta #3 en: 16 de Agosto de 2008, 15:04:51 »
Hay que recargarlo cada vez...si no lo haces el timer da una vuelta completa (256 ticks si el timer es de 8 bits)

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Economizar Backlight
« Respuesta #4 en: 16 de Agosto de 2008, 16:04:49 »
Estoy usando un 18f4620 y uno el clock interno. Lamentablemente cuando se me ocurrio esto la placa ya estaba diseñana y la pata que estoy usando para el display no es la del cpp.
Cuantas veces deberia estar entrando al timer por segundo?
O cuantas veces esta entrando asi como esta configurado?

Gracias.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Economizar Backlight
« Respuesta #6 en: 16 de Agosto de 2008, 16:50:39 »
Hola.

La idea es que tu escojas las veces que se desborde el timer ... los calculos no son muy complicados ( ojo al despejar !!!!  :D :D :D )

Saludos
El papel lo aguanta todo

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Economizar Backlight
« Respuesta #7 en: 16 de Agosto de 2008, 16:57:05 »
Gracias por ponerle voluntad, pero esto no es lo mio, no laburo de esto.
No entiendo demaciado esas cuentas. Perdon.
Tampoco se si esta muy bien lo que quiero hacer.
Cambie el timer con distintos valores pero sigue parpadeando.
Supongo que hay algo que estoy haciendo mal y no entra la cantidad de veces que necesito para que el ojo no lo vea o no se hace de esta forma.

La utima vez hice esto.
#int_timer1
clockisr2() {
   if (Intcount == 1)
   {
       output_low(PIN_B0);
   }   
   
   else if(Intcount == 2)
   {
      set_timer1(65536);
      Intcount = 0;
      output_high(PIN_B0);
   }   
   Intcount++;     
}

El set_timer lo cambie desde el valor 1 y no note demasiado cambio.
Gracias y no me maten.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Economizar Backlight
« Respuesta #8 en: 16 de Agosto de 2008, 18:53:27 »
A ver si entendi bien. Vos queres q el backlight parpadee lo suficientemente rapido como para q el ojo no se de cuenta, y para q no este prendido todo el tiempo y asi dure mas?
Si eso es lo q queres, ponele un valor mas alto al timer (pero no lo satures), y al final de la ISR recargalo, porq si no siempre va a volver a cero.
Proba con esto:

#int_timer1
clockisr2()
{
      set_timer1(0xAAAA);
      PIN_B0=!PIN_B0;
}

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Economizar Backlight
« Respuesta #9 en: 16 de Agosto de 2008, 19:09:26 »
Es eso lo que quiero, gracias.
Pregunta, cuando te referis a ponerle un valor alto al timer que es? Cuando te referis a recargar al final del ISR es lo que ya hiciste con el set_timer1 ??

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Economizar Backlight
« Respuesta #10 en: 16 de Agosto de 2008, 19:18:38 »
El valor con el q tenes q recargar el timer depende del periodo q quieras q tenga, y del periodo del clock. Mientras mas alto sea este valor, menos tiempo va a demorar en desbordar el timer.
Sabes q el timer1 desborda a los 0x10000, y sabiendo q cada tick de clock dura x µs, podes calcular cuantos ticks tienen q pasar para q desborde. Si no entendes bien, googlea un poco, hay unas formulitas para calcular el periodo del timer...

El programa q te pase arriba deberia funcionar... probalo
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Economizar Backlight
« Respuesta #11 en: 16 de Agosto de 2008, 19:20:28 »
Si lo probe pero ahora nisiquiera enciende.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Economizar Backlight
« Respuesta #12 en: 16 de Agosto de 2008, 19:28:22 »
A todo esto... con q pic estas trabajando? a q frecuencia? como lo tenes conectado?
pueden ser muchas las fuentes del problema, no necesariamente de software.
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Economizar Backlight
« Respuesta #13 en: 16 de Agosto de 2008, 19:32:37 »
Estoy usando clock interno a 8mhz, funciona todo bien, es un controlador que hice que funciona hace tiempo pero queria ahora que el display quede encendido.
El pic es un 18f4620.
Cuando hacia lo que puse arriba parpadeaba constantemente.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Economizar Backlight
« Respuesta #14 en: 16 de Agosto de 2008, 19:42:32 »
Hago esto pero si cambio el numero de set_timer no varia nada.
Los seteos de los timers del main que puse arriba estan bien?

#int_timer1
clockisr2()
{

      set_timer1(0xFFFF);
      if(Iluminacion == 1)
         Iluminacion =0 ;
      else
         Iluminacion = 1;
      output_bit(PIN_B0,Iluminacion);
}