Raspberry pi GPIO อินพุตพินให้ค่าสุ่ม


12

ฉันเล่น Raspberry Pi มาเร็ว ๆ นี้ แต่ฉันมีปัญหา

เมื่อฉันตั้งค่าหมุดป้อนข้อมูลเพื่อตรวจสอบว่าไฟฟ้าถูกส่งไปหรือไม่มันให้คำตอบที่ไม่เสถียร

ข้อสังเกตเล็กน้อยที่ฉันได้ทำเพื่อชี้แจงปัญหาของฉัน:

  1. เมื่อฉันเชื่อมต่อวงจรและกระแสไฟฟ้าไหลไปที่ขาอินพุตค่าที่ให้ฉันเป็นค่า TRUE หรือ 1 อย่างสม่ำเสมอ

  2. เมื่อฉันทำลายวงจรโดยการลบ LED ที่เป็นส่วนหนึ่งของมัน (เมื่อค่าอินพุตควรเป็น 0) มันให้ค่าสุ่มฉันขยับระหว่าง 0 และ 1

  3. เมื่อฉันถอดสายเคเบิลทั้งหมดออกจาก Pi ของฉันมันจะให้ค่าที่สอดคล้องกันเป็น 0

  4. หากฉันถอดสาย GPIO ทั้งหมดออกแล้วมันให้ค่า 0 แต่ถ้าฉันแตะที่ขาอินพุตด้วยชิ้นส่วนของโลหะที่เป็นตัวนำไฟฟ้า มันไม่ได้ให้ค่าสุ่มถ้าฉันมีบางอย่างเชื่อมต่อกับขาออกเช่นกัน มันไม่จำเป็นต้องนำไปสู่ทุกที่เพียงแค่ต้องแตะที่ขาออก และชิ้นส่วนโลหะอื่น ๆ จะต้องแตะที่ขาอินพุต ไม่มีการเชื่อมต่อระหว่างพวกเขา

ฉันสงสัยว่าเหตุใดจึงเริ่มให้ค่าสุ่มเมื่อขาอินพุต GPIO แตะโลหะใด ๆ

และน่าสนใจยิ่งขึ้นทำไมมันให้ 1s หรือ TRUE ที่สอดคล้องกันกับฉันเมื่อฉันส่งกระแสไฟฟ้าให้กับมัน?


แก้ไขเป็นหมายเลขคำสั่ง 4: ไม่ให้ค่าสุ่มแก่ฉันเว้นแต่ฉันจะมีบางสิ่งเชื่อมต่อกับเอาท์พุทเช่นกัน มันไม่จำเป็นต้องนำไปสู่ทุกที่เพียงแค่ต้องแตะที่ขาออก และชิ้นส่วนโลหะอื่น ๆ จะต้องแตะที่ขาอินพุต ไม่มีการเชื่อมต่อระหว่างพวกเขา
Gustaf

ยินดีต้อนรับสู่ Raspberry Pi Stack Exchange! คุณรู้หรือไม่ว่าคุณสามารถแก้ไขคำถามของคุณเพื่อแก้ไขการเปลี่ยนแปลงข้อมูลนั้นแทนการแสดงความคิดเห็นได้? นอกจากนี้ยังปรากฏในการแชทเป็นครั้งคราว เรารัก บริษัท ใหม่อยู่เสมอและมันจะช่วยแสดงให้เห็นว่าเว็บไซต์นี้มีประโยชน์เติบโตและมีฐานผู้ใช้ที่เกี่ยวข้อง ขอบคุณ!
RPiAwesomeness

1
นี่เป็นเพราะหมุดลอย ข้อมูลเพิ่มเติมได้ที่electronics.stackexchange.com/a/35705
Gerben

คำตอบ:


14

ปัญหา

เมื่อฉันเชื่อมต่อวงจรและกระแสไฟฟ้าไหลไปที่ขาอินพุตค่าที่ให้ฉันเป็นค่า TRUE หรือ 1 อย่างสม่ำเสมอ

จริง แต่จะเกิดอะไรขึ้นเมื่อกราวด์เชื่อมต่อกับพินอินพุต GPIO? คุณค่าที่จะให้จะเป็นเท็จเสมอ

  • เมื่อไฟฟ้าเชื่อมต่อกับขาอินพุต: พินอินพุตตรวจพบ 1 (จริง)
  • เมื่อกราวด์เชื่อมต่อกับพินอินพุต: พินอินพุตตรวจพบ 0 (false)
  • เมื่อไม่มีอะไรเชื่อมต่อกับอินพุตพิน: ขาอินพุตสับสน

เมื่อไม่มีสิ่งใดเชื่อมต่อหมุดอยู่ในสถานะ "ลอยตัว" และเอาต์พุตไม่สามารถคาดเดาได้ มันอยู่ในสถานะที่ไม่ได้กำหนดไม่ใช่ 0 หรือ 1 และค่าที่ตรวจพบสามารถเปลี่ยนแปลงได้อย่างแปลกประหลาดดังนั้นผลลัพธ์แบบสุ่มของคุณ ในอุปกรณ์อิเล็กทรอนิกส์นี้เป็นที่รู้จักในฐานะรัฐที่สาม

รายละเอียดเพิ่มเติมบางส่วนจากบทความ Wikipedia :

ในวงจรดิจิตอลเอาต์พุตความต้านทานสูง (หรือเรียกอีกอย่างว่า hi-Z, tri-ดังหรือลอย) เอาท์พุทไม่ได้ถูกผลักดันไปยังระดับตรรกะที่กำหนดโดยวงจรเอาท์พุท สัญญาณไม่ได้ถูกขับเคลื่อนไปที่ระดับลอจิกสูงหรือต่ำ เงื่อนไขที่สามนี้นำไปสู่คำอธิบาย "ไตร - ระบุ" สัญญาณดังกล่าวสามารถมองเห็นเป็นวงจรเปิด (หรือสาย "ลอย")

วิธีแก้ปัญหาทั่วไป

การแก้ปัญหาเป็นตัวต้านทานแบบเลื่อนลง คิดว่านี่เป็นองค์ประกอบพิเศษที่ไม่ได้ทำอะไรเลยเมื่อบรรทัดได้รับ 0 หรือ 1 แต่เมื่อสายไม่ได้ใช้งานก็จะเริ่มดำเนินการและให้ 0

โซลูชัน Raspberry Pi

โชคดีสำหรับคุณ Rpi มี pull-down ในตัวคุณต้องเปิดใช้งานโดยทางโปรแกรม นี่คือสคริปต์ python สำหรับสิ่งนั้น:

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.

ข้อความด้านข้าง

อย่าเชื่อมต่อพลังงานโดยตรงกับขาเพราะมันจะเป็นอันตราย! ตรวจสอบให้แน่ใจว่ามีความต้านทานเพียงพอในวงจร นอกจากนี้อย่าเชื่อมต่อกำลังไฟ 5V โดยตรงไปยัง GPIO เพราะรับเฉพาะ 3.3V


คุณรู้รหัส C # เทียบเท่าเมื่อทำงานบนแพลตฟอร์มหลักของ Windows 10 IoT หรือไม่?
Vijay Chavda

คำตอบนี้เป็นสีทอง! ขอบคุณ
domih
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.