Autor Tema: Temporización retroiluminación LCD  (Leído 2063 veces)

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

Desconectado a9965

  • PIC10
  • *
  • Mensajes: 22
Temporización retroiluminación LCD
« en: 28 de Mayo de 2014, 11:53:40 »
Buenas tardes.

Ando liado con el TMR0. No consigo hacer que la retroiluminación del lcd se encienda durante 30 segundos y se apague si no pulsas ningún botón.


El lcd lleva un teclado. Cada vez que se pulse el teclado se pondría el temporizador a 0, y si pasan 30 segundos sin pulsar, la retroiluminación debe apagarse.

El problema es que no se como adaptar el TMR0 a mi aplicación.
¿Alguna sugerencia?
 muchas gracias de antemano.

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Temporización retroiluminación LCD
« Respuesta #1 en: 28 de Mayo de 2014, 12:28:04 »
Habilitar la interrupción del timer0, cada vez que haya una interrupción de este, incrementar el valor de una variable. Sí el valor de está variable sobrepasa el equivalente en tiempo a 30 segundos, poner a 0 la salida a la iluminación
sí pulsas algún botón, sólo tienes que poner a 0 la variable mencionada
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado a9965

  • PIC10
  • *
  • Mensajes: 22
Re: Temporización retroiluminación LCD
« Respuesta #2 en: 28 de Mayo de 2014, 19:05:40 »
Código: [Seleccionar]
//INTERRUPCIÓN
void interrupt() {
  if (TMR0IF_bit) {
    cnt++;                 // increment counter
    TMR0IF_bit = 0;        // clear TMR0IF
    TMR0L=130;
  }
}

//CONFIGURACIÓN

LATB =1;
TMR0L=130;
T0CON = 0xC7;            //8 BIT PRESCALER 256
GIE_bit = 1;            
TMR0IE_bit = 1;          
cnt = 0;                



//CONTROL
if (cnt >= 4000) {
      LATB =0;
 }
      if(kp){
      cnt = 0;
      }



Si es eso lo que decías que hiciera, hace un funcionamiento erróneo.
Cuando pulso alguna tecla se enciende y se apaga muy rápido y se queda apagado(me refiero a la retroiluminación). Además, tengo conectado un lcd
16x2 y los caracteres cambian a cosas raras.

¿Qué se te ocurre?

Muchas gracias por pasarte por el hilo y echar una mano. Estoy muy agradecido.
Un saludo :)

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Temporización retroiluminación LCD
« Respuesta #3 en: 28 de Mayo de 2014, 19:59:20 »
dentro de la interrupcion del timer0 tienes que ir comparando el valor de la variable que incrementas... cuando esta sea igual al valor que necesitas para obtener los 30 seg.
imaginemos que el timer0 se desborda cada 16ms, 16ms x 1850 desbordes(numero de la variable que se incrementa) = 29,6 seg, cuando el valor de la variable sea igual o superior a 1850 debes apagar el pin que se encarga de energizar el bjt o mosfet para que la iluminacion se apague

despues cuando pulses un boton, se me olvido comentarte que debes cambiar la salida del pin encargado de la retroiluminacion y reiniciar la variable... para que durante los 1850 desbordes del timer0 la iluminacion este encendida....
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado a9965

  • PIC10
  • *
  • Mensajes: 22
Re: Temporización retroiluminación LCD
« Respuesta #4 en: 28 de Mayo de 2014, 20:24:13 »

Código: [Seleccionar]
//INTERRUPCIÓN
void interrupt() {
  if (TMR0IF_bit) {
    cnt++;                 // increment counter
    TMR0IF_bit = 0;        // clear TMR0IF
    TMR0L=130;
  }
}

//CONFIGURACIÓN

LATB =1;
TMR0L=130;
T0CON = 0xC7;            //8 BIT PRESCALER 256
GIE_bit = 1;             
TMR0IE_bit = 1;         
cnt = 0;               



//CONTROL
if (cnt >= 4000) {
      LATB =0;
 }
      if(kp){
      LATB =1;
      cnt = 0;
      }




Lo he cambiado y nada. Ahora se queda enchufada la retroiluminación y siguen saliendo caracteres raros.

Yo creo que tiene que ver con la librería del keypad. Estoy usando mikroC.

Gracias de nuevo. Se que el error está cerca, pero es algo que se me escapa.

Un saludo.


 

anything