Autor Tema: Leer 2 pulsadores con un solo pin digital  (Leído 3891 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Leer 2 pulsadores con un solo pin digital
« en: 13 de Junio de 2013, 19:36:48 »
Acabo de diseñar un circuito para poder leer 2 pulsadores con un sólo pin digital de E/S
No se si ya existía ya.
Está basado en leer la tensión de un condensador después de cargarle y después de descargarle.
Si cargo el condensador (con el pin como salida digital a 5 voltios) y después el condensador está descargado, significa que está pulsado el pulsador conectado a masa.
Lo contrario para detectar al pulsador conectado a positivo.
No se si ya estara inventado (imagino que sí). Yo al menos no lo he encontrado en ningún sitio antes, así que lo comparto con vosotros.

Adjunto el esquema del circuito.

Un saludo.

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #1 en: 13 de Junio de 2013, 20:02:06 »
algo mas simple y que ademas tambien puede detectar la pulsacion de los 2 botones a la vez...
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1697
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #2 en: 13 de Junio de 2013, 21:13:47 »
no conocia ninguno de los dos, con respectivos permisos los guardo  :mrgreen:
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #3 en: 14 de Junio de 2013, 06:26:35 »
Con el ADC o con el comparador se pueden leer muchos pulsadores de entrada. En esta nota de aplicación viene explicado:
http://ww1.microchip.com/downloads/en/appnotes/00234a.pdf

El problema es hacer lo mismo con una entrada digital.

Saludos.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #4 en: 14 de Junio de 2013, 06:45:33 »
Si, yo creo que se pueden leer varias pulsadores con una entrada digital, usando un sistema parcido al que se usa con el ADC, es decir cada pulsador va con una R de diferente valor, al pulsar se carga un C que se conecta a la entrada del PIC, como dependiendo del valor de la R el tiempo de carga del C variara, solo hay que medir ese tiempo para saber cual se pulso, nunca me puse a hacerlo, ni a calcular valores de R ni C, porque nunca necesite hacerlo, pero creo que no es tan complicado, o a lo mejor si.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #5 en: 14 de Junio de 2013, 10:46:03 »
Con el ADC o con el comparador se pueden leer muchos pulsadores de entrada ...

Hace muchos años hicimos ya este experimento en el Foro  :mrgreen:

Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #6 en: 14 de Junio de 2013, 10:46:33 »
Acabo de diseñar un circuito para poder leer 2 pulsadores con un sólo pin digital de E/S
No se si ya existía ya.
Está basado en leer la tensión de un condensador después de cargarle y después de descargarle.
Si cargo el condensador (con el pin como salida digital a 5 voltios) y después el condensador está descargado, significa que está pulsado el pulsador conectado a masa.
Lo contrario para detectar al pulsador conectado a positivo.
No se si ya estara inventado (imagino que sí). Yo al menos no lo he encontrado en ningún sitio antes, así que lo comparto con vosotros.

Adjunto el esquema del circuito.

Un saludo.

Hola.
Creo que ese circuito te va a dar "falsos positivos", es decir se te va a disparar de vez en cuando.
Fijate, sin tener nada pulsado, tenes la resistencia con un extremo al aire y conectada al capacitor que esta a masa. Eso es un circuito sintonizado. Porque nosotros consideramos la resistencia pero tiene una L asociada por su construccion.


Y de la coneccion entre la resistencia y el capacitor salis al pic. Tenes un hermoso detector de corriente estatica, seguidor de microfonos o radio.
Si tenes una fuente de ruido cerca (como puede ser un motor o una transmisora de radio) ese circuito se va a disparar solo.
Ademas, prefiero el circuito con las resistencias que me permite utilizar cualquier boton en cualquier momento, mientras que el que publicas depende de como pulso los botones. Por ejemplo, conecto el circuito tengo que pulsar el boton de arriba para que cargue el capacitor. Si ya pulse el boton conectado al capacitor no puedo volverlo a usar (el pulsador esta en paralelo y me descarga el capacitor).
De todas formas, que cada uno use lo que mas le guste y lo que mejor le de resultado. Si para tu aplicacion es valido ..............
Saludos.
« Última modificación: 14 de Junio de 2013, 10:49:09 por Darkman_A »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #7 en: 15 de Junio de 2013, 16:52:54 »
Hola.
Creo que ese circuito te va a dar "falsos positivos", es decir se te va a disparar de vez en cuando.
Fijate, sin tener nada pulsado, tenes la resistencia con un extremo al aire y conectada al capacitor que esta a masa. Eso es un circuito sintonizado. Porque nosotros consideramos la resistencia pero tiene una L asociada por su construccion.

Es cierto que es un circuito sintonizado, pero es imposible que sintonice nada, aunque lo intentes a propósito.
Me explico, la inductancia parásita de una resistencia de 4k7 es bastante menor de 1uH. Si calculamos la frecuencia de resonancia tenemos:

f > 1/(2·pi·raiz(L·C)) > 1.6MHz    (Al ser la inductancia menor, la frecuencia de resonancia será mayor.)

A esta frecuencia la impedancia del condensador es:

Zc < 1/(2·pi·f·C) = 10 Ohm      (Al ser la frecuencia mayor, la impedancia será menor que este valor)

La corriente que debe pasar por el condensador para que su tensión sea apreciable (unos 2 voltios) es de I = V / R = 200mA

A ver si encuentras una fuente de radio capaz de inducir a través de una resistencia de 4700 ohmios una corriente mayor 200mA a una frecuencia mayor de 1.6Mhz.

A mí sólo se me ocurre una antena de radio de varios Kw,  un magnetrón gigante sintonizado a la frecuencia exacta y apuntando al circuito o un pulso electromagnético nuclear.


Eso es la teoria. En la práctica, la tensión ni se mueve.


Por ejemplo, conecto el circuito tengo que pulsar el boton de arriba para que cargue el capacitor. Si ya pulse el boton conectado al capacitor no puedo volverlo a usar (el pulsador esta en paralelo y me descarga el capacitor).
De todas formas, que cada uno use lo que mas le guste y lo que mejor le de resultado. Si para tu aplicacion es valido ..............
Saludos.

En cuanto a la forma de leer el pulsador, lo vuelvo a explicar:

LECTURA DEL PULSADOR BAJO:

   1º - Activas el pin como SALIDA
   2º - Llevas la salida durante un tiempo suficiente (200us) a nivel ALTO para intentar cargar el condensador
   3º - Activas el pin como ENTRADA
   4º - Si lees en el pin un cero -> pulsador bajo PULSADO
         Si lees en el pin un uno -> pulsador bajo SIN PULSAR


LECTURA DEL PULSADOR ALTO:

   Se hace lo mismo, pero cambiando las tensiones altas por bajas y viceversa.


Saludos.
« Última modificación: 15 de Junio de 2013, 17:32:28 por Picuino »

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #8 en: 15 de Junio de 2013, 18:25:06 »
A mí sólo se me ocurre una antena de radio de varios Kw,  un magnetrón gigante sintonizado a la frecuencia exacta y apuntando al circuito o un pulso electromagnético nuclear.
Hola. A mi se me ocurre algo mas simple como una descarga atmosferica (un rayo). O un ambiente cargado de ruido electrico donde esa "antenita" lo va ha esta recibiendo.
Tenes un pin que esta flotando, y acá hay miles de comentarios cuando alguien aparece y dice "el circuito no me anda". Despues de mirarlo un poco le dicen "pone resistencia de pull-up", "pone resistencia de pull-down".
Si queres patentarlo, venderlo o usarlo, a mi no me va ni me viene y lo menos que quiero es polemizar sobre esto.
Saludos.

Desconectado peteorito

  • PIC16
  • ***
  • Mensajes: 136
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #9 en: 15 de Junio de 2013, 19:32:22 »
Con el ADC o con el comparador se pueden leer muchos pulsadores de entrada. En esta nota de aplicación viene explicado:
http://ww1.microchip.com/downloads/en/appnotes/00234a.pdf

El problema es hacer lo mismo con una entrada digital.

Saludos.
 
  Que  nota de aplicacion mas curisosa ,  y util!

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #10 en: 15 de Junio de 2013, 21:08:27 »
Hola. A mi se me ocurre algo mas simple como una descarga atmosferica (un rayo). O un ambiente cargado de ruido electrico donde esa "antenita" lo va ha esta recibiendo.
Tenes un pin que esta flotando, y acá hay miles de comentarios cuando alguien aparece y dice "el circuito no me anda". Despues de mirarlo un poco le dicen "pone resistencia de pull-up", "pone resistencia de pull-down".
Si queres patentarlo, venderlo o usarlo, a mi no me va ni me viene y lo menos que quiero es polemizar sobre esto.
Saludos.

Siento la polémica Darkman y agradezco tus comentarios para poder aclarar el funcionamiento del circuito.

Es cierto que el pin parece estar al aire si no hay ningún pulsador accionado, pero la forma de leer lel pin evita que el ruido le afecte, porque la mayor parte del tiempo el pin funciona como salida, llevando el condensador a Vdd o a masa.

El pin de entrada hay que leerle justo después de que el pin en modo salida haya cargado el condensador. Durante la mayor parte del tiempo el pin trabaja como salida y está llevando al condensador a nivel alto (sin el pulsador accionado).
Apenas se tarda un microsegundo desde que se cambia el pin de modo salida a modo entrada y se lee el valor de tensión del condensador. En este  microsegundo, el condensador no tiene tiempo de descargarse. Tendría que llegarle una corriente de unos 30mA para que se descargase los 3 voltios necesarios para que dé una lectura erronea:

Código: [Seleccionar]
TRISBbits.TRISB0 = 0;
PORTBbits.RB0 = 1;       // Se activa la salida RB0 a uno
delay();
TRISBbits.TRISB0 = 1;     // Pin RB0 en modo entrada
Nop();                    // Espera a que la entrada cambie su tensión
if (PORTBbits.RB0 == 1) {  // Se lee el valor del pin RB0
   // Pulsador no pulsado
}
else {
   // Pulsador pulsado
}


Saludos.
« Última modificación: 15 de Junio de 2013, 21:16:37 por Picuino »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #11 en: 16 de Junio de 2013, 06:07:53 »
Para leer el pulsador alto el esquema es semejante:


Código: [Seleccionar]
TRISBbits.TRISB0 = 0;
PORTBbits.RB0 = 0;           // Salida RB0 a masa
delay();                     // Esperar a que se descarge el condensador
TRISBbits.TRISB0 = 1;        // Pin RB0 en modo entrada
Nop();                       // Espera a que la entrada cambie su tensión a la tensión del condensador
if (PORTBbits.RB0 == 0) {  // Se lee el valor del pin RB0
   // Pulsador alto no pulsado
}
else {
   // Pulsador alto pulsado
}

Primero se intenta descargar el condensador llevando la salida RB0 a masa (resistencia de pull-down). A continuación, en un microsegundo, se cambia RB0 a modo entrada y se lee el valor del condensador. Si el condensador vale 0 entonces el pulsador alto no está activado. En caso de leer 1, el pulsador alto está activdo.

Si la entrada es de tipo trigger schmitt, es necesario bajar el valor de la resistencia de 4.7k a 2.2k:


            __T__ S1    R1          __T__ S2
   (Vdd)----o   o-----/\/\/\---o----o   o----o----(GND)
                       2200    |             |
                               |             |
                               o-----||-------
                               |       C1=10nF
                       R2      |
        (PIN RB0)----/\/\/\-----
                       10K



Saludos.
« Última modificación: 16 de Junio de 2013, 06:31:49 por Picuino »

Desconectado Picuino

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re: Leer 2 pulsadores con un solo pin digital
« Respuesta #12 en: 16 de Junio de 2013, 06:34:37 »
Un tema a tener en cuenta es que el pulsador a nivel bajo tiene prioridad.
Si se pulsan a la vez los dos pulsadores, al estar la resistencia de 2k2 en el lado del pulsador a VDD, este circuito descargará el condensador dando una lectura de pulsador conectado a GND accionado.


Saludos.