Comprender GPIO analógico y digital


11

Estoy tratando de entender GPIO, y he leído un montón de publicaciones de blog diferentes y creo que estoy cerca de obtenerlo, pero todavía estoy luchando con algunas cosas.

He visto algunas referencias a GPIO que solo pueden trabajar con valores binarios, pero otras publicaciones que dicen que el valor puede ser de 0-255. Supongo que esta es la diferencia entre GPIO analógico y digital. ¿Es eso correcto? ¿Es posible que un solo pin GPIO pueda actuar como analógico y digital?


Como seguimiento de algunas de las respuestas ... El valor binario se refiere a una entrada o salida digital. Puede ser un 1 (que debe ser el voltaje de la fuente, llamado "hola" o "encendido") o 0 (que significa 0V, llamado "lo" o "apagado"). Esa es una resolución de 1 bit. Una entrada analógica puede ser un rango, típicamente de 0V a VCC (el voltaje de la fuente). Un chip digital con resolución de 8 bits convertirá esta entrada analógica en una señal digital de 8 bits de rango 0 - 255 (binario: 00000000 - 11111111), porque 2 ^ 8 - 1 = 255 (binario significa base 2, el 8 es del 8 bit parte, y "- 1" porque las cosas digitales comienzan a contar en 0, no en 1).
Kurt E. Clothier

Respuestas:


14

Un pin GPIO es un pin de "entrada / salida de propósito general". Por defecto, esto solo es alto o bajo (niveles de voltaje, alto es el voltaje de alimentación del microcontrolador, bajo generalmente es tierra o 0V). Pero los niveles de 'alto' y 'bajo' generalmente se dan como voltajes como una proporción del voltaje de suministro. Por lo tanto, cualquier cosa que generalmente supere el 66% del voltaje de suministro se considera un nivel lógico 'alto', lo que significa que algunos dispositivos de bajo voltaje pueden hablar con dispositivos de alto voltaje siempre que los niveles caigan dentro de lo que se considera 'alto'. Un microcontrolador de baja potencia de 1.8–2.7 V o un receptor GPS, por ejemplo, tendrá problemas para comunicarse directamente con un microcontrolador de 5 V porque lo que el dispositivo de bajo voltaje ve como "alto", el dispositivo de alto voltaje no pensará que es alto en absoluto. Esto es para usar GPIO como pin de entrada,

A veces puede usar un pin SINGLE para valores 'analógicos', configurando el pin GPIO para que lo usen otros dispositivos integrados como un convertidor 'analógico a digital' (ADC). El pin está configurado en un canal en el ADC y esto actúa como una entrada para el ADC ahora, no un pin GPIO normal. Luego puede configurar el ADC para tomar una muestra y leer el valor del registro de resultados del ADC para números como 0-1024 si es una resolución de 10 bits.

Como alguien ha mencionado, un pin GPIO podría usarse en el software para dar el efecto de una señal de modulación de ancho pulsado (PWM), generalmente a bajas velocidades para alternar GPIO. La mayoría de los microcontroladores tienen generadores PWM dedicados que se pueden configurar para usar un pin GPIO como pin de salida, y estos son muy rápidos y mucho más estables que el uso de software para controlar GPIO para generar una señal PWM. Los PWM se usan para señales de estilo 'promedio' o '%' y le permiten hacer cosas como luces tenues y controlar la velocidad de un motor.

Los pines GPIO generalmente se organizan en grupos, llamados puertos. En los controladores pequeños, pueden ser arquitecturas de 8 bits, por lo que los puertos a menudo se agrupan en lotes de 8, y sus valores se pueden leer todos al mismo tiempo leyendo un 'registro de datos' que representa los valores lógicos altos / bajos de esos patas. Del mismo modo, puede configurar los pines para que sean salidas y luego escribir 8 bits en un registro de datos, y el controlador GPIO de los microcontroladores leerá los valores cambiados del registro, y conducirá el pin alto o el pin bajo según el valor que acaba de configurar.

En los controladores más nuevos, como el ARM Cortex A8 y A9, como el Raspberry Pi y el BeagleBone, sus controladores GPIO y las diferentes opciones son muy complicados. Utilizan una arquitectura de 32 bits, por lo que la mayoría de los pines GPIO están dispuestos en bloques de 32 pines, incluso si no todos son realmente utilizables (algunos pueden estar dedicados o no habilitados). El BeagleBone (en el que he trabajado antes) tiene algunas opciones realmente impresionantes para su gran cantidad de pines, y a veces necesitará usar una herramienta 'pin mux', que le permite configurar los modos especiales de ciertos pines para cosas como PWM, captura de pulso, salidas de temporizador, entradas de canal analógico (ADC) e incluso (en el BeagleBone de todos modos) mapeo a los subprocesadores industriales disponibles en el núcleo ARM, pero se consideran procesadores independientes y necesitan su propio mapeo de pines para estar conectado con el mundo exterior.


¿Podría dar un ejemplo de cómo se puede usar un pin individual para valores 'analógicos'?
Pavel

@ JimJim2000 solo una secuencia de encendido / apagado o PWM adecuado a través de un filtro RC para producir un voltaje "promedio" analógico suave en la salida.
KyranF

7

Lo más probable es que se refiera a la salida analógica de Arduino, que a menudo usa un pin GPIO con el software PWM . GPIO generalmente tiene tres estados. Output High, Output Low y Input / High-Z (alta impedancia, donde no afecta la salida).

PWM alterna rápidamente una salida de Salida alta a Salida baja (período), para crear un promedio (Ciclo de trabajo), lo que permite algo que se parece a un valor analógico. Al alternar un GPIO binario en un ciclo de trabajo del 50% (o 128), la salida sigue siendo binaria, pero promedia a la mitad entre Alto y Bajo.

Piensa en una bombilla. Lo ves activado o desactivado. Pero realmente se enciende y apaga 60 veces por segundo, tan rápido que no notas que parpadea muy rápido. Pero encienda y apague la bombilla manualmente muy lentamente, y notará que parpadea. Por 255, significa 100% encendido, y menos de 255 es una fracción de 100% encendido.

Así es como un GPIO binario puede actuar como un pin analógico de 255 estados.


Gracias @Passerby, eso es mucho más claro. No estoy mirando específicamente a arduino, sino a frambuesa pi y beaglebone. ¿Lo que estás diciendo significa que cualquier pin puede tener un valor entre 0 y 255? Me confundo entre la documentación que dice que un valor puede ser binario frente a otros que dicen que un valor puede ser 0-255.
pedalpete

1
@pedalpete el RPI y Arduino tienen mucha superposición en multitud e ideas. Pero un PWM de 0 a 255 es arbitrario. Puede ser de 0 a 65535, o de 0 a 16. 0 a 255 son 8 bits de precisión. Donde 255 o 65535 o lo que sea 100%. Un GPIO solo tiene Binary On y Off, pero usa PWM para pretender que puede tener más que solo activar o desactivar. Es una ilusión óptica útil e intencional.
Passerby

2
Una bombilla no se enciende ni se apaga a 60 veces por segundo. El filamento se calienta y se calienta
Scott Seidman

0

Un bit GPIO puede ser 0 o 1. Un puerto GPIO de 8 bits, compuesto por 8 bits consecutivos, puede oscilar entre 00000000 y 11111111, o 255 decimales. Esto tiene poco que ver con el concepto de "analógico"


Gracias Scott, aunque creo que ahora estoy más confundido que antes. ¿Qué es un puerto GPIO? Si tengo un pin GPIO (ejemplo en una Raspberry Pi), ¿cada pin se considera un puerto? Si es así, ¿cada pin puede funcionar con dicho rango 0-255 decimal?
pedalpete

Ignora mi última pregunta, veo a qué te refieres ahora con un puerto.
pedalpete
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.