Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando
-- Tutorial de iniciación a Arduino --
Volver al índice del tutorial
____________________________
19.- Triestado. Alta impedancia.
Sabemos que las salidas digitales pueden estar en LOW (0V) y en HIGH) (5V). Arduino permite un tercer estado llamado de alta impedancia.
El terminal puede estar con tensión alta, bajo o no estar conectado.
Hay un método llamado
Charileplexing
de
Charlie Allen
(1995), que aprovecha este estado para manejar mayor número de LED en las salidas.
Mediante la fórmula
"n2-n" podemos calcular el número de LED que puede manejar n salidas. Si n es 3, podremos controlar 6 LED.
Para realizar el circuito necesitaremos 6 LED y 3 resistencias de 100 óhmios, el valor de la resistencia es importante, hay que ajustarla un poco.
Podemos ver un circuito y su código en esta web:
http://www.electroschematics.com/10875/arduino-charlieplexing/
Charileplexing de Charlie Allen |
/*
- Arduino & Chralieplexing
- Driving 6 LEDs using only 3 I/O Pins
- Tri-State Logic Implementation
- Demo Code From Internet
- Prepared by T.K.Hareendran
- Tested at TechNode Protolabz
- Source: https://www.electroschematics.com
*/
#define LED_1 5
#define LED_2 6
#define LED_3 7
void setup()
{
pinMode(LED_1, INPUT);
pinMode(LED_2, INPUT);
pinMode(LED_3, INPUT);
}
void loop()
{
set_pins(LED_1, LED_2);
delay(100);
set_pins(LED_2, LED_1);
delay(100);
set_pins(LED_3, LED_1);
delay(100);
set_pins(LED_1, LED_3);
delay(100);
set_pins(LED_2, LED_3);
delay(100);
set_pins(LED_3, LED_2);
delay(100);
}
void set_pins(int high_pin, int low_pin)
{
reset_pins();
pinMode(high_pin, OUTPUT);
pinMode(low_pin, OUTPUT);
digitalWrite(high_pin, HIGH);
digitalWrite(low_pin,LOW);
}
void reset_pins()
{
pinMode(LED_1, INPUT);
pinMode(LED_2, INPUT);
pinMode(LED_3, INPUT);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
}
|
_____________________________
_____________________________
- En esta entrada del foro podemos leer cómo se pone un terminal en alta impedancia.
http://forum.arduino.cc/index.php?topic=12212.0
digitalWrite(pinNumber, LOW );
pinMode( pinNumber, OUTPUT ); // now we're sourcing current, i.e. GND
pinMode( pinNumber, INPUT ); // now we're tri-stated
pinMode( pinNumber, OUTPUT ); // and back again
________________________________
|