Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

22/04/2015 #101


Nano24 dijo: Ver Mensaje
Echale un vistazo al que realice, ahi muestra como controlar el teclado pero es en lenguaje picbasic.

http://www.forosdeelectronica.com/at...0&d=1312646618
Hola, estimado nano 24. Probé tu cerradura y está excelente.
¿Cómo podría activar el backlight del lcd al presionar cualquier tecla para que la pantalla se encienda por un tiempo determinado para ahorrar energía, así como los teléfonos móviles?
Tengo entendido que se puede lograr por el método de interrupciones RBIE del puerto B de los bits más significativos.
Por favor, ¿me podrías dar un ejemplo para lograr esta hazaña?
Espero que me puedas ayudar, te lo agradecería mucho.
22/04/2015 #102
Moderador

Avatar de D@rkbytes

Es mejor que utilices la interrupción externa por RB0, así no desperdicias 3 pines.
En ambos casos necesitas mover el teclado, porque en el diseño de Nano24 se usa el puerto B desde RB0 hasta RB6.

Algo útil para usar los pines sobrantes al usar RBIE, sería poner pulsadores para aumentar y disminuír el brillo.
Esto se logra usando PWM por hardware con los módulos CCP.

PD: Sobre el tema: Curso de programación de PIC en PICBasic Pro, puedes encontrar más ejemplos.
24/04/2015 #103


D@rkbytes dijo: Ver Mensaje
Es mejor que utilices la interrupción externa por RB0, así no desperdicias 3 pines.
En ambos casos necesitas mover el teclado, porque en el diseño de Nano24 se usa el puerto B desde RB0 hasta RB6.

Algo útil para usar los pines sobrantes al usar RBIE, sería poner pulsadores para aumentar y disminuír el brillo.
Esto se logra usando PWM por hardware con los módulos CCP.

PD: Sobre el tema: Curso de programación de PIC en PICBasic Pro, puedes encontrar más ejemplos.

Gracias D@rkbytes por la respuesta, lo que yo deseo es que cuando presione cualquier tecla se me encienda el led 4. Esa señal será suficiente para encender el led que trae incorporado el display lcd 2x16 con iluminación; así darle un efecto como los telefonos móviles que cuando se oprime cualquier boton se enciende la pantalla y se apaga despues de algunos segundos y entre en modo sleep ahorro de energía, en que parte del programa debo colocar el codigo por interrupcion rbi para que cumpla con el propósito, espero me puedas ayudar señor moderador.

te adjunto archivos.
Archivos Adjuntos
Tipo de Archivo: rar PROYECTO.rar (126,4 KB (Kilobytes), 44 visitas)
24/04/2015 #104
Moderador

Avatar de D@rkbytes

Primero. Como te mencioné, debes cambiar el teclado de puerto para poder usar la interrupción por RB0.

Segundo. Si entras en modo de ahorro de energía, harás que el programa principal ya no se ejecute y el microcontrolador despertará únicamente cuando se genere una interrupción.

Adjunto un ejemplo sobre lo que deseas hacer y te recomiendo que lo realices físicamente.
Posteriormente podrás colocar el código en el programa final.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar 16F877A RB0 INT.rar (24,6 KB (Kilobytes), 44 visitas)
21/05/2015 #105


D@rkbytes dijo: Ver Mensaje
Primero. Como te mencioné, debes cambiar el teclado de puerto para poder usar la interrupción por RB0.

Segundo. Si entras en modo de ahorro de energía, harás que el programa principal ya no se ejecute y el microcontrolador despertará únicamente cuando se genere una interrupción.

Adjunto un ejemplo sobre lo que deseas hacer y te recomiendo que lo realices físicamente.
Posteriormente podrás colocar el código en el programa final.

Suerte.


Hola estimado D@rkbytes, estuve investigando y me di cuenta que usando la interrupción por rb0 no haría el funcionamiento correcto... ya que al presionar el teclado se encendería el backlight del display y este no me dejaría digitar nada con el teclado ya que la interrupcion generada atendería al encendido del backlight hasta que este se apague, entonces la otra forma de hacerlo es con el tmr0 ó tmr1 usando sus contadores internos. Me decidi por el tmr1 ya que este posee 16 bits la cual haciendo unos arreglos me podía dar mas tiempo para encender el backlight, lo que hice fue incrustar 2 codigos de tus ejemplos, el ejemplo ultimo que posee pwm por interrupción rb0 claro que haciendo algunas modificaciones y el otro que saque del tema del contador tmr1 para que el el micro no se congele al atender la temporizacion, te adjuntare el código que estado logrando incrustar; pero en algo fallo. A lo que quiero llegar es del ejemplo del tmr1 que el el led se enciende y que el micro siga realizando sus tareas, pero al momento de apagarse el led lo haga en forma decreciente usando pwm, te adjunto archivos, de antemano gracias por la ayuda que me puedas brindar.
Archivos Adjuntos
Tipo de Archivo: rar tmr1 & pwm.rar (52,1 KB (Kilobytes), 16 visitas)
21/05/2015 #106
Moderador general

Avatar de Fogonazo

alex26 dijo: Ver Mensaje
Hola estimado D@rkbytes, estuve investigando y me di cuenta que usando la interrupción por rb0 no haría el funcionamiento correcto... ya que al presionar el teclado se encendería el backlight del display y este no me dejaría digitar nada con el teclado ya que la interrupcion generada atendería al encendido del backlight hasta que este se apague, entonces la otra forma de hacerlo es con el tmr0 ó tmr1 usando sus contadores internos. Me decidi por el tmr1 ya que este posee 16 bits la cual haciendo unos arreglos me podía dar mas tiempo para encender el backlight, lo que hice fue incrustar 2 codigos de tus ejemplos, el ejemplo ultimo que posee pwm por interrupción rb0 claro que haciendo algunas modificaciones y el otro que saque del tema del contador tmr1 para que el el micro no se congele al atender la temporizacion, te adjuntare el código que estado logrando incrustar; pero en algo fallo. A lo que quiero llegar es del ejemplo del tmr1 que el el led se enciende y que el micro siga realizando sus tareas, pero al momento de apagarse el led lo haga en forma decreciente usando pwm, te adjunto archivos, de antemano gracias por la ayuda que me puedas brindar.

Reglas generales de uso del foro

05) Escribe de manera correcta y legible para todos. Estás en un Foro no en un Chat. Esto incluye emplear signos de puntuación, (Por ejemplo "Punto y Aparte, signos de interrogación, Etc"), comenzar un renglón nuevo con mayúscula, Etc. No nos gusta la escritura "En Bloque"
21/05/2015 #107
Moderador

Avatar de D@rkbytes

El programa que propuse lo que hace es encender el LED de la pantalla y apagarlo poco a poco usando PWM.
Obviamente, cuando se de la orden de apagar la pantalla, es porque ya no se va a usar el teclado.

Para lo que quieres hacer se requiere hacer un pseudo multitasking, algo así como RTOS.
En PICBasic Pro lograr ese propósito es muy complicado, porque al parecer no hay librerías para eso.

El problema para lo que quieres surge, porque para lograr que la luz del LED vaya disminuyendo, se necesita realizar un bucle.
Por lo tanto, cuando se entre al bucle no se podrán atender otras tareas hasta que el bucle finalice.

Tal vez se pueda hacer uso de algún flag y un contador dentro del servicio de interrupción por desborde del Timer 1.
Un flag indicaría cuando se requiera iniciar un contador descendente y el valor del contador se usaría para determinar el valor del ciclo activo del PWM.
Esto es una idea que podría funcionar, pero que no he llevado a la práctica.
23/05/2015 #108


D@rkbytes dijo: Ver Mensaje
El programa que propuse lo que hace es encender el LED de la pantalla y apagarlo poco a poco usando PWM.
Obviamente, cuando se de la orden de apagar la pantalla, es porque ya no se va a usar el teclado.

Para lo que quieres hacer se requiere hacer un pseudo multitasking, algo así como RTOS.
En PICBasic Pro lograr ese propósito es muy complicado, porque al parecer no hay librerías para eso.

El problema para lo que quieres surge, porque para lograr que la luz del LED vaya disminuyendo, se necesita realizar un bucle.
Por lo tanto, cuando se entre al bucle no se podrán atender otras tareas hasta que el bucle finalice.

Tal vez se pueda hacer uso de algún flag y un contador dentro del servicio de interrupción por desborde del Timer 1.
Un flag indicaría cuando se requiera iniciar un contador descendente y el valor del contador se usaría para determinar el valor del ciclo activo del PWM.
Esto es una idea que podría funcionar, pero que no he llevado a la práctica.
Estimado D@rkbytes olvidemos lo del PWM.

Ahora he intentando incrustar el código de TMR1 al codigo de una cerradura codificada con el propósito que al presionar las teclas activen esa señal temporizada por el TMR1 y activen el led. En el intento hubo errores que al presionar la tecla se me encendía y no se apaga el led.

Te adjunto archivos cerradura + encendido de led 9 seg. por TMR1 todo eso para que la cerradura me deje meter los codigos mientras esta el led temporizado simulando que es el backlight del display.

Te comento que un amigo logro encender el led al presionar la tecla sin que el micro se congele,
temporizando al led con un contador interno pic, pero lo hizo en mikrobasic.

gracias...
Archivos Adjuntos
Tipo de Archivo: rar archivos.rar (146,2 KB (Kilobytes), 35 visitas)
24/05/2015 #109
Moderador

Avatar de D@rkbytes

Mira el ejemplo adjunto, es un sistema que ya tenía hecho de clave con teclado matricial 4x4 pero le agregué la subrutina con el Timer 1, así tal y como te había mencionado anteriormente. (Ahora sin usar PWM)
No probé el funcionamiento físicamente, pero debe funcionar.

Espero te sirva el proyecto. Suerte.
Archivos Adjuntos
Tipo de Archivo: rar 16F877A Teclado 4x4 con LCD Backlight.rar (39,3 KB (Kilobytes), 43 visitas)
25/05/2015 #110


Gracias D@rkbytes, veo que el codigo de tu cerradura es mas simplificado.

---------- Actualizado después de 6 minutos ----------

Me olvidaba estimado D@rkbytes , ¿como puedo hacer..? para que me salga los numeros de la tecla presionada, luego de 1 segundo se vuelva asterisco, muchas gracias...
26/05/2015 #111


D@rkbytes dijo: Ver Mensaje
Mira el ejemplo adjunto, es un sistema que ya tenía hecho de clave con teclado matricial 4x4 pero le agregué la subrutina con el Timer 1, así tal y como te había mencionado anteriormente. (Ahora sin usar PWM)
No probé el funcionamiento físicamente, pero debe funcionar.

Espero te sirva el proyecto. Suerte.
Estimado D@rkbytes , ¿como puedo hacer..? para que me salga los numeros de la tecla presionada, luego de 1 segundo se vuelva asterisco.

Lo otro es que a la primera pulsación me encienda el led del backlight, pero que no digite nada en la pantalla, no!.. hasta la segunda pulsacion.

Estuve ensayando con un contador y lo cargue con 2 intentos, pero lo que conseguí fué... despues de tipear 2 digitos se me encendiera el backligh; es algo que no tiene sentido, adjunto
archivo y codigo incrustado, espero me puedas ayudar... gracias de antemano.
Archivos Adjuntos
Tipo de Archivo: rar archivos_2.rar (42,0 KB (Kilobytes), 20 visitas)
26/05/2015 #112
Moderador

Avatar de D@rkbytes

Posible solución a la primer pregunta:
Utilizando variables temporales que sirvan para memorizar los dígitos.
Aquí tal vez se tenga que hacer uso de otro timer para mostrar posteriormente los dígitos.

Sobre la segunda pregunta:
El incremento y comparación del contador de segunda tecla pulsada, lo debes colocar en la sección en donde se verifica cuando se presionó una tecla.
Y debes poner en 1 la variable "Flag_Key" cuando ese contador llegue a 2, para que durante el servicio de interrupción por desborde del Timer 1, se encienda el LED de Backlight.
Como "Flag_Key" debe permanecer en 1 durante el resto de pulsaciones, se debe poner a 0 en la sección de comparación, cuando la variable "i" llega a 4

También será conveniente que la variable "Contador" se ponga a 0 cada vez que se detecte la pulsación de una tecla.
29/05/2015 #113


D@rkbytes dijo: Ver Mensaje
Posible solución a la primer pregunta:
Utilizando variables temporales que sirvan para memorizar los dígitos.
Aquí tal vez se tenga que hacer uso de otro timer para mostrar posteriormente los dígitos.

Sobre la segunda pregunta:
El incremento y comparación del contador de segunda tecla pulsada, lo debes colocar en la sección en donde se verifica cuando se presionó una tecla.
Y debes poner en 1 la variable "Flag_Key" cuando ese contador llegue a 2, para que durante el servicio de interrupción por desborde del Timer 1, se encienda el LED de Backlight.
Como "Flag_Key" debe permanecer en 1 durante el resto de pulsaciones, se debe poner a 0 en la sección de comparación, cuando la variable "i" llega a 4

También será conveniente que la variable "Contador" se ponga a 0 cada vez que se detecte la pulsación de una tecla.
Hola, estimado D@rkbytes. He intentado hacerlo como me describiste, pero no logro hacerlo.
Por favor, échame una manito y podré saber cuan cerca estuve. Te lo voy a agradecer bastante.
29/05/2015 #114
Moderador

Avatar de D@rkbytes

Pues no es complicado, solo es cuestión de que busques una lógica para conseguir el funcionamiento.
Aquí te adjunto el código para que el LED de backlight encienda con dos pulsaciones.
El esquema a usar es el mismo que el del post #109

Ahora intenta mostrar los dígitos después de cierto tiempo, tampoco debe ser complicado.
Archivos Adjuntos
Tipo de Archivo: rar Encender con 2 pulsaciones.rar (2,5 KB (Kilobytes), 31 visitas)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.