ANTECEDENTES
Las entradas y salidas digitales (nivel lógico) son los bloques más básicos de los sistemas de hardware digitales construcción. También se les conoce comúnmente como GPIO.
Una señal de nivel lógico tiene dos estados: baja y alta, respectivamente, 0 y 1 o falsas y verdaderas. Las representaciones reales de estos estados en términos de voltaje y corriente varían en función de los circuitos que los generan, a su vez, influyen en los circuitos que los utilizan. La comprensión de las diferentes representaciones posibles (o al menos los más comunes) es importante. La explicación a continuación intenta dar algunos antecedentes para aquellos que no se han ocupado de los circuitos digitales antes. Ven con nosotros - es simple y divertido!
Las siguientes explicaciones se han simplificado ligeramente hasta el nivel en que puede hacer algo práctico con este conocimiento, posiblemente con vistas a algunas sutilezas y casos de esquina.
Cada uno de los pines de MIOIO puede funcionar como una entrada digital o una salida digital, dependiendo de la elección del cliente en el software, como se demuestra a continuación. El LED status de a bordo también se considera un pin, y puede ser controlado como una salida digital.
SALIDA DIGITAL
Cuando se utiliza como salida , en sus modos de funcionamiento por defecto , los pines MIOIO representan los niveles lógicos de la siguiente manera :
- Un nivel lógico BAJO hará que el pin para forzar una tensión de 0 V ( " tierra") en lo que se conecta a la misma.
- Un nivel lógico ALTO hará que el pin para forzar una tensión de 3,3 V en lo que se conecta a la misma.
A modo de ejemplo , un LED conectado entre un pin de salida digital ( ánodo del LED) , a través de una resistencia de 220ohm a tierra se iluminará cuando el estado del pin es alto.
Para algunos componentes se requiere una operación de " colector abierto " . En el modo de " colector abierto" los pins representarán los niveles lógicos de forma ligeramente diferente :
- Un nivel lógico BAJO hará que el pin fuerze una tensión de 0 V ( " tierra") en lo que se conecta a la misma, al igual que en el modo normal.
- Un nivel lógico ALTO hará que el pin no fuerze nada en todo lo que se conecta a el, como si fuera físicamente desconectado .
Colector abierto puede ser útil en varias situaciones . El más común es que algunos componentes electrónicos requieren una señal de 0 V / 5V en lugar de 0 V / 3.3V . La manera de lograrlo es muy simple. En primer lugar, para este propósito es necesario seleccionar un pin tolerantes 5V . Si intenta aplicar este método en un pin no 5V tolerante , se arriesga a dañar permanentemente su pin o la tarjeta entera. Los pines toleranres a 5V son el 3, 4, 5, 6 7, 10, 11, 12, 13, 14, 25, 26, 47 y 48.
En el siguiente circuito, compuesto por una sola resistencia ("resistencia de pull up"), hará que el voltaje cambie entre 0 V / 5V cuando se utiliza como colector abierto.
Otra situación, menos común para el uso de la colector abierto, es cuando se conectan los pines de salida de varios componentes "a un solo punto, llamado" bus ". Ya que nunca queremos que dos pines traten de forzar diferentes niveles de tensión en una sola red, dañando así el uno al otro, tenemos que usar todos en modo colector abierto y el uso de una sola resistencia pull-up a cualquiera de 3.3V o 5V. Cuando uno (o más) de los pines en el bus "cambia a nivel lógico bajo" al obligar a 0 V, la tensión del bus será de 0 V y todos los pines escuchando en ese autobús pueden detectarlo. Cuando todos los pins son altos, es decir, prácticamente desconectado, la tensión del bus se detuvo "pulled up" estando la resistencia conectada a cualquier tensión.
UN DETALLE SOBRE LA INTENSIDAD
Hay una limitación de la cantidad de corriente los pines MIOIO pueden suministrar. La corriente máxima recomendada es de 20 mA. Si tratas de forzar más corriente que 20mA arriesgas el pin y/o la tarjeta entera. Para dar una intuición, esto significa que cualquier resistencia menor que 150ohm en un 3.3V excedería la recomendación.
En la vida real, uno tiene que entender la carga que se están conectando para determinar la cantidad de corriente que consumirá. Como regla general, la comunicación con componentes de nivel lógico (microcontroladores, sensores, controles servo, etc) no son generalmente un problema. Otros tipos de carga, tales como motores y LEDs de alto rendimiento consumen mucha corriente (y por lo general requieren de niveles de tensión más altos también). Tales cargas requerirán un circuito de control, con las especificaciones adecuadas. No vamos a cubrir cargas y controladores específicos aquí, sólo sé que existen y que debemos buscar para usarlos. Por lo general, existen módulos de los controladores estándar para diferentes cargas, con unos parámetros que debe coincidir en contra de su carga.
ENTRADA DIGITAL
Cuando se utilizan los pines MIOIO como entradas, detectan el nivel de tensión y reportan su estado en consecuencia.
- Cuando se detecta 0 V , el pin lee BAJO.
- Cuando se detecta 3.3V, el pin a leer ALTO . Pins 5V- tolerante, toleran hasta 5V, y tratarlo como ALTO .
- Cuando no hay nada conectado en el pin y nada le obliga a un voltaje, los pines pueden dar cualquier valor
- y no se puede confiar en el. Esto se conoce como modo " flotante" , y es el modo por defecto para los pines de entrada .
Un caso de uso muy frecuente es para la conexión de un interruptor. Conecte el switch como en el circuito de abajo . Ningun componente adicional es necesario ! Usar el pin en el modo de pull-up . Cuando el interruptor está abierto , el pasador se desconecta , y el modo de pull-up hará que el pasador a alto sentido . Cuando se cierra el interruptor , que obligará a 0 V en el pin , y leerá BAJO. Del mismo modo , se podría trabajar en modo pull-down y conectar el interruptor entre el pasador y 3.3V .
COMO USARLO
SALIDAS DIGITALES
Utilizando los pines MIOIO como salidas digitales se realiza a través de la interfaz DigitalOutput
. Una instancia de esta interfaz se corresponde con un pin físico de la tarjeta, configurado para trabajar en modo de salida digital. Casos DigitalOutput
se obtienen llamando a una de las sobrecargas de IOIO.openDigitalOutput()
. La forma más simple es:
DigitalOutput out = ioio.openDigitalOutput(pinNum);
Esto abre el número de pin pinNum
para la salida digital, en el modo normal (es decir, no colector abierto). Es necesario que en el momento de la llamada, este pin no se utilize para nada más. Con el fin de abrir un pin de salida digital en modo de drenaje abierto (véase la discusión anterior), el formato se puede utilizar:
DigitalOutput out = ioio.openDigitalOutput(pinNum, DigitalOutput.Spec.Mode.OPEN_DRAIN, startValue);
donde startValue
determinará el valor inicial (bajo o alto) del pin tan pronto como se esté conectado a la salida. Esto puede ser usado para prevenir estados momentáneos del pin no deseados.
El LED 'status' de la tarjeta se utiliza como un pin de salida digital normal. Para usarlo hay que declararlo así:
DigitalOutput led = ioio.openDigitalOutput(IOIO.LED_PIN);
El LED está conectado de manera que a nivel lógico BAJO enciende y lo apaga en nivel lógico ALTO.
Una vez que se obtiene una instancia de DigitalOutput
, el pin puede ser ajustado a nivel BAJO llamando:
out.write(false);
Cuando haya terminado de usar el pin, llame al:
out.close();
Con el fin de devolver el pin a un estado "flotante" y, posiblemente, ser capaz de volver a abrirlo en el mismo o en un modo diferente. El pin se vuelve inútil después de esta llamada - es ilegal hacer nada con ella.
ENTRADA DIGITAL
Para utilizar los pines MIOIO como entradas digitales se realiza a través de la interfaz DigitalInput
. Una instancia de esta interfaz se corresponde con un pin físico en la tarjeta, configurado para trabajar en modo de entrada digital. Las instancias DigitalInput
se obtienen llamando a una de las sobrecargas deIOIO.openDigitalInput()
. La forma más simple es:
DigitalInput in = ioio.openDigitalInput(pinNum);
Esto abre el número de pin pinNum
para la entrada digital en modo flotante. Es necesario que en el momento de la llamada, este pin no se utilize para nada más. Con el fin de abrir un pin de entrada digital en el modo desplegable pull-up o (véase la discusión anterior), el formulario se puede utilizar:
DigitalInput in = ioio.openDigitalInput(pinNum, DigitalInput.Spec.Mode.PULL_UP);
o PULL_DOWN, respectivamente. Consulte los Javadocs de la interfaz IOIO para otras variantes disponibles de este método.
Una vez que se obtiene una instancia de DigitalInput, el valor del PIN puede ser leído por:
boolean value = in.read();
devolviendo false
para LOW y true
para ALTO. Este método podría bloquear durante unos pocos milisegundos si se llama inmediatamente después de que el pin está abierto.
Otro uso interesante de DigitalInput
es bloquearlo hasta que se obtiene un cierto valor. Aparte de sondear periódicamente el valor, y posiblemente la perdida de pulsos estrechos, es preferible utilizar:
in.waitForValue(true);
Con el fin de esperar a que el valor sea ALTO. Lo mismo sucede con false
para LOW. Esto es muy útil, por ejemplo, para esperar hasta que se pulse un botón por el usuario.
Cuando haya terminado de usar el pin, llame al:
in.close();
Con el fin de devolver el pin a un estado "flotante" y, posiblemente, ser capaz de volver a abrirlo en el mismo o en un modo diferente. El pin se vuelve inútil después de esta llamada - es ilegal hacer nada con ella.