Các chân đầu vào Raspberry pi GPIO cho các giá trị ngẫu nhiên


12

Gần đây tôi đã chơi rất nhiều với Raspberry Pi. Nhưng tôi có một vấn đề.

Khi tôi thiết lập một pin đầu vào để kiểm tra xem điện có được gửi đến nó hay không, nó sẽ cho tôi câu trả lời khá không ổn định.

Một vài quan sát tôi đã thực hiện để làm rõ vấn đề của mình:

  1. Khi tôi kết nối mạch và dòng điện đến chân đầu vào, giá trị mà nó mang lại cho tôi luôn là TRUE hoặc 1.

  2. Khi tôi ngắt mạch bằng cách loại bỏ một đèn LED là một phần của nó (khi giá trị đầu vào phải là 0), nó mang lại cho tôi các giá trị ngẫu nhiên, thay đổi giữa 0 và 1.

  3. Khi tôi loại bỏ tất cả các dây cáp khỏi Pi của mình, nó mang lại cho tôi giá trị nhất quán là 0

  4. Nếu tôi loại bỏ tất cả các cáp GPIO, nó sẽ cho tôi giá trị 0, nhưng nếu tôi chỉ cần chạm vào pin đầu vào bằng một miếng kim loại dẫn điện, (dẫn đến không có gì ở đầu kia) thì nó lại bắt đầu với các giá trị ngẫu nhiên. Nó không cung cấp cho tôi các giá trị ngẫu nhiên trừ khi tôi cũng có một cái gì đó được kết nối với pin đầu ra. Nó không phải dẫn đến bất cứ đâu, nó chỉ cần chạm vào chân đầu ra. Và một số mảnh kim loại khác phải chạm vào pin đầu vào. Không có kết nối nào giữa chúng.

Tôi tự hỏi tại sao nó bắt đầu cho tôi các giá trị ngẫu nhiên khi chân GPIO đầu vào chạm vào bất kỳ kim loại nào.

Và thậm chí còn quan tâm hơn, tại sao nó lại cho tôi 1s hoặc TRUE nhất quán khi tôi thực sự gửi điện cho nó?


Chỉnh sửa thành câu lệnh số 4: Nó không cung cấp cho tôi các giá trị ngẫu nhiên trừ khi tôi cũng có một cái gì đó được kết nối với đầu ra. Nó không phải dẫn đến bất cứ đâu, nó chỉ cần chạm vào chân đầu ra. Và một số mảnh kim loại khác phải chạm vào pin đầu vào. Không có kết nối nào giữa họ
Gustaf

Chào mừng bạn đến với Raspberry Pi Stack Exchange! Bạn có biết bạn có thể chỉnh sửa câu hỏi của mình để sửa thay đổi thông tin đó thay vì bình luận không? Ngoài ra, thỉnh thoảng tham gia vào cuộc trò chuyện. Chúng tôi luôn yêu thích công ty mới và nó sẽ giúp cho thấy rằng trang web này hữu ích, đang phát triển và có một cơ sở người dùng liên quan. Cảm ơn!
RPiAwesomeness 23/03 '

1
Điều này là do các chân đang nổi. Thêm thông tin tại Electronics.stackexchange.com/a/35705
Gerben

Câu trả lời:


14

Vấn đề

Khi tôi kết nối mạch và dòng điện đến chân đầu vào, giá trị mà nó mang lại cho tôi luôn là TRUE hoặc 1.

Đúng, nhưng điều gì xảy ra khi nối đất với chân đầu vào GPIO? Giá trị nó sẽ luôn luôn là sai .

  • Khi nguồn được kết nối với chân đầu vào: Chân đầu vào phát hiện 1 (đúng).
  • Khi nối đất với chân đầu vào: Chân đầu vào phát hiện 0 (sai).
  • Khi không có gì được kết nối với chân đầu vào: Chân đầu vào bị lẫn lộn.

Khi không có gì được kết nối, pin ở trạng thái "nổi" và đầu ra không thể dự đoán được. nó ở trạng thái không xác định, nó không phải là 0 hay 1 và giá trị được phát hiện có thể thay đổi một cách kỳ lạ, do đó kết quả ngẫu nhiên của bạn. Trong điện tử, điều này được gọi là trạng thái thứ ba .

Một số chi tiết từ một bài viết Wikipedia :

Trong các mạch kỹ thuật số, đầu ra trở kháng cao (còn được gọi là hi-Z, tri-tuyên bố hoặc nổi) không được điều khiển đến bất kỳ mức logic xác định nào bởi mạch đầu ra. Tín hiệu không được điều khiển đến mức logic cao hay thấp; điều kiện thứ ba này dẫn đến mô tả "tri-tuyên bố". Một tín hiệu như vậy có thể được xem như là một mạch mở (hoặc dây "nổi").

Giải pháp chung

Giải pháp là một điện trở kéo xuống . Hãy nghĩ về điều này như là một thành phần bổ sung không làm gì khi dòng đang có 0 hoặc 1. Nhưng khi dòng không hoạt động, nó đột nhiên khởi động và đưa ra 0.

Giải pháp Raspberry Pi

May mắn cho bạn, Rpi có tích hợp kéo xuống, bạn cần kích hoạt nó theo chương trình. Đây là một kịch bản python cho điều đó:

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.

Lưu ý bên

Không kết nối nguồn trực tiếp với pin vì nó sẽ nguy hiểm! Hãy chắc chắn rằng có đủ điện trở trong mạch. Ngoài ra, không bao giờ kết nối nguồn 5V trực tiếp với GPIO vì nó chỉ chấp nhận 3,3V.


Bạn có biết mã C # tương đương khi chạy trên nền tảng lõi Windows 10 IoT không?
Vijay Chavda

Câu trả lời này là vàng! Thx
domih
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.