Entendiendo GPIO analógico y digital

9

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

He visto algunas referencias a que GPIO solo puede 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 tanto como analógico como digital?

    
pregunta pedalpete

3 respuestas

11

Un pin GPIO es un pin 'entrada / salida de propósito general'. Esto es, por defecto, solo alto o bajo (niveles de voltaje, alto es el voltaje de suministro del microcontrolador, generalmente es baja a tierra o 0 V). Pero los niveles de 'alto' y 'bajo' usualmente se dan como voltajes como una proporción del voltaje de suministro. Por lo tanto, cualquier cosa por encima del 66% de la tensión de alimentación se considera un nivel lógico "alto", lo que significa que algunos dispositivos de baja tensión pueden comunicarse con dispositivos de alta tensión siempre que los niveles se encuentren dentro de lo que se considera "alto". Un microcontrolador de baja potencia de 1.8–2.7V o un receptor GPS, por ejemplo, tendrá problemas para comunicarse directamente con un microcontrolador de 5V porque lo que el dispositivo de bajo voltaje ve como "alto" el dispositivo de alto voltaje no pensará que sea alto. Esto es para usar GPIO como pin de entrada, y la salida es básicamente la misma: la salida alta se basa en el suministro del controlador, en el que expulsará la corriente y establecerá el voltaje de ese pin en VCC, o reducirá la corriente y la tensión. el pin a 0V para una lógica 'baja'.

En ocasiones, puede usar un PIN ÚNICO para los valores 'analógicos', configurando el pin GPIO para que lo utilicen otros dispositivos integrados como un convertidor 'analógico a digital' (ADC). El pin se establece en un canal en el ADC y esto actúa como una entrada al ADC ahora, no como 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 se trata de una resolución de 10 bits.

Como alguien mencionó, se podría usar un pin GPIO en el software para dar el efecto de una señal de Modulación de Ancho Pulsado (PWM), generalmente a velocidades bajas para el cambio de GPIO. La mayoría de los microcontroladores tienen generadores PWM dedicados que pueden configurarse 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 controladores pequeños, pueden ser de arquitectura 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 alto / bajo de esos patas. De manera similar, 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, e impulsará el pin alto o tirará del pin bajo dependiendo del valor que haya establecido.

En los controladores más nuevos, como ARM Cortex A8 y A9, como en Raspberry Pi y BeagleBone, sus controladores GPIO y diferentes opciones son muy complicados. Usan una arquitectura de 32 bits, por lo que la mayoría de los pines GPIO se organizan 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 asombrosas por su gran cantidad de pines, y algunas veces necesitarás usar una herramienta 'pin mux', que te permite configurar los modos especiales de ciertos pines para cosas. como PWM, captura de pulsos, salidas de temporizador, entradas de canal analógicas (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 pin en orden Para estar conectado con el mundo exterior.

    
respondido por el KyranF
7

Lo más probable es que te refieras a la salida analógica de Arduino, que a menudo usa un pin GPIO con el software PWM . GPIO tiene típicamente tres estados. Salida alta, Salida baja y Entrada / Alta-Z (alta impedancia, donde no afecta a la salida).

PWM cambia rápidamente una salida de Salida alta a Salida baja (período), para crear un promedio (Ciclo de trabajo), permitiendo 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 mitad de camino entre Alto y Bajo.

Piensa en una bombilla. Lo ves encendido, o apagado. 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 está parpadeando. Para 255, significa 100% encendido, y menos de 255 es una fracción del 100%.

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

    
respondido por el Passerby
0

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

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas