Piny wejściowe Raspberry pi GPIO dają losowe wartości

12

Ostatnio dużo gram z Raspberry Pi. Ale mam problem.

Kiedy ustawiam pin wejściowy, aby sprawdzić, czy elektryczność jest do niego wysyłana, czy nie, daje to raczej niestabilne odpowiedzi.

Kilka uwag, które poczyniłem w celu wyjaśnienia mojego problemu:

  1. Kiedy podłączam obwód, a prąd przepływa do pinu wejściowego, wartość, którą mi daje, jest zawsze PRAWDA lub 1.

  2. Kiedy przerywam obwód przez usunięcie diody LED, która jest jego częścią (kiedy wartość wejściowa powinna wynosić 0), daje mi to losowe wartości, przesuwając się między 0 a 1.

  3. Kiedy usuwam wszystkie kable z mojego Pi, daje mi to stałą wartość 0

  4. Jeśli mam wszystkie kable GPIO usunięte, to daje mi wartość 0, ale jeśli po prostu dotknę pinu wejściowego kawałkiem elektrody prowadzącej metal (prowadząc do niczego na drugim końcu), zacznie się od losowych wartości. Nie podaje mi losowych wartości, chyba że mam też coś podłączonego do styku wyjściowego. Nigdzie nie musi prowadzić, wystarczy dotknąć pinu wyjściowego. A jakiś inny kawałek metalu musi dotykać styku wejściowego. Brak połączenia między nimi.

Zastanawiam się, dlaczego zaczyna mi dawać losowe wartości, gdy pin wejściowy GPIO dotyka dowolnego metalu.

I jeszcze bardziej interesujące, dlaczego daje mi spójne 1 lub PRAWDZIWE, kiedy faktycznie wysyłam do niego prąd?

Gustaf
źródło
Edytuj do instrukcji nr 4: Nie daje mi losowych wartości, chyba że mam również coś podłączonego do wyjścia. Nigdzie nie musi prowadzić, wystarczy dotknąć pinu wyjściowego. A jakiś inny kawałek metalu musi dotykać styku wejściowego. Brak między nimi żadnego połączenia
Gustaf
Witamy w Raspberry Pi Stack Exchange! Czy wiesz, że możesz edytować swoje pytanie, aby naprawić tę zmianę zamiast komentować? Od czasu do czasu odwiedzaj czat. Zawsze kochamy nową firmę i pomoże to pokazać, że ta strona jest przydatna, rośnie i ma zaangażowaną bazę użytkowników. Dzięki!
RPiAwesomeness
1
Wynika to z faktu, że piny się unoszą. Więcej informacji na Electronics.stackexchange.com/a/35705
Gerben

Odpowiedzi:

14

Problem

Kiedy podłączam obwód, a prąd przepływa do pinu wejściowego, wartość, którą mi daje, jest zawsze PRAWDA lub 1.

To prawda, ale co się stanie, gdy masa zostanie podłączona do pinu wejściowego GPIO? Wartość, którą by dawała, zawsze byłaby fałszywa .

  • Kiedy zasilanie jest podłączone do styku wejściowego: Styk wejściowy wykrywa 1 (prawda).
  • Gdy masa jest podłączona do styku wejściowego: styk wejściowy wykrywa 0 (fałsz).
  • Gdy nic nie jest podłączone do styku wejściowego: Styk wejściowy się myli.

Gdy nic nie jest podłączone, pin jest w stanie „pływającym”, a wyjście nie jest przewidywalne. jest w stanie nieokreślonym, nie jest ani 0, ani 1, a wykryta wartość może dziwnie się zmieniać, stąd losowe wyniki. W elektronice jest to znane jako trzeci stan .

Więcej szczegółów z artykułu z Wikipedii :

W obwodach cyfrowych wyjście o wysokiej impedancji (znane również jako hi-Z, potrójny lub zmiennoprzecinkowy) nie jest doprowadzane przez obwód wyjściowy do żadnego określonego poziomu logicznego. Sygnał nie jest doprowadzany do logicznego poziomu wysokiego ani niskiego; ten trzeci warunek prowadzi do opisu „trzykrotnie”. Taki sygnał może być postrzegany jako obwód otwarty (lub „pływający” drut).

Ogólne rozwiązanie

Rozwiązaniem jest rezystor obniżający . Pomyśl o tym jako o dodatkowym składniku, który nic nie robi, gdy linia otrzymuje 0 lub 1. Ale kiedy linia jest bezczynna, nagle zaczyna działać i daje 0.

Rozwiązanie Raspberry Pi

Na szczęście dla ciebie Rpi ma wbudowane menu rozwijane, musisz aktywować go programowo. Oto skrypt Pythona:

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.

Dygresja

Nie podłączaj zasilania bezpośrednio do styku, ponieważ byłoby to niebezpieczne! Upewnij się, że w obwodzie jest wystarczająca rezystancja. Nigdy też nie podłączaj zasilania 5 V bezpośrednio do GPIO, ponieważ akceptuje tylko 3,3 V.

Witaj świecie
źródło
Czy znasz równoważny kod C # podczas uruchamiania na platformie IoT systemu Windows 10?
Vijay Chavda,
Ta odpowiedź jest złota! Thx
domih