sábado, 21 de noviembre de 2009
Ayúdanos a crecer, haz NeoTeo tu página de inicio RegistrarseIniciar sesión

Indicador de nivel con LCD (Vumetro)

Por: Mario Sacco  @  viernes, 23 de octubre de 2009  Nota vista 3658 veces

Los indicadores de nivel analógicos vienen sufriendo desde hace un tiempo el desplazamiento lógico de la escena que le ha impuesto el avance tecnológico. La necesidad de interpretar en una escala graduada la posición de un indicador requería de un tiempo y un trabajo que fue reemplazado por vistosos indicadores digitales que presentan la numeración exacta del valor que estamos intentando mesurar. Sin embargo, existen aplicaciones que no te exigen saber un valor exacto sino tener una información estimada de un “cuánto”. Ejemplos claros de esto que mencionamos son los vumetros de audio, los indicadores de nivel de señal de recepción y toda aquella indicación que suponga una medición dinámica de cualquier magnitud.

¿te interesa?
23 -2
25 votos

Si tienes delante de tus ojos un vaso con la mitad de su capacidad completada y, por otro lado, un display que indica el número “50%”, ¿cuál de las indicaciones provocará en tu cerebro una verdadera impresión de la cantidad y real magnitud?

Conviene dejar sentado desde el principio la fácil confusión existente entre ESTÍMULO y PERCEPCIÓN. El estímulo pertenece al mundo exterior y produce un primer efecto o sensación en la cadena del conocimiento; es de orden cualitativo, como el frío, el calor, lo duro, lo blando, lo rojo, lo blanco. Es toda energía física, mecánica, térmica, química o electromagnética que excita o activa a un receptor sensorial. En cambio, la percepción pertenece al mundo individual interior, al proceso psicológico de la interpretación y al conocimiento de las cosas y los hechos.

¿Con los indicadores analógicos, cuantificamos mejor las proporciones y lecturas?

Identificar la realidad por las impresiones que se producen en nuestros sentidos es una de las más firmes evidencias de la misteriosa perfección de la mente humana. La psicología es la encargada de explicar la diferencia que existe entre las sensaciones recibidas y la realidad del mundo físico que nos rodea, aunque están implicadas otras muchas ciencias, como la geometría, la física o la biología. Porque “50%” para algunos significa que el vaso está medio lleno y para otros que el vaso está medio vacío. Por lo tanto, esas dos neuronas de más que deben ponerse en acción para decodificar lo que vemos (estímulo) y luego codificarlo en una sensación (percepción) no funcionan a la misma velocidad y de igual modo en todos los seres humanos.

Por todo esto, cuando debas realizar un trabajo que requiera la utilización de un LCD alfanumérico, instalar un indicador analógico dentro de la aplicación digital puede ser la determinante del éxito de una aplicación de medición dinámica. ¿Qué te llega más: el movimiento analógico de una barra al cuantificar sonido o dos dígitos que varíen entre 00 y 99 indicando lo mismo? Mediante un programa mucho más sencillo de lo que crees podrás adaptar e incrustar indicadores “analógicos” dentro de un LCD alfanumérico.

El circuito.
La aplicación es muy sencilla de construir: se realiza con cualquier microcontrolador que posea una entrada analógica para poder realizar las mediciones de la magnitud que quieras representar. Lo siempre distinto será la etapa previa a la entrada del microcontrolador, aunque el objetivo final es transformar el dato a mostrar en una variable que posea una excursión entre 0 y 5 Volts. Como siempre, te recomendamos utilizar en la entrada un diodo zener de 5,1 Volts o 5,6 Volts para proteger el microcontrolador.

Protección de una entrada analógica con un diodo zener

Si lo que deseas es utilizar el desarrollo como un simple indicador de tensión, te bastará con realizar un divisor resistivo de entrada para adaptar los niveles a los que soporta el microcontrolador seleccionado. Si la magnitud a evaluar es otra (temperatura, corriente, señal de RF, etc.), deberás intercalar un circuito capaz de transformar esa energía en una tensión variable entre 0 y 5 Volts. Debido a que el abanico de posibilidades es demasiado amplio como para abarcar todas las aplicaciones posibles, tú deberás optar por la interfaz de entrada más conveniente de acuerdo a la necesidad de tu construcción. Luego, se requiere de una conexión sencilla de cuatro bits a un display alfanumérico, que puede ser de la cantidad de caracteres que desees, y, por supuesto, una fuente de alimentación acorde al circuito que quieras desarrollar. Nada más. Todo muy sencillo y elemental. He aquí el video que demuestra el funcionamiento:

Un circuito elemental y muy demostrativo es el que hemos armado con un potenciómetro lineal conectado a una de las entradas analógicas del microcontrolador (como es nuestra costumbre, un PIC) que nos permitirá visualizar y optimizar nuestro código de acuerdo al buen gusto que requiera el diseño, junto a las necesidades que la aplicación nos exija. Es decir, en lugar de visualizar simples barras o segmentos, podemos utilizar asteriscos, letras u otra simbología simpática y agradable. El resultado final esperado será siempre el mismo: lograr la percepción a través del sentido visual para facilitar la lectura sin necesidad de activar mecanismos cerebrales “extras”.

El circuito completo del ensayo

El código empleado en el PIC
La mecánica empleada en el armado de la rutina que utilizaremos seguirá los pasos habituales que empleamos en Basic, tal como hemos hecho en cada ejemplo presentado en NeoTeo. De todas formas, un programa bien comentado o explicado en la misma secuencia en que se desarrolla puede servirte para armar tu rutina sea cual fuere el lenguaje de programación que decidas emplear.

En este caso, definimos el PIC a utilizar y su respectivo cristal; luego la conexión del LCD, los parámetros de funcionamiento del conversor analógico–digital y las variables que utilizaremos dentro del programa. Hasta aquí todo muy clásico. Las instrucciones “diferentes” que podemos ver en el listado comienzan con las directivas PRINT $FE y PRINT $0. Cuando a una instrucción PRINT no se la continúa con un indicador de posición, ésta se transforma en una orden directa al LCD. En el caso particular de PRINT $FE, se hace referencia a cualquier actividad que intentemos desarrollar con un cursor titilante (de visión intermitente) sobre la pantalla.

Por ejemplo, PRINT $FE, 1 equivaldrá a la instrucción CLS (limpiar la pantalla);  PRINT $FE, $0E significará que un cursor intermitente (emulando un guión bajo) aparecerá debajo de cada carácter del display. Como éstos, todos los comandos especiales PRINT $FE aparecen bien explicados en la ayuda de los compiladores (en este caso, Proton Lite). Por otra parte, PRINT $0 indica que escribiremos directamente sobre la CGRAM del display, mientras que la terminación $0 al final de la instrucción cumple la función de terminación de la cadena de datos enviados (NULL). Dentro de estas instrucciones, REP c/n nos indica que enviaremos hacia el display al caracter c durante n veces.

Dentro del lazo de medición, lo que haremos es tomar el valor presente en la entrada analógica seleccionada, que tendrá una excursión entre 0 y 5 Volts y adoptará un valor numérico dentro del PIC comprendido entre 0 y 1023. Para entregar a través del LCD la conversión correcta, deberíamos utilizar el siguiente cálculo matemático:
 
DATO = (DATO * 500)/1024

Al efectuar la multiplicación por 500, estaríamos saliéndonos de la capacidad de una variable WORD, por lo que utilizaremos la operación matemática que nos ofrece Proton “*/” (Multiply Middle Operator) para mantenernos siempre dentro del límite del tamaño de la variable. Entonces, el resultado de la expresión nos queda de la siguiente forma:

DATO = (DATO */ 500) >> 2

De esta manera, se abrevia en una sola instrucción el trabajo con fracciones y nos permite utilizar números enteros en los cálculos sin necesidad de apelar a una variable FLOAT que nos ocuparía un espacio valioso en cantidad de BYTEs utilizados y que, en ocasiones, no podemos darnos el lujo de desperdiciar.

Listado de programa utilizado en el ejemplo

Luego, dentro de la variable MUESTRA, colocamos la cantidad de segmentos que ocupará nuestro LCD. Para el caso de 16 caracteres, serán 48. Por lo tanto, la cantidad de caracteres COMPLETOS (que tengan los tres segmentos) surgirá del resultado de la muestra obtenida dividido 3, mientras que los resultados para ocupar la variable PARCIAL quedarán relegados a aquellos que no obtengan un cociente con resto igual a cero. Esto es lo que se conoce en Basic como operación “MODULUS //”. Aquí entrarán los caracteres que poseen dos y un solo segmento. Por último, completamos el display con espacios vacíos que serían los que quepan en la variable PAD. Al armar la impresión de la línea, colocamos repetidos los caracteres completos (REP $03\COMPLETOS); luego viene el PARCIAL, que siempre será uno solo (sea de un segmento o de dos); y por último viene la repetición de PAD (espacios vacíos) hasta terminar el renglón.

Esta sería una de las tantas formas posibles de construir una barra indicadora de nivel en Basic (Proton). Podemos armar así un vumetro de audio, un indicador de nivel de agua, un instrumento para medir intensidad de señales de radio, un voltímetro y todo lo que requiera de un instrumento dinámico de medición donde las sensaciones prevalezcan por sobre la fría información numérica. Otro ejemplo: un indicador de nivel de audio sencillo y elemental como éste:

Como siempre decimos, tú puedes hacerlo mejor, tú puedes mejorar la estética de los mensajes, tú puedes repetir la rutina en el programa y hacerlo estéreo, tú puedes cambiar las barras verticales por otra clase de caracteres, tú puedes mostrar texto en caso que el audio baje a silencio indicando tu nombre o alguna indicación útil y funcional al instrumento. Es decir, tú puedes hacerlo y para nosotros es un orgullo que lo logres y nos lo muestres.



Artículo Siguiente
La paradoja de Fermi
Artículo Anterior
Enlaces Recomendados de la Semana
CopyRight
Prohibida su copia total con o sin fines comerciales. Copias parciales deben citar la fuente.

 

URL Trackback para esta noticia:
Votos: 0 de 0
JESSTOFUNK
JESSTOFUNK
JESSTOFUNK
23/10/2009
18:31:54
#1   Hola Mario, gran proyecto este :D, he visitado la pagina de neoteo por hace bastante tiempo, y te digo que los proyectos de electronica son de bastante ayuda, ahora, tengo guardados los enlaces de estos proyectos que han realizado aqui en neoteo con LCD's ultimamente, solo queria preguntarte si pudieras decirme el nombre de algun programa que facil de usar para programar (baya la redundancia) me refiero al programa en el cual escribes el codigo que despues se grabará en el pic, para empezar a adentrarme en esto de los pics, ademas, tambien queria saber si el grabador de pics que postearon aqui hace un tiempo, me sirve para programar este tipo de ejemplos?

me refiero a este programador.
http://www.neoteo.com/programador-de-pics.neo

Gracias por tu atención.
     Responder 
Votos: 0 de 0
Truko
Truko
Truko
23/10/2009
21:33:29
#2   Excelente, sin palabras =D
Me recuerdo creo que alguien te pidió algo parecido que era una especie de ecualizador, me vio animar y hacer la simulación en proteus =)
     Responder 
Votos: 0 de 0
bute
bute
bute
23/10/2009
23:24:57
#3   con las manecillas del reloj pasa lo mismo
soy mas consciente del tiempo viendo la posición de las manecillas que leyendo los números
     Responder 
Votos: 1 de 1
victormanuv
victormanuv
victormanuv
24/10/2009
2:14:01
#4   Buenísimo che! Y facil de implementar, auqneu para i gusto es más facil con Free Scale jaja

Te hago una pregunta, cual es el modelo exacto del LCD que usaste en este proyecto? Me pasas la denominación? Gracias!
     Responder 
Votos: 0 de 0
rinal
rinal
rinal
24/10/2009
2:18:15
#5   si. segun algunos el vaso esta medio lleno segun otros medio vacio y segun un ingeniero el vaso es el doble de grande de lo q deberia ser. jja
Muy buenos los proyectos que publican. algun dia cuando tenga tiempo y plata quiero empezar a hacerlos; pero mientras tanto los tengo todos guardados.
     Responder 
Votos: -9 de 9
juan
juan
juan
24/10/2009
3:13:50
#6   LA VERDAD! UNA CAGADA ESTO.HACETE ALGO MEJOR, MAS COPADO MAN.
     Responder 
Votos: 0 de 0
Truko
Truko
Truko
24/10/2009
13:34:54
#1   Oe, je je q pasa; los lectores de neoteo son de todos lo ámbitos y el amigo mario hacer interesante y variado articulo (todo 10/10) de tal forma que lo entienda todos, si hace algo muy complejo lo entenderá 2 a 3 como mucho de los lectores.
     Responder 
Votos: -1 de 1
jeison123456
jeison123456
jeison123456
24/10/2009
3:46:39
#7   me gusto este proyecto seria que sted me podria hacer el favor de enviarme los materiales gracias por su atencion..
     Responder 
Votos: 0 de 0
horus
horus
horus
24/10/2009
3:53:44
#8   SI JEISON pasame tu direccion y tus datos para que te llegue a la puerta de tu casa, con todo y manual, enviamos tambien a alguien a quien te ayude en la caja
     Responder 
Votos: 0 de 0
aidionidis
aidionidis
aidionidis
24/10/2009
4:42:53
#9   ajajJAJAJA, no si hay gente comica XD sos groso geison12345678910 sabelo =P
Yo tambien prefiero Freescale, pero es cuestion de cada uno; Freescale tendra mejor assembly, pero Pic tiene mucha mas informacion online.
Por ejemplo, si quiero implementar un stack tpc/ip en Freescale, por lo que veo lo tengo que comprar, no pude encontrar alguna opcion gratuita. En pic en cambio si los hay.
En fin, un saludo!

PD:me tomo el atrevimiento de responderle a victormanuv, alcanza con que vayas a la casa de electronica mas cercana y pidas un diplay lcd de 16x2 (16 caracteres por dos lineas), con el chip HITACHI 44780 (son realmente los mas comunes); y a jesstofunk, me parece que el que se usa es el MPLAB pero la verdad no se si te permite programar en basic, en todo caso, usar google hasta ahora no ha lastimado a nadie

http://www.google.com.ar/#hl=es&source=hp&q=ide+basic+pic
     Responder 
Votos: 0 de 0
JESSTOFUNK
JESSTOFUNK
JESSTOFUNK
24/10/2009
8:15:41
#10   jaja, gracias, esque si usé google, pero no supe cual seria la herramienta más confiable o recomendable ... por eso preguntaba, gracias de cualquier manera.
     Responder 
Votos: 0 de 0
jukinch
jukinch
jukinch
24/10/2009
14:14:19
#11   Grande Mario como siempre. lo voy a implementar en C. muy copado. :)
     Responder 
Votos: 0 de 0
Yesbond
Yesbond
Yesbond
24/10/2009
16:21:56
#12   Buen dia Mario:

De verdad que me ha gustado muchisimo este articulo, y bueno la explicacion previa es muy valida y valiosa, ese toque profesional que le das a cada articulo me gusta mucho, no es solo un plano electronico y programacion. Me gusta mucho este tipo de articulos tan geniales. Sigue asi, que tus amigos y seguidores estamos siempre a tu lado.

Un abrazo, desde Colombia
     Responder 
 
 
Datos  Login Registrarse
Usuario
   
Email
Website
 
Nuevo comentario:


Tags HTML permitidos: br
 

Síguenos en TwitterAgréganos a tu RSS

 

 

Autores