Mostrando entradas con la etiqueta Display. Mostrar todas las entradas
Mostrando entradas con la etiqueta Display. Mostrar todas las entradas

sábado, 6 de julio de 2013

Rutina Anti-Rebote para Pulsador

Una de las complicaciones que se presenta a la hora de crear una rutina anti-rebotes para pulsador, al trabajar con microcontroladores, es evitar los impulsos múltiples, los (valga la redundancia) “rebotes” que insertan dos, tres, diez impulsos en lugar de uno sólo, como sería nuestro deseo. Las soluciones que los programadores aplican son incontables. Hay decenas de ejemplos por toda la web de estas rutinas y como es lógico; cada uno de nosotros utiliza la que entiende como “la mejor” de acuerdo al lenguaje de programación que estamos utilizando.

 Un simple ejemplo de un sistema que necesita un método "Anti-Rebotes"

Mucha gente coloca un retardo de tiempo, luego de la acción de pulsar el botón y calculan un tiempo “medio” de activación para una acción “normal”. Por supuesto, el resultado es que no existen dos personas que pulsen un botón de igual modo. A unos no les actuará la acción y a otros (que se pasarán en tiempo) les avanzará, por ejemplo un menú, en varias secciones. De manera irremediable, cuando a un equipo lo manipulan muchas personas, es imperioso incorporar un sistema que no falle y nos garantice que el sistema actúe sin errores, ante todo tipo de usuarios. Hay una rutina (que es mi preferida) que utilizo en BASIC y que es la siguiente:


 La rutina del lazo infinito para asegurar el momento en que el botón deja de ser pulsado

Utilizando un pin I/O cualquiera, en este caso el pin 7 del Puerto B, aprovecho a darle tres funciones al pin. Lo utilizo para trabajar con el programador mediante el modo ICSP, para activar un LCD alfanumérico (D7) y, como lo mencionamos, para un pulsador. Esta acción vale tanto para el pin RB7 como para el RB6. Claro está, de este modo puedes utilizar cualquier pin I/O del microcontrolador que esté configurado como salida (LED, Dispaly, Relé, etc.). La rutina es sencilla y se corresponde con el siguiente circuito:

 Circuito clásico, multifunción, con entradas y salidas simultáneas.

Lo primero que hacemos es crear un punto en la estructura del programa donde SW1 tenga la posibilidad de ser pulsado y de generar un estado lógico bajo que actúe del modo en que deseamos. Podemos hacer un “barrido”, o una lectura secuencial de múltiples pulsadores, conectados a diferentes pines I/O del microcontrolador en esa parte del software, nosotros te mostramos una. Con la instrucción TRISB.7 = 1 transformamos el pin en entrada y luego observamos su estado lógico. Si es “activo”, es decir, si está presionado, nos mantenemos dentro del lazo infinito hasta que cambie de estado. En nuestro caso, que retorne a un “1” lógico mientras está configurado como entrada. Cuando ello ocurre, el programa sale del lazo infinito y retorna (RETURN) al punto donde fue ejecutada la rutina de “observación de nivel lógico” del pulsador. 

Por supuesto, la explicación vale para conmutar el pin a un estado alto o bajo. Nosotros empleamos la técnica de hacerlo a GND, pero sin problemas se puede hacer a Vcc, invirtiendo las resistencias. Esto es: 47K a GND y 4K7 a Vcc intercalando allí el pulsador. La situación de “activo” se presenta entonces como un “1” lógico en la entrada. Debemos tener muy presente de asegurarnos la configuración TRIS del pin para no cometer errores y lograr que todo funcione de manera adecuada, sin errores. Por último, también puedes lograr el mismo resultado utilizando la siguiente combinación:

 Si el GOTO no es de tu agrado, aquí tienes el mismo ejemplo con WHILE-WEND

La solución es la misma, se realiza en un solo renglón y no utiliza la "endemoniada" instrucción GOTO, que muchos no admiten, y que se adecúa más a una rutina para utilizar en lenguaje C. También se puede adaptar una rutina con REPEAT-UNTIL para este mismo propósito y muchos otros métodos que seguramente tú habrás ensayado con éxito.¿Qué método utilizas para realizar un sistema “Anti-Rebote” de un pulsador mediante la programación? ¿Te manejas con un Timer que controlar el estado del pulsador en forma repetitiva? Hay tantas preguntas como opciones de trabajo cuando hablamos de pulsadores. ¿Deseas compartir tus rutinas con nosotros y los lectores? 

sábado, 17 de abril de 2010

Medidor de Resistencias y Capacitores

Las aplicaciones electrónicas son tan diversas que no podrían enumerarse de principio a fin. Siempre habrá una aplicación específica para resolver un desarrollo particular. Es muy raro encontrar una aplicación genérica que resuelva múltiples necesidades. Al igual que con el Voltímetro USB publicado en Neo Teo, con el circuito propuesto hoy no pretendemos construir un medidor universal que sea capaz de reemplazar a los instrumentos de banco que se utilizan para evaluar capacitores y resistencias. Esto es otra cosa. Esto es razonar, esto es aprender. Esto es analizar un abanico de posibilidades para adaptar la mejor solución a nuestro diseño. Y por supuesto, si lo deseas, también lo puedes utilizar para medir capacitores y resistencias.

Estoy convencido de que muchos de ustedes han atravesado momentos durante el desarrollo de un complejo circuito electrónico en los cuales han dicho frases como “Aquí me haría falta un circuito que pueda medir capacidad”. Por ejemplo, cuando han realizado algún oscilador o un filtro pasabandas de audio. Armar un medidor de capacitores (capacímetro) tal vez sea un emprendimiento importante que poco aprovecharemos en el futuro. Y comprarlo sería un gasto que no vale la pena para una aplicación tan pequeña. ¿Qué hacemos entonces cuando nos encontramos con ese frasco lleno de capacitores que no sabemos su valor y al menos desearíamos tener una idea aproximada de él? No lo necesitamos para reparar un marcapasos o para desarrollar un compás electrónico encargado de guiar misiles con ojivas nucleares. Hay situaciones y desarrollos específicos donde las tolerancias no requieren exactitud absoluta. A diario nos enfrentamos a diseños en los que es igual de útil y efectivo un capacitor de 100 nanofaradios que de 94 o 108 nanofaradios.

La instrucción RCIN es una poderosa herramienta para trabajar con  circuitos RC
La instrucción RCIN es una poderosa herramienta para
trabajar con circuitos RC

Lo mismo ocurre con las resistencias (o resistores). “¿El naranja que era?” “¿Dónde habrá quedado esa tabla de colores que…?” Hay que tener mucha experiencia y práctica en el manejo del código de colores de las resistencias para leer su valor e interpretar las bandas de colores con un simple pasaje visual. Por otro lado, dentro del diseño de circuitos complejos que aglutinan muchas secciones de sub-circuitos simples, puede hacer falta un medidor de resistencias. Un control de volumen necesita de un medidor de resistencias. Una fotocélula está acoplada por obligación a un medidor de resistencias. Y aquí nuevamente se hace presente el interrogante de la precisión y la exactitud. Subir un poco el volumen de nuestro flamante amplificador no discrimina entre 10K2, 12K u 8K7. Lo mismo si necesitamos un poco más de luz diurna para que actúe la fotocélula resistiva y se apaguen las luces del patio. No necesitamos 4 decimales. Con sólo saber una medida aproximada, muchas veces es suficiente.

Para estos casos que aparentan ser muy complejos encontramos soluciones fáciles y confiables en los microcontroladores PIC y en especial en el lenguaje de programación BASIC. Utilizando el mismo circuito que empleamos en la construcción del Voltímetro USB y agregándole un display alfanumérico convencional, resolveremos nuestra necesidad de disponer de un instrumento útil para medir capacitores y resistencias. Además, la técnica que hoy veremos nos será útil para muchos circuitos basados en PIC que necesiten dentro de su rutina de trabajo medir resistencias o capacidades aplicadas a algunos de sus pines. Con un poco de habilidad y razonamiento será muy sencillo adaptar estas rutinas y variantes en el circuito para agregarlas al Voltímetro USB NeoTeo y transformarlo en un instrumento múltiple. Si además le sumamos el amperímetro 0-5Amper que publicamos durante 2009, estaríamos muy próximos a delinear nuestro propio multímetro personal. Tal vez no resulte ser el más exacto al final de la construcción, pero estoy seguro que será el mejor del mundo porque lo habremos construido nosotros mismos. Llevará nuestra marca, nuestro sello, el reflejo de nuestra personalidad y eso es algo que no se compra con la tarjeta de los dos globitos.

Si te interesa este sistema de medición, continúa leyendo aquí.

sábado, 25 de julio de 2009

Adaptador de niveles para bus I2C (3,3V/5V)

En la actualidad existen muchos microcontroladores que utilizan 3,3Volts de alimentación debido a las modernas tecnologías de fabricación de 0,5 micrómetros. Además, la constante miniaturización ya está entregándonos dispositivos que trabajan a 2Volts, 1,8Volts y hasta 1,35Volts. La existencia de componentes que trabajan a tensiones normalizadas de 5Volts nos obliga a adaptar los niveles de voltaje dentro del bus I2C para lograr un funcionamiento correcto entre estos dispositivos que utilizan distintas fuentes de tensión. Un problema frecuente; he aquí una solución eficiente.

Si en un circuito no existen dispositivos capaces de adaptar los niveles de los impulsos manejados dentro de un bus I2C entre dos dispositivos que sean alimentados con diferentes tensiones, es muy probable que aquel que trabaje con la menor tensión se dañe irremediablemente. En el caso inverso, aquellos que utilicen los voltajes de trabajo inferiores corren el riesgo de no ser detectados dentro del bus cuando intentan conectarse a los demás. Sin embargo, existen algunos componentes que, a pesar de operar con tensiones de 3,3Volts de alimentación, tienen la posibilidad de conectarse sin inconvenientes y sin componentes adicionales a un bus I2C que utilice una tensión de 5Volts.

El inconveniente que se presenta con esta clase de montajes es que, en la gran mayoría de los casos, los dispositivos que son desarrollados para operar con tensiones de trabajo de 3,3Volts no traen la posibilidad de ser compatibles con un bus I2C de 5Volts, mientras que los pocos que sí lo hacen y que se encuentran en el mercado son más caros que un dispositivo estándar, ya que las técnicas de fabricación son más complejas. La manera más usual de solucionar este inconveniente es a través de la utilización de dos transistores MOS-FET de canal N conectados entre los elementos de distintas tensiones de trabajo. Aquí te lo mostramos.