in

Indicador de nivel con LCD (Vumetro)

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.

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 $03COMPLETOS); 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.

Reportar

¿Qué te pareció?

Escrito por Mario

21 Comments

Leave a Reply
  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.

  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 =)

  3. 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!

  4. 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.

    • 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.

  5. 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

  6. 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 16×2 (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

  7. 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.

  8. 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

  9. amigo no tendras el hex ¿?¿ de casualidad ¿?? porque cuando copie y corri ese lenguaje basic que dejaste ahi no llega a compilarse en hex, aparecen muchos errores si tuvieras el hex del indicador de nivel me lo podrias mandar al correo ¿? mil gracias muy buen proyecto justo lo que necesito waaa ~

  10. hey bro mira no me sale la barra solo me parece el voltaje aun me aparece cambiando demasiado no se mantiene estable no se si puedes darme algun correo donde contactarte necesito mucha ayuda urgente T.T

  11. hola! ammmm soy nuevo en esto de los pics y estoy muy interesado, tambien me surgio una pregunta ¿que compilador fue el que utilizaste para tu programa? segun lei y menciona Basic ¿que versio es? saludos.

  12. Como van, por favor una ayuda, yo quise ya compilar en la plataforma Proton, pero me sale el error USB KEY NOT FOUND, no se si puedan ayudarme como soluciono y buen aporte gracias……

  13. Como van foro de neoteo, por favor un ayuda me aparece el ERROR: USB KEY NOT FOUND al momento de compilar, que puede ser y como lo soluciono, de antemano muchas gracias, buen aporte

Responder a victormanuv Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Enlaces Recomendados de la Semana

La paradoja de Fermi