I pin di input GPIO di Raspberry pi forniscono valori casuali


12

Ultimamente ho giocato molto con il Raspberry Pi. Ma ho un problema.

Quando imposto un pin di input per verificare se l'elettricità viene inviata o meno, mi dà risposte piuttosto instabili.

Alcune osservazioni che ho fatto per chiarire il mio problema:

  1. Quando collego il circuito e l'elettricità fluisce al pin di ingresso, il valore che mi dà è costantemente VERO o 1.

  2. Quando interrompo il circuito rimuovendo un LED che fa parte di esso (quando il valore di ingresso dovrebbe essere 0) mi dà valori casuali, spostando tra 0 e 1.

  3. Quando rimuovo tutti i cavi dal mio Pi mi dà il valore costante di 0

  4. Se ho rimosso tutti i cavi GPIO, mi dà il valore di 0, ma se tocco semplicemente il pin di ingresso con un pezzo di metallo che conduce l'elettricità, (portando a nulla dall'altra parte), inizia di nuovo con i valori casuali. Non mi dà valori casuali a meno che non abbia anche qualcosa collegato al pin di uscita. Non deve condurre da nessuna parte, deve solo toccare il pin di uscita. E qualche altro pezzo di metallo deve toccare il pin di input. Nessuna connessione tra loro.

Mi chiedo perché inizi a darmi valori casuali quando il pin Input GPIO tocca qualsiasi metallo.

E ancora più interessante, perché mi dà 1 o VERO costanti quando in realtà vi invio elettricità?


Modifica all'istruzione numero 4: non mi dà valori casuali a meno che non abbia anche qualcosa collegato all'outputpin. Non deve condurre da nessuna parte, deve solo toccare il pin di uscita. E qualche altro pezzo di metallo deve toccare il pin di input. Nessuna connessione tra loro
Gustaf

Benvenuti nello scambio di stack di Raspberry Pi! Sai che puoi modificare la tua domanda per correggere la modifica di tali informazioni anziché commentarle? Inoltre, entra nella chat di volta in volta. Amiamo sempre le nuove società e ciò contribuirà a dimostrare che questo sito è utile, in crescita e con una base di utenti coinvolti. Grazie!
RPiAwesomeness

1
Questo perché i pin galleggiano. Maggiori informazioni su electronics.stackexchange.com/a/35705
Gerben

Risposte:


14

Il problema

Quando collego il circuito e l'elettricità fluisce al pin di ingresso, il valore che mi dà è costantemente VERO o 1.

Vero, ma cosa succede quando la terra è collegata al pin di ingresso GPIO? Il valore che darebbe sarebbe sempre falso .

  • Quando l'alimentazione è collegata al pin di ingresso: il pin di ingresso rileva un 1 (vero).
  • Quando la terra è collegata al pin di ingresso: il pin di ingresso rileva uno 0 (falso).
  • Quando nulla è collegato al pin di input: il pin di input viene confuso.

Quando nulla è collegato, il pin è in uno stato "mobile" e l'output non è prevedibile. è in uno stato indefinito, non è né 0 né 1 e il valore rilevato può cambiare in modo strano, quindi i risultati casuali. In elettronica questo è noto come il terzo stato .

Qualche dettaglio in più da un articolo di Wikipedia :

Nei circuiti digitali, un'uscita ad alta impedenza (nota anche come hi-Z, tri-dichiarata o flottante) non viene pilotata a nessun livello logico definito dal circuito di uscita. Il segnale non viene portato a un livello logico né alto né basso; questa terza condizione porta alla descrizione "tri-dichiarato". Tale segnale può essere visto come un circuito aperto (o filo "flottante").

La soluzione generale

La soluzione è una resistenza pull-down . Pensa a questo come a un componente aggiuntivo che non fa nulla quando la linea sta ottenendo uno 0 o 1. Ma quando la linea è inattiva, improvvisamente entra in azione e dà uno 0.

La soluzione Raspberry Pi

Fortunatamente per te, l'Rpi ha un pull-down integrato, è necessario attivarlo a livello di codice. Ecco uno script Python per questo:

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 a margine

Non collegare l'alimentazione direttamente al pin in quanto sarebbe pericoloso! Assicurarsi che ci sia abbastanza resistenza nel circuito. Inoltre, non collegare mai l'alimentazione a 5 V direttamente al GPIO in quanto accetta solo 3,3 V.


Conoscete il codice C # equivalente quando eseguite su piattaforma IoT Windows 10?
Vijay Chavda,

Questa risposta è d'oro! Thx
domih
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.