Pin input GPIO Raspberry pi memberikan nilai acak


12

Saya telah banyak bermain dengan Raspberry Pi belakangan ini. Tapi saya punya masalah.

Ketika saya mengatur pin input untuk memeriksa apakah listrik dikirim atau tidak, itu memberi saya jawaban yang agak tidak stabil.

Beberapa pengamatan yang telah saya lakukan untuk mengklarifikasi masalah saya:

  1. Ketika saya menghubungkan sirkuit, dan listrik mengalir ke pin input, nilai yang diberikannya secara konsisten BENAR atau 1.

  2. Ketika saya memutus sirkuit dengan melepas LED yang merupakan bagian dari itu (ketika nilai input harus 0) itu memberi saya nilai acak, bergeser antara 0 dan 1.

  3. Ketika saya menghapus semua kabel dari Pi saya itu memberi saya nilai konsisten 0

  4. Jika saya memiliki semua kabel GPIO dihapus itu memberi saya nilai 0, tetapi jika saya hanya menyentuh pin input dengan sepotong logam listrik terkemuka, (mengarah ke apa-apa di ujung lain) dimulai dengan nilai acak lagi. Itu tidak memberi saya nilai acak kecuali saya memiliki sesuatu yang terhubung ke pin output juga. Tidak harus mengarah ke mana pun, cukup menyentuh pin output. Dan beberapa potongan logam lainnya harus menyentuh pin input. Tidak ada koneksi sama sekali di antara mereka.

Saya bertanya-tanya mengapa itu mulai memberi saya nilai acak ketika pin Input GPIO menyentuh logam apa pun.

Dan yang lebih menarik, mengapa itu memberi saya 1 atau BENAR yang konsisten ketika saya benar-benar mengirim listrik ke sana?


Edit ke pernyataan nomor 4: Itu tidak memberi saya nilai acak kecuali saya memiliki sesuatu yang terhubung ke outputpin juga. Tidak harus mengarah ke mana pun, cukup menyentuh pin output. Dan beberapa potongan logam lainnya harus menyentuh pin input. Tidak ada koneksi sama sekali di antara mereka
Gustaf

Selamat datang di Raspberry Pi Stack Exchange! Anda tahu Anda dapat mengedit pertanyaan Anda untuk memperbaiki perubahan informasi itu alih-alih berkomentar? Juga, masuk ke obrolan dari waktu ke waktu. Kami selalu menyukai perusahaan baru dan ini akan membantu menunjukkan bahwa situs ini bermanfaat, berkembang, dan memiliki basis pengguna yang terlibat. Terima kasih!
RPiAwesomeness

1
Ini karena pin melayang. Info lebih lanjut di electronics.stackexchange.com/a/35705
Gerben

Jawaban:


14

Masalah

Ketika saya menghubungkan sirkuit, dan listrik mengalir ke pin input, nilai yang diberikannya secara konsisten BENAR atau 1.

Benar, tetapi apa yang terjadi ketika ground terhubung ke pin input GPIO? Nilai yang diberikannya akan selalu salah .

  • Ketika daya terhubung ke pin input: Pin input mendeteksi angka 1 (benar).
  • Ketika arde dihubungkan ke pin input: Pin input mendeteksi 0 (salah).
  • Ketika tidak ada yang terhubung ke pin input: Pin input menjadi bingung.

Ketika tidak ada yang terhubung pin berada dalam keadaan "mengambang", dan hasilnya tidak dapat diprediksi. itu dalam keadaan tidak terdefinisi, bukan 0 atau 1, dan nilai yang terdeteksi dapat berubah secara aneh, karenanya hasil acak Anda. Dalam elektronik ini dikenal sebagai negara ketiga .

Beberapa detail dari artikel Wikipedia :

Dalam sirkuit digital, output impedansi tinggi (juga dikenal sebagai hi-Z, tri-dinyatakan, atau mengambang) tidak didorong ke level logika apa pun yang ditentukan oleh sirkuit output. Sinyal tidak didorong ke level logis tinggi atau rendah; kondisi ketiga ini mengarah pada deskripsi "tri-dinyatakan". Sinyal semacam itu dapat dilihat sebagai sirkuit terbuka (atau kawat "mengambang").

Solusi umum

Solusinya adalah resistor pull-down . Anggap ini sebagai komponen tambahan yang tidak melakukan apa-apa ketika garis mendapatkan 0 atau 1. Tetapi ketika garis menganggur, tiba-tiba tendangan itu beraksi dan memberikan 0.

Solusi Raspberry Pi

Beruntung bagi Anda, Rpi memiliki pull-down bawaan, Anda harus mengaktifkannya secara terprogram. Berikut ini adalah skrip python untuk itu:

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.

Catatan samping

Jangan hubungkan daya langsung ke pin karena akan berbahaya! Pastikan ada resistansi yang cukup di sirkuit. Juga, jangan pernah menghubungkan daya 5V secara langsung ke GPIO karena hanya menerima 3.3V.


Apakah Anda tahu kode C # yang setara saat dijalankan pada platform inti Windows 10 IoT?
Vijay Chavda

Jawaban ini emas! Thx
domih
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.