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?
Respuestas:
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.
fuente
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.
fuente
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"
fuente