Problema de la placa o humano?

Hola de nuevo a todos!

Como buen novato, he estado probando los ejemplos de codigo en mi placa Arduino (Arduino Leonardo), y al llegar al de "Digital Read Serial", me encuentro con mi primer "problema"...

Os explico la situacion:

  • Codigo de ejemplo
/*
  DigitalReadSerial
 Reads a digital input on pin 2, prints the result to the serial monitor 
 
 This example code is in the public domain.
 */

// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // make the pushbutton's pin an input:
  pinMode(pushButton, INPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input pin:
  int buttonState = digitalRead(pushButton);
  // print out the state of the button:
  Serial.println(buttonState);
  delay(1);        // delay in between reads for stability
}

Es decir, el de serie en los ejemplos

  • Pulsador con 4 patas

Y la conexion que hago es la siguiente:

3.3V ----------------- P
P --------------------- PIN Digital 2

Siendo P el pulsador

Por tanto, en principio al cargar el codigo en la placa y abrir el monitor Serial, deberia ver 0 permanentemente, y así es.
Y al pulsar el pulsador, la corriente pasaria hasta llegar al PIN Digital 2, y entonces aparecerían 1. Y también así es.

El problema viene cuando suelto el pulsador, momento en el cual debería empezar a ver 0, pero eso no sucede, sino que sigo viendo 1 hasta que pasan unos 5 o 6 segundos variando entre 0 y 1, y finalmente se estabiliza en 0. Eso sucede todas las veces que lo he probado (puedo hacer un video demostrativo si queréis).

No se si será problema de la placa, o mio en el montaje (que no creo.... Adjunto foto por si acaso)

http://subefotos.com/ver/?4dd7ef7c3d7d49851d077a2cedd7568co.jpg#codigos
http://subefotos.com/ver/?829a45fc304b2abe7fce744882c4deaco.jpg#codigos

Alguna idea o sugerencia?

Gracias!

Ese comportamiento es el normal y esperado.
Al conectar con el interruptor el pin a 3,3V, este coge esa tensión. Cuando lo cortas, la capacidad parásita del pin de entrada mantiene esa tensión mientras se va descargando poco a poco.

Pon una resistencia de 10K entre el pin y masa y verás como la descarga se hace mucho más rápida.

Luego, quita la resistencia, conecta el otro pin del switch a GND, no a 3,3, y activa la resistencia de pull-up interna del pin. El comportamiento es el inverso, pero te ahorras una resistencia :slight_smile:

ADLC:
Ese comportamiento es el normal y esperado.
Al conectar con el interruptor el pin a 3,3V, este coge esa tensión. Cuando lo cortas, la capacidad parásita del pin de entrada mantiene esa tensión mientras se va descargando poco a poco.

Desconocía por completo esa propiedad. Gracias por decírmelo, estaba asustado ya!
(Note-to-self: vaya novato....)

ADLC:
Pon una resistencia de 10K entre el pin y masa y verás como la descarga se hace mucho más rápida.

Tendré que esperar a mañana o pasado a poder ir a la tienda de electronica, ya que por desgracia todavia estoy empezando y solo tengo 6 resistencias de 330...
Tendre que hacerme con unas cuantas variadas!

Cuales me recomendais asi "estandar"?

ADLC:
Luego, quita la resistencia, conecta el otro pin del switch a GND, no a 3,3, y activa la resistencia de pull-up interna del pin. El comportamiento es el inverso, pero te ahorras una resistencia :slight_smile:

Ahi me he perdido...

Es decir, tendria que quedarme

GND-----------------P
P----------------PIN 2

Asi?

Lo de activar la resistencia pullUp tampoco se bien bien como hacerlo...

Gracias por la ayuda, de verdad, se agradece MUCHISIMO cuando se esta empezando!

Hay un axioma en electronica digital que a menudo se olvida. El axioma reza asi:
Nunca, nunca, nunca dejes una entrada digital al aire.
Si lo haces,las lecturas son erraticas, porque el voltaje que tienes en la entrada puede ser cualquier cosa. Debes usar un pulsador que conecte la entrada a masa en una posicion y a 3.3v en la otra.

Hombre, Profenas, eso tampoco es necesario ... Si eso fuese así, no tendría sentido usar resistencias de pull-up/pull-down ...

La verdad es que me da susto conectar directamente las lineas de alimentación a un micro, aunque sea a entradas. A la más mínima equivocación, zas, fries algo.

Por cierto, arduleo, puedes usar la resistencia de 330 ohm si quieres en ves de la de 10K ... al menos para probar. El mayor problema es que el circuito te va a consumir más :slight_smile:
Y para probar el diagrama que conecta a masa no necesitas ni resistencia (es tal y como dices).
SObre los pull-up, además de buscar algo en internet (bendito google), echale un vistazo a:

En cuanto a resistencias, siempre vienen bien, son baratas, y te gastas más en gasolina si tienes que estar yendo a las tiendas de electrónica cada vez que necesites un nuevo valor.

Coge un poco de todo: 1K, 10K, 100K, 1M ... yo en casa tengo que tener unas 1000 resistencias de más de 60 valores distintos ... y sigo comprando a veces :slight_smile: (y tampoco soy rico, una resistencia puede llegar a valer 1,2 céntimos)

Pofenas:
Hay un axioma en electronica digital que a menudo se olvida. El axioma reza asi:
Nunca, nunca, nunca dejes una entrada digital al aire.
Si lo haces,las lecturas son erraticas, porque el voltaje que tienes en la entrada puede ser cualquier cosa. Debes usar un pulsador que conecte la entrada a masa en una posicion y a 3.3v en la otra.

Vale, entonces segun comprendo, deberia quedarme

3.3v-------------P ------------PIN 2
GND-------------P

Asi nunca estaria el PIN 2 al aire!
Creo que lo he entendido, gracias! :slight_smile:

ADLC:
Hombre, Profenas, eso tampoco es necesario ... Si eso fuese así, no tendría sentido usar resistencias de pull-up/pull-down ...

La verdad es que me da susto conectar directamente las lineas de alimentación a un micro, aunque sea a entradas. A la más mínima equivocación, zas, fries algo.

Por cierto, arduleo, puedes usar la resistencia de 330 ohm si quieres en ves de la de 10K ... al menos para probar. El mayor problema es que el circuito te va a consumir más :slight_smile:
Y para probar el diagrama que conecta a masa no necesitas ni resistencia (es tal y como dices).
SObre los pull-up, además de buscar algo en internet (bendito google), echale un vistazo a:
digitalWrite() - Arduino Reference

Ahora buscaré más informacion, pero segun comprendo seria

3.3v--------------P --------PIN 2
GND----RESIST---P

Para que la descarga se hiciera aun mas rapida, verdad?
Por el consumo de momento no me importa, solo estoy probando a hacer y comprender los tutoriales basicos y el por que de su funcionamiento, para empezar bien por el principio!

ADLC:
En cuanto a resistencias, siempre vienen bien, son baratas, y te gastas más en gasolina si tienes que estar yendo a las tiendas de electrónica cada vez que necesites un nuevo valor.

Coge un poco de todo: 1K, 10K, 100K, 1M ... yo en casa tengo que tener unas 1000 resistencias de más de 60 valores distintos ... y sigo comprando a veces :slight_smile: (y tampoco soy rico, una resistencia puede llegar a valer 1,2 céntimos)

En lo de la gasolina tienes razon...

Pues ya me armare con unas cuantas resistencias, mas que nada para tenerlas!

Muchas gracias por la ayuda, de verdad!
Cuando tenga un momento lo pruebo, y ya os comentare diciendo que tal me ha ido :slight_smile:

Con esto lo que conseguirás es quemar el arduino, fijo ...

3.3v-------------P ------------PIN 2
GND-------------P

Y con esto:

3.3v--------------P --------PIN 2
GND----RESIST---P

Simplemente siempre leerás un 1.

Yo creo que lo suyo es

GND----RESIST---P --------PIN 2
3.3v--------------P

ó (usando pullup):

P --------PIN 2
GND--------------P

ADLC:
Yo creo que lo suyo es

GND----RESIST---P --------PIN 2
3.3v--------------P

Asi me ha funcionado perfectamente!
Muchisimas gracias, de verdad!

ADLC:
ó (usando pullup):

P --------PIN 2
GND--------------P

Ahora investigare y probare un poco mas del tema de las pullups, a ver si me aclaro y consigo hacerlo tambien :slight_smile:

Gracias, en serio, no te imaginas como se agradece esto siendo novato!