Mostrando entradas con la etiqueta Relé. Mostrar todas las entradas
Mostrando entradas con la etiqueta Relé. 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, 6 de marzo de 2010

DIY - Cargador de baterías

Aquellos que somos unos apasionados de la electrónica y construimos numerosos proyectos semana a semana, utilizamos una materia prima elemental sin la cual todo lo que hacemos no tendría posibilidad de ser: la energía eléctrica. Cuando no la tenemos nos acordamos de lo necesario que es tener siempre a mano un sistema de iluminación de emergencia. En la anterior entrega pudimos ver cómo se construye un circuito para generar la energía suficiente que sea capaz de encender una luminaria de bajo consumo. Hoy veremos cómo construir el circuito que mantendrá siempre cargada la batería que activará el sistema de emergencia en el momento indicado.

Todos los sistemas de iluminación de emergencia necesitan disponer de una fuente de energía capaz de suministrarles potencia durante el mayor tiempo posible a los circuitos encargados de encender las luminarias incorporadas (en nuestro caso utilizamos una sola) durante los momentos en que el suministro de red deja de estar presente. Para que la batería esté siempre completa en su capacidad de acumular energía necesitamos un circuito que pueda conectar, en forma automática, un cargador y que “observe” de manera continua la tensión en los bornes de la batería. Es decir, cargarla hasta un límite seguro de operación apropiada y mantenerla siempre dentro de límites correctos de tensión. Vale recordar que una batería no puede estar conectada a un cargador de forma continua ya que un exceso de tiempo de carga termina arruinando la batería. Es por esto que nuestro diseño debe estar siempre atento a mantenerla en buenas condiciones para cuando sea necesario su funcionamiento. Artículo completo 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.