20- Entradas y salidas digitales en Arduino


Los pines de entrada y salida.

En la lección sobre el pinout de la placa arduino, hablamos de GPIO: del inglés. General Purpose Input-Output, E / S de propósito general. Ahora tenemos que ocuparnos de conceptos como pin y puerto. Un pin es una pata específica del microcontrolador, que tiene su propio número, mediante el cual puede referirse a él. Un puerto es una colección de pines. El microcontrolador está diseñado para proporcionar un buen rendimiento, por lo tanto, por ejemplo, los pines se combinan en puertos, generalmente hasta 8 pines en un puerto (porque hay 8 bits en un byte). Trabajando con el microcontrolador directamente, podemos en una acción, establece el estado de todos los pines de un puerto. Es muy rápido. Nuestras lecciones son básicas, por eso hoy hablaremos de las funciones para trabajar con pines que nos ofrece Arduino. Pero primero, averigüemos cuáles de los pines son digitales. Echemos un vistazo al pinout de la placa Nano:

Pinout arduino nano-1
Pinout arduino nano-1

Todos los pines denominados PD * , PC * , PB * son GPIO. DC y B indican el número de puerto al que pertenece el pin. En la placa, los pines o patitas, están firmados de manera diferente, en orden. Así, podemos ver que todos los pines de D0-D13 y A0-A5 son GPIO, es decir, E / S digitales. Mucha gente llama analógicos a los pines A0 – A7, en algunos pines no oficiales están firmados directamente como pines analógicos, y esto es confuso para los principiantes porque A0-A5 son los mismos pines digitales que D0-D13. Pero estos pines tienen una función adicional en forma de lectura de una señal analógica. Hablaremos de esto en la próxima lección. Pero los pines A6 y A7 son exactamente analógicos, porque solo tienen una salida al ADC, estos pines no son GPIO y las funciones para pines digitales no se pueden usar con ellos. Si miras el pinout del Arduino UNO, entonces no encontrarás los pines A6 y A7 allí .


Numeración de pines.

Los pines están numerados en la placa como pines D * digitales y pines A * analógicos. Nos referiremos a los pines digitales simplemente por su número, es decir, D3 es solo 3. Los pines analógicos son un poco más complicados:

  • Puede contener la letra A ( A3 , A5 )
  • Puede usar un dígito en orden después de los digitales, por ejemplo, para Nano, el último digital es D13, el siguiente «analógico» A0 tiene el número de pin 14, y por ejemplo A5 tiene el número de pin 19, por lo que también puede referirse a él.

Modos de pin.

El pin digital puede estar funcionando de dos modos, entrada o salida. En el modo de entrada, el pin puede leer el voltaje de 0 o el voltaje de Vcc del Mc, 5V, y en el modo de salida, puede generar el mismo voltaje. El modo de funcionamiento se selecciona mediante la función pinMode ( pin, modeo ) dónde pin es el número de pin, y mode es el modo de funcionamiento:

  • mode – modo operativo
    • INPUT- Entrada
    • OUTPUT- salida
    • INPUT_PULLUP – entrada puesta a 5V de la fuente de alimentación. (pullup)

Si todo está claro con la entrada / salida, averigüémoslo con PULLUP. En el modo de entrada, si el pin del microcontrolador no está conectado en ningún lugar, capta todo tipo de interferencias del aire, obteniendo un valor casi aleatorio. Para establecer el pin en el «estado predeterminado», utilizamos una resistencia de tracción a tierra o alimentación. Aquí está el modo INPUT_PULLUP, el microcontrolador incluye unas resistencias de conexión a la fuente de alimentación o a GND. Hablaré de esto con más detalle, con diagramas y ejemplos.

Por defecto, todos los pines están configurados como entradas (INPUT)

Usando la información del párrafo anterior y la lección sobre ciclos, puede cambiar el modo de funcionamiento, por ejemplo, para todos los pines de D2 a A5:

for (byte i = 2; i <= 19; i++) {   // de 2 a 19 (D2-D13, A0-A5)   
  pinMode(i, OUTPUT);              // salida
}

Salida de señal digital.

Un pin digital en modo de salida (SALIDA) puede generar una señal digital, es decir dar tensión. Dado que el término «digital» generalmente se asocia con dos estados, 0 y 1 , el pin digital puede emitir 0 o 1, más precisamente: una señal de nivel bajo o alto. La señal de bajo nivel es de 0 voltios, en términos generales, en este estado, el pin está conectado al GND del microcontrolador. La señal de alto nivel conecta el pin al VCC del microcontrolador, es decir, a la fuente de alimentación. Si recuerdas la lección sobre el alimentación de arduino, se dará cuenta de que la señal alta en el pin digital variará dependiendo de cómo se alimente el Arduino. Cuando se alimenta desde una fuente de 5V, el pin será de 5V, cuando se alimenta desde USB con una pérdida en el diodo protector, obtendremos aproximadamente 4.7 Voltios en el pin digital en el modo de salida de señal alta.

El punto más importante con respecto a los pines digitales de arduino: un microcontrolador es un dispositivo lógico que se crea para controlar otros dispositivos mediante señales lógicas (digitales). Con la palabra lógica, me refiero a señal, no a potencia, es decir, es imposible alimentar algo desde el microcontrolador, con raras excepciones. En la imagen de pines de arriba puede encontrar la inscripción “ Máximo absoluto por pin 40mA, recomendado 20mA ”. Esto significa que se puede quitar el máximo del pin de 40 miliamperios, y no se recomienda más de 20 miliamperios. Créame, esto es mucho para un microcontrolador. En otros microcontroladores, el límite de corriente por pin puede ser de 5 a 10 mA. También hay una limitación general en la corriente de los pines digitales – 200 mA: “ Absolute MAX 200mA para todo el chip“. Esta información se puede encontrar en cualquier fuente oficial de información sobre Arduino y el microcontrolador en general, incluida la hoja de datos del microcontrolador.

¿Qué sucede si quitas más del pin de lo que puede dar? Es muy simple: se romperá. ¿Qué sucede si absorbe más de varios pines de lo que puede dar el microcontrolador en su conjunto? Así es, el microcontrolador se quemará. Por lo tanto, nada más potente que un LED y un pequeño tweeter se puede conectar al microcontrolador. No se pueden alimentar motores, bombillas, calentadores, potentes módulos de radio o cualquier otra cosa desde pines digitales. Los pines digitales se utilizan para enviar comandos a otros dispositivos como relés / transistores para conmutar cargas. Pero hablaremos de esto por separado.

Ahora volvamos al tema de suministrar una señal digital: para esto tenemos una función digitalWrite ( pin, valor ):

  • Pin- pin digital Mc marcado en placa como D. Además, por ejemplo, para NANO, estos son los pines A0-A5
  • Valor – nivel de señal: ALTO para alto, BAJO para bajo. También puedes usar los números 0 y 1.

Para trabajar en el modo de salida, el pin debe cambiarse al estado de SALIDA usando pinMode (), de lo contrario no dará un voltaje que pueda medirse o alimentar algo de él (lea a continuación por qué).

Para leer el nivel de señal en el pin, use la función digitalRead ( pin ), donde pin es el número de pin según su número en el tablero. Estos son los pines marcados como D, así como los pines A0-A5 para Arduino Nano / Uno / Pro Mini. Esta función devuelve 0 si la señal es baja y 1 si es alta. Ejemplo simple:

void setup() {
  pinMode(10, OUTPUT);  // D10 salida
  pinMode(A3, OUTPUT);  // A3 salida
  pinMode(19, OUTPUT);  // A5 salida (Nano/UNO)
  digitalWrite(10, HIGH); // señal alta en D10
  digitalWrite(A3, 1);    // señal alta A3
  digitalWrite(19, 1);    // señal alta A5
}
void loop() {}

Un pin configurado como SALIDA es BAJO por defecto.

Otro punto interesante: en versiones anteriores del Arduino IDE no había opción para el modo de operación INPUT_PULLUP, y la función se hacia a mano en software. Recuerda que estas dos opciones son equivalentes, puedes encontrar la segunda en bocetos antiguos de Internet, no te alarmes. Ambas opciones hacen que el pin se active en modo de entrada pullup.

// version moderna
pinMode(10, INPUT_PULLUP);  // D10 como entrada de pullup
//version antigua
pinMode(10, INPUT);     // D10 entrada
digitalWrite(10, HIGH); // "pullup" D10

Lectura de señal digital.

El pin digital puede «medir» el voltaje, pero solo puede informar su ausencia (señal de bajo nivel, LOW) o presencia (señal de alto nivel, HIGH), la ausencia de voltaje se considera la brecha de 0 a ~ 2.1V. En consecuencia, el microcontrolador considera de ~ 2.1V a VCC (hasta 5V) como una señal de alto nivel. Por lo tanto, el microcontrolador puede trabajar fácilmente con dispositivos lógicos que le envían una señal alta con un voltaje de 3.3V, recibirá esta señal como ALTA.

No puede aplicar un voltaje más alto que el voltaje de suministro del microcontrolador al pin digital (ni a cualquier otro pin).

Para leer el nivel de señal en el pin, use la función digitalRead ( pin ), donde pin es el número de pin según la firma en la board. Estos son los pines firmados como D, así como los pines A0-A5  para Arduino Nano / Uno / Pro Mini. Esta función devuelve 0 si la señal es baja y 1 si es alta. Ejemplo simple:

void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println(digitalRead(5));
}

Este código enviará la señal en el pin D5 al puerto serie. Si lo conectamos con un cable a VCC, obtenemos 1, si a GND, obtenemos 0.


Deja un comentario