Os pinos de entrada GPIO Raspberry Pi fornecem valores aleatórios

12

Ultimamente, tenho tocado muito com o Raspberry Pi. Mas eu tenho um problema.

Quando configuro um pino de entrada para verificar se a eletricidade é enviada para ele ou não, isso me dá respostas bastante instáveis.

Algumas observações que fiz para esclarecer meu problema:

  1. Quando conecto o circuito, e a eletricidade flui para o pino de entrada, o valor que ele fornece é sempre VERDADEIRO ou 1.

  2. Quando quebro o circuito removendo um LED que faz parte dele (quando o valor de entrada deve ser 0), obtém-me valores aleatórios, alternando entre 0 e 1.

  3. Quando removo todos os cabos do meu Pi, obtive o valor consistente de 0

  4. Se eu tiver todos os cabos GPIO removidos, ele me dará o valor 0, mas se eu simplesmente tocar no pino de entrada com um pedaço de metal condutor de eletricidade (levando a nada na outra extremidade), ele começará com os valores aleatórios novamente. Ele não me fornece valores aleatórios, a menos que eu também tenha algo conectado ao pino de saída. Ele não precisa levar a lugar nenhum, apenas precisa tocar no pino de saída. E algum outro pedaço de metal precisa tocar no pino de entrada. Nenhuma conexão entre eles.

Eu me pergunto por que ele começa a me fornecer valores aleatórios quando o pino GPIO de entrada toca qualquer metal.

E ainda mais interessante, por que isso me dá 1s ou TRUEs consistentes quando realmente envio eletricidade a ele?

Gustaf
fonte
Edite para a afirmação número 4: ela não fornece valores aleatórios, a menos que eu também tenha algo conectado ao outputpin. Ele não precisa levar a lugar nenhum, basta tocar no pino de saída. E algum outro pedaço de metal precisa tocar no pino de entrada. Nenhuma conexão entre eles #
Gustaf
Bem-vindo ao Raspberry Pi Stack Exchange! Você sabe que pode editar sua pergunta para corrigir essas informações em vez de comentá-las? Além disso, entre no chat de tempos em tempos. Sempre gostamos de uma nova empresa e isso ajudará a mostrar que este site é útil, crescente e tem uma base de usuários envolvida. Obrigado!
RPiAwesomeness 23/03
1
Isso ocorre porque os pinos estão flutuando. Mais informações em electronics.stackexchange.com/a/35705
Gerben

Respostas:

14

O problema

Quando conecto o circuito, e a eletricidade flui para o pino de entrada, o valor que ele fornece é sempre VERDADEIRO ou 1.

É verdade, mas o que acontece quando o terra está conectado ao pino de entrada GPIO? O valor que daria sempre seria falso .

  • Quando a energia está conectada ao pino de entrada: O pino de entrada detecta um 1 (verdadeiro).
  • Quando o terra está conectado ao pino de entrada: O pino de entrada detecta um 0 (falso).
  • Quando nada está conectado ao pino de entrada: O pino de entrada fica confuso.

Quando nada está conectado, o pino está no estado "flutuante" e a saída não é previsível. está em um estado indefinido, não é 0 nem 1, e o valor detectado pode mudar estranhamente, daí os resultados aleatórios. Na eletrônica, isso é conhecido como terceiro estado .

Mais alguns detalhes de um artigo da Wikipedia :

Em circuitos digitais, uma saída de alta impedância (também conhecida como hi-Z, tri-afirmada ou flutuante) não está sendo direcionada para nenhum nível lógico definido pelo circuito de saída. O sinal não é conduzido a um nível lógico alto nem baixo; essa terceira condição leva à descrição "tri-afirmou". Esse sinal pode ser visto como um circuito aberto (ou fio "flutuante").

A solução geral

A solução é um resistor pull-down . Pense nisso como um componente extra que não faz nada quando a linha está recebendo um 0 ou 1. Mas quando a linha está ociosa, ela de repente entra em ação e dá um 0.

A solução Raspberry Pi

Felizmente para você, o Rpi possui um menu suspenso, é necessário ativá-lo programaticamente. Aqui está um script python para isso:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
//Now your input is stable.

Nota

Não conecte a energia diretamente ao pino, pois isso seria perigoso! Verifique se há resistência suficiente no circuito. Além disso, nunca conecte a energia de 5V diretamente ao GPIO, pois ela aceita apenas 3,3V.

Olá Mundo
fonte
Você conhece o código C # equivalente ao executar na plataforma principal do Windows 10 IoT?
Vijay Chavda
Esta resposta é dourada! Thx
domih