Estou tentando entender o GPIO, e li várias postagens diferentes no blog e acho que estou quase conseguindo, mas ainda estou lutando com algumas coisas.
Eu já vi algumas referências ao GPIO apenas poderem trabalhar com valores binários, mas outras postagens que dizem que o valor pode ser de 0 a 255. Estou assumindo que essa é a diferença entre GPIO analógico e digital. Isso está correto? É possível que um único pino GPIO possa atuar como analógico e digital?
Respostas:
Um pino GPIO é um pino de 'entrada / saída de uso geral'. Por padrão, isso é apenas alto ou baixo (níveis de tensão, alta sendo a tensão de alimentação do microcontrolador, baixa geralmente sendo aterrada ou 0V). Mas os níveis de 'alto' e 'baixo' são geralmente dados em tensões como uma proporção da tensão de alimentação. Portanto, qualquer coisa geralmente acima de 66% da tensão de alimentação é considerada um nível lógico 'alto', o que significa que alguns dispositivos de baixa tensão podem conversar com dispositivos de alta tensão, desde que os níveis caiam dentro do que é considerado 'alto'. Um microcontrolador de baixa potência de 1,8–2,7V ou receptor de GPS, por exemplo, terá problemas para se comunicar diretamente com um microcontrolador de 5V, porque o que o dispositivo de baixa tensão vê como 'alto' o dispositivo de alta tensão nem pensa que é alto. Isso é para usar o GPIO como um pino de entrada,
Às vezes, você pode usar um pino ÚNICO para valores 'analógicos', configurando o pino GPIO para ser usado por outros dispositivos integrados, como um conversor 'analógico para digital' (ADC). O pino está definido como um canal no ADC e agora atua como uma entrada para o ADC, não como um pino GPIO normal. Em seguida, você pode definir o ADC para obter uma amostra e ler o valor do registro de resultados do ADC para números como 0-1024, se a resolução for de 10 bits.
Como alguém mencionou, um pino GPIO pode ser usado em software para fornecer o efeito de um sinal PWM (Pulsed Width Modulation), geralmente em baixa velocidade para alternar o GPIO. A maioria dos microcontroladores possui geradores PWM dedicados que podem ser configurados para usar um pino GPIO como pino de saída, e estes são muito rápidos e muito mais estáveis do que o uso de software para controlar o GPIO para gerar um sinal PWM. O PWM é usado para sinais no estilo 'médio' ou '%' e permite que você faça coisas como luzes fracas e controle a velocidade de um motor.
Os pinos GPIO geralmente são organizados em grupos, chamados Portas. Em controladores pequenos, eles podem ser de arquitetura de 8 bits, portanto as portas geralmente são agrupadas em lotes de 8 e seus valores podem ser lidos ao mesmo tempo, lendo um 'registro de dados' que representa os valores lógico alto / baixo desses alfinetes. Da mesma forma, você pode definir os pinos como saídas e, em seguida, gravar 8 bits em um registro de dados, e o controlador GPIO dos microcontroladores lerá os valores alterados do registro e elevará o pino ou o puxará para baixo, dependendo do valor que você acabou de definir.
Em controladores mais novos, como o ARM Cortex A8 e A9, como no Raspberry Pi e BeagleBone, seus controladores GPIO e opções diferentes são muito complicados. Eles usam uma arquitetura de 32 bits; portanto, a maioria dos pinos GPIO é organizada em blocos de 32 pinos, mesmo que nem todos sejam realmente utilizáveis (alguns podem ser dedicados ou não habilitados). O BeagleBone (no qual trabalhei antes) tem algumas opções realmente impressionantes para sua grande quantidade de pinos, e às vezes você precisará usar uma ferramenta 'pin mux', que permite configurar os modos especiais de certos pinos para coisas como PWM, captura de pulso, saídas de timer, entradas de canal analógico (ADC) e até mesmo (no BeagleBone de qualquer maneira) mapeamento para os subprocessadores industriais disponíveis no núcleo ARM, mas são considerados processadores independentes e precisam de seu próprio mapeamento de pinos. estar conectado ao mundo exterior.
fonte
Você provavelmente está se referindo à saída analógica do Arduino, que geralmente usa um pino GPIO com o software PWM . O GPIO normalmente possui três estados. Saída alta, Saída baixa e Entrada / Alto-Z (alta impedância, onde não afeta a saída).
O PWM alterna rapidamente uma saída de Saída alta para Saída baixa (período), para criar uma média (Ciclo de serviço), permitindo algo que se parece com um valor analógico. Ao alternar um GPIO binário em um ciclo de trabalho de 50% (ou 128), a saída ainda é binária, mas a média fica na metade do caminho entre Alto e Baixo.
Pense em uma lâmpada. Você vê Ligado ou Desligado. Mas é realmente ligar e desligar 60 vezes por segundo, tão rápido que você nem percebe que está piscando muito rápido. Mas ligue e desligue a lâmpada manualmente bem devagar e você percebe que está piscando. Por 255, significa 100% ativado e menos de 255 é uma fração de 100% ativado.
É assim que um GPIO binário pode agir como um pino analógico de 255 estados.
fonte
Um bit GPIO pode ser 0 ou 1. Uma porta GPIO de 8 bits, composta por 8 bits consecutivos, pode variar entre 00000000 e 11111111 ou 255 decimal. Isso tem pouco a ver com o conceito de "analógico"
fonte